diff options
author | Greg Ward <gward@python.net> | 2000-05-25 01:19:18 (GMT) |
---|---|---|
committer | Greg Ward <gward@python.net> | 2000-05-25 01:19:18 (GMT) |
commit | 8d5881a2ba7a7ed83f26ed55dbde2ef4753556da (patch) | |
tree | 51cdc82cf775eef25218f49044334350efbada9a /Lib | |
parent | fcd974efbb71ab7cb5a75639028508e0195939b8 (diff) | |
download | cpython-8d5881a2ba7a7ed83f26ed55dbde2ef4753556da.zip cpython-8d5881a2ba7a7ed83f26ed55dbde2ef4753556da.tar.gz cpython-8d5881a2ba7a7ed83f26ed55dbde2ef4753556da.tar.bz2 |
Bastian Kleineidam: the "build_scripts" command and changes
necessary to support it.
Details:
- build command additionally calls build_scripts
- build_scripts builds your scripts in 'build/scripts' and adjusts the
first line if it begins with "#!" and ends with "python", optionally
ending with commandline options (like -O, -t ...). Adjusting means we
write the current path to the Python interpreter in the first line.
- install_scripts copies the scripts to the install_scripts dir
- install_data copies your data_files in install_data. You can
supply individual directories for your data_files:
data_files = ['doc/info.txt', # copy this file in install_scripts dir
('testdata', ['a.dat', 'b.dat']), # copy these files in
# install_scripts/testdata
('/etc', ['packagerc']), # copy this in /etc. When --root is
# given, copy this in rootdir/etc
]
So you can use the --root option with absolute data paths.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/distutils/command/__init__.py | 1 | ||||
-rw-r--r-- | Lib/distutils/command/build.py | 8 | ||||
-rw-r--r-- | Lib/distutils/command/install_data.py | 45 | ||||
-rw-r--r-- | Lib/distutils/command/install_scripts.py | 31 |
4 files changed, 74 insertions, 11 deletions
diff --git a/Lib/distutils/command/__init__.py b/Lib/distutils/command/__init__.py index cd7753f..229c8a3 100644 --- a/Lib/distutils/command/__init__.py +++ b/Lib/distutils/command/__init__.py @@ -9,6 +9,7 @@ __all__ = ['build', 'build_py', 'build_ext', 'build_clib', + 'build_scripts', 'install', 'install_lib', 'install_scripts', diff --git a/Lib/distutils/command/build.py b/Lib/distutils/command/build.py index aab0d6f..96d41d5 100644 --- a/Lib/distutils/command/build.py +++ b/Lib/distutils/command/build.py @@ -24,6 +24,8 @@ class build (Command): ('build-lib=', None, "build directory for all distribution (defaults to either " + "build-purelib or build-platlib"), + ('build-scripts=', None, + "build directory for scripts"), ('build-temp=', 't', "temporary build directory"), ('compiler=', 'c', @@ -42,6 +44,7 @@ class build (Command): self.build_platlib = None self.build_lib = None self.build_temp = None + self.build_scripts = None self.compiler = None self.debug = None self.force = 0 @@ -76,6 +79,8 @@ class build (Command): if self.build_temp is None: self.build_temp = os.path.join (self.build_base, 'temp.' + self.plat) + if self.build_scripts is None: + self.build_scripts = os.path.join (self.build_base, 'scripts') # finalize_options () @@ -100,4 +105,7 @@ class build (Command): if self.distribution.has_ext_modules(): self.run_peer ('build_ext') + if self.distribution.scripts: + self.run_peer ('build_scripts') + # class build diff --git a/Lib/distutils/command/install_data.py b/Lib/distutils/command/install_data.py index fd9836b..65d188f 100644 --- a/Lib/distutils/command/install_data.py +++ b/Lib/distutils/command/install_data.py @@ -7,17 +7,52 @@ platform-independent data files.""" __revision__ = "$Id$" -from distutils.cmd import install_misc +import os +from types import StringType +from distutils.core import Command -class install_data (install_misc): +class install_data (Command): description = "install data files" + user_options = [ + ('install-dir=', 'd', + "directory to install the files to"), + ('root=', None, + "install everything relative to this alternate root directory"), + ] + + def initialize_options (self): + self.install_dir = None + self.outfiles = None + self.root = None + self.data_files = self.distribution.data_files + def finalize_options (self): - self._install_dir_from('install_data') + self.set_undefined_options('install', + ('install_data', 'install_dir'), + ('root', 'root'), + ) def run (self): - self._copy_files(self.distribution.data_files) + self.mkpath(self.install_dir) + for f in self.data_files: + if type(f) == StringType: + # its a simple file, so copy it + self.copy_file(f, self.install_dir) + else: + # its a tuple with path to install to and a list of files + dir = f[0] + if not os.path.isabs(dir): + dir = os.path.join(self.install_dir, dir) + elif self.root: + dir = os.path.join(self.root, dir[1:]) + self.mkpath(dir) + for data in f[1]: + self.copy_file(data, dir) def get_inputs (self): - return self.distribution.data_files or [] + return self.data_files or [] + + def get_outputs (self): + return self.outfiles diff --git a/Lib/distutils/command/install_scripts.py b/Lib/distutils/command/install_scripts.py index 43e5fc1..9b78326 100644 --- a/Lib/distutils/command/install_scripts.py +++ b/Lib/distutils/command/install_scripts.py @@ -8,23 +8,39 @@ Python scripts.""" __revision__ = "$Id$" import os -from distutils.cmd import install_misc +from distutils.core import Command from stat import ST_MODE -class install_scripts(install_misc): +class install_scripts(Command): description = "install scripts" + user_options = [ + ('install-dir=', 'd', "directory to install to"), + ('build-dir=','b', "build directory (where to install from)"), + ('skip-build', None, "skip the build steps"), + ] + + def initialize_options (self): + self.install_dir = None + self.build_dir = None + self.skip_build = None + def finalize_options (self): - self._install_dir_from('install_scripts') + self.set_undefined_options('build', ('build_scripts', 'build_dir')) + self.set_undefined_options ('install', + ('install_scripts', 'install_dir'), + ('skip_build', 'skip_build'), + ) def run (self): - self._copy_files(self.distribution.scripts) + if not self.skip_build: + self.run_peer('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. - files = self.get_outputs() - for file in files: + for file in self.get_outputs(): if self.dry_run: self.announce("changing mode of %s" % file) else: @@ -35,4 +51,7 @@ class install_scripts(install_misc): def get_inputs (self): return self.distribution.scripts or [] + def get_outputs(self): + return self.outfiles or [] + # class install_scripts |