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