ccc: Support arguments which behave like linker inputs.
 - Support comma joined options which magically turn into multiple
   value arguments (e.g., -Wl,)

 - Split out separate Arg::render routine for when an argument is
   being rendered as an input (as opposed to in its original form).

 - Add option flag for options which should be rendered without the
   option when they are used as an input (e.g., -Xlinker or -o).

 - Support -weak-l..., -weak_framework, and -weak_library.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62075 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/ccc/ccclib/Tools.py b/tools/ccc/ccclib/Tools.py
index 17a9ce8..1003441 100644
--- a/tools/ccc/ccclib/Tools.py
+++ b/tools/ccc/ccclib/Tools.py
@@ -52,7 +52,13 @@
             if isinstance(input.source, Jobs.PipedJob):
                 cmd_args.append('-')
             else:
-                cmd_args.append(arglist.getValue(input.source))
+                assert isinstance(input.source, Arguments.Arg)
+                # If this is a linker input then assume we can forward
+                # just by rendering.
+                if input.source.opt.isLinkerInput:
+                    cmd_args.extend(arglist.render(input.source))
+                else:
+                    cmd_args.extend(arglist.renderAsInput(input.source))
 
         jobs.addJob(Jobs.Command('gcc', cmd_args))
 
@@ -113,7 +119,7 @@
         if isinstance(input.source, Jobs.PipedJob):
             cmd_args.append('-')
         else:
-            cmd_args.append(arglist.getValue(input.source))
+            cmd_args.extend(arglist.renderAsInput(input.source))
         jobs.addJob(Jobs.Command('as', cmd_args))
 
 class GCC_AssembleTool(GCC_Common_Tool):
@@ -471,7 +477,7 @@
                          "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.."])
 
         for input in inputs:
-            cmd_args.append(arglist.getValue(input.source))
+            cmd_args.extend(arglist.renderAsInput(input.source))
 
         if (arglist.getLastArg(arglist.parser.f_profileArcsOption) or
             arglist.getLastArg(arglist.parser.f_profileGenerateOption) or
@@ -548,5 +554,5 @@
         cmd_args = ['-create']
         cmd_args.extend(arglist.render(output))
         for input in inputs:
-            cmd_args.append(arglist.getValue(input.source))
+            cmd_args.extend(arglist.renderAsInput(input.source))
         jobs.addJob(Jobs.Command('lipo', cmd_args))