123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #!/usr/bin/env python
- # Copyright (c) 2011 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.
- """Rewrites paths in -I, -L and other option to be relative to a sysroot."""
- import sys
- import os
- import optparse
- REWRITE_PREFIX = ['-I',
- '-idirafter',
- '-imacros',
- '-imultilib',
- '-include',
- '-iprefix',
- '-iquote',
- '-isystem',
- '-L']
- def RewritePath(path, opts):
- """Rewrites a path by stripping the prefix and prepending the sysroot."""
- sysroot = opts.sysroot
- prefix = opts.strip_prefix
- if os.path.isabs(path) and not path.startswith(sysroot):
- if path.startswith(prefix):
- path = path[len(prefix):]
- path = path.lstrip('/')
- return os.path.join(sysroot, path)
- else:
- return path
- def RewriteLine(line, opts):
- """Rewrites all the paths in recognized options."""
- args = line.split()
- count = len(args)
- i = 0
- while i < count:
- for prefix in REWRITE_PREFIX:
- # The option can be either in the form "-I /path/to/dir" or
- # "-I/path/to/dir" so handle both.
- if args[i] == prefix:
- i += 1
- try:
- args[i] = RewritePath(args[i], opts)
- except IndexError:
- sys.stderr.write('Missing argument following %s\n' % prefix)
- break
- elif args[i].startswith(prefix):
- args[i] = prefix + RewritePath(args[i][len(prefix):], opts)
- i += 1
- return ' '.join(args)
- def main(argv):
- parser = optparse.OptionParser()
- parser.add_option('-s', '--sysroot', default='/', help='sysroot to prepend')
- parser.add_option('-p', '--strip-prefix', default='', help='prefix to strip')
- opts, args = parser.parse_args(argv[1:])
- for line in sys.stdin.readlines():
- line = RewriteLine(line.strip(), opts)
- print line
- return 0
- if __name__ == '__main__':
- sys.exit(main(sys.argv))
|