import sys, os
from distutils import util,ccompiler
from distutils.command import build
import Util
class Build(build.build):
command_name = "build"
description = "build everything needed to install"
user_options = [
('build-base=', 'b', "base directory for build library"),
('build-lib=', None, "build directory for all distributions"),
('build-scripts=', None, "build directory for scripts"),
('build-temp=', 't', "temporary build directory"),
('build-docs=', None, 'build directory for documents'),
('build-l10n=', None, 'build directory for binary message catalogs'),
('compiler=', 'c', "specify the compiler type"),
('ldflags=', 'l', "specify additional linker options"),
('debug', 'g', "compile with debugging information"),
('force', 'f', "forcibly build everything (ignore file timestamps)"),
('with-docs', None, 'ignored; maintained for compatability'),
('without-docs', None, 'ignored; maintained for compatability'),
]
boolean_options = ['debug', 'force', 'with-docs', 'without-docs']
negative_opt = {'without-docs' : 'with-docs'}
help_options = [
('help-compiler', None,
"list available compilers", ccompiler.show_compilers),
]
def initialize_options(self):
self.build_base = 'build'
self.build_lib = None
self.build_temp = None
self.build_scripts = None
self.build_docs = None
self.build_l10n = None
self.compiler = None
self.ldflags = None
self.debug = None
self.force = False
self.with_docs = True
self.plat_name = None
return
def finalize_options(self):
self.set_undefined_options('config',
('compiler', 'compiler'),
('debug', 'debug'),
('plat_name', 'plat_name'))
plat_build = '%s.' + self.plat_name + '-' + sys.version[:3]
plat_build = os.path.join(self.build_base, plat_build)
if self.debug:
plat_build += '-debug'
# platform specific (can contain extension modules)
if self.build_lib is None:
self.build_lib = plat_build % 'lib'
# platform specific (compiler by-products)
if self.build_temp is None:
self.build_temp = plat_build % 'temp'
# platform specific (can have real executables)
if self.build_scripts is None:
self.build_scripts = plat_build % 'scripts'
# all platforms (no compiled objects)
if self.build_docs is None:
self.build_docs = os.path.join(self.build_base, 'docs')
# all platforms (no compiled objects)
if self.build_l10n is None:
self.build_l10n = os.path.join(self.build_base, 'locale')
return
def run(self):
self.run_command('config')
return build.build.run(self)
# -- External interfaces -------------------------------------------
def get_source_files(self):
"""
Called by 'sdist' command.
"""
files = []
for cmd_name, predicate in self.sub_commands:
cmd = self.get_finalized_command(cmd_name)
files.extend(cmd.get_source_files())
return files
# -- Predicates for sub-command list -------------------------------
def has_docs(self):
return self.distribution.has_docs()
def has_l10n(self):
return self.distribution.has_l10n()
# a list of commands this command might have to run to do its work.
sub_commands = build.build.sub_commands + [
('build_docs', has_docs),
('build_l10n', has_l10n),
]
|