Fix use of $CHANGED_SOURCES with the --config=force option so that
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 29 Jan 2009 15:07:32 +0000 (15:07 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 29 Jan 2009 15:07:32 +0000 (15:07 +0000)
.sconsign build state stays consistent.

git-svn-id: http://scons.tigris.org/svn/scons/trunk@3929 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/SConf.py
test/Configure/cache-not-ok.py
test/Configure/option--config.py

index 85b3fde33e2190a8f28ea6a696d5ba02b455c93f..57eb348f52663a1e2f5c6396fd3a27e9bc3b57d7 100644 (file)
@@ -20,6 +20,8 @@ RELEASE X.X.X - XXX
     - Detect implicit dependencies on commands even when the command is
       quoted.
 
+    - Fix interaction of $CHANGED_SOURCES with the --config=force option.
+
   From Robert P. J. Day:
 
     - User's Guide updates.
index 6461dda92652b1e278263cd585e70f6ddc972cfc..fbf193a429a051011a3ee754045df4acb56dbb2b 100644 (file)
@@ -314,6 +314,17 @@ class SConfBuildTask(SCons.Taskmaster.AlwaysTask):
             s = sys.stdout = sys.stderr = Streamer(sys.stdout)
             try:
                 env = self.targets[0].get_build_env()
+                if cache_mode == FORCE:
+                    # Set up the Decider() to force rebuilds by saying
+                    # that every source has changed.  Note that we still
+                    # call the environment's underlying source decider so
+                    # that the correct .sconsign info will get calculated
+                    # and keep the build state consistent.
+                    def force_build(dependency, target, prev_ni,
+                                    env_decider=env.decide_source):
+                        env_decider(dependency, target, prev_ni)
+                        return True
+                    env.Decider(force_build)
                 env['PSTDOUT'] = env['PSTDERR'] = s
                 try:
                     sconf.cached = 0
index 339c46420db71a8f969e1cf06c54275c4f2cf9a2..48524c2c69a6505437013e9b7372c1df4f2094a9 100644 (file)
@@ -79,7 +79,7 @@ test.checkLogAndStdout(["Checking for C header file no_std_c_header.h... ",
 
 # Same should be true for the default behavior of Decider('content').
 
-test.run(arguments='--config=force target_signatures_content=1')
+test.run(arguments='target_signatures_content=1 --config=force')
 test.checkLogAndStdout(["Checking for C header file no_std_c_header.h... ",
                        "Checking for C library no_c_library_SAFFDG... "],
                       ["no"]*2,
index 807ddb5551777011bcd397adae948b79a38fbef9..3515c96d4cd1789cf37dbc9df5d21655a2bf82f0 100644 (file)
@@ -50,12 +50,12 @@ env = Environment(CPPPATH='#/include')
 import os
 env.AppendENVPath('PATH', os.environ['PATH'])
 conf = Configure(env)
-r1 = conf.CheckCHeader('non_system_header1.h')
-r2 = conf.CheckCHeader('non_system_header2.h')
+conf.CheckCHeader('non_system_header0.h')
+conf.CheckCHeader('non_system_header1.h')
 env = conf.Finish()
 """)
 
-test.write(['include', 'non_system_header1.h'], """
+test.write(['include', 'non_system_header0.h'], """
 /* A header */
 """)
 
@@ -70,53 +70,53 @@ scons: *** "%(conftest_0_c)s" is not yet built and cache is forced.
 test.run(arguments='--config=cache', status=2, stderr=expect)
 
 test.run(arguments='--config=auto')
-test.checkLogAndStdout( ["Checking for C header file non_system_header1.h... ",
-                    "Checking for C header file non_system_header2.h... "],
+test.checkLogAndStdout( ["Checking for C header file non_system_header0.h... ",
+                    "Checking for C header file non_system_header1.h... "],
                     ["yes", "no"],
                     [[((".c", NCR), (_obj, NCR))],
                      [((".c", NCR), (_obj, NCF))]],
                     "config.log", ".sconf_temp", "SConstruct")
 
 test.run(arguments='--config=auto')
-test.checkLogAndStdout( ["Checking for C header file non_system_header1.h... ",
-                    "Checking for C header file non_system_header2.h... "],
+test.checkLogAndStdout( ["Checking for C header file non_system_header0.h... ",
+                    "Checking for C header file non_system_header1.h... "],
                     ["yes", "no"],
                     [[((".c", CR), (_obj, CR))],
                      [((".c", CR), (_obj, CF))]],
                     "config.log", ".sconf_temp", "SConstruct")
 
 test.run(arguments='--config=force')
-test.checkLogAndStdout( ["Checking for C header file non_system_header1.h... ",
-                    "Checking for C header file non_system_header2.h... "],
+test.checkLogAndStdout( ["Checking for C header file non_system_header0.h... ",
+                    "Checking for C header file non_system_header1.h... "],
                     ["yes", "no"],
                     [[((".c", NCR), (_obj, NCR))],
                      [((".c", NCR), (_obj, NCF))]],
                     "config.log", ".sconf_temp", "SConstruct")
 
 test.run(arguments='--config=cache')
-test.checkLogAndStdout( ["Checking for C header file non_system_header1.h... ",
-                    "Checking for C header file non_system_header2.h... "],
+test.checkLogAndStdout( ["Checking for C header file non_system_header0.h... ",
+                    "Checking for C header file non_system_header1.h... "],
                     ["yes", "no"],
                     [[((".c", CR), (_obj, CR))],
                      [((".c", CR), (_obj, CF))]],
                     "config.log", ".sconf_temp", "SConstruct")
 
-test.write(['include', 'non_system_header2.h'], """
+test.write(['include', 'non_system_header1.h'], """
 /* Another header */
 """)
-test.unlink(['include', 'non_system_header1.h'])
+test.unlink(['include', 'non_system_header0.h'])
 
 test.run(arguments='--config=cache')
-test.checkLogAndStdout( ["Checking for C header file non_system_header1.h... ",
-                    "Checking for C header file non_system_header2.h... "],
+test.checkLogAndStdout( ["Checking for C header file non_system_header0.h... ",
+                    "Checking for C header file non_system_header1.h... "],
                     ["yes", "no"],
                     [[((".c", CR), (_obj, CR))],
                      [((".c", CR), (_obj, CF))]],
                     "config.log", ".sconf_temp", "SConstruct")
 
 test.run(arguments='--config=auto')
-test.checkLogAndStdout( ["Checking for C header file non_system_header1.h... ",
-                    "Checking for C header file non_system_header2.h... "],
+test.checkLogAndStdout( ["Checking for C header file non_system_header0.h... ",
+                    "Checking for C header file non_system_header1.h... "],
                     ["no", "yes"],
                     [[((".c", CR), (_obj, NCF))],
                      [((".c", CR), (_obj, NCR))]],