diff options
author | Anthony Baxter <anthonybaxter@gmail.com> | 2004-10-14 10:02:08 (GMT) |
---|---|---|
committer | Anthony Baxter <anthonybaxter@gmail.com> | 2004-10-14 10:02:08 (GMT) |
commit | a024034b94983c586b3764cf510d2a2f62ad5624 (patch) | |
tree | c94125196f2dc579b0143754e44b65bbe17e5753 /Lib | |
parent | 78f58abea7c1b90499a965634488c525b73adba8 (diff) | |
download | cpython-a024034b94983c586b3764cf510d2a2f62ad5624.zip cpython-a024034b94983c586b3764cf510d2a2f62ad5624.tar.gz cpython-a024034b94983c586b3764cf510d2a2f62ad5624.tar.bz2 |
Patch 1046644 - improved distutils support for SWIG.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/distutils/command/build_ext.py | 27 | ||||
-rw-r--r-- | Lib/distutils/core.py | 2 | ||||
-rw-r--r-- | Lib/distutils/extension.py | 5 |
3 files changed, 29 insertions, 5 deletions
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py index 04cd742..07614c6 100644 --- a/Lib/distutils/command/build_ext.py +++ b/Lib/distutils/command/build_ext.py @@ -81,6 +81,10 @@ class build_ext (Command): "specify the compiler type"), ('swig-cpp', None, "make SWIG create C++ files (default is C)"), + ('swig-opts=', None, + "list of SWIG command line options"), + ('swig=', None, + "path to the SWIG executable"), ] boolean_options = ['inplace', 'debug', 'force', 'swig-cpp'] @@ -107,8 +111,9 @@ class build_ext (Command): self.debug = None self.force = None self.compiler = None + self.swig = None self.swig_cpp = None - + self.swig_opts = None def finalize_options (self): from distutils import sysconfig @@ -205,6 +210,11 @@ class build_ext (Command): if self.undef: self.undef = string.split(self.undef, ',') + if self.swig_opts is None: + self.swig_opts = [] + else: + self.swig_opts = self.swig_opts.split(' ') + # finalize_options () @@ -429,7 +439,7 @@ class build_ext (Command): # First, scan the sources for SWIG definition files (.i), run # SWIG on 'em to create .c files, and modify the sources list # accordingly. - sources = self.swig_sources(sources) + sources = self.swig_sources(sources, ext) # Next, compile the source code to object files. @@ -492,7 +502,7 @@ class build_ext (Command): target_lang=language) - def swig_sources (self, sources): + def swig_sources (self, sources, extension): """Walk the list of source files in 'sources', looking for SWIG interface (.i) files. Run SWIG on all that are found, and @@ -510,6 +520,9 @@ class build_ext (Command): # the temp dir. if self.swig_cpp: + log.warn("--swig-cpp is deprecated - use --swig-opts=-c++") + + if self.swig_cpp or ('-c++' in self.swig_opts): target_ext = '.cpp' else: target_ext = '.c' @@ -526,11 +539,17 @@ class build_ext (Command): if not swig_sources: return new_sources - swig = self.find_swig() + swig = self.swig or self.find_swig() swig_cmd = [swig, "-python"] + swig_cmd.extend(self.swig_opts) if self.swig_cpp: swig_cmd.append("-c++") + # Do not override commandline arguments + if not self.swig_opts: + for o in extension.swig_opts: + swig_cmd.append(o) + for source in swig_sources: target = swig_targets[source] log.info("swigging %s to %s", source, target) diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py index 6867534..8c82801 100644 --- a/Lib/distutils/core.py +++ b/Lib/distutils/core.py @@ -54,7 +54,7 @@ extension_keywords = ('name', 'sources', 'include_dirs', 'define_macros', 'undef_macros', 'library_dirs', 'libraries', 'runtime_library_dirs', 'extra_objects', 'extra_compile_args', 'extra_link_args', - 'export_symbols', 'depends', 'language') + 'swig_opts', 'export_symbols', 'depends', 'language') def setup (**attrs): """The gateway to the Distutils: do everything your setup script needs diff --git a/Lib/distutils/extension.py b/Lib/distutils/extension.py index e69f3e9..440d128 100644 --- a/Lib/distutils/extension.py +++ b/Lib/distutils/extension.py @@ -75,6 +75,9 @@ class Extension: used on all platforms, and not generally necessary for Python extensions, which typically export exactly one symbol: "init" + extension_name. + swig_opts : [string] + any extra options to pass to SWIG if a source file has the .i + extension. depends : [string] list of files that the extension depends on language : string @@ -95,6 +98,7 @@ class Extension: extra_compile_args=None, extra_link_args=None, export_symbols=None, + swig_opts = None, depends=None, language=None, **kw # To catch unknown keywords @@ -116,6 +120,7 @@ class Extension: self.extra_compile_args = extra_compile_args or [] self.extra_link_args = extra_link_args or [] self.export_symbols = export_symbols or [] + self.swig_opts = swig_opts or [] self.depends = depends or [] self.language = language |