17db96d56Sopenharmony_ci"""distutils.command.bdist_dumb 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciImplements the Distutils 'bdist_dumb' command (create a "dumb" built 47db96d56Sopenharmony_cidistribution -- i.e., just an archive to be unpacked under $prefix or 57db96d56Sopenharmony_ci$exec_prefix).""" 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ciimport os 87db96d56Sopenharmony_cifrom distutils.core import Command 97db96d56Sopenharmony_cifrom distutils.util import get_platform 107db96d56Sopenharmony_cifrom distutils.dir_util import remove_tree, ensure_relative 117db96d56Sopenharmony_cifrom distutils.errors import * 127db96d56Sopenharmony_cifrom distutils.sysconfig import get_python_version 137db96d56Sopenharmony_cifrom distutils import log 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ciclass bdist_dumb(Command): 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ci description = "create a \"dumb\" built distribution" 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci user_options = [('bdist-dir=', 'd', 207db96d56Sopenharmony_ci "temporary directory for creating the distribution"), 217db96d56Sopenharmony_ci ('plat-name=', 'p', 227db96d56Sopenharmony_ci "platform name to embed in generated filenames " 237db96d56Sopenharmony_ci "(default: %s)" % get_platform()), 247db96d56Sopenharmony_ci ('format=', 'f', 257db96d56Sopenharmony_ci "archive format to create (tar, gztar, bztar, xztar, " 267db96d56Sopenharmony_ci "ztar, zip)"), 277db96d56Sopenharmony_ci ('keep-temp', 'k', 287db96d56Sopenharmony_ci "keep the pseudo-installation tree around after " + 297db96d56Sopenharmony_ci "creating the distribution archive"), 307db96d56Sopenharmony_ci ('dist-dir=', 'd', 317db96d56Sopenharmony_ci "directory to put final built distributions in"), 327db96d56Sopenharmony_ci ('skip-build', None, 337db96d56Sopenharmony_ci "skip rebuilding everything (for testing/debugging)"), 347db96d56Sopenharmony_ci ('relative', None, 357db96d56Sopenharmony_ci "build the archive using relative paths " 367db96d56Sopenharmony_ci "(default: false)"), 377db96d56Sopenharmony_ci ('owner=', 'u', 387db96d56Sopenharmony_ci "Owner name used when creating a tar file" 397db96d56Sopenharmony_ci " [default: current user]"), 407db96d56Sopenharmony_ci ('group=', 'g', 417db96d56Sopenharmony_ci "Group name used when creating a tar file" 427db96d56Sopenharmony_ci " [default: current group]"), 437db96d56Sopenharmony_ci ] 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci boolean_options = ['keep-temp', 'skip-build', 'relative'] 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci default_format = { 'posix': 'gztar', 487db96d56Sopenharmony_ci 'nt': 'zip' } 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci def initialize_options(self): 517db96d56Sopenharmony_ci self.bdist_dir = None 527db96d56Sopenharmony_ci self.plat_name = None 537db96d56Sopenharmony_ci self.format = None 547db96d56Sopenharmony_ci self.keep_temp = 0 557db96d56Sopenharmony_ci self.dist_dir = None 567db96d56Sopenharmony_ci self.skip_build = None 577db96d56Sopenharmony_ci self.relative = 0 587db96d56Sopenharmony_ci self.owner = None 597db96d56Sopenharmony_ci self.group = None 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ci def finalize_options(self): 627db96d56Sopenharmony_ci if self.bdist_dir is None: 637db96d56Sopenharmony_ci bdist_base = self.get_finalized_command('bdist').bdist_base 647db96d56Sopenharmony_ci self.bdist_dir = os.path.join(bdist_base, 'dumb') 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci if self.format is None: 677db96d56Sopenharmony_ci try: 687db96d56Sopenharmony_ci self.format = self.default_format[os.name] 697db96d56Sopenharmony_ci except KeyError: 707db96d56Sopenharmony_ci raise DistutilsPlatformError( 717db96d56Sopenharmony_ci "don't know how to create dumb built distributions " 727db96d56Sopenharmony_ci "on platform %s" % os.name) 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci self.set_undefined_options('bdist', 757db96d56Sopenharmony_ci ('dist_dir', 'dist_dir'), 767db96d56Sopenharmony_ci ('plat_name', 'plat_name'), 777db96d56Sopenharmony_ci ('skip_build', 'skip_build')) 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci def run(self): 807db96d56Sopenharmony_ci if not self.skip_build: 817db96d56Sopenharmony_ci self.run_command('build') 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci install = self.reinitialize_command('install', reinit_subcommands=1) 847db96d56Sopenharmony_ci install.root = self.bdist_dir 857db96d56Sopenharmony_ci install.skip_build = self.skip_build 867db96d56Sopenharmony_ci install.warn_dir = 0 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci log.info("installing to %s", self.bdist_dir) 897db96d56Sopenharmony_ci self.run_command('install') 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci # And make an archive relative to the root of the 927db96d56Sopenharmony_ci # pseudo-installation tree. 937db96d56Sopenharmony_ci archive_basename = "%s.%s" % (self.distribution.get_fullname(), 947db96d56Sopenharmony_ci self.plat_name) 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci pseudoinstall_root = os.path.join(self.dist_dir, archive_basename) 977db96d56Sopenharmony_ci if not self.relative: 987db96d56Sopenharmony_ci archive_root = self.bdist_dir 997db96d56Sopenharmony_ci else: 1007db96d56Sopenharmony_ci if (self.distribution.has_ext_modules() and 1017db96d56Sopenharmony_ci (install.install_base != install.install_platbase)): 1027db96d56Sopenharmony_ci raise DistutilsPlatformError( 1037db96d56Sopenharmony_ci "can't make a dumb built distribution where " 1047db96d56Sopenharmony_ci "base and platbase are different (%s, %s)" 1057db96d56Sopenharmony_ci % (repr(install.install_base), 1067db96d56Sopenharmony_ci repr(install.install_platbase))) 1077db96d56Sopenharmony_ci else: 1087db96d56Sopenharmony_ci archive_root = os.path.join(self.bdist_dir, 1097db96d56Sopenharmony_ci ensure_relative(install.install_base)) 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci # Make the archive 1127db96d56Sopenharmony_ci filename = self.make_archive(pseudoinstall_root, 1137db96d56Sopenharmony_ci self.format, root_dir=archive_root, 1147db96d56Sopenharmony_ci owner=self.owner, group=self.group) 1157db96d56Sopenharmony_ci if self.distribution.has_ext_modules(): 1167db96d56Sopenharmony_ci pyversion = get_python_version() 1177db96d56Sopenharmony_ci else: 1187db96d56Sopenharmony_ci pyversion = 'any' 1197db96d56Sopenharmony_ci self.distribution.dist_files.append(('bdist_dumb', pyversion, 1207db96d56Sopenharmony_ci filename)) 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci if not self.keep_temp: 1237db96d56Sopenharmony_ci remove_tree(self.bdist_dir, dry_run=self.dry_run) 124