1 #!/usr/bin/python 2 # Copyright (c) 2009 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 """Rewrites paths in -I, -L and other option to be relative to a sysroot.""" 7 8 import sys 9 import os 10 import optparse 11 12 REWRITE_PREFIX = ['-I', 13 '-idirafter', 14 '-imacros', 15 '-imultilib', 16 '-include', 17 '-iprefix', 18 '-iquote', 19 '-isystem', 20 '-L'] 21 22 def RewritePath(path, opts): 23 """Rewrites a path by stripping the prefix and prepending the sysroot.""" 24 sysroot = opts.sysroot 25 prefix = opts.strip_prefix 26 if os.path.isabs(path) and not path.startswith(sysroot): 27 if path.startswith(prefix): 28 path = path[len(prefix):] 29 path = path.lstrip('/') 30 return os.path.join(sysroot, path) 31 else: 32 return path 33 34 def RewriteLine(line, opts): 35 """Rewrites all the paths in recognized options.""" 36 args = line.split() 37 count = len(args) 38 i = 0 39 while i < count: 40 for prefix in REWRITE_PREFIX: 41 # The option can be either in the form "-I /path/to/dir" or 42 # "-I/path/to/dir" so handle both. 43 if args[i] == prefix: 44 i += 1 45 try: 46 args[i] = RewritePath(args[i], opts) 47 except IndexError: 48 sys.stderr.write('Missing argument following %s\n' % prefix) 49 break 50 elif args[i].startswith(prefix): 51 args[i] = prefix + RewritePath(args[i][len(prefix):], opts) 52 i += 1 53 54 return ' '.join(args) 55 56 def main(argv): 57 parser = optparse.OptionParser() 58 parser.add_option('-s', '--sysroot', default='/', help='sysroot to prepend') 59 parser.add_option('-p', '--strip-prefix', default='', help='prefix to strip') 60 opts, args = parser.parse_args(argv[1:]) 61 62 for line in sys.stdin.readlines(): 63 line = RewriteLine(line.strip(), opts) 64 print line 65 return 0 66 67 if __name__ == '__main__': 68 sys.exit(main(sys.argv)) 69