Change PDB file generation from compile time to link time. (Anthony Roach)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 14 Jun 2004 12:59:21 +0000 (12:59 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 14 Jun 2004 12:59:21 +0000 (12:59 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@992 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/Tool/mslink.py
src/engine/SCons/Tool/msvc.py
test/msvc.py

index e2f49640cdc9e6729eb6797a114ec9ab227ba216..704d7b77c78ea975b85b51ae8ce4245118cb5baa 100644 (file)
@@ -162,6 +162,9 @@ RELEASE 0.96 - XXX
   - Better error messages when evaluating a construction variable
     expansion yields a Python syntax error.
 
+  - Change the generation of PDB files when using Visual Studio from
+    compile time to link time.
+
   From sam th:
 
   - Allow SConf.CheckLib() to search a list of libraries, like the
index 534760613cab0e3388af51ec36dc78d89835c1d4..c44e62b6a43b1eab9124db685fbc3bf539224d26 100644 (file)
@@ -91,8 +91,7 @@ def win32LibEmitter(target, source, env):
                                       "WIN32DEFPREFIX", "WIN32DEFSUFFIX"))
 
     if env.has_key('PDB') and env['PDB']:
-        env.SideEffect(env['PDB'], target)
-        env.Precious(env['PDB'])
+        target.append(env['PDB'])
 
     if not no_import_lib and \
        not env.FindIxes(target, "LIBPREFIX", "LIBSUFFIX"):
@@ -111,8 +110,7 @@ def prog_emitter(target, source, env):
     SCons.Tool.msvc.validate_vars(env)
     
     if env.has_key('PDB') and env['PDB']:
-        env.SideEffect(env['PDB'], target)
-        env.Precious(env['PDB'])
+        target.append(env['PDB'])
         
     return (target,source)
 
index f8d234b8189780383d23c0c16be36447144dab6c..3280eb5d5578f4323e2a97afe81a9f73764744ff 100644 (file)
@@ -349,7 +349,7 @@ def get_msvc_default_paths(version=None, use_mfc_dirs=0):
         return _get_msvc6_default_paths(version, use_mfc_dirs)
 
 def validate_vars(env):
-    """Validate the PDB, PCH, and PCHSTOP construction variables."""
+    """Validate the PCH and PCHSTOP construction variables."""
     if env.has_key('PCH') and env['PCH']:
         if not env.has_key('PCHSTOP'):
             raise SCons.Errors.UserError, "The PCHSTOP construction must be defined if PCH is defined."
@@ -357,8 +357,7 @@ def validate_vars(env):
             raise SCons.Errors.UserError, "The PCHSTOP construction variable must be a string: %r"%env['PCHSTOP']
 
 def pch_emitter(target, source, env):
-    """Sets up the PDB dependencies for a pch file, and adds the object
-    file target."""
+    """Adds the object file target."""
 
     validate_vars(env)
 
@@ -376,23 +375,15 @@ def pch_emitter(target, source, env):
 
     target = [pch, obj] # pch must be first, and obj second for the PCHCOM to work
 
-    if env.has_key('PDB') and env['PDB']:
-        env.SideEffect(env['PDB'], target)
-        env.Precious(env['PDB'])
-
     return (target, source)
 
 def object_emitter(target, source, env, parent_emitter):
-    """Sets up the PDB and PCH dependencies for an object file."""
+    """Sets up the PCH dependencies for an object file."""
 
     validate_vars(env)
 
     parent_emitter(target, source, env)
 
-    if env.has_key('PDB') and env['PDB']:
-        env.SideEffect(env['PDB'], target)
-        env.Precious(env['PDB'])
-
     if env.has_key('PCH') and env['PCH']:
         env.Depends(target, env['PCH'])
 
@@ -421,7 +412,7 @@ def generate(env):
         static_obj.add_action(suffix, SCons.Defaults.CXXAction)
         shared_obj.add_action(suffix, SCons.Defaults.ShCXXAction)
 
-    env['CCPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Zi /Fd%s"%File(PDB)) or ""}'])
+    env['CCPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Z7") or ""}'])
     env['CCPCHFLAGS'] = SCons.Util.CLVar(['${(PCH and "/Yu%s /Fp%s"%(PCHSTOP or "",File(PCH))) or ""}'])
     env['CCCOMFLAGS'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo$TARGET $CCPCHFLAGS $CCPDBFLAGS'
     env['CC']         = 'cl'
@@ -473,7 +464,8 @@ def generate(env):
     env['CFILESUFFIX'] = '.c'
     env['CXXFILESUFFIX'] = '.cc'
 
-    env['PCHCOM'] = '$CXX $CXXFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo${TARGETS[1]} /Yc$PCHSTOP /Fp${TARGETS[0]} $CCPDBFLAGS'
+    env['PCHPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Yd") or ""}'])
+    env['PCHCOM'] = '$CXX $CXXFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo${TARGETS[1]} /Yc$PCHSTOP /Fp${TARGETS[0]} $CCPDBFLAGS $PCHPDBFLAGS'
     env['BUILDERS']['PCH'] = pch_builder
 
 def exists(env):
index c937e2227cd847c196f6b5999169b5f97e88ff02..9f5171a54c6273e4cc6a00a45a8b49eacb1d30b9 100644 (file)
@@ -140,10 +140,22 @@ test.fail_test(os.path.exists(test.workpath('StdAfx.obj')))
 
 test.run(arguments='StdAfx.pch')
 
-test.fail_test(not os.path.exists(test.workpath('test.pdb')))
+test.fail_test(os.path.exists(test.workpath('test.pdb')))
 test.fail_test(not os.path.exists(test.workpath('StdAfx.pch')))
 test.fail_test(not os.path.exists(test.workpath('StdAfx.obj')))
 
+test.run(arguments='-c test.exe')
+test.fail_test(os.path.exists(test.workpath('test.exe')))
+test.fail_test(os.path.exists(test.workpath('test.obj')))
+test.fail_test(os.path.exists(test.workpath('test.pdb')))
+test.fail_test(os.path.exists(test.workpath('StdAfx.pch')))
+test.fail_test(os.path.exists(test.workpath('StdAfx.obj')))
+
+test.run(arguments='test.obj')
+test.fail_test(os.path.exists(test.workpath('test.pdb')))
+test.fail_test(not os.path.exists(test.workpath('test.obj')))
+
+
 start = time.time()
 test.run(arguments='fast.obj')
 fast = time.time() - start