import os
from distutils.core import Command
class InstallL10n(Command):
command_name = 'install_l10n'
description = "install binary message catalogs"
user_options = [
('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 = None
self.skip_build = None
return
def finalize_options (self):
self.set_undefined_options('install',
('install_l10n', 'install_dir'),
('force', 'force'),
('skip_build', 'skip_build'),
)
return
def run (self):
if not self.distribution.l10n:
# Nothing to do
return
if not self.skip_build:
self.run_command('build_l10n')
for src, dst in self.get_inputs_outputs():
# Create the destination directory if needed
self.mkpath(os.path.dirname(dst))
# Copy the file
self.copy_file(src, dst)
return
# -- utility functions ---------------------------------------------
def get_inputs_outputs(self):
build_cmd = self.get_finalized_command('build_l10n')
build_dir = build_cmd.build_dir
build_files = build_cmd.get_outputs()
prefix_len = len(build_dir) + len(os.sep)
paired = []
for source in build_files:
# Trim off the build directory
outfile = os.path.join(self.install_dir, source[prefix_len:])
paired.append((source, outfile))
return paired
# -- external interfaces -------------------------------------------
def get_inputs(self):
return [ src for (src, dst) in self.get_inputs_outputs() ]
def get_outputs(self):
return [ dst for (src, dst) in self.get_inputs_outputs() ]
|