| """distutils.command.build
|
|
|
| Implements the Distutils 'build' command."""
|
|
|
| import sys
|
| import os
|
| from distutils.core import Command
|
| from distutils.errors import DistutilsOptionError
|
| from distutils.util import get_platform
|
|
|
|
|
| def show_compilers():
|
| from distutils.ccompiler import show_compilers
|
|
|
| show_compilers()
|
|
|
|
|
| class build(Command):
|
|
|
| description = "build everything needed to install"
|
|
|
| user_options = [
|
| ('build-base=', 'b', "base directory for build library"),
|
| ('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",
|
| ),
|
| ('build-scripts=', None, "build directory for scripts"),
|
| ('build-temp=', 't', "temporary build directory"),
|
| (
|
| 'plat-name=',
|
| 'p',
|
| "platform name to build for, if supported "
|
| "(default: %s)" % get_platform(),
|
| ),
|
| ('compiler=', 'c', "specify the compiler type"),
|
| ('parallel=', 'j', "number of parallel build jobs"),
|
| ('debug', 'g', "compile extensions and libraries with debugging information"),
|
| ('force', 'f', "forcibly build everything (ignore file timestamps)"),
|
| ('executable=', 'e', "specify final destination interpreter path (build.py)"),
|
| ]
|
|
|
| boolean_options = ['debug', 'force']
|
|
|
| help_options = [
|
| ('help-compiler', None, "list available compilers", show_compilers),
|
| ]
|
|
|
| def initialize_options(self):
|
| self.build_base = 'build'
|
|
|
|
|
| self.build_purelib = None
|
| self.build_platlib = None
|
| self.build_lib = None
|
| self.build_temp = None
|
| self.build_scripts = None
|
| self.compiler = None
|
| self.plat_name = None
|
| self.debug = None
|
| self.force = 0
|
| self.executable = None
|
| self.parallel = None
|
|
|
| def finalize_options(self):
|
| if self.plat_name is None:
|
| self.plat_name = get_platform()
|
| else:
|
|
|
|
|
|
|
| if os.name != 'nt':
|
| raise DistutilsOptionError(
|
| "--plat-name only supported on Windows (try "
|
| "using './configure --help' on your platform)"
|
| )
|
|
|
| plat_specifier = ".{}-{}".format(self.plat_name, sys.implementation.cache_tag)
|
|
|
|
|
|
|
|
|
| if hasattr(sys, 'gettotalrefcount'):
|
| plat_specifier += '-pydebug'
|
|
|
|
|
|
|
|
|
| if self.build_purelib is None:
|
| self.build_purelib = os.path.join(self.build_base, 'lib')
|
| if self.build_platlib is None:
|
| self.build_platlib = os.path.join(self.build_base, 'lib' + plat_specifier)
|
|
|
|
|
|
|
|
|
| if self.build_lib is None:
|
| if self.distribution.has_ext_modules():
|
| self.build_lib = self.build_platlib
|
| else:
|
| self.build_lib = self.build_purelib
|
|
|
|
|
|
|
| if self.build_temp is None:
|
| self.build_temp = os.path.join(self.build_base, 'temp' + plat_specifier)
|
| if self.build_scripts is None:
|
| self.build_scripts = os.path.join(
|
| self.build_base, 'scripts-%d.%d' % sys.version_info[:2]
|
| )
|
|
|
| if self.executable is None and sys.executable:
|
| self.executable = os.path.normpath(sys.executable)
|
|
|
| if isinstance(self.parallel, str):
|
| try:
|
| self.parallel = int(self.parallel)
|
| except ValueError:
|
| raise DistutilsOptionError("parallel should be an integer")
|
|
|
| def run(self):
|
|
|
|
|
|
|
|
|
|
|
| for cmd_name in self.get_sub_commands():
|
| self.run_command(cmd_name)
|
|
|
|
|
|
|
| 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),
|
| ]
|
|
|