17db96d56Sopenharmony_ci"""distutils.command.bdist 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciImplements the Distutils 'bdist' command (create a built [binary] 47db96d56Sopenharmony_cidistribution).""" 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ciimport os 77db96d56Sopenharmony_cifrom distutils.core import Command 87db96d56Sopenharmony_cifrom distutils.errors import * 97db96d56Sopenharmony_cifrom distutils.util import get_platform 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_cidef show_formats(): 137db96d56Sopenharmony_ci """Print list of available formats (arguments to "--format" option). 147db96d56Sopenharmony_ci """ 157db96d56Sopenharmony_ci from distutils.fancy_getopt import FancyGetopt 167db96d56Sopenharmony_ci formats = [] 177db96d56Sopenharmony_ci for format in bdist.format_commands: 187db96d56Sopenharmony_ci formats.append(("formats=" + format, None, 197db96d56Sopenharmony_ci bdist.format_command[format][1])) 207db96d56Sopenharmony_ci pretty_printer = FancyGetopt(formats) 217db96d56Sopenharmony_ci pretty_printer.print_help("List of available distribution formats:") 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ciclass bdist(Command): 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci description = "create a built (binary) distribution" 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci user_options = [('bdist-base=', 'b', 297db96d56Sopenharmony_ci "temporary directory for creating built distributions"), 307db96d56Sopenharmony_ci ('plat-name=', 'p', 317db96d56Sopenharmony_ci "platform name to embed in generated filenames " 327db96d56Sopenharmony_ci "(default: %s)" % get_platform()), 337db96d56Sopenharmony_ci ('formats=', None, 347db96d56Sopenharmony_ci "formats for distribution (comma-separated list)"), 357db96d56Sopenharmony_ci ('dist-dir=', 'd', 367db96d56Sopenharmony_ci "directory to put final built distributions in " 377db96d56Sopenharmony_ci "[default: dist]"), 387db96d56Sopenharmony_ci ('skip-build', None, 397db96d56Sopenharmony_ci "skip rebuilding everything (for testing/debugging)"), 407db96d56Sopenharmony_ci ('owner=', 'u', 417db96d56Sopenharmony_ci "Owner name used when creating a tar file" 427db96d56Sopenharmony_ci " [default: current user]"), 437db96d56Sopenharmony_ci ('group=', 'g', 447db96d56Sopenharmony_ci "Group name used when creating a tar file" 457db96d56Sopenharmony_ci " [default: current group]"), 467db96d56Sopenharmony_ci ] 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci boolean_options = ['skip-build'] 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci help_options = [ 517db96d56Sopenharmony_ci ('help-formats', None, 527db96d56Sopenharmony_ci "lists available distribution formats", show_formats), 537db96d56Sopenharmony_ci ] 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci # The following commands do not take a format option from bdist 567db96d56Sopenharmony_ci no_format_option = ('bdist_rpm',) 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci # This won't do in reality: will need to distinguish RPM-ish Linux, 597db96d56Sopenharmony_ci # Debian-ish Linux, Solaris, FreeBSD, ..., Windows, Mac OS. 607db96d56Sopenharmony_ci default_format = {'posix': 'gztar', 617db96d56Sopenharmony_ci 'nt': 'zip'} 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci # Establish the preferred order (for the --help-formats option). 647db96d56Sopenharmony_ci format_commands = ['rpm', 'gztar', 'bztar', 'xztar', 'ztar', 'tar', 'zip'] 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci # And the real information. 677db96d56Sopenharmony_ci format_command = {'rpm': ('bdist_rpm', "RPM distribution"), 687db96d56Sopenharmony_ci 'gztar': ('bdist_dumb', "gzip'ed tar file"), 697db96d56Sopenharmony_ci 'bztar': ('bdist_dumb', "bzip2'ed tar file"), 707db96d56Sopenharmony_ci 'xztar': ('bdist_dumb', "xz'ed tar file"), 717db96d56Sopenharmony_ci 'ztar': ('bdist_dumb', "compressed tar file"), 727db96d56Sopenharmony_ci 'tar': ('bdist_dumb', "tar file"), 737db96d56Sopenharmony_ci 'zip': ('bdist_dumb', "ZIP file"), 747db96d56Sopenharmony_ci } 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci def initialize_options(self): 777db96d56Sopenharmony_ci self.bdist_base = None 787db96d56Sopenharmony_ci self.plat_name = None 797db96d56Sopenharmony_ci self.formats = None 807db96d56Sopenharmony_ci self.dist_dir = None 817db96d56Sopenharmony_ci self.skip_build = 0 827db96d56Sopenharmony_ci self.group = None 837db96d56Sopenharmony_ci self.owner = None 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci def finalize_options(self): 867db96d56Sopenharmony_ci # have to finalize 'plat_name' before 'bdist_base' 877db96d56Sopenharmony_ci if self.plat_name is None: 887db96d56Sopenharmony_ci if self.skip_build: 897db96d56Sopenharmony_ci self.plat_name = get_platform() 907db96d56Sopenharmony_ci else: 917db96d56Sopenharmony_ci self.plat_name = self.get_finalized_command('build').plat_name 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci # 'bdist_base' -- parent of per-built-distribution-format 947db96d56Sopenharmony_ci # temporary directories (eg. we'll probably have 957db96d56Sopenharmony_ci # "build/bdist.<plat>/dumb", "build/bdist.<plat>/rpm", etc.) 967db96d56Sopenharmony_ci if self.bdist_base is None: 977db96d56Sopenharmony_ci build_base = self.get_finalized_command('build').build_base 987db96d56Sopenharmony_ci self.bdist_base = os.path.join(build_base, 997db96d56Sopenharmony_ci 'bdist.' + self.plat_name) 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci self.ensure_string_list('formats') 1027db96d56Sopenharmony_ci if self.formats is None: 1037db96d56Sopenharmony_ci try: 1047db96d56Sopenharmony_ci self.formats = [self.default_format[os.name]] 1057db96d56Sopenharmony_ci except KeyError: 1067db96d56Sopenharmony_ci raise DistutilsPlatformError( 1077db96d56Sopenharmony_ci "don't know how to create built distributions " 1087db96d56Sopenharmony_ci "on platform %s" % os.name) 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ci if self.dist_dir is None: 1117db96d56Sopenharmony_ci self.dist_dir = "dist" 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci def run(self): 1147db96d56Sopenharmony_ci # Figure out which sub-commands we need to run. 1157db96d56Sopenharmony_ci commands = [] 1167db96d56Sopenharmony_ci for format in self.formats: 1177db96d56Sopenharmony_ci try: 1187db96d56Sopenharmony_ci commands.append(self.format_command[format][0]) 1197db96d56Sopenharmony_ci except KeyError: 1207db96d56Sopenharmony_ci raise DistutilsOptionError("invalid format '%s'" % format) 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci # Reinitialize and run each command. 1237db96d56Sopenharmony_ci for i in range(len(self.formats)): 1247db96d56Sopenharmony_ci cmd_name = commands[i] 1257db96d56Sopenharmony_ci sub_cmd = self.reinitialize_command(cmd_name) 1267db96d56Sopenharmony_ci if cmd_name not in self.no_format_option: 1277db96d56Sopenharmony_ci sub_cmd.format = self.formats[i] 1287db96d56Sopenharmony_ci 1297db96d56Sopenharmony_ci # passing the owner and group names for tar archiving 1307db96d56Sopenharmony_ci if cmd_name == 'bdist_dumb': 1317db96d56Sopenharmony_ci sub_cmd.owner = self.owner 1327db96d56Sopenharmony_ci sub_cmd.group = self.group 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ci # If we're going to need to run this command again, tell it to 1357db96d56Sopenharmony_ci # keep its temporary files around so subsequent runs go faster. 1367db96d56Sopenharmony_ci if cmd_name in commands[i+1:]: 1377db96d56Sopenharmony_ci sub_cmd.keep_temp = 1 1387db96d56Sopenharmony_ci self.run_command(cmd_name) 139