]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Bin/CYGWIN_NT-5.1-i686/armcc_wrapper.py
Sync EDKII BaseTools to BaseTools project r1971
[mirror_edk2.git] / BaseTools / Bin / CYGWIN_NT-5.1-i686 / armcc_wrapper.py
1 #!/usr/bin/env python
2 #
3 # Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4 #
5 # This program and the accompanying materials
6 # are licensed and made available under the terms and conditions of the BSD License
7 # which accompanies this distribution. The full text of the license may be found at
8 #
9 # http://opensource.org/licenses/bsd-license.php
10 #
11 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 #
14
15 #
16 # ARMCC tools do not support cygwin paths. Ths script converts cygwin paths to DOS paths
17 # in any arguments.
18 #
19 # armcc_wrapper.py ToolToExec [command line to convert]
20 #
21 # anthing with the / will be converted via cygpath cygwin call or manually.
22 # -I/cygpath/c/example is a special case as you can not pass -I to cygpath
23 #
24 # ExceptionList if a tool takes an argument with a / add it to the exception list
25 #
26 import sys
27 import os
28 import subprocess
29 import pipes
30
31 #
32 # Convert using cygpath command line tool
33 # Currently not used, but just in case we need it in the future
34 #
35 def ConvertCygPathToDosViacygpath(CygPath):
36 p = subprocess.Popen("cygpath -m " + pipes.quote(CygPath), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
37 return p.stdout.read().strip()
38
39 #
40 #
41 #
42 def ConvertCygPathToDos(CygPath):
43 if CygPath.find("/cygdrive/") == 0:
44 # convert /cygdrive/c/Xyz to c:/Xyz
45 DosPath = CygPath[10] + ':' + CygPath[11:]
46 else:
47 DosPath = CygPath
48
49 # pipes.quote will add the extra \\ for us.
50 return DosPath.replace('/','\\')
51
52
53 # we receive our options as a list, but we will be passing them to the shell as a line
54 # this means we have to requote things as they will get one round of unquoting.
55 # we can't set "shell=False" because we are running commands from the PATH and
56 # if you don't use the shell you don't get a PATH search.
57 def main(argv):
58
59 # use 1st argument as name of tool to call
60 Command = pipes.quote(sys.argv[1]);
61
62 ExceptionList = ["/interwork"]
63
64 for arg in argv:
65 if arg.find('/') == -1:
66 # if we don't need to convert just add to the command line
67 Command = Command + ' ' + pipes.quote(arg)
68 elif arg in ExceptionList:
69 # if it is in the list, then don't do a cygpath
70 # assembler stuff after --apcs has the /.
71 Command = Command + ' ' + pipes.quote(arg)
72 else:
73 if ((arg[0] == '-') and (arg[1] == 'I' or arg[1] == 'i')):
74 CygPath = arg[0] + arg[1] + ConvertCygPathToDos(arg[2:])
75 else:
76 CygPath = ConvertCygPathToDos(arg)
77
78 Command = Command + ' ' + pipes.quote(CygPath)
79
80 # call the real tool with the converted paths
81 return subprocess.call(Command, shell=True)
82
83
84 if __name__ == "__main__":
85 try:
86 ret = main(sys.argv[2:])
87
88 except:
89 print "exiting: exception from " + sys.argv[0]
90 ret = 2
91
92 sys.exit(ret)
93