|
|
# 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
|
|
|
# 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
|
|
|
|