diff --git a/tools/ccc/ccclib/Driver.py b/tools/ccc/ccclib/Driver.py
index e7e6928..392737f 100644
--- a/tools/ccc/ccclib/Driver.py
+++ b/tools/ccc/ccclib/Driver.py
@@ -30,6 +30,36 @@
         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 @@
         # 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 @@
             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)
 
diff --git a/tools/ccc/ccclib/HostInfo.py b/tools/ccc/ccclib/HostInfo.py
index ccfd32b..507ac69 100644
--- a/tools/ccc/ccclib/HostInfo.py
+++ b/tools/ccc/ccclib/HostInfo.py
@@ -34,7 +34,9 @@
     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 @@
         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 @@
     def useDriverDriver(self):
         return False
 
-def getUnknownHostInfo(machine, bits):
+def getUnknownHostInfo(driver):
     return UnknownHostInfo()
 
 ####
@@ -67,10 +69,11 @@
     '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()
diff --git a/tools/ccc/ccclib/Tools.py b/tools/ccc/ccclib/Tools.py
index 0dd0e30..e9d7848 100644
--- a/tools/ccc/ccclib/Tools.py
+++ b/tools/ccc/ccclib/Tools.py
@@ -117,9 +117,8 @@
 
         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))
