diff options
Diffstat (limited to 'contrib/tools/cython/Cython/Distutils')
-rw-r--r-- | contrib/tools/cython/Cython/Distutils/build_ext.py | 34 | ||||
-rw-r--r-- | contrib/tools/cython/Cython/Distutils/extension.py | 2 | ||||
-rw-r--r-- | contrib/tools/cython/Cython/Distutils/old_build_ext.py | 694 |
3 files changed, 365 insertions, 365 deletions
diff --git a/contrib/tools/cython/Cython/Distutils/build_ext.py b/contrib/tools/cython/Cython/Distutils/build_ext.py index 598bb4a89b..c499bb525a 100644 --- a/contrib/tools/cython/Cython/Distutils/build_ext.py +++ b/contrib/tools/cython/Cython/Distutils/build_ext.py @@ -1,25 +1,25 @@ import sys -if 'setuptools' in sys.modules: - try: - from setuptools.command.build_ext import build_ext as _build_ext - except ImportError: - # We may be in the process of importing setuptools, which tries - # to import this. - from distutils.command.build_ext import build_ext as _build_ext -else: - from distutils.command.build_ext import build_ext as _build_ext +if 'setuptools' in sys.modules: + try: + from setuptools.command.build_ext import build_ext as _build_ext + except ImportError: + # We may be in the process of importing setuptools, which tries + # to import this. + from distutils.command.build_ext import build_ext as _build_ext +else: + from distutils.command.build_ext import build_ext as _build_ext + - -class new_build_ext(_build_ext, object): - def finalize_options(self): - if self.distribution.ext_modules: +class new_build_ext(_build_ext, object): + def finalize_options(self): + if self.distribution.ext_modules: nthreads = getattr(self, 'parallel', None) # -j option in Py3.5+ nthreads = int(nthreads) if nthreads else None - from Cython.Build.Dependencies import cythonize - self.distribution.ext_modules[:] = cythonize( + from Cython.Build.Dependencies import cythonize + self.distribution.ext_modules[:] = cythonize( self.distribution.ext_modules, nthreads=nthreads, force=self.force) super(new_build_ext, self).finalize_options() -# This will become new_build_ext in the future. -from .old_build_ext import old_build_ext as build_ext +# This will become new_build_ext in the future. +from .old_build_ext import old_build_ext as build_ext diff --git a/contrib/tools/cython/Cython/Distutils/extension.py b/contrib/tools/cython/Cython/Distutils/extension.py index d8bdbf0f5b..bf36ac0e11 100644 --- a/contrib/tools/cython/Cython/Distutils/extension.py +++ b/contrib/tools/cython/Cython/Distutils/extension.py @@ -45,7 +45,7 @@ class Extension(_Extension.Extension): # Translate pyrex_X to cython_X for backwards compatibility. had_pyrex_options = False - for key in list(kw): + for key in list(kw): if key.startswith('pyrex_'): had_pyrex_options = True kw['cython' + key[5:]] = kw.pop(key) diff --git a/contrib/tools/cython/Cython/Distutils/old_build_ext.py b/contrib/tools/cython/Cython/Distutils/old_build_ext.py index aa2a1cf229..ad3b157855 100644 --- a/contrib/tools/cython/Cython/Distutils/old_build_ext.py +++ b/contrib/tools/cython/Cython/Distutils/old_build_ext.py @@ -1,355 +1,355 @@ -"""Cython.Distutils.old_build_ext - -Implements a version of the Distutils 'build_ext' command, for +"""Cython.Distutils.old_build_ext + +Implements a version of the Distutils 'build_ext' command, for building Cython extension modules. - + Note that this module is deprecated. Use cythonize() instead. """ - -__revision__ = "$Id:$" - -import inspect -import sys -import os -from distutils.errors import DistutilsPlatformError -from distutils.dep_util import newer, newer_group -from distutils import log -from distutils.command import build_ext as _build_ext -from distutils import sysconfig -import warnings - - -try: - from __builtin__ import basestring -except ImportError: - basestring = str - - -def _check_stack(path): - try: - for frame in inspect.getouterframes(inspect.currentframe(), 0): - if path in frame[1].replace(os.sep, '/'): - return True - except Exception: - pass - return False - -if (not _check_stack('setuptools/extensions.py') - and not _check_stack('pyximport/pyxbuild.py') - and not _check_stack('Cython/Distutils/build_ext.py')): - warnings.warn( - "Cython.Distutils.old_build_ext does not properly handle dependencies " - "and is deprecated.") - - -extension_name_re = _build_ext.extension_name_re - -show_compilers = _build_ext.show_compilers - -class Optimization(object): - def __init__(self): - self.flags = ( - 'OPT', - 'CFLAGS', - 'CPPFLAGS', - 'EXTRA_CFLAGS', - 'BASECFLAGS', - 'PY_CFLAGS', - ) - self.state = sysconfig.get_config_vars(*self.flags) - self.config_vars = sysconfig.get_config_vars() - - - def disable_optimization(self): - "disable optimization for the C or C++ compiler" - badoptions = ('-O1', '-O2', '-O3') - - for flag, option in zip(self.flags, self.state): - if option is not None: - L = [opt for opt in option.split() if opt not in badoptions] - self.config_vars[flag] = ' '.join(L) - - def restore_state(self): - "restore the original state" - for flag, option in zip(self.flags, self.state): - if option is not None: - self.config_vars[flag] = option - - -optimization = Optimization() - - -class old_build_ext(_build_ext.build_ext): - - description = "build C/C++ and Cython extensions (compile/link to build directory)" - - sep_by = _build_ext.build_ext.sep_by + +__revision__ = "$Id:$" + +import inspect +import sys +import os +from distutils.errors import DistutilsPlatformError +from distutils.dep_util import newer, newer_group +from distutils import log +from distutils.command import build_ext as _build_ext +from distutils import sysconfig +import warnings + + +try: + from __builtin__ import basestring +except ImportError: + basestring = str + + +def _check_stack(path): + try: + for frame in inspect.getouterframes(inspect.currentframe(), 0): + if path in frame[1].replace(os.sep, '/'): + return True + except Exception: + pass + return False + +if (not _check_stack('setuptools/extensions.py') + and not _check_stack('pyximport/pyxbuild.py') + and not _check_stack('Cython/Distutils/build_ext.py')): + warnings.warn( + "Cython.Distutils.old_build_ext does not properly handle dependencies " + "and is deprecated.") + + +extension_name_re = _build_ext.extension_name_re + +show_compilers = _build_ext.show_compilers + +class Optimization(object): + def __init__(self): + self.flags = ( + 'OPT', + 'CFLAGS', + 'CPPFLAGS', + 'EXTRA_CFLAGS', + 'BASECFLAGS', + 'PY_CFLAGS', + ) + self.state = sysconfig.get_config_vars(*self.flags) + self.config_vars = sysconfig.get_config_vars() + + + def disable_optimization(self): + "disable optimization for the C or C++ compiler" + badoptions = ('-O1', '-O2', '-O3') + + for flag, option in zip(self.flags, self.state): + if option is not None: + L = [opt for opt in option.split() if opt not in badoptions] + self.config_vars[flag] = ' '.join(L) + + def restore_state(self): + "restore the original state" + for flag, option in zip(self.flags, self.state): + if option is not None: + self.config_vars[flag] = option + + +optimization = Optimization() + + +class old_build_ext(_build_ext.build_ext): + + description = "build C/C++ and Cython extensions (compile/link to build directory)" + + sep_by = _build_ext.build_ext.sep_by user_options = _build_ext.build_ext.user_options[:] boolean_options = _build_ext.build_ext.boolean_options[:] help_options = _build_ext.build_ext.help_options[:] - - # Add the pyrex specific data. - user_options.extend([ - ('cython-cplus', None, - "generate C++ source files"), - ('cython-create-listing', None, - "write errors to a listing file"), - ('cython-line-directives', None, - "emit source line directives"), - ('cython-include-dirs=', None, - "path to the Cython include files" + sep_by), - ('cython-c-in-temp', None, - "put generated C files in temp directory"), - ('cython-gen-pxi', None, - "generate .pxi file for public declarations"), - ('cython-directives=', None, - "compiler directive overrides"), - ('cython-gdb', None, - "generate debug information for cygdb"), - ('cython-compile-time-env', None, - "cython compile time environment"), - - # For backwards compatibility. - ('pyrex-cplus', None, - "generate C++ source files"), - ('pyrex-create-listing', None, - "write errors to a listing file"), - ('pyrex-line-directives', None, - "emit source line directives"), - ('pyrex-include-dirs=', None, - "path to the Cython include files" + sep_by), - ('pyrex-c-in-temp', None, - "put generated C files in temp directory"), - ('pyrex-gen-pxi', None, - "generate .pxi file for public declarations"), - ('pyrex-directives=', None, - "compiler directive overrides"), - ('pyrex-gdb', None, - "generate debug information for cygdb"), - ]) - - boolean_options.extend([ - 'cython-cplus', 'cython-create-listing', 'cython-line-directives', - 'cython-c-in-temp', 'cython-gdb', - - # For backwards compatibility. - 'pyrex-cplus', 'pyrex-create-listing', 'pyrex-line-directives', - 'pyrex-c-in-temp', 'pyrex-gdb', - ]) - - def initialize_options(self): - _build_ext.build_ext.initialize_options(self) - self.cython_cplus = 0 - self.cython_create_listing = 0 - self.cython_line_directives = 0 - self.cython_include_dirs = None - self.cython_directives = None - self.cython_c_in_temp = 0 - self.cython_gen_pxi = 0 - self.cython_gdb = False - self.no_c_in_traceback = 0 - self.cython_compile_time_env = None - - def __getattr__(self, name): - if name[:6] == 'pyrex_': - return getattr(self, 'cython_' + name[6:]) - else: - return _build_ext.build_ext.__getattr__(self, name) - - def __setattr__(self, name, value): - if name[:6] == 'pyrex_': - return setattr(self, 'cython_' + name[6:], value) - else: - # _build_ext.build_ext.__setattr__(self, name, value) - self.__dict__[name] = value - - def finalize_options (self): - _build_ext.build_ext.finalize_options(self) - if self.cython_include_dirs is None: - self.cython_include_dirs = [] - elif isinstance(self.cython_include_dirs, basestring): - self.cython_include_dirs = \ - self.cython_include_dirs.split(os.pathsep) - if self.cython_directives is None: - self.cython_directives = {} - # finalize_options () - - def run(self): - # We have one shot at this before build_ext initializes the compiler. - # If --pyrex-gdb is in effect as a command line option or as option - # of any Extension module, disable optimization for the C or C++ - # compiler. - if self.cython_gdb or [1 for ext in self.extensions - if getattr(ext, 'cython_gdb', False)]: - optimization.disable_optimization() - - _build_ext.build_ext.run(self) - - def build_extensions(self): - # First, sanity-check the 'extensions' list - self.check_extensions_list(self.extensions) - - for ext in self.extensions: - ext.sources = self.cython_sources(ext.sources, ext) + + # Add the pyrex specific data. + user_options.extend([ + ('cython-cplus', None, + "generate C++ source files"), + ('cython-create-listing', None, + "write errors to a listing file"), + ('cython-line-directives', None, + "emit source line directives"), + ('cython-include-dirs=', None, + "path to the Cython include files" + sep_by), + ('cython-c-in-temp', None, + "put generated C files in temp directory"), + ('cython-gen-pxi', None, + "generate .pxi file for public declarations"), + ('cython-directives=', None, + "compiler directive overrides"), + ('cython-gdb', None, + "generate debug information for cygdb"), + ('cython-compile-time-env', None, + "cython compile time environment"), + + # For backwards compatibility. + ('pyrex-cplus', None, + "generate C++ source files"), + ('pyrex-create-listing', None, + "write errors to a listing file"), + ('pyrex-line-directives', None, + "emit source line directives"), + ('pyrex-include-dirs=', None, + "path to the Cython include files" + sep_by), + ('pyrex-c-in-temp', None, + "put generated C files in temp directory"), + ('pyrex-gen-pxi', None, + "generate .pxi file for public declarations"), + ('pyrex-directives=', None, + "compiler directive overrides"), + ('pyrex-gdb', None, + "generate debug information for cygdb"), + ]) + + boolean_options.extend([ + 'cython-cplus', 'cython-create-listing', 'cython-line-directives', + 'cython-c-in-temp', 'cython-gdb', + + # For backwards compatibility. + 'pyrex-cplus', 'pyrex-create-listing', 'pyrex-line-directives', + 'pyrex-c-in-temp', 'pyrex-gdb', + ]) + + def initialize_options(self): + _build_ext.build_ext.initialize_options(self) + self.cython_cplus = 0 + self.cython_create_listing = 0 + self.cython_line_directives = 0 + self.cython_include_dirs = None + self.cython_directives = None + self.cython_c_in_temp = 0 + self.cython_gen_pxi = 0 + self.cython_gdb = False + self.no_c_in_traceback = 0 + self.cython_compile_time_env = None + + def __getattr__(self, name): + if name[:6] == 'pyrex_': + return getattr(self, 'cython_' + name[6:]) + else: + return _build_ext.build_ext.__getattr__(self, name) + + def __setattr__(self, name, value): + if name[:6] == 'pyrex_': + return setattr(self, 'cython_' + name[6:], value) + else: + # _build_ext.build_ext.__setattr__(self, name, value) + self.__dict__[name] = value + + def finalize_options (self): + _build_ext.build_ext.finalize_options(self) + if self.cython_include_dirs is None: + self.cython_include_dirs = [] + elif isinstance(self.cython_include_dirs, basestring): + self.cython_include_dirs = \ + self.cython_include_dirs.split(os.pathsep) + if self.cython_directives is None: + self.cython_directives = {} + # finalize_options () + + def run(self): + # We have one shot at this before build_ext initializes the compiler. + # If --pyrex-gdb is in effect as a command line option or as option + # of any Extension module, disable optimization for the C or C++ + # compiler. + if self.cython_gdb or [1 for ext in self.extensions + if getattr(ext, 'cython_gdb', False)]: + optimization.disable_optimization() + + _build_ext.build_ext.run(self) + + def build_extensions(self): + # First, sanity-check the 'extensions' list + self.check_extensions_list(self.extensions) + + for ext in self.extensions: + ext.sources = self.cython_sources(ext.sources, ext) # Call original build_extensions _build_ext.build_ext.build_extensions(self) - - def cython_sources(self, sources, extension): - """ - Walk the list of source files in 'sources', looking for Cython - source files (.pyx and .py). Run Cython on all that are - found, and return a modified 'sources' list with Cython source - files replaced by the generated C (or C++) files. - """ - try: - from Cython.Compiler.Main \ - import CompilationOptions, \ - default_options as cython_default_options, \ - compile as cython_compile - from Cython.Compiler.Errors import PyrexError - except ImportError: - e = sys.exc_info()[1] - print("failed to import Cython: %s" % e) - raise DistutilsPlatformError("Cython does not appear to be installed") - - new_sources = [] - cython_sources = [] - cython_targets = {} - - # Setup create_list and cplus from the extension options if - # Cython.Distutils.extension.Extension is used, otherwise just - # use what was parsed from the command-line or the configuration file. - # cplus will also be set to true is extension.language is equal to - # 'C++' or 'c++'. - #try: - # create_listing = self.cython_create_listing or \ - # extension.cython_create_listing - # cplus = self.cython_cplus or \ - # extension.cython_cplus or \ - # (extension.language != None and \ - # extension.language.lower() == 'c++') - #except AttributeError: - # create_listing = self.cython_create_listing - # cplus = self.cython_cplus or \ - # (extension.language != None and \ - # extension.language.lower() == 'c++') - - create_listing = self.cython_create_listing or \ - getattr(extension, 'cython_create_listing', 0) - line_directives = self.cython_line_directives or \ - getattr(extension, 'cython_line_directives', 0) - no_c_in_traceback = self.no_c_in_traceback or \ - getattr(extension, 'no_c_in_traceback', 0) - cplus = self.cython_cplus or getattr(extension, 'cython_cplus', 0) or \ - (extension.language and extension.language.lower() == 'c++') - cython_gen_pxi = self.cython_gen_pxi or getattr(extension, 'cython_gen_pxi', 0) - cython_gdb = self.cython_gdb or getattr(extension, 'cython_gdb', False) - cython_compile_time_env = self.cython_compile_time_env or \ - getattr(extension, 'cython_compile_time_env', None) - - # Set up the include_path for the Cython compiler: - # 1. Start with the command line option. - # 2. Add in any (unique) paths from the extension - # cython_include_dirs (if Cython.Distutils.extension is used). - # 3. Add in any (unique) paths from the extension include_dirs - includes = self.cython_include_dirs - try: - for i in extension.cython_include_dirs: - if not i in includes: - includes.append(i) - except AttributeError: - pass - - # In case extension.include_dirs is a generator, evaluate it and keep - # result - extension.include_dirs = list(extension.include_dirs) - for i in extension.include_dirs: - if not i in includes: - includes.append(i) - - # Set up Cython compiler directives: - # 1. Start with the command line option. - # 2. Add in any (unique) entries from the extension - # cython_directives (if Cython.Distutils.extension is used). - directives = self.cython_directives - if hasattr(extension, "cython_directives"): - directives.update(extension.cython_directives) - - # Set the target_ext to '.c'. Cython will change this to '.cpp' if - # needed. - if cplus: - target_ext = '.cpp' - else: - target_ext = '.c' - - # Decide whether to drop the generated C files into the temp dir - # or the source tree. - - if not self.inplace and (self.cython_c_in_temp - or getattr(extension, 'cython_c_in_temp', 0)): - target_dir = os.path.join(self.build_temp, "pyrex") - for package_name in extension.name.split('.')[:-1]: - target_dir = os.path.join(target_dir, package_name) - else: - target_dir = None - - newest_dependency = None - for source in sources: - (base, ext) = os.path.splitext(os.path.basename(source)) - if ext == ".py": - # FIXME: we might want to special case this some more - ext = '.pyx' - if ext == ".pyx": # Cython source file - output_dir = target_dir or os.path.dirname(source) - new_sources.append(os.path.join(output_dir, base + target_ext)) - cython_sources.append(source) - cython_targets[source] = new_sources[-1] - elif ext == '.pxi' or ext == '.pxd': - if newest_dependency is None \ - or newer(source, newest_dependency): - newest_dependency = source - else: - new_sources.append(source) - - if not cython_sources: - return new_sources - - module_name = extension.name - - for source in cython_sources: - target = cython_targets[source] - depends = [source] + list(extension.depends or ()) - if(source[-4:].lower()==".pyx" and os.path.isfile(source[:-3]+"pxd")): - depends += [source[:-3]+"pxd"] - rebuild = self.force or newer_group(depends, target, 'newer') - if not rebuild and newest_dependency is not None: - rebuild = newer(newest_dependency, target) - if rebuild: - log.info("cythoning %s to %s", source, target) - self.mkpath(os.path.dirname(target)) - if self.inplace: - output_dir = os.curdir - else: - output_dir = self.build_lib - options = CompilationOptions(cython_default_options, - use_listing_file = create_listing, - include_path = includes, - compiler_directives = directives, - output_file = target, - cplus = cplus, - emit_linenums = line_directives, - c_line_in_traceback = not no_c_in_traceback, - generate_pxi = cython_gen_pxi, - output_dir = output_dir, - gdb_debug = cython_gdb, - compile_time_env = cython_compile_time_env) - result = cython_compile(source, options=options, - full_module_name=module_name) - else: - log.info("skipping '%s' Cython extension (up-to-date)", target) - - return new_sources - - # cython_sources () - -# class build_ext + + def cython_sources(self, sources, extension): + """ + Walk the list of source files in 'sources', looking for Cython + source files (.pyx and .py). Run Cython on all that are + found, and return a modified 'sources' list with Cython source + files replaced by the generated C (or C++) files. + """ + try: + from Cython.Compiler.Main \ + import CompilationOptions, \ + default_options as cython_default_options, \ + compile as cython_compile + from Cython.Compiler.Errors import PyrexError + except ImportError: + e = sys.exc_info()[1] + print("failed to import Cython: %s" % e) + raise DistutilsPlatformError("Cython does not appear to be installed") + + new_sources = [] + cython_sources = [] + cython_targets = {} + + # Setup create_list and cplus from the extension options if + # Cython.Distutils.extension.Extension is used, otherwise just + # use what was parsed from the command-line or the configuration file. + # cplus will also be set to true is extension.language is equal to + # 'C++' or 'c++'. + #try: + # create_listing = self.cython_create_listing or \ + # extension.cython_create_listing + # cplus = self.cython_cplus or \ + # extension.cython_cplus or \ + # (extension.language != None and \ + # extension.language.lower() == 'c++') + #except AttributeError: + # create_listing = self.cython_create_listing + # cplus = self.cython_cplus or \ + # (extension.language != None and \ + # extension.language.lower() == 'c++') + + create_listing = self.cython_create_listing or \ + getattr(extension, 'cython_create_listing', 0) + line_directives = self.cython_line_directives or \ + getattr(extension, 'cython_line_directives', 0) + no_c_in_traceback = self.no_c_in_traceback or \ + getattr(extension, 'no_c_in_traceback', 0) + cplus = self.cython_cplus or getattr(extension, 'cython_cplus', 0) or \ + (extension.language and extension.language.lower() == 'c++') + cython_gen_pxi = self.cython_gen_pxi or getattr(extension, 'cython_gen_pxi', 0) + cython_gdb = self.cython_gdb or getattr(extension, 'cython_gdb', False) + cython_compile_time_env = self.cython_compile_time_env or \ + getattr(extension, 'cython_compile_time_env', None) + + # Set up the include_path for the Cython compiler: + # 1. Start with the command line option. + # 2. Add in any (unique) paths from the extension + # cython_include_dirs (if Cython.Distutils.extension is used). + # 3. Add in any (unique) paths from the extension include_dirs + includes = self.cython_include_dirs + try: + for i in extension.cython_include_dirs: + if not i in includes: + includes.append(i) + except AttributeError: + pass + + # In case extension.include_dirs is a generator, evaluate it and keep + # result + extension.include_dirs = list(extension.include_dirs) + for i in extension.include_dirs: + if not i in includes: + includes.append(i) + + # Set up Cython compiler directives: + # 1. Start with the command line option. + # 2. Add in any (unique) entries from the extension + # cython_directives (if Cython.Distutils.extension is used). + directives = self.cython_directives + if hasattr(extension, "cython_directives"): + directives.update(extension.cython_directives) + + # Set the target_ext to '.c'. Cython will change this to '.cpp' if + # needed. + if cplus: + target_ext = '.cpp' + else: + target_ext = '.c' + + # Decide whether to drop the generated C files into the temp dir + # or the source tree. + + if not self.inplace and (self.cython_c_in_temp + or getattr(extension, 'cython_c_in_temp', 0)): + target_dir = os.path.join(self.build_temp, "pyrex") + for package_name in extension.name.split('.')[:-1]: + target_dir = os.path.join(target_dir, package_name) + else: + target_dir = None + + newest_dependency = None + for source in sources: + (base, ext) = os.path.splitext(os.path.basename(source)) + if ext == ".py": + # FIXME: we might want to special case this some more + ext = '.pyx' + if ext == ".pyx": # Cython source file + output_dir = target_dir or os.path.dirname(source) + new_sources.append(os.path.join(output_dir, base + target_ext)) + cython_sources.append(source) + cython_targets[source] = new_sources[-1] + elif ext == '.pxi' or ext == '.pxd': + if newest_dependency is None \ + or newer(source, newest_dependency): + newest_dependency = source + else: + new_sources.append(source) + + if not cython_sources: + return new_sources + + module_name = extension.name + + for source in cython_sources: + target = cython_targets[source] + depends = [source] + list(extension.depends or ()) + if(source[-4:].lower()==".pyx" and os.path.isfile(source[:-3]+"pxd")): + depends += [source[:-3]+"pxd"] + rebuild = self.force or newer_group(depends, target, 'newer') + if not rebuild and newest_dependency is not None: + rebuild = newer(newest_dependency, target) + if rebuild: + log.info("cythoning %s to %s", source, target) + self.mkpath(os.path.dirname(target)) + if self.inplace: + output_dir = os.curdir + else: + output_dir = self.build_lib + options = CompilationOptions(cython_default_options, + use_listing_file = create_listing, + include_path = includes, + compiler_directives = directives, + output_file = target, + cplus = cplus, + emit_linenums = line_directives, + c_line_in_traceback = not no_c_in_traceback, + generate_pxi = cython_gen_pxi, + output_dir = output_dir, + gdb_debug = cython_gdb, + compile_time_env = cython_compile_time_env) + result = cython_compile(source, options=options, + full_module_name=module_name) + else: + log.info("skipping '%s' Cython extension (up-to-date)", target) + + return new_sources + + # cython_sources () + +# class build_ext |