]> granicus.if.org Git - python/commitdiff
Changed 'compile()' method to compile files one-at-a-time -- gives better
authorGreg Ward <gward@python.net>
Thu, 3 Feb 2000 23:07:19 +0000 (23:07 +0000)
committerGreg Ward <gward@python.net>
Thu, 3 Feb 2000 23:07:19 +0000 (23:07 +0000)
feedback and, theoretically, the opportunity to set compiler flags
on a per-file basis.

Lib/distutils/unixccompiler.py

index fb58269cc1a9ced2064bcd4c1db77d27bb051659..9ace98606c3964102d3b68ccfaad2854aa97e47e 100644 (file)
@@ -137,34 +137,27 @@ class UnixCCompiler (CCompiler):
             for skipped_pair in skipped:
                 self.announce ("skipping %s (%s up-to-date)" % skipped_pair)
 
-        # If anything left to compile, compile it
-        if sources:
-            # XXX use of ccflags_shared means we're blithely assuming
-            # that we're compiling for inclusion in a shared object!
-            # (will have to fix this when I add the ability to build a
-            # new Python)
-            cc_args = ['-c'] + pp_opts + \
-                      self.ccflags + self.ccflags_shared + \
-                      sources
-            if extra_preargs:
-                cc_args[:0] = extra_preargs
-            if extra_postargs:
-                cc_args.extend (extra_postargs)
-            self.spawn ([self.cc] + cc_args)
-        
-
-        # Note that compiling multiple source files in the same go like
-        # we've just done drops the .o file in the current directory, which
-        # may not be what the caller wants (depending on the 'output_dir'
-        # parameter).  So, if necessary, fix that now by moving the .o
-        # files into the desired output directory.  (The alternative, of
-        # course, is to compile one-at-a-time with a -o option.  6 of one,
-        # 12/2 of the other...)
-
-        if output_dir:
-            for i in range (len (objects)):
-                src = os.path.basename (objects[i])
-                objects[i] = self.move_file (src, output_dir)
+        # Build list of (source,object) tuples for convenience
+        srcobj = []
+        for i in range (len (sources)):
+            srcobj.append ((sources[i], objects[i]))
+
+        # Compile all source files that weren't eliminated by
+        # 'newer_pairwise()'.
+        # XXX use of ccflags_shared means we're blithely assuming
+        # that we're compiling for inclusion in a shared object!
+        # (will have to fix this when I add the ability to build a
+        # new Python)
+        cc_args = ['-c'] + pp_opts + self.ccflags + self.ccflags_shared
+        if extra_preargs:
+            cc_args[:0] = extra_preargs
+        if extra_postargs is None:
+            extra_postargs = []
+
+        for (source,object) in srcobj:
+            self.spawn ([self.cc] + cc_args +
+                        [source, '-o', object] +
+                        extra_postargs)
 
         # Have to re-fetch list of object filenames, because we want to
         # return *all* of them, including those that weren't recompiled on