import os import sys from distutils.command import bdist from Ft.Lib.DistExt import Util class BDist(bdist.bdist): """ Extended 'bdist' command that adds support for InnoSetup Windows installers and Python Egg files. """ command_name = 'bdist' default_format = bdist.bdist.default_format.copy() default_format['nt'] = 'inno' format_commands = bdist.bdist.format_commands + ['inno', 'egg'] format_command = bdist.bdist.format_command.copy() format_command['inno'] = ('bdist_inno', 'Windows InnoSetup installer') format_command['egg'] = ('bdist_egg', 'Python Egg file') # Try to keep the option help the same between Python versions. if sys.version < '2.3': user_options = bdist.bdist.user_options + [ ('skip-build', None, "skip rebuilding everything (for testing/debugging)") ] boolean_options = ['skip-build'] else: user_options = bdist.bdist.user_options boolean_options = bdist.bdist.boolean_options # Inplace addition must not be used as it could modify the super class' # attributes. user_options = user_options + [ ('keep-temp', 'k', "keep the pseudo-installation tree around after " + "creating the distribution archive"), ] boolean_options = boolean_options + ['keep-temp'] def initialize_options(self): bdist.bdist.initialize_options(self) self.skip_build = False # only necessary for Python 2.2 self.keep_temp = False return def finalize_options(self): self.set_undefined_options('config', ('plat_name', 'plat_name')) if self.bdist_base is None: build_base = self.get_finalized_command('build').build_base bdist_base = 'bdist.' + self.plat_name + '-' + sys.version[:3] self.bdist_base = os.path.join(build_base, bdist_base) bdist.bdist.finalize_options(self) for format in self.formats: if format not in self.format_command: raise DistutilsOptionError("invalid format '%s'" % format) return sub_commands = [] for format in format_commands: command, description = format_command[format] if command not in dict(sub_commands): sub_commands.append((command, lambda self: False))