123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #!/usr/bin/env python
- #
- # Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- #
- # SPDX-License-Identifier: BSD-2-Clause-Patent
- #
- #
- # ARMCC tools do not support cygwin paths. Ths script converts cygwin paths to DOS paths
- # in any arguments.
- #
- # armcc_wrapper.py ToolToExec [command line to convert]
- #
- # anything with the / will be converted via cygpath cygwin call or manually.
- # -I/cygpath/c/example is a special case as you can not pass -I to cygpath
- #
- # ExceptionList if a tool takes an argument with a / add it to the exception list
- #
- from __future__ import print_function
- import sys
- import os
- import subprocess
- import pipes
- #
- # Convert using cygpath command line tool
- # Currently not used, but just in case we need it in the future
- #
- def ConvertCygPathToDosViacygpath(CygPath):
- p = subprocess.Popen("cygpath -m " + pipes.quote(CygPath), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
- return p.stdout.read().strip()
- #
- #
- #
- def ConvertCygPathToDos(CygPath):
- if CygPath.find("/cygdrive/") == 0:
- # convert /cygdrive/c/Xyz to c:/Xyz
- DosPath = CygPath[10] + ':' + CygPath[11:]
- else:
- DosPath = CygPath
- # pipes.quote will add the extra \\ for us.
- return DosPath.replace('/', '\\')
- # we receive our options as a list, but we will be passing them to the shell as a line
- # this means we have to requote things as they will get one round of unquoting.
- # we can't set "shell=False" because we are running commands from the PATH and
- # if you don't use the shell you don't get a PATH search.
- def main(argv):
- # use 1st argument as name of tool to call
- Command = pipes.quote(sys.argv[1]);
- ExceptionList = ["/interwork"]
- for arg in argv:
- if arg.find('/') == -1:
- # if we don't need to convert just add to the command line
- Command = Command + ' ' + pipes.quote(arg)
- elif arg in ExceptionList:
- # if it is in the list, then don't do a cygpath
- # assembler stuff after --apcs has the /.
- Command = Command + ' ' + pipes.quote(arg)
- else:
- if ((arg[0] == '-') and (arg[1] == 'I' or arg[1] == 'i')):
- CygPath = arg[0] + arg[1] + ConvertCygPathToDos(arg[2:])
- else:
- CygPath = ConvertCygPathToDos(arg)
- Command = Command + ' ' + pipes.quote(CygPath)
- # call the real tool with the converted paths
- return subprocess.call(Command, shell=True)
- if __name__ == "__main__":
- try:
- ret = main(sys.argv[2:])
- except:
- print("exiting: exception from " + sys.argv[0])
- ret = 2
- sys.exit(ret)
|