Commits

Gary Oberbrunner  committed d02f607

Fix issue 2627: MSVC_BATCH=False should turn off batch, not turn it on.

  • Participants
  • Parent commits 3c54a90

Comments (0)

Files changed (4)

File src/CHANGES.txt

 
   From Grzegorz Bizoń:
     - Fix long compile lines in batch mode by using TEMPFILE
+    - Fix MSVC_BATCH=False (was treating it as true)
 
   From Justin Gullingsrud:
     - support -std=c++0x and related CXXFLAGS in pkgconfig (ParseFlags)

File src/RELEASE.txt

 
   FIXES
 
+    - Passing MSVC_BATCH=False works now (treated same as 0)
     - Long compile lines no longer break MSVC_BATCH mode
     - RPATH is now in LINKCOM rather than LINKFLAGS, so resetting
       LINKFLAGS doesn't kill RPATH

File src/engine/SCons/Tool/msvc.py

     Returning None specifies that the specified target+source should not
     be batched with other compilations.
     """
-    b = env.subst('$MSVC_BATCH')
-    if b in (None, '', '0'):
+
+    # Fixing MSVC_BATCH mode. Previous if did not work when MSVC_BATCH
+    # was set to False. This new version should work better.
+    # Note we need to do the env.subst so $MSVC_BATCH can be a reference to
+    # another construction variable, which is why we test for False and 0
+    # as strings.
+    if not 'MSVC_BATCH' in env or env.subst('$MSVC_BATCH') in ('0', 'False', '', None):
         # We're not using batching; return no key.
         return None
     t = target[0]
     we return an /Fo string that just specifies the first target's
     directory (where the Visual C/C++ compiler will put the .obj files).
     """
-    b = env.subst('$MSVC_BATCH')
-    if b in (None, '', '0') or len(source) == 1:
+
+    # Fixing MSVC_BATCH mode. Previous if did not work when MSVC_BATCH
+    # was set to False. This new version should work better. Removed
+    # len(source)==1 as batch mode can compile only one file
+    # (and it also fixed problem with compiling only one changed file
+    # with batch mode enabled)
+    if not 'MSVC_BATCH' in env or env.subst('$MSVC_BATCH') in ('0', 'False', '', None):
         return '/Fo$TARGET'
     else:
         # The Visual C/C++ compiler requires a \ at the end of the /Fo

File test/MSVC/batch.py

 /Foprog.obj prog.c
 """)
 
+test.run(arguments = '-c .')
+test.unlink('fake_cl.log')
+
+
+test.run(arguments = '. MSVC_BATCH=False')
+
+test.must_match('prog.exe', "prog.c\nf1.c 2\nf2.c\n")
+test.must_match('fake_cl.log', """\
+/Fof1.obj f1.c
+/Fof2.obj f2.c
+/Foprog.obj prog.c
+""")
+
 
 
 test.write('f1.c', "f1.c 3\n")