| 
									
										
										
										
											1999-03-22 14:55:25 +00:00
										 |  |  | """distutils.command.build
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implements the Distutils 'build' command."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # created 1999/03/08, Greg Ward | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-02 01:49:45 +00:00
										 |  |  | __revision__ = "$Id$" | 
					
						
							| 
									
										
										
										
											1999-03-22 14:55:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  | import sys, os | 
					
						
							| 
									
										
										
										
											1999-03-22 14:55:25 +00:00
										 |  |  | from distutils.core import Command | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  | from distutils.util import get_platform | 
					
						
							| 
									
										
										
										
											2000-06-24 01:23:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def show_compilers (): | 
					
						
							|  |  |  |     from distutils.ccompiler import show_compilers | 
					
						
							|  |  |  |     show_compilers() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-22 14:55:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-18 00:13:53 +00:00
										 |  |  | class build (Command): | 
					
						
							| 
									
										
										
										
											1999-03-22 14:55:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-30 18:34:15 +00:00
										 |  |  |     description = "build everything needed to install" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-18 00:25:39 +00:00
										 |  |  |     user_options = [ | 
					
						
							|  |  |  |         ('build-base=', 'b', | 
					
						
							|  |  |  |          "base directory for build library"), | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  |         ('build-purelib=', None, | 
					
						
							|  |  |  |          "build directory for platform-neutral distributions"), | 
					
						
							|  |  |  |         ('build-platlib=', None, | 
					
						
							|  |  |  |          "build directory for platform-specific distributions"), | 
					
						
							|  |  |  |         ('build-lib=', None, | 
					
						
							|  |  |  |          "build directory for all distribution (defaults to either " + | 
					
						
							|  |  |  |          "build-purelib or build-platlib"), | 
					
						
							| 
									
										
										
										
											2000-05-25 01:19:18 +00:00
										 |  |  |         ('build-scripts=', None, | 
					
						
							|  |  |  |          "build directory for scripts"), | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  |         ('build-temp=', 't', | 
					
						
							|  |  |  |          "temporary build directory"), | 
					
						
							| 
									
										
										
										
											2000-05-12 00:33:14 +00:00
										 |  |  |         ('compiler=', 'c', | 
					
						
							|  |  |  |          "specify the compiler type"), | 
					
						
							| 
									
										
										
										
											2000-02-18 00:25:39 +00:00
										 |  |  |         ('debug', 'g', | 
					
						
							|  |  |  |          "compile extensions and libraries with debugging information"), | 
					
						
							| 
									
										
										
										
											2000-04-10 00:19:42 +00:00
										 |  |  |         ('force', 'f', | 
					
						
							| 
									
										
										
										
											2000-05-12 00:33:14 +00:00
										 |  |  |          "forcibly build everything (ignore file timestamps)"), | 
					
						
							| 
									
										
										
										
											2000-02-18 00:25:39 +00:00
										 |  |  |         ] | 
					
						
							| 
									
										
										
										
											2000-06-24 00:23:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-09-25 01:41:15 +00:00
										 |  |  |     boolean_options = ['debug', 'force'] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-07 03:00:06 +00:00
										 |  |  |     help_options = [ | 
					
						
							|  |  |  |         ('help-compiler', None, | 
					
						
							| 
									
										
										
										
											2000-06-24 00:23:20 +00:00
										 |  |  |          "list available compilers", show_compilers), | 
					
						
							| 
									
										
										
										
											2000-10-14 04:06:40 +00:00
										 |  |  |         ] | 
					
						
							| 
									
										
										
										
											1999-03-22 14:55:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-18 00:35:22 +00:00
										 |  |  |     def initialize_options (self): | 
					
						
							| 
									
										
										
										
											1999-09-29 12:38:18 +00:00
										 |  |  |         self.build_base = 'build' | 
					
						
							|  |  |  |         # these are decided only after 'build_base' has its final value | 
					
						
							| 
									
										
										
										
											1999-03-22 14:55:25 +00:00
										 |  |  |         # (unless overridden by the user or client) | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  |         self.build_purelib = None | 
					
						
							| 
									
										
										
										
											1999-09-29 12:38:18 +00:00
										 |  |  |         self.build_platlib = None | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  |         self.build_lib = None | 
					
						
							|  |  |  |         self.build_temp = None | 
					
						
							| 
									
										
										
										
											2000-05-25 01:19:18 +00:00
										 |  |  |         self.build_scripts = None | 
					
						
							| 
									
										
										
										
											2000-05-12 00:33:14 +00:00
										 |  |  |         self.compiler = None | 
					
						
							| 
									
										
										
										
											2000-02-09 02:19:49 +00:00
										 |  |  |         self.debug = None | 
					
						
							| 
									
										
										
										
											2000-04-10 00:19:42 +00:00
										 |  |  |         self.force = 0 | 
					
						
							| 
									
										
										
										
											1999-03-22 14:55:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-18 00:35:22 +00:00
										 |  |  |     def finalize_options (self): | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-09-16 02:06:45 +00:00
										 |  |  |         plat_specifier = ".%s-%s" % (get_platform(), sys.version[0:3]) | 
					
						
							| 
									
										
										
										
											2000-09-16 01:54:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  |         # 'build_purelib' and 'build_platlib' just default to 'lib' and | 
					
						
							|  |  |  |         # 'lib.<plat>' under the base build directory.  We only use one of | 
					
						
							|  |  |  |         # them for a given distribution, though -- | 
					
						
							|  |  |  |         if self.build_purelib is None: | 
					
						
							| 
									
										
										
										
											2000-09-30 18:27:54 +00:00
										 |  |  |             self.build_purelib = os.path.join(self.build_base, 'lib') | 
					
						
							| 
									
										
										
										
											1999-09-29 12:38:18 +00:00
										 |  |  |         if self.build_platlib is None: | 
					
						
							| 
									
										
										
										
											2000-09-30 18:27:54 +00:00
										 |  |  |             self.build_platlib = os.path.join(self.build_base, | 
					
						
							|  |  |  |                                               'lib' + plat_specifier) | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # 'build_lib' is the actual directory that we will use for this | 
					
						
							|  |  |  |         # particular module distribution -- if user didn't supply it, pick | 
					
						
							|  |  |  |         # one of 'build_purelib' or 'build_platlib'. | 
					
						
							|  |  |  |         if self.build_lib is None: | 
					
						
							|  |  |  |             if self.distribution.ext_modules: | 
					
						
							|  |  |  |                 self.build_lib = self.build_platlib | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 self.build_lib = self.build_purelib | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # 'build_temp' -- temporary directory for compiler turds, | 
					
						
							|  |  |  |         # "build/temp.<plat>" | 
					
						
							|  |  |  |         if self.build_temp is None: | 
					
						
							| 
									
										
										
										
											2000-09-30 18:27:54 +00:00
										 |  |  |             self.build_temp = os.path.join(self.build_base, | 
					
						
							|  |  |  |                                            'temp' + plat_specifier) | 
					
						
							| 
									
										
										
										
											2000-05-25 01:19:18 +00:00
										 |  |  |         if self.build_scripts is None: | 
					
						
							| 
									
										
										
										
											2001-12-10 15:28:30 +00:00
										 |  |  |             self.build_scripts = os.path.join(self.build_base, | 
					
						
							|  |  |  |                                               'scripts-' + sys.version[0:3]) | 
					
						
							| 
									
										
										
										
											2000-09-16 02:06:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-01 01:26:45 +00:00
										 |  |  |     # finalize_options () | 
					
						
							| 
									
										
										
										
											1999-03-22 14:55:25 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def run (self): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-09-30 17:08:12 +00:00
										 |  |  |         # Run all relevant sub-commands.  This will be some subset of: | 
					
						
							|  |  |  |         #  - build_py      - pure Python modules | 
					
						
							|  |  |  |         #  - build_clib    - standalone C libraries | 
					
						
							|  |  |  |         #  - build_ext     - Python extensions | 
					
						
							|  |  |  |         #  - build_scripts - (Python) scripts | 
					
						
							|  |  |  |         for cmd_name in self.get_sub_commands(): | 
					
						
							|  |  |  |             self.run_command(cmd_name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # -- Predicates for the sub-command list --------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def has_pure_modules (self): | 
					
						
							|  |  |  |         return self.distribution.has_pure_modules() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def has_c_libraries (self): | 
					
						
							|  |  |  |         return self.distribution.has_c_libraries() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def has_ext_modules (self): | 
					
						
							|  |  |  |         return self.distribution.has_ext_modules() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def has_scripts (self): | 
					
						
							|  |  |  |         return self.distribution.has_scripts() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sub_commands = [('build_py',      has_pure_modules), | 
					
						
							|  |  |  |                     ('build_clib',    has_c_libraries), | 
					
						
							|  |  |  |                     ('build_ext',     has_ext_modules), | 
					
						
							|  |  |  |                     ('build_scripts', has_scripts), | 
					
						
							|  |  |  |                    ] | 
					
						
							| 
									
										
										
										
											2000-05-25 01:19:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-05-25 01:10:04 +00:00
										 |  |  | # class build |