ccc: Implement file & path searching.
 - Toolchain is responsible for providing list of prefixes to search.

 - Implement -print-file-name=xxx and -print-prog-name=xxx driver options.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62659 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/ccc/ccclib/Driver.py b/tools/ccc/ccclib/Driver.py
index de4596b..7f6082d 100644
--- a/tools/ccc/ccclib/Driver.py
+++ b/tools/ccc/ccclib/Driver.py
@@ -78,6 +78,24 @@
 
     ###
 
+    def getFilePath(self, name, toolChain=None):
+        tc = toolChain or self.toolChain
+        for p in tc.filePathPrefixes:
+            path = os.path.join(p, name)
+            if os.path.exists(path):
+                return path
+        return name
+
+    def getProgramPath(self, name, toolChain=None):
+        tc = toolChain or self.toolChain
+        for p in tc.programPathPrefixes:
+            path = os.path.join(p, name)
+            if os.path.exists(path):
+                return path
+        return name
+
+    ###
+
     def run(self, argv):
         # FIXME: Things to support from environment: GCC_EXEC_PREFIX,
         # COMPILER_PATH, LIBRARY_PATH, LPATH, CC_PRINT_OPTIONS,
@@ -287,50 +305,32 @@
         # FIXME: Do we want to report "argument unused" type errors in the
         # presence of things like -dumpmachine and -print-search-dirs?
         # Probably not.
-        arg = args.getLastArg(self.parser.dumpmachineOption)
+        arg = (args.getLastArg(self.parser.dumpmachineOption) or
+               args.getLastArg(self.parser.dumpversionOption) or
+               args.getLastArg(self.parser.printSearchDirsOption))
         if arg:
-            print 'FIXME: %s' % arg.opt.name
-            sys.exit(1)
+            raise NotImplementedError('%s unsupported' % arg.opt.name)
 
-        arg = args.getLastArg(self.parser.dumpspecsOption)
+        arg = (args.getLastArg(self.parser.dumpspecsOption) or
+               args.getLastArg(self.parser.printMultiDirectoryOption) or
+               args.getLastArg(self.parser.printMultiLibOption))
         if arg:
-            print 'FIXME: %s' % arg.opt.name
-            sys.exit(1)
-
-        arg = args.getLastArg(self.parser.dumpversionOption)
-        if arg:
-            print 'FIXME: %s' % arg.opt.name
-            sys.exit(1)
+            raise Arguments.InvalidArgumentsError('%s unsupported by this driver' % arg.opt.name)
 
         arg = args.getLastArg(self.parser.printFileNameOption)
         if arg:
-            print 'FIXME: %s' % arg.opt.name
-            sys.exit(1)
-
-        arg = args.getLastArg(self.parser.printMultiDirectoryOption)
-        if arg:
-            print 'FIXME: %s' % arg.opt.name
-            sys.exit(1)
-
-        arg = args.getLastArg(self.parser.printMultiLibOption)
-        if arg:
-            print 'FIXME: %s' % arg.opt.name
-            sys.exit(1)
+            print self.getFilePath(args.getValue(arg))
+            sys.exit(0)
 
         arg = args.getLastArg(self.parser.printProgNameOption)
         if arg:
-            print 'FIXME: %s' % arg.opt.name
-            sys.exit(1)
+            print self.getProgramPath(args.getValue(arg))
+            sys.exit(0)
 
-        arg = args.getLastArg(self.parser.printLibgccFilenameOption)
+        arg = args.getLastArg(self.parser.printLibgccFileNameOption)
         if arg:
-            print 'FIXME: %s' % arg.opt.name
-            sys.exit(1)
-
-        arg = args.getLastArg(self.parser.printSearchDirsOption)
-        if arg:
-            print 'FIXME: %s' % arg.opt.name
-            sys.exit(1)
+            print self.getFilePath('libgcc.a')
+            sys.exit(0)
 
     def buildNormalPipeline(self, args):
         hasAnalyze = args.getLastArg(self.parser.analyzeOption)