mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Patch 1046644 - improved distutils support for SWIG.
This commit is contained in:
		
							parent
							
								
									78f58abea7
								
							
						
					
					
						commit
						a024034b94
					
				
					 5 changed files with 35 additions and 5 deletions
				
			
		|  | @ -81,6 +81,10 @@ class build_ext (Command): | ||||||
|          "specify the compiler type"), |          "specify the compiler type"), | ||||||
|         ('swig-cpp', None, |         ('swig-cpp', None, | ||||||
|          "make SWIG create C++ files (default is C)"), |          "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'] |     boolean_options = ['inplace', 'debug', 'force', 'swig-cpp'] | ||||||
|  | @ -107,8 +111,9 @@ def initialize_options (self): | ||||||
|         self.debug = None |         self.debug = None | ||||||
|         self.force = None |         self.force = None | ||||||
|         self.compiler = None |         self.compiler = None | ||||||
|  |         self.swig = None | ||||||
|         self.swig_cpp = None |         self.swig_cpp = None | ||||||
| 
 |         self.swig_opts = None | ||||||
| 
 | 
 | ||||||
|     def finalize_options (self): |     def finalize_options (self): | ||||||
|         from distutils import sysconfig |         from distutils import sysconfig | ||||||
|  | @ -205,6 +210,11 @@ def finalize_options (self): | ||||||
|         if self.undef: |         if self.undef: | ||||||
|             self.undef = string.split(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 () |     # finalize_options () | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -429,7 +439,7 @@ def build_extension(self, ext): | ||||||
|         # First, scan the sources for SWIG definition files (.i), run |         # First, scan the sources for SWIG definition files (.i), run | ||||||
|         # SWIG on 'em to create .c files, and modify the sources list |         # SWIG on 'em to create .c files, and modify the sources list | ||||||
|         # accordingly. |         # accordingly. | ||||||
|         sources = self.swig_sources(sources) |         sources = self.swig_sources(sources, ext) | ||||||
| 
 | 
 | ||||||
|         # Next, compile the source code to object files. |         # Next, compile the source code to object files. | ||||||
| 
 | 
 | ||||||
|  | @ -492,7 +502,7 @@ def build_extension(self, ext): | ||||||
|             target_lang=language) |             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 |         """Walk the list of source files in 'sources', looking for SWIG | ||||||
|         interface (.i) files.  Run SWIG on all that are found, and |         interface (.i) files.  Run SWIG on all that are found, and | ||||||
|  | @ -510,6 +520,9 @@ def swig_sources (self, sources): | ||||||
|         # the temp dir. |         # the temp dir. | ||||||
| 
 | 
 | ||||||
|         if self.swig_cpp: |         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' |             target_ext = '.cpp' | ||||||
|         else: |         else: | ||||||
|             target_ext = '.c' |             target_ext = '.c' | ||||||
|  | @ -526,11 +539,17 @@ def swig_sources (self, sources): | ||||||
|         if not swig_sources: |         if not swig_sources: | ||||||
|             return new_sources |             return new_sources | ||||||
| 
 | 
 | ||||||
|         swig = self.find_swig() |         swig = self.swig or self.find_swig() | ||||||
|         swig_cmd = [swig, "-python"] |         swig_cmd = [swig, "-python"] | ||||||
|  |         swig_cmd.extend(self.swig_opts) | ||||||
|         if self.swig_cpp: |         if self.swig_cpp: | ||||||
|             swig_cmd.append("-c++") |             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: |         for source in swig_sources: | ||||||
|             target = swig_targets[source] |             target = swig_targets[source] | ||||||
|             log.info("swigging %s to %s", source, target) |             log.info("swigging %s to %s", source, target) | ||||||
|  |  | ||||||
|  | @ -54,7 +54,7 @@ def gen_usage (script_name): | ||||||
|                       'define_macros', 'undef_macros', |                       'define_macros', 'undef_macros', | ||||||
|                       'library_dirs', 'libraries', 'runtime_library_dirs', |                       'library_dirs', 'libraries', 'runtime_library_dirs', | ||||||
|                       'extra_objects', 'extra_compile_args', 'extra_link_args', |                       'extra_objects', 'extra_compile_args', 'extra_link_args', | ||||||
|                       'export_symbols', 'depends', 'language') |                       'swig_opts', 'export_symbols', 'depends', 'language') | ||||||
| 
 | 
 | ||||||
| def setup (**attrs): | def setup (**attrs): | ||||||
|     """The gateway to the Distutils: do everything your setup script needs |     """The gateway to the Distutils: do everything your setup script needs | ||||||
|  |  | ||||||
|  | @ -75,6 +75,9 @@ class Extension: | ||||||
|         used on all platforms, and not generally necessary for Python |         used on all platforms, and not generally necessary for Python | ||||||
|         extensions, which typically export exactly one symbol: "init" + |         extensions, which typically export exactly one symbol: "init" + | ||||||
|         extension_name. |         extension_name. | ||||||
|  |       swig_opts : [string] | ||||||
|  |         any extra options to pass to SWIG if a source file has the .i | ||||||
|  |         extension. | ||||||
|       depends : [string] |       depends : [string] | ||||||
|         list of files that the extension depends on |         list of files that the extension depends on | ||||||
|       language : string |       language : string | ||||||
|  | @ -95,6 +98,7 @@ def __init__ (self, name, sources, | ||||||
|                   extra_compile_args=None, |                   extra_compile_args=None, | ||||||
|                   extra_link_args=None, |                   extra_link_args=None, | ||||||
|                   export_symbols=None, |                   export_symbols=None, | ||||||
|  |                   swig_opts = None, | ||||||
|                   depends=None, |                   depends=None, | ||||||
|                   language=None, |                   language=None, | ||||||
|                   **kw                      # To catch unknown keywords |                   **kw                      # To catch unknown keywords | ||||||
|  | @ -116,6 +120,7 @@ def __init__ (self, name, sources, | ||||||
|         self.extra_compile_args = extra_compile_args or [] |         self.extra_compile_args = extra_compile_args or [] | ||||||
|         self.extra_link_args = extra_link_args or [] |         self.extra_link_args = extra_link_args or [] | ||||||
|         self.export_symbols = export_symbols or [] |         self.export_symbols = export_symbols or [] | ||||||
|  |         self.swig_opts = swig_opts or [] | ||||||
|         self.depends = depends or [] |         self.depends = depends or [] | ||||||
|         self.language = language |         self.language = language | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -284,6 +284,7 @@ Eric Huss | ||||||
| Jeremy Hylton | Jeremy Hylton | ||||||
| Mihai Ibanescu | Mihai Ibanescu | ||||||
| Juan David Ibáñez Palomar | Juan David Ibáñez Palomar | ||||||
|  | Lars Immisch | ||||||
| Tony Ingraldi | Tony Ingraldi | ||||||
| John Interrante | John Interrante | ||||||
| Bob Ippolito | Bob Ippolito | ||||||
|  |  | ||||||
|  | @ -47,6 +47,11 @@ Extension modules | ||||||
| Library | Library | ||||||
| ------- | ------- | ||||||
| 
 | 
 | ||||||
|  | - Patch 1046644: distutils build_ext grew two new options - --swig for | ||||||
|  |   specifying the swig executable to use, and --swig-opts to specify  | ||||||
|  |   options to pass to swig. --swig-opts="-c++" is the new way to spell | ||||||
|  |   --swig-cpp. | ||||||
|  | 
 | ||||||
| - Patch 983206: distutils now obeys environment variable LDSHARED, if | - Patch 983206: distutils now obeys environment variable LDSHARED, if | ||||||
|   it is set. |   it is set. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Anthony Baxter
						Anthony Baxter