blob: 7caad28072e312d1db84a69416c3e75f3eb06a5d [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Modifies a list of input paths to produce a list of output paths.
The user can specify a list of paths as well as specific path transformations
(e.g. replace directory or replace extension) and this script will return a
list of processed output paths.
"""
import argparse
import os
import sys
import textwrap
def ConvertPath(path,
output_directory=None,
output_prefix=None,
output_extension=None,
forward_slashes=None,
base_directory=None):
"""The script's core function."""
output_path = path
if output_directory:
relpath_start = base_directory
if not relpath_start:
relpath_start = os.path.dirname(output_path)
relpath = os.path.relpath(output_path, relpath_start)
assert os.pardir not in relpath
output_path = os.path.join(output_directory, relpath)
if output_prefix:
output_path = os.path.join(
os.path.dirname(output_path),
output_prefix + os.path.basename(output_path))
if output_extension:
output_path = (
os.path.splitext(output_path)[0] + os.extsep + output_extension)
if forward_slashes:
output_path = output_path.replace('\\', '/')
return output_path
def DoMain(argv):
"""Script main function."""
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
description=textwrap.dedent(__doc__))
parser.add_argument(
'-d',
'--output_directory',
type=str,
help=('If specified, will replace all input path '
'directories with the one specified by this '
'parameter.'))
parser.add_argument(
'-e',
'--output_extension',
type=str,
help=('If specified, will replace all input path '
'extensions with the one specified by this '
'parameter.'))
parser.add_argument(
'-p',
'--output_prefix',
type=str,
help=('If specified, will prepend the string '
'specified in the parameter to the filename.'))
parser.add_argument(
'-s',
'--forward_slashes',
action='store_true',
help=('Set this flag if you would like all output '
'paths to contain forward slashes, even on '
'Windows. This is useful if you are calling this '
'from Gyp which expects forward slashes. Used with '
'the -d argument.'))
parser.add_argument(
'-b',
'--base_directory',
type=str,
help=('If specified, remove up to and including the '
'specified directory from the input path when '
'constructing the output path. The input paths '
'must be under the base directory. The -d argument '
'must also be specified.'))
parser.add_argument(
'input_paths',
help=('A list of paths that will be modified as '
'specified by the other options.'),
nargs='*')
args = parser.parse_args(argv)
converted_paths = [
ConvertPath(path, args.output_directory, args.output_prefix,
args.output_extension, args.forward_slashes,
args.base_directory) for path in args.input_paths
]
return ' '.join(converted_paths)
if __name__ == '__main__':
print DoMain(sys.argv[1:])
sys.exit(0)