mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Bastian Kleineidam: the "build_scripts" command and changes
necessary to support it.
Details:
  - build command additionally calls build_scripts
  - build_scripts builds your scripts in 'build/scripts' and adjusts the
    first line if it begins with "#!" and ends with "python", optionally
    ending with commandline options (like -O, -t ...).  Adjusting means we
    write the current path to the Python interpreter in the first line.
  - install_scripts copies the scripts to the install_scripts dir
  - install_data copies your data_files in install_data. You can
    supply individual directories for your data_files:
    data_files = ['doc/info.txt', # copy this file in install_scripts dir
      ('testdata', ['a.dat', 'b.dat']), # copy these files in
                                        # install_scripts/testdata
      ('/etc', ['packagerc']),    # copy this in /etc. When --root is
                                  # given, copy this in rootdir/etc
    ]
    So you can use the --root option with absolute data paths.
			
			
This commit is contained in:
		
							parent
							
								
									fcd974efbb
								
							
						
					
					
						commit
						8d5881a2ba
					
				
					 4 changed files with 74 additions and 11 deletions
				
			
		|  | @ -9,6 +9,7 @@ | |||
|            'build_py', | ||||
|            'build_ext', | ||||
|            'build_clib', | ||||
|            'build_scripts', | ||||
|            'install', | ||||
|            'install_lib', | ||||
|            'install_scripts', | ||||
|  |  | |||
|  | @ -24,6 +24,8 @@ class build (Command): | |||
|         ('build-lib=', None, | ||||
|          "build directory for all distribution (defaults to either " + | ||||
|          "build-purelib or build-platlib"), | ||||
|         ('build-scripts=', None, | ||||
|          "build directory for scripts"), | ||||
|         ('build-temp=', 't', | ||||
|          "temporary build directory"), | ||||
|         ('compiler=', 'c', | ||||
|  | @ -42,6 +44,7 @@ def initialize_options (self): | |||
|         self.build_platlib = None | ||||
|         self.build_lib = None | ||||
|         self.build_temp = None | ||||
|         self.build_scripts = None | ||||
|         self.compiler = None | ||||
|         self.debug = None | ||||
|         self.force = 0 | ||||
|  | @ -76,6 +79,8 @@ def finalize_options (self): | |||
|         if self.build_temp is None: | ||||
|             self.build_temp = os.path.join (self.build_base, | ||||
|                                             'temp.' + self.plat) | ||||
|         if self.build_scripts is None: | ||||
|             self.build_scripts = os.path.join (self.build_base, 'scripts') | ||||
|     # finalize_options () | ||||
| 
 | ||||
| 
 | ||||
|  | @ -100,4 +105,7 @@ def run (self): | |||
|         if self.distribution.has_ext_modules(): | ||||
|             self.run_peer ('build_ext') | ||||
| 
 | ||||
|         if self.distribution.scripts: | ||||
|             self.run_peer ('build_scripts') | ||||
| 
 | ||||
| # class build | ||||
|  |  | |||
|  | @ -7,17 +7,52 @@ | |||
| 
 | ||||
| __revision__ = "$Id$" | ||||
| 
 | ||||
| from distutils.cmd import install_misc | ||||
| import os | ||||
| from types import StringType | ||||
| from distutils.core import Command | ||||
| 
 | ||||
| class install_data (install_misc): | ||||
| class install_data (Command): | ||||
| 
 | ||||
|     description = "install data files" | ||||
| 
 | ||||
|     user_options = [ | ||||
|         ('install-dir=', 'd', | ||||
|          "directory to install the files to"), | ||||
|         ('root=', None, | ||||
|          "install everything relative to this alternate root directory"), | ||||
|         ] | ||||
| 
 | ||||
|     def initialize_options (self): | ||||
|         self.install_dir = None | ||||
|         self.outfiles = None | ||||
|         self.root = None | ||||
|         self.data_files = self.distribution.data_files | ||||
| 
 | ||||
|     def finalize_options (self): | ||||
|         self._install_dir_from('install_data') | ||||
|         self.set_undefined_options('install', | ||||
| 	                           ('install_data', 'install_dir'), | ||||
| 				   ('root', 'root'), | ||||
| 				  ) | ||||
| 
 | ||||
|     def run (self): | ||||
|         self._copy_files(self.distribution.data_files) | ||||
|         self.mkpath(self.install_dir) | ||||
|         for f in self.data_files: | ||||
|             if type(f) == StringType: | ||||
|                 # its a simple file, so copy it | ||||
|                 self.copy_file(f, self.install_dir) | ||||
|             else: | ||||
|                 # its a tuple with path to install to and a list of files | ||||
|                 dir = f[0] | ||||
|                 if not os.path.isabs(dir): | ||||
|                     dir = os.path.join(self.install_dir, dir) | ||||
|                 elif self.root: | ||||
|                     dir = os.path.join(self.root, dir[1:]) | ||||
|                 self.mkpath(dir) | ||||
|                 for data in f[1]: | ||||
|                     self.copy_file(data, dir) | ||||
| 
 | ||||
|     def get_inputs (self): | ||||
|         return self.distribution.data_files or [] | ||||
|         return self.data_files or [] | ||||
| 
 | ||||
|     def get_outputs (self): | ||||
|         return self.outfiles | ||||
|  |  | |||
|  | @ -8,23 +8,39 @@ | |||
| __revision__ = "$Id$" | ||||
| 
 | ||||
| import os | ||||
| from distutils.cmd import install_misc | ||||
| from distutils.core import Command | ||||
| from stat import ST_MODE | ||||
| 
 | ||||
| class install_scripts(install_misc): | ||||
| class install_scripts(Command): | ||||
| 
 | ||||
|     description = "install scripts" | ||||
| 
 | ||||
|     user_options = [ | ||||
|         ('install-dir=', 'd', "directory to install to"), | ||||
|         ('build-dir=','b', "build directory (where to install from)"), | ||||
|         ('skip-build', None, "skip the build steps"), | ||||
|     ] | ||||
| 
 | ||||
|     def initialize_options (self): | ||||
|         self.install_dir = None | ||||
|         self.build_dir = None | ||||
|         self.skip_build = None | ||||
| 
 | ||||
|     def finalize_options (self): | ||||
|         self._install_dir_from('install_scripts') | ||||
|         self.set_undefined_options('build', ('build_scripts', 'build_dir')) | ||||
|         self.set_undefined_options ('install', | ||||
|                                     ('install_scripts', 'install_dir'), | ||||
|                                     ('skip_build', 'skip_build'), | ||||
|                                    ) | ||||
| 
 | ||||
|     def run (self): | ||||
|         self._copy_files(self.distribution.scripts) | ||||
|         if not self.skip_build: | ||||
|             self.run_peer('build_scripts') | ||||
|         self.outfiles = self.copy_tree (self.build_dir, self.install_dir) | ||||
|         if os.name == 'posix': | ||||
|             # Set the executable bits (owner, group, and world) on | ||||
|             # all the scripts we just installed. | ||||
|             files = self.get_outputs() | ||||
|             for file in files: | ||||
|             for file in self.get_outputs(): | ||||
|                 if self.dry_run: | ||||
|                     self.announce("changing mode of %s" % file) | ||||
|                 else: | ||||
|  | @ -35,4 +51,7 @@ def run (self): | |||
|     def get_inputs (self): | ||||
|         return self.distribution.scripts or [] | ||||
| 
 | ||||
|     def get_outputs(self): | ||||
|         return self.outfiles or [] | ||||
| 
 | ||||
| # class install_scripts | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Greg Ward
						Greg Ward