NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

install_lib.py (5149B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\distutils\command\install_lib.py
      2 __revision__ = '$Id: install_lib.py 82110 2010-06-20 13:38:51Z kristjan.jonsson $'
      3 import os
      4 import sys
      5 from distutils.core import Command
      6 from distutils.errors import DistutilsOptionError
      7 if hasattr(os, 'extsep'):
      8     PYTHON_SOURCE_EXTENSION = os.extsep + 'py'
      9 else:
     10     PYTHON_SOURCE_EXTENSION = '.py'
     11 
     12 class install_lib(Command):
     13     description = 'install all Python modules (extensions and pure Python)'
     14     user_options = [('install-dir=', 'd', 'directory to install to'),
     15      ('build-dir=', 'b', 'build directory (where to install from)'),
     16      ('force', 'f', 'force installation (overwrite existing files)'),
     17      ('compile', 'c', 'compile .py to .pyc [default]'),
     18      ('no-compile', None, "don't compile .py files"),
     19      ('optimize=', 'O', 'also compile with optimization: -O1 for "python -O", -O2 for "python -OO", and -O0 to disable [default: -O0]'),
     20      ('skip-build', None, 'skip the build steps')]
     21     boolean_options = ['force', 'compile', 'skip-build']
     22     negative_opt = {'no-compile': 'compile'}
     23 
     24     def initialize_options(self):
     25         self.install_dir = None
     26         self.build_dir = None
     27         self.force = 0
     28         self.compile = None
     29         self.optimize = None
     30         self.skip_build = None
     31 
     32     def finalize_options(self):
     33         self.set_undefined_options('install', ('build_lib', 'build_dir'), ('install_lib', 'install_dir'), ('force', 'force'), ('compile', 'compile'), ('optimize', 'optimize'), ('skip_build', 'skip_build'))
     34         if self.compile is None:
     35             self.compile = 1
     36         if self.optimize is None:
     37             self.optimize = 0
     38         if not isinstance(self.optimize, int):
     39             try:
     40                 self.optimize = int(self.optimize)
     41                 if self.optimize not in (0, 1, 2):
     42                     raise AssertionError
     43             except (ValueError, AssertionError):
     44                 raise DistutilsOptionError, 'optimize must be 0, 1, or 2'
     45 
     46     def run(self):
     47         self.build()
     48         outfiles = self.install()
     49         if outfiles is not None and self.distribution.has_pure_modules():
     50             self.byte_compile(outfiles)
     51 
     52     def build(self):
     53         if not self.skip_build:
     54             if self.distribution.has_pure_modules():
     55                 self.run_command('build_py')
     56             if self.distribution.has_ext_modules():
     57                 self.run_command('build_ext')
     58 
     59     def install(self):
     60         if os.path.isdir(self.build_dir):
     61             outfiles = self.copy_tree(self.build_dir, self.install_dir)
     62         else:
     63             self.warn("'%s' does not exist -- no Python modules to install" % self.build_dir)
     64             return
     65         return outfiles
     66 
     67     def byte_compile(self, files):
     68         if sys.dont_write_bytecode:
     69             self.warn('byte-compiling is disabled, skipping.')
     70             return
     71         from distutils.util import byte_compile
     72         install_root = self.get_finalized_command('install').root
     73         if self.compile:
     74             byte_compile(files, optimize=0, force=self.force, prefix=install_root, dry_run=self.dry_run)
     75         if self.optimize > 0:
     76             byte_compile(files, optimize=self.optimize, force=self.force, prefix=install_root, verbose=self.verbose, dry_run=self.dry_run)
     77 
     78     def _mutate_outputs(self, has_any, build_cmd, cmd_option, output_dir):
     79         if not has_any:
     80             return []
     81         build_cmd = self.get_finalized_command(build_cmd)
     82         build_files = build_cmd.get_outputs()
     83         build_dir = getattr(build_cmd, cmd_option)
     84         prefix_len = len(build_dir) + len(os.sep)
     85         outputs = []
     86         for file in build_files:
     87             outputs.append(os.path.join(output_dir, file[prefix_len:]))
     88 
     89         return outputs
     90 
     91     def _bytecode_filenames(self, py_filenames):
     92         bytecode_files = []
     93         for py_file in py_filenames:
     94             ext = os.path.splitext(os.path.normcase(py_file))[1]
     95             if ext != PYTHON_SOURCE_EXTENSION:
     96                 continue
     97             if self.compile:
     98                 bytecode_files.append(py_file + 'c')
     99             if self.optimize > 0:
    100                 bytecode_files.append(py_file + 'o')
    101 
    102         return bytecode_files
    103 
    104     def get_outputs(self):
    105         pure_outputs = self._mutate_outputs(self.distribution.has_pure_modules(), 'build_py', 'build_lib', self.install_dir)
    106         if self.compile:
    107             bytecode_outputs = self._bytecode_filenames(pure_outputs)
    108         else:
    109             bytecode_outputs = []
    110         ext_outputs = self._mutate_outputs(self.distribution.has_ext_modules(), 'build_ext', 'build_lib', self.install_dir)
    111         return pure_outputs + bytecode_outputs + ext_outputs
    112 
    113     def get_inputs(self):
    114         inputs = []
    115         if self.distribution.has_pure_modules():
    116             build_py = self.get_finalized_command('build_py')
    117             inputs.extend(build_py.get_outputs())
    118         if self.distribution.has_ext_modules():
    119             build_ext = self.get_finalized_command('build_ext')
    120             inputs.extend(build_ext.get_outputs())
    121         return inputs