summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Lib/distutils/command/install_scripts.py
blob: e385d2632aaab1f2e450d0a7b7d412b17e8f1321 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
"""distutils.command.install_scripts 
 
Implements the Distutils 'install_scripts' command, for installing 
Python scripts.""" 
 
# contributed by Bastian Kleineidam 
 
import os 
from distutils.core import Command 
from distutils import log 
from stat import ST_MODE 
 
 
class install_scripts(Command): 
 
    description = "install scripts (Python or otherwise)" 
 
    user_options = [ 
        ('install-dir=', 'd', "directory to install scripts to"), 
        ('build-dir=','b', "build directory (where to install from)"), 
        ('force', 'f', "force installation (overwrite existing files)"), 
        ('skip-build', None, "skip the build steps"), 
    ] 
 
    boolean_options = ['force', 'skip-build'] 
 
    def initialize_options(self): 
        self.install_dir = None 
        self.force = 0 
        self.build_dir = None 
        self.skip_build = None 
 
    def finalize_options(self): 
        self.set_undefined_options('build', ('build_scripts', 'build_dir')) 
        self.set_undefined_options('install', 
                                   ('install_scripts', 'install_dir'), 
                                   ('force', 'force'), 
                                   ('skip_build', 'skip_build'), 
                                  ) 
 
    def run(self): 
        if not self.skip_build: 
            self.run_command('build_scripts') 
        self.outfiles = self.copy_tree(self.build_dir, self.install_dir) 
        if os.name == 'posix': 
            # Set the executable bits (owner, group, and world) on 
            # all the scripts we just installed. 
            for file in self.get_outputs(): 
                if self.dry_run: 
                    log.info("changing mode of %s", file) 
                else: 
                    mode = ((os.stat(file)[ST_MODE]) | 0o555) & 0o7777 
                    log.info("changing mode of %s to %o", file, mode) 
                    os.chmod(file, mode) 
 
    def get_inputs(self): 
        return self.distribution.scripts or [] 
 
    def get_outputs(self): 
        return self.outfiles or []