X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=setup.py;h=cb4f996dd241e9fb0d60e1f2702a9e105a82ec4e;hb=e89ad8c867ae03319eef9fbec96fbf0518620779;hp=81d2eb65985ece6e66f0f6900ad8b83d34f169dd;hpb=e74ad055a31e39d01924e45c408971b37f399b06;p=cython.git diff --git a/setup.py b/setup.py index 81d2eb65..cb4f996d 100644 --- a/setup.py +++ b/setup.py @@ -3,16 +3,6 @@ from distutils.sysconfig import get_python_lib import os, os.path import sys -if 'sdist' in sys.argv and sys.platform != "win32" and sys.version_info >= (2,4): - # Record the current revision in .hgrev - import subprocess # os.popen is cleaner but deprecated - changeset = subprocess.Popen("hg identify --id --rev tip".split(), - stdout=subprocess.PIPE).stdout.read() - rev = changeset.decode('ISO-8859-1').strip() - hgrev = open('.hgrev', 'w') - hgrev.write(rev) - hgrev.close() - if sys.platform == "darwin": # Don't create resource files on OS X tar. os.environ['COPY_EXTENDED_ATTRIBUTES_DISABLE'] = 'true' @@ -25,6 +15,16 @@ def add_command_class(name, cls): cmdclasses[name] = cls setup_args['cmdclass'] = cmdclasses +from distutils.command.sdist import sdist as sdist_orig +class sdist(sdist_orig): + def run(self): + self.force_manifest = 1 + if (sys.platform != "win32" and + os.path.isdir('.git')): + assert os.system("git show-ref -s HEAD > .gitrev") == 0 + sdist_orig.run(self) +add_command_class('sdist', sdist) + if sys.version_info[0] >= 3: import lib2to3.refactor from distutils.command.build_py \ @@ -66,10 +66,13 @@ else: 'Cython' : [ p[7:] for p in pxd_include_patterns ], } -# This dict is used for passing extra arguments that are setuptools +# This dict is used for passing extra arguments that are setuptools # specific to setup setuptools_extra_args = {} +# tells whether to include cygdb (the script and the Cython.Debugger package +include_debugger = sys.version_info[:2] > (2, 5) + if 'setuptools' in sys.modules: setuptools_extra_args['zip_safe'] = False setuptools_extra_args['entry_points'] = { @@ -81,18 +84,37 @@ if 'setuptools' in sys.modules: else: if os.name == "posix": scripts = ["bin/cython"] + if include_debugger: + scripts.append('bin/cygdb') else: scripts = ["cython.py"] + if include_debugger: + scripts.append('cygdb.py') -def compile_cython_modules(profile=False): +def compile_cython_modules(profile=False, compile_more=False, cython_with_refnanny=False): source_root = os.path.abspath(os.path.dirname(__file__)) compiled_modules = ["Cython.Plex.Scanners", + "Cython.Plex.Actions", + "Cython.Compiler.Lexicon", "Cython.Compiler.Scanning", "Cython.Compiler.Parsing", "Cython.Compiler.Visitor", - "Cython.Runtime.refnanny"] - extensions = [] + "Cython.Compiler.Code", + "Cython.Runtime.refnanny",] + if compile_more: + compiled_modules.extend([ + "Cython.Compiler.ParseTreeTransforms", + "Cython.Compiler.Nodes", + "Cython.Compiler.ExprNodes", + "Cython.Compiler.ModuleNode", + "Cython.Compiler.Optimize", + ]) + defines = [] + if cython_with_refnanny: + defines.append(('CYTHON_REFNANNY', '1')) + + extensions = [] if sys.version_info[0] >= 3: from Cython.Distutils import build_ext as build_ext_orig for module in compiled_modules: @@ -101,8 +123,17 @@ def compile_cython_modules(profile=False): pyx_source_file = source_file + ".py" else: pyx_source_file = source_file + ".pyx" + dep_files = [] + if os.path.exists(source_file + '.pxd'): + dep_files.append(source_file + '.pxd') + if '.refnanny' in module: + defines_for_module = [] + else: + defines_for_module = defines extensions.append( - Extension(module, sources = [pyx_source_file]) + Extension(module, sources = [pyx_source_file], + define_macros = defines_for_module, + depends = dep_files) ) class build_ext(build_ext_orig): @@ -154,9 +185,18 @@ def compile_cython_modules(profile=False): else: pyx_source_file = source_file + ".pyx" c_source_file = source_file + ".c" - if not os.path.exists(c_source_file) or \ - Utils.file_newer_than(pyx_source_file, - Utils.modification_time(c_source_file)): + source_is_newer = False + if not os.path.exists(c_source_file): + source_is_newer = True + else: + c_last_modified = Utils.modification_time(c_source_file) + if Utils.file_newer_than(pyx_source_file, c_last_modified): + source_is_newer = True + else: + pxd_source_file = source_file + ".pxd" + if os.path.exists(pxd_source_file) and Utils.file_newer_than(pxd_source_file, c_last_modified): + source_is_newer = True + if source_is_newer: print("Compiling module %s ..." % module) result = compile(pyx_source_file) c_source_file = result.c_file @@ -167,8 +207,13 @@ def compile_cython_modules(profile=False): if filename_encoding is None: filename_encoding = sys.getdefaultencoding() c_source_file = c_source_file.encode(filename_encoding) + if '.refnanny' in module: + defines_for_module = [] + else: + defines_for_module = defines extensions.append( - Extension(module, sources = [c_source_file]) + Extension(module, sources = [c_source_file], + define_macros = defines_for_module) ) else: print("Compilation failed") @@ -190,21 +235,52 @@ cython_profile = '--cython-profile' in sys.argv if cython_profile: sys.argv.remove('--cython-profile') +try: + sys.argv.remove("--cython-compile-all") + cython_compile_more = True +except ValueError: + cython_compile_more = False + +try: + sys.argv.remove("--cython-with-refnanny") + cython_with_refnanny = True +except ValueError: + cython_with_refnanny = False + try: sys.argv.remove("--no-cython-compile") except ValueError: - compile_cython_modules(cython_profile) + compile_cython_modules(cython_profile, cython_compile_more, cython_with_refnanny) setup_args.update(setuptools_extra_args) -from Cython.Compiler.Version import version +from Cython import __version__ as version + +packages = [ + 'Cython', + 'Cython.Build', + 'Cython.Compiler', + 'Cython.Runtime', + 'Cython.Distutils', + 'Cython.Plex', + 'Cython.Tests', + 'Cython.Build.Tests', + 'Cython.Compiler.Tests', +] + +if include_debugger: + packages.append('Cython.Debugger') + packages.append('Cython.Debugger.Tests') + # it's enough to do this for Py2.5+: + setup_args['package_data']['Cython.Debugger.Tests'] = ['codefile', 'cfuncs.c'] + setup( name = 'Cython', version = version, url = 'http://www.cython.org', - author = 'Greg Ewing, Robert Bradshaw, Stefan Behnel, Dag Seljebotn, et al.', - author_email = 'cython-dev@codespeak.net', + author = 'Robert Bradshaw, Stefan Behnel, Dag Seljebotn, Greg Ewing, et al.', + author_email = 'cython-devel@python.org', description = "The Cython compiler for writing C extensions for the Python language.", long_description = """\ The Cython language makes writing C extensions for the Python language as @@ -239,16 +315,7 @@ setup( ], scripts = scripts, - packages=[ - 'Cython', - 'Cython.Compiler', - 'Cython.Runtime', - 'Cython.Distutils', - 'Cython.Plex', - - 'Cython.Tests', - 'Cython.Compiler.Tests', - ], + packages=packages, # pyximport py_modules = ["pyximport/__init__",