| #!/usr/bin/env python |
| """NumPy: array processing for numbers, strings, records, and objects. |
| |
| NumPy is a general-purpose array-processing package designed to |
| efficiently manipulate large multi-dimensional arrays of arbitrary |
| records without sacrificing too much speed for small multi-dimensional |
| arrays. NumPy is built on the Numeric code base and adds features |
| introduced by numarray as well as an extended C-API and the ability to |
| create arrays of arbitrary type which also makes NumPy suitable for |
| interfacing with general-purpose data-base applications. |
| |
| There are also basic facilities for discrete fourier transform, |
| basic linear algebra and random number generation. |
| """ |
| |
| DOCLINES = __doc__.split("\n") |
| |
| import os |
| import shutil |
| import sys |
| import re |
| import subprocess |
| |
| if sys.version_info[0] < 3: |
| import __builtin__ as builtins |
| else: |
| import builtins |
| |
| CLASSIFIERS = """\ |
| Development Status :: 5 - Production/Stable |
| Intended Audience :: Science/Research |
| Intended Audience :: Developers |
| License :: OSI Approved |
| Programming Language :: C |
| Programming Language :: Python |
| Topic :: Software Development |
| Topic :: Scientific/Engineering |
| Operating System :: Microsoft :: Windows |
| Operating System :: POSIX |
| Operating System :: Unix |
| Operating System :: MacOS |
| """ |
| |
| NAME = 'numpy' |
| MAINTAINER = "NumPy Developers" |
| MAINTAINER_EMAIL = "numpy-discussion@scipy.org" |
| DESCRIPTION = DOCLINES[0] |
| LONG_DESCRIPTION = "\n".join(DOCLINES[2:]) |
| URL = "http://numpy.scipy.org" |
| DOWNLOAD_URL = "http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103" |
| LICENSE = 'BSD' |
| CLASSIFIERS = filter(None, CLASSIFIERS.split('\n')) |
| AUTHOR = "Travis E. Oliphant, et.al." |
| AUTHOR_EMAIL = "oliphant@enthought.com" |
| PLATFORMS = ["Windows", "Linux", "Solaris", "Mac OS-X", "Unix"] |
| MAJOR = 1 |
| MINOR = 5 |
| MICRO = 1 |
| ISRELEASED = True |
| VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO) |
| |
| # Return the svn version as a string, raise a ValueError otherwise |
| def svn_version(): |
| def _minimal_ext_cmd(cmd): |
| # construct minimal environment |
| env = {} |
| for k in ['SYSTEMROOT', 'PATH']: |
| v = os.environ.get(k) |
| if v is not None: |
| env[k] = v |
| # LANGUAGE is used on win32 |
| env['LANGUAGE'] = 'C' |
| env['LANG'] = 'C' |
| env['LC_ALL'] = 'C' |
| out = subprocess.Popen(cmd, stdout = subprocess.PIPE, env=env).communicate()[0] |
| return out |
| |
| try: |
| out = _minimal_ext_cmd(['svn', 'info']) |
| except OSError: |
| print(" --- Could not run svn info --- ") |
| return "" |
| |
| r = re.compile('Revision: ([0-9]+)') |
| svnver = "" |
| |
| out = out.decode() |
| |
| for line in out.split('\n'): |
| m = r.match(line.strip()) |
| if m: |
| svnver = m.group(1) |
| |
| if not svnver: |
| print("Error while parsing svn version") |
| |
| return svnver |
| |
| # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly |
| # update it when the contents of directories change. |
| if os.path.exists('MANIFEST'): os.remove('MANIFEST') |
| |
| # This is a bit hackish: we are setting a global variable so that the main |
| # numpy __init__ can detect if it is being loaded by the setup routine, to |
| # avoid attempting to load components that aren't built yet. While ugly, it's |
| # a lot more robust than what was previously being used. |
| builtins.__NUMPY_SETUP__ = True |
| |
| FULLVERSION = VERSION |
| if not ISRELEASED: |
| FULLVERSION += '.dev' |
| # If in git or something, bypass the svn rev |
| if os.path.exists('.svn'): |
| FULLVERSION += svn_version() |
| |
| def write_version_py(filename='numpy/version.py'): |
| cnt = """ |
| # THIS FILE IS GENERATED FROM NUMPY SETUP.PY |
| short_version='%(version)s' |
| version='%(version)s' |
| release=%(isrelease)s |
| |
| if not release: |
| version += '.dev' |
| import os |
| svn_version_file = os.path.join(os.path.dirname(__file__), |
| 'core','__svn_version__.py') |
| if os.path.isfile(svn_version_file): |
| import imp |
| svn = imp.load_module('numpy.core.__svn_version__', |
| open(svn_version_file), |
| svn_version_file, |
| ('.py','U',1)) |
| version += svn.version |
| """ |
| a = open(filename, 'w') |
| try: |
| a.write(cnt % {'version': VERSION, 'isrelease': str(ISRELEASED)}) |
| finally: |
| a.close() |
| |
| def configuration(parent_package='',top_path=None): |
| from numpy.distutils.misc_util import Configuration |
| |
| config = Configuration(None, parent_package, top_path) |
| config.set_options(ignore_setup_xxx_py=True, |
| assume_default_configuration=True, |
| delegate_options_to_subpackages=True, |
| quiet=True) |
| |
| config.add_subpackage('numpy') |
| |
| config.add_data_files(('numpy','*.txt'), |
| ('numpy','COMPATIBILITY'), |
| ('numpy','site.cfg.example'), |
| ('numpy/tools', 'tools/py3tool.py')) |
| |
| config.get_version('numpy/version.py') # sets config.version |
| |
| return config |
| |
| def setup_package(): |
| |
| # Rewrite the version file everytime |
| if os.path.exists('numpy/version.py'): os.remove('numpy/version.py') |
| write_version_py() |
| |
| # Perform 2to3 if needed |
| local_path = os.path.dirname(os.path.abspath(sys.argv[0])) |
| src_path = local_path |
| |
| if sys.version_info[0] == 3: |
| src_path = os.path.join(local_path, 'build', 'py3k') |
| sys.path.insert(0, os.path.join(local_path, 'tools')) |
| import py3tool |
| print("Converting to Python3 via 2to3...") |
| py3tool.sync_2to3('numpy', os.path.join(src_path, 'numpy')) |
| |
| site_cfg = os.path.join(local_path, 'site.cfg') |
| if os.path.isfile(site_cfg): |
| shutil.copy(site_cfg, src_path) |
| |
| # Run build |
| old_path = os.getcwd() |
| os.chdir(src_path) |
| sys.path.insert(0, src_path) |
| |
| from numpy.distutils.core import setup |
| |
| try: |
| setup( |
| name=NAME, |
| maintainer=MAINTAINER, |
| maintainer_email=MAINTAINER_EMAIL, |
| description=DESCRIPTION, |
| long_description=LONG_DESCRIPTION, |
| url=URL, |
| download_url=DOWNLOAD_URL, |
| license=LICENSE, |
| classifiers=CLASSIFIERS, |
| author=AUTHOR, |
| author_email=AUTHOR_EMAIL, |
| platforms=PLATFORMS, |
| configuration=configuration ) |
| finally: |
| del sys.path[0] |
| os.chdir(old_path) |
| return |
| |
| if __name__ == '__main__': |
| setup_package() |