17db96d56Sopenharmony_ci"""distutils.command.install_scripts 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciImplements the Distutils 'install_scripts' command, for installing 47db96d56Sopenharmony_ciPython scripts.""" 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ci# contributed by Bastian Kleineidam 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ciimport os 97db96d56Sopenharmony_cifrom distutils.core import Command 107db96d56Sopenharmony_cifrom distutils import log 117db96d56Sopenharmony_cifrom stat import ST_MODE 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciclass install_scripts(Command): 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ci description = "install scripts (Python or otherwise)" 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci user_options = [ 197db96d56Sopenharmony_ci ('install-dir=', 'd', "directory to install scripts to"), 207db96d56Sopenharmony_ci ('build-dir=','b', "build directory (where to install from)"), 217db96d56Sopenharmony_ci ('force', 'f', "force installation (overwrite existing files)"), 227db96d56Sopenharmony_ci ('skip-build', None, "skip the build steps"), 237db96d56Sopenharmony_ci ] 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci boolean_options = ['force', 'skip-build'] 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci def initialize_options(self): 287db96d56Sopenharmony_ci self.install_dir = None 297db96d56Sopenharmony_ci self.force = 0 307db96d56Sopenharmony_ci self.build_dir = None 317db96d56Sopenharmony_ci self.skip_build = None 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ci def finalize_options(self): 347db96d56Sopenharmony_ci self.set_undefined_options('build', ('build_scripts', 'build_dir')) 357db96d56Sopenharmony_ci self.set_undefined_options('install', 367db96d56Sopenharmony_ci ('install_scripts', 'install_dir'), 377db96d56Sopenharmony_ci ('force', 'force'), 387db96d56Sopenharmony_ci ('skip_build', 'skip_build'), 397db96d56Sopenharmony_ci ) 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci def run(self): 427db96d56Sopenharmony_ci if not self.skip_build: 437db96d56Sopenharmony_ci self.run_command('build_scripts') 447db96d56Sopenharmony_ci self.outfiles = self.copy_tree(self.build_dir, self.install_dir) 457db96d56Sopenharmony_ci if os.name == 'posix': 467db96d56Sopenharmony_ci # Set the executable bits (owner, group, and world) on 477db96d56Sopenharmony_ci # all the scripts we just installed. 487db96d56Sopenharmony_ci for file in self.get_outputs(): 497db96d56Sopenharmony_ci if self.dry_run: 507db96d56Sopenharmony_ci log.info("changing mode of %s", file) 517db96d56Sopenharmony_ci else: 527db96d56Sopenharmony_ci mode = ((os.stat(file)[ST_MODE]) | 0o555) & 0o7777 537db96d56Sopenharmony_ci log.info("changing mode of %s to %o", file, mode) 547db96d56Sopenharmony_ci os.chmod(file, mode) 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci def get_inputs(self): 577db96d56Sopenharmony_ci return self.distribution.scripts or [] 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci def get_outputs(self): 607db96d56Sopenharmony_ci return self.outfiles or [] 61