Home | History | Annotate | Download | only in CYGWIN_NT-5.1-i686
      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 
     94