Add --implicit-deps-changed. (Anthony Roach)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sun, 14 Jul 2002 18:48:56 +0000 (18:48 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sun, 14 Jul 2002 18:48:56 +0000 (18:48 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@413 fdb21ef1-2011-0410-befe-b5e4ea1792b1

doc/man/scons.1
src/CHANGES.txt
src/engine/SCons/Node/__init__.py
src/engine/SCons/Script/__init__.py
test/option--implicit-cache.py

index 8761335c44cca2ad8ed5180cac1086085aa60f7c..d32b7ff189beb8bb6c51a1e4eca07d5e4d7c4b8e 100644 (file)
@@ -399,6 +399,12 @@ to miss changes in the implicit dependencies in cases where a new implicit
 dependency is added earlier in the implicit dependency search path
 (e.g. CPPPATH) than a current implicit dependency with the same name.
 
+.TP
+--implicit-deps-changed
+Force SCons to ignore the cached implicit dependencies. This causes the
+implicit dependencies to be rescanned and recached. This implies
+.BR --implicit-cache .
+
 .TP
 --implicit-deps-unchanged
 Force SCons to ignore changes in the implicit dependencies.
index 6b0c79c901265e1fe17eb22aced71b5ecebfe226..cb26c915635b425a80c0028de70e6c133fb98623 100644 (file)
@@ -135,7 +135,7 @@ RELEASE 0.08 -
     suffix computation, code cleanup in MultiStepBuilder.__call__(),
     and replicating some logic in scons_subst().
 
-  - Add a --implicit-deps-unchanged option.
+  - Add --implicit-deps-changed and --implicit-deps-unchanged options.
 
   - Add a GetLaunchDir() function.
 
index bc0539e317bf10fe4971bb20c1479d1f61d65e46..90cd122e8cc3d9e01cfc2b079f088a93d801c636 100644 (file)
@@ -60,6 +60,10 @@ implicit_cache = 0
 # controls whether implicit dep changes are ignored:
 implicit_deps_unchanged = 0
 
+# controls whether the cached implicit deps are ignored:
+implicit_deps_changed = 0
+
+
 class Node:
     """The base Node class, for entities that we know how to
     build, or use to build other Nodes.
@@ -200,7 +204,7 @@ class Node:
         if not self.builder:
             return
 
-        if implicit_cache:
+        if implicit_cache and not implicit_deps_changed:
             implicit = self.get_stored_implicit()
             if implicit is not None:
                 implicit = map(self.builder.source_factory, implicit)
index 1d53fed706d2fdaa98108310760681cff827e53d..66b4fd76bbe11ff984827e19aea77fb4f28fa688 100644 (file)
@@ -550,6 +550,15 @@ def options_init():
         long = ['implicit-cache'],
         help = "Cache implicit dependencies")
 
+    def opt_implicit_deps_changed(opt, arg):
+        import SCons.Node
+        SCons.Node.implicit_cache = 1
+        SCons.Node.implicit_deps_changed = 1
+
+    Option(func = opt_implicit_deps_changed,
+        long = ['implicit-deps-changed'],
+        help = "Ignore the cached implicit deps.")
+
     def opt_implicit_deps_unchanged(opt, arg):
         import SCons.Node
         SCons.Node.implicit_cache = 1
index d6ca15cf71f26de9b99b90a5cb7000d6d267bc05..4e5cf1e5a6f067102798036d46175c06ce157ba5 100644 (file)
@@ -297,4 +297,35 @@ assert string.find(test.stdout(), 'is up to date') != -1, test.stdout()
 test.run(arguments = variant_prog)
 assert string.find(test.stdout(), 'is up to date') == -1, test.stdout()
 
+# Test forcing rescanning:
+test.write(['include', 'foo.h'],
+r"""
+#define        FOO_STRING "include/foo.h 3\n"
+#include "bar.h"
+""")
+
+test.run(arguments = "--implicit-cache " + args)
+
+test.write(['include', 'foo.h'],
+r"""
+#define        FOO_STRING "include/foo.h 3\n"
+#include "baz.h"
+#include "bar.h"
+""")
+
+test.run(arguments = "--implicit-deps-unchanged " + variant_prog)
+assert string.find(test.stdout(), 'is up to date') == -1, test.stdout()
+
+test.write(['include', 'baz.h'],
+r"""
+#define BAZ_STRING "include/baz.h 2\n"
+""")
+
+test.run(arguments = "--implicit-deps-unchanged " + variant_prog)
+assert string.find(test.stdout(), 'is up to date') != -1, test.stdout()
+
+test.run(arguments = "--implicit-deps-changed " + variant_prog)
+assert string.find(test.stdout(), 'is up to date') == -1, test.stdout()
+
+
 test.pass_test()