]> granicus.if.org Git - clang/commitdiff
ccc: Get host information via Driver methods.
authorDaniel Dunbar <daniel@zuster.org>
Fri, 9 Jan 2009 22:21:24 +0000 (22:21 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Fri, 9 Jan 2009 22:21:24 +0000 (22:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62011 91177308-0d34-0410-b5e6-96231b3b80d8

tools/ccc/ccclib/Driver.py
tools/ccc/ccclib/HostInfo.py
tools/ccc/ccclib/Tools.py

index e7e69282d20dceee9b675afd6af482b80fbfe94b..392737ff409a8461885c0a8b4f77604251dea406 100644 (file)
@@ -30,6 +30,36 @@ class Driver(object):
         self.hostInfo = None
         self.parser = Arguments.OptionParser()
 
+    # Host queries which can be forcibly over-riden by the user for
+    # testing purposes.
+    #
+    # FIXME: We should make sure these are drawn from a fixed set so
+    # that nothing downstream ever plays a guessing game.
+
+    def getHostBits(self):
+        if self.cccHostBits:
+            return self.cccHostBits
+        
+        return platform.architecture()[0].replace('bit','')
+
+    def getHostMachine(self):
+        if self.cccHostMachine:
+            return self.cccHostMachine
+
+        machine = platform.machine()
+        # Normalize names.
+        if machine == 'Power Macintosh':
+            return 'ppc'
+        return machine
+
+    def getHostSystemName(self):
+        if self.cccHostSystem:
+            return self.cccHostSystem
+        
+        return platform.system().lower()
+
+    ###
+
     def run(self, argv):
         # FIXME: Things to support from environment: GCC_EXEC_PREFIX,
         # COMPILER_PATH, LIBRARY_PATH, LPATH, CC_PRINT_OPTIONS,
@@ -41,7 +71,10 @@ class Driver(object):
         # only allowed at the beginning of the command line.
         cccPrintOptions = False
         cccPrintPhases = False
-        cccHostBits = cccHostMachine = cccHostSystem = None
+
+        # FIXME: How to handle override of host? ccc specific options?
+        # Abuse -b?
+        self.cccHostBits = self.cccHostMachine = self.cccHostSystem = None
         while argv and argv[0].startswith('-ccc-'):
             opt,argv = argv[0][5:],argv[1:]
 
@@ -50,21 +83,15 @@ class Driver(object):
             elif opt == 'print-phases':
                 cccPrintPhases = True
             elif opt == 'host-bits':
-                cccHostBits,argv = argv[0],argv[1:]
+                self.cccHostBits,argv = argv[0],argv[1:]
             elif opt == 'host-machine':
-                cccHostMachine,argv = argv[0],argv[1:]
+                self.cccHostMachine,argv = argv[0],argv[1:]
             elif opt == 'host-system':
-                cccHostSystem,argv = argv[0],argv[1:]
+                self.cccHostSystem,argv = argv[0],argv[1:]
             else:
                 raise ValueError,"Invalid ccc option: %r" % cccPrintOptions
 
-        # FIXME: How to handle override of host? ccc specific options?
-        # Abuse -b?
-        hostBits = cccHostBits or platform.architecture()[0].replace('bit','')
-        hostMachine = cccHostMachine or platform.machine()
-        hostSystem = cccHostSystem or platform.system().lower()
-        self.hostInfo = HostInfo.getHostInfo(self, 
-                                             hostSystem, hostMachine, hostBits)
+        self.hostInfo = HostInfo.getHostInfo(self)
         
         args = self.parser.parseArgs(argv)
 
index ccfd32b1372e95f7e92478e2f014be2e80d016b2..507ac69cd5c5eab08aa0743b18120bbe067b257e 100644 (file)
@@ -34,7 +34,9 @@ class DarwinX86_64HostInfo(DarwinHostInfo):
     def getArchName(self):
         return 'x86_64'
 
-def getDarwinHostInfo(machine, bits):
+def getDarwinHostInfo(driver):
+    machine = driver.getHostMachine()
+    bits = driver.getHostBits()
     if machine == 'i386':
         if bits == '32':
             return DarwinX86HostInfo()
@@ -46,7 +48,7 @@ def getDarwinHostInfo(machine, bits):
         if bits == '64':
             return DarwinPPC_64HostInfo()
             
-    raise RuntimeError,'Unrecognized Darwin-i386 platform: %r:%r' % (machine, bits)
+    raise RuntimeError,'Unrecognized Darwin platform: %r:%r' % (machine, bits)
 
 # Unknown
 
@@ -57,7 +59,7 @@ class UnknownHostInfo(HostInfo):
     def useDriverDriver(self):
         return False
 
-def getUnknownHostInfo(machine, bits):
+def getUnknownHostInfo(driver):
     return UnknownHostInfo()
 
 ####
@@ -67,10 +69,11 @@ kSystems = {
     'unknown' : getUnknownHostInfo,
     }
 
-def getHostInfo(driver, system, machine, bits):
+def getHostInfo(driver):
+    system = driver.getHostSystemName()
     handler = kSystems.get(system)
     if handler:
-        return handler(machine, bits)
+        return handler(driver)
 
     driver.warning('Unknown host %r, using generic host information.' % system)
     return UnknownHostInfo()
index 0dd0e30e8bb7ea1f867f069f231ef6b8d78f3b01..e9d78486c8e17ec22cd105bf52b8cbea5e2d73aa 100644 (file)
@@ -117,9 +117,8 @@ class Collect2Tool(Tool):
 
         cmd_args = []
         for arg in args:
-            if arg.opt:
-                if arg.opt.name in ('-framework',):
-                    cmd_args.extend(arglist.render(arg))
+            if arg.opt.name in ('-framework',):
+                cmd_args.extend(arglist.render(arg))
         for input in inputs:
             cmd_args.append(arglist.getValue(input.source))
         cmd_args.extend(arglist.render(output))