summaryrefslogtreecommitdiff
path: root/test/rebuild-generated.py
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2005-10-03 23:08:24 +0000
committerSteven Knight <knight@baldmt.com>2005-10-03 23:08:24 +0000
commit357bb311e8ebe13ae5ec43e6fb2cb91aa16b8a15 (patch)
tree77acfc03c7fb062b25c4b64a49453dd0be8abf5e /test/rebuild-generated.py
parent1529ef17c861d83e5643e53640fd7971cf7456ef (diff)
downloadscons-357bb311e8ebe13ae5ec43e6fb2cb91aa16b8a15.tar.gz
Add a self-contained test for not rebuilding generated header files. (Patrick Mezard) Fix a runtest.py issue.
Diffstat (limited to 'test/rebuild-generated.py')
-rw-r--r--test/rebuild-generated.py119
1 files changed, 119 insertions, 0 deletions
diff --git a/test/rebuild-generated.py b/test/rebuild-generated.py
new file mode 100644
index 00000000..03acf6d3
--- /dev/null
+++ b/test/rebuild-generated.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+"""
+Test case for the bug report:
+"[ 1088979 ] Unnecessary rebuild with generated header file"
+(<http://sourceforge.net/tracker/index.php?func=detail&aid=1088979&group_id=30337&atid=398971>).
+
+Unnecessary rebuild with generated header file
+Scons rebuilds some nodes when invoked twice. The
+trigger seems to be a generated C++ source file that
+includes a header file that also is generated.
+
+A tarball with a minimal test case is attached.
+Transcript for reproducing:
+
+cd /tmp
+tar xzf scons_rebuild_debug.tar.gz
+cd scons_rebuild_debug
+scons target.o
+scons target.o
+
+
+Note that the bug is not triggered when scons is run
+without arguments.
+
+This may be a duplicate to bug 1019683.
+"""
+
+import sys
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+_obj = TestSCons._obj
+
+if sys.platform == 'win32':
+ generator_name = 'generator.bat'
+ test.write(generator_name, '@echo #include "header.hh"')
+ kernel_action = "$SOURCES > $TARGET"
+else:
+ generator_name = 'generator.sh'
+ test.write(generator_name, 'echo \'#include "header.hh"\'')
+ kernel_action = "sh $SOURCES > $TARGET"
+
+test.write('SConstruct', """\
+
+env = Environment()
+
+kernelDefines = env.Command("header.hh",
+ [],
+ Touch("$TARGET"))
+
+kernelImporterSource = env.Command(
+ "generated.cc", ["%s"],
+ "%s")
+
+kernelImporter = env.Program(
+ kernelImporterSource + ["main.cc"])
+
+kernelImports = env.Command(
+ "KernelImport.hh", kernelImporter,
+ "./$SOURCE > $TARGET")
+
+osLinuxModule = env.StaticObject(
+ ["target.cc"])
+""" % (generator_name, kernel_action))
+
+test.write('main.cc', """\
+int
+main(int, char *[])
+{}
+""")
+
+test.write('target.cc', """\
+#if 0
+
+#include "KernelImport.hh"
+
+#endif
+""")
+
+test.run(arguments = 'target' + _obj)
+
+expected_stdout = """\
+scons: Reading SConscript files ...
+scons: done reading SConscript files.
+scons: Building targets ...
+scons: `target%(_obj)s' is up to date.
+scons: done building targets.
+""" % locals()
+
+test.run(arguments = 'target' + _obj, stdout=expected_stdout)
+
+test.pass_test()
+