install_data_ext.py
80 lines
| 3.0 KiB
| text/x-python
|
PythonLexer
/ setupext / install_data_ext.py
fperez
|
r0 | # install_data_ext.py | ||
# | ||||
# Subclass of normal distutils install_data command to allow more | ||||
# configurable installation of data files. | ||||
import os | ||||
from distutils.command.install_data import install_data | ||||
from distutils.util import change_root, convert_path | ||||
class install_data_ext(install_data): | ||||
def initialize_options(self): | ||||
self.install_base = None | ||||
self.install_platbase = None | ||||
self.install_purelib = None | ||||
self.install_headers = None | ||||
self.install_lib = None | ||||
self.install_scripts = None | ||||
self.install_data = None | ||||
self.outfiles = [] | ||||
self.root = None | ||||
self.force = 0 | ||||
self.data_files = self.distribution.data_files | ||||
self.warn_dir = 1 | ||||
def finalize_options(self): | ||||
self.set_undefined_options('install', | ||||
('root', 'root'), | ||||
('force', 'force'), | ||||
('install_base', 'install_base'), | ||||
('install_platbase', | ||||
'install_platbase'), | ||||
('install_purelib', | ||||
'install_purelib'), | ||||
('install_headers', | ||||
'install_headers'), | ||||
('install_lib', 'install_lib'), | ||||
('install_scripts', | ||||
'install_scripts'), | ||||
('install_data', 'install_data')) | ||||
def run(self): | ||||
""" | ||||
This is where the meat is. Basically the data_files list must | ||||
now be a list of tuples of 3 entries. The first | ||||
entry is one of 'base', 'platbase', etc, which indicates which | ||||
base to install from. The second entry is the path to install | ||||
too. The third entry is a list of files to install. | ||||
""" | ||||
for lof in self.data_files: | ||||
if lof[0]: | ||||
base = getattr(self, 'install_' + lof[0]) | ||||
else: | ||||
base = getattr(self, 'install_base') | ||||
dir = convert_path(lof[1]) | ||||
if not os.path.isabs(dir): | ||||
dir = os.path.join(base, dir) | ||||
elif self.root: | ||||
dir = change_root(self.root, dir) | ||||
self.mkpath(dir) | ||||
files = lof[2] | ||||
if len(files) == 0: | ||||
# If there are no files listed, the user must be | ||||
# trying to create an empty directory, so add the the | ||||
# directory to the list of output files. | ||||
self.outfiles.append(dir) | ||||
else: | ||||
# Copy files, adding them to the list of output files. | ||||
for f in files: | ||||
f = convert_path(f) | ||||
(out, _) = self.copy_file(f, dir) | ||||
#print "DEBUG: ", out # dbg | ||||
self.outfiles.append(out) | ||||
return self.outfiles | ||||