| #!/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)) |