diff options
Diffstat (limited to 'python/psutil/setup.py')
-rw-r--r-- | python/psutil/setup.py | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/python/psutil/setup.py b/python/psutil/setup.py new file mode 100644 index 0000000000..4c42548ef3 --- /dev/null +++ b/python/psutil/setup.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python + +# Copyright (c) 2009 Giampaolo Rodola'. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""psutil is a cross-platform library for retrieving information on +running processes and system utilization (CPU, memory, disks, network) +in Python. +""" + +import os +import sys +try: + from setuptools import setup, Extension +except ImportError: + from distutils.core import setup, Extension + + +HERE = os.path.abspath(os.path.dirname(__file__)) + + +def get_version(): + INIT = os.path.join(HERE, 'psutil/__init__.py') + with open(INIT, 'r') as f: + for line in f: + if line.startswith('__version__'): + ret = eval(line.strip().split(' = ')[1]) + assert ret.count('.') == 2, ret + for num in ret.split('.'): + assert num.isdigit(), ret + return ret + else: + raise ValueError("couldn't find version string") + + +def get_description(): + README = os.path.join(HERE, 'README.rst') + with open(README, 'r') as f: + return f.read() + + +VERSION = get_version() +VERSION_MACRO = ('PSUTIL_VERSION', int(VERSION.replace('.', ''))) + + +# POSIX +if os.name == 'posix': + libraries = [] + if sys.platform.startswith("sunos"): + libraries.append('socket') + + posix_extension = Extension( + 'psutil._psutil_posix', + sources=['psutil/_psutil_posix.c'], + libraries=libraries, + ) +# Windows +if sys.platform.startswith("win32"): + + def get_winver(): + maj, min = sys.getwindowsversion()[0:2] + return '0x0%s' % ((maj * 100) + min) + + extensions = [Extension( + 'psutil._psutil_windows', + sources=[ + 'psutil/_psutil_windows.c', + 'psutil/_psutil_common.c', + 'psutil/arch/windows/process_info.c', + 'psutil/arch/windows/process_handles.c', + 'psutil/arch/windows/security.c', + 'psutil/arch/windows/inet_ntop.c', + ], + define_macros=[ + VERSION_MACRO, + # be nice to mingw, see: + # http://www.mingw.org/wiki/Use_more_recent_defined_functions + ('_WIN32_WINNT', get_winver()), + ('_AVAIL_WINVER_', get_winver()), + ('_CRT_SECURE_NO_WARNINGS', None), + # see: https://github.com/giampaolo/psutil/issues/348 + ('PSAPI_VERSION', 1), + ], + libraries=[ + "psapi", "kernel32", "advapi32", "shell32", "netapi32", "iphlpapi", + "wtsapi32", "ws2_32", + ], + # extra_compile_args=["/Z7"], + # extra_link_args=["/DEBUG"] + )] +# OS X +elif sys.platform.startswith("darwin"): + extensions = [Extension( + 'psutil._psutil_osx', + sources=[ + 'psutil/_psutil_osx.c', + 'psutil/_psutil_common.c', + 'psutil/arch/osx/process_info.c' + ], + define_macros=[VERSION_MACRO], + extra_link_args=[ + '-framework', 'CoreFoundation', '-framework', 'IOKit' + ], + ), + posix_extension, + ] +# FreeBSD +elif sys.platform.startswith("freebsd"): + extensions = [Extension( + 'psutil._psutil_bsd', + sources=[ + 'psutil/_psutil_bsd.c', + 'psutil/_psutil_common.c', + 'psutil/arch/bsd/process_info.c' + ], + define_macros=[VERSION_MACRO], + libraries=["devstat"]), + posix_extension, + ] +# Linux +elif sys.platform.startswith("linux"): + extensions = [Extension( + 'psutil._psutil_linux', + sources=['psutil/_psutil_linux.c'], + define_macros=[VERSION_MACRO]), + posix_extension, + ] +# Solaris +elif sys.platform.lower().startswith('sunos'): + extensions = [Extension( + 'psutil._psutil_sunos', + sources=['psutil/_psutil_sunos.c'], + define_macros=[VERSION_MACRO], + libraries=['kstat', 'nsl', 'socket']), + posix_extension, + ] +else: + sys.exit('platform %s is not supported' % sys.platform) + + +def main(): + setup_args = dict( + name='psutil', + version=VERSION, + description=__doc__.replace('\n', '').strip(), + long_description=get_description(), + keywords=[ + 'ps', 'top', 'kill', 'free', 'lsof', 'netstat', 'nice', 'tty', + 'ionice', 'uptime', 'taskmgr', 'process', 'df', 'iotop', 'iostat', + 'ifconfig', 'taskset', 'who', 'pidof', 'pmap', 'smem', 'pstree', + 'monitoring', 'ulimit', 'prlimit', + ], + author='Giampaolo Rodola', + author_email='g.rodola <at> gmail <dot> com', + url='https://github.com/giampaolo/psutil', + platforms='Platform Independent', + license='BSD', + packages=['psutil'], + # see: python setup.py register --list-classifiers + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Environment :: Console', + 'Environment :: Win32 (MS Windows)', + 'Intended Audience :: Developers', + 'Intended Audience :: Information Technology', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: BSD License', + 'Operating System :: MacOS :: MacOS X', + 'Operating System :: Microsoft :: Windows :: Windows NT/2000', + 'Operating System :: Microsoft', + 'Operating System :: OS Independent', + 'Operating System :: POSIX :: BSD :: FreeBSD', + 'Operating System :: POSIX :: Linux', + 'Operating System :: POSIX :: SunOS/Solaris', + 'Operating System :: POSIX', + 'Programming Language :: C', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.0', + 'Programming Language :: Python :: 3.1', + 'Programming Language :: Python :: 3.2', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + 'Programming Language :: Python', + 'Topic :: Software Development :: Libraries :: Python Modules', + 'Topic :: Software Development :: Libraries', + 'Topic :: System :: Benchmark', + 'Topic :: System :: Hardware', + 'Topic :: System :: Monitoring', + 'Topic :: System :: Networking :: Monitoring', + 'Topic :: System :: Networking', + 'Topic :: System :: Systems Administration', + 'Topic :: Utilities', + ], + ) + if extensions is not None: + setup_args["ext_modules"] = extensions + setup(**setup_args) + +if __name__ == '__main__': + main() |