Former-commit-id:9f19e3f712
[formerly9f19e3f712
[formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f]] Former-commit-id:06a8b51d6d
Former-commit-id:3360eb6c5f
210 lines
6.4 KiB
Python
Executable file
210 lines
6.4 KiB
Python
Executable file
#!/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 = 0
|
|
ISRELEASED = True
|
|
VERSION = '%d.%d.%db1' % (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'))
|
|
|
|
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()
|