-
-
Notifications
You must be signed in to change notification settings - Fork 27
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
199 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,208 @@ | ||
#!/usr/bin/env python | ||
from __future__ import absolute_import, print_function | ||
"""Weave: a C++ compiler for Python. | ||
from os.path import join | ||
Weave provides tools for including C/C++ code within Python code. Inlining | ||
C/C++ code within Python generally results in speedups of 1.5x to 30x over | ||
algorithms written in pure Python. | ||
Weave is the stand-alone version of the deprecated Scipy submodule | ||
``scipy.weave``. It is Python 2.x only, and is provided for users that need | ||
new versions of Scipy (from which the ``weave`` submodule may be removed) but | ||
have existing code that still depends on ``scipy.weave``. For new code, users | ||
are recommended to use Cython. | ||
""" | ||
|
||
DOCLINES = __doc__.split("\n") | ||
|
||
import sys | ||
import subprocess | ||
import os | ||
|
||
|
||
if not sys.version_info[:2] in [(2, 6), (2, 7)]: | ||
raise RuntimeError("Python version 2.6 or 2.7 required.") | ||
|
||
|
||
CLASSIFIERS = """\ | ||
Development Status :: 4 - Beta | ||
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 | ||
""" | ||
|
||
|
||
MAJOR = 0 | ||
MINOR = 15 | ||
MICRO = 0 | ||
ISRELEASED = False | ||
VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO) | ||
|
||
|
||
# Return the git revision as a string | ||
def git_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(['git', 'rev-parse', 'HEAD']) | ||
GIT_REVISION = out.strip().decode('ascii') | ||
except OSError: | ||
GIT_REVISION = "Unknown" | ||
|
||
return GIT_REVISION | ||
|
||
|
||
# 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') | ||
|
||
|
||
def get_version_info(): | ||
FULLVERSION = VERSION | ||
if os.path.exists('.git'): | ||
GIT_REVISION = git_version() | ||
elif os.path.exists('weave/version.py'): | ||
# must be a source distribution, use existing version file | ||
# load it as a separate module to not load weave/__init__.py | ||
import imp | ||
version = imp.load_source('weave.version', 'weave/version.py') | ||
GIT_REVISION = version.git_revision | ||
else: | ||
GIT_REVISION = "Unknown" | ||
|
||
if not ISRELEASED: | ||
FULLVERSION += '.dev-' + GIT_REVISION[:7] | ||
|
||
return FULLVERSION, GIT_REVISION | ||
|
||
|
||
def write_version_py(filename='weave/version.py'): | ||
cnt = """ | ||
# THIS FILE IS GENERATED FROM WEAVE SETUP.PY | ||
short_version = '%(version)s' | ||
version = '%(version)s' | ||
full_version = '%(full_version)s' | ||
git_revision = '%(git_revision)s' | ||
release = %(isrelease)s | ||
if not release: | ||
version = full_version | ||
""" | ||
FULLVERSION, GIT_REVISION = get_version_info() | ||
|
||
a = open(filename, 'w') | ||
try: | ||
a.write(cnt % {'version': VERSION, | ||
'full_version' : FULLVERSION, | ||
'git_revision' : GIT_REVISION, | ||
'isrelease': str(ISRELEASED)}) | ||
finally: | ||
a.close() | ||
|
||
|
||
try: | ||
from sphinx.setup_command import BuildDoc | ||
HAVE_SPHINX = True | ||
except: | ||
HAVE_SPHINX = False | ||
|
||
if HAVE_SPHINX: | ||
class ScipyBuildDoc(BuildDoc): | ||
"""Run in-place build before Sphinx doc build""" | ||
def run(self): | ||
ret = subprocess.call([sys.executable, sys.argv[0], 'build_ext', '-i']) | ||
if ret != 0: | ||
raise RuntimeError("Building Weave failed!") | ||
BuildDoc.run(self) | ||
|
||
|
||
def configuration(parent_package='',top_path=None): | ||
from numpy.distutils.misc_util import Configuration | ||
config = Configuration('weave',parent_package,top_path) | ||
config.add_data_dir('tests') | ||
config.add_data_dir('scxx') | ||
config.add_data_dir(join('blitz','blitz')) | ||
config.add_data_dir('doc') | ||
config.add_data_dir('examples') | ||
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('weave') | ||
config.add_data_files(('weave', '*.txt')) | ||
|
||
config.get_version('weave/version.py') | ||
return config | ||
|
||
|
||
def setup_package(): | ||
|
||
# Rewrite the version file every time | ||
write_version_py() | ||
|
||
if HAVE_SPHINX: | ||
cmdclass = {'build_sphinx': ScipyBuildDoc} | ||
else: | ||
cmdclass = {} | ||
|
||
metadata = dict( | ||
name = 'weave', | ||
maintainer = "Weave developers", | ||
maintainer_email = "scipy-dev@scipy.org", | ||
description = DOCLINES[0], | ||
long_description = "\n".join(DOCLINES[2:]), | ||
url = "http://www.github.com/scipy/weave", | ||
download_url = "https://pypi.python.org/pypi/weave", | ||
license = 'BSD', | ||
cmdclass=cmdclass, | ||
classifiers=[_f for _f in CLASSIFIERS.split('\n') if _f], | ||
platforms = ["Windows", "Linux", "Solaris", "Mac OS-X", "Unix"], | ||
test_suite='nose.collector', | ||
) | ||
|
||
if len(sys.argv) >= 2 and ('--help' in sys.argv[1:] or | ||
sys.argv[1] in ('--help-commands', 'egg_info', '--version', | ||
'clean')): | ||
# For these actions, NumPy is not required. | ||
# | ||
# They are required to succeed without Numpy for example when | ||
# pip is used to install Weave when Numpy is not yet present in | ||
# the system. | ||
try: | ||
from setuptools import setup | ||
except ImportError: | ||
from distutils.core import setup | ||
|
||
FULLVERSION, GIT_REVISION = get_version_info() | ||
metadata['version'] = FULLVERSION | ||
else: | ||
if len(sys.argv) >= 2 and sys.argv[1] == 'bdist_wheel': | ||
# bdist_wheel needs setuptools | ||
import setuptools | ||
|
||
from numpy.distutils.core import setup | ||
metadata['configuration'] = configuration | ||
|
||
setup(**metadata) | ||
|
||
|
||
if __name__ == '__main__': | ||
from numpy.distutils.core import setup | ||
from .weave_version import weave_version | ||
setup(version=weave_version, | ||
description="Tools for inlining C/C++ in Python", | ||
author="Eric Jones", | ||
author_email="eric@enthought.com", | ||
licence="SciPy License (BSD Style)", | ||
url='http://www.scipy.org', | ||
**configuration(top_path='').todict()) | ||
setup_package() |