summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Fortran/FORTRANSUFFIXES.py56
-rw-r--r--test/IDL/IDLSUFFIXES.py5
-rw-r--r--test/QT/manual.py6
-rw-r--r--test/SWIG/recursive-includes-cpp.py123
-rw-r--r--test/Scanner/CrossLanguageNoExtension.py110
-rw-r--r--test/Scanner/generated.py1
-rw-r--r--test/explain/basic.py25
-rw-r--r--test/explain/save-info.py7
8 files changed, 279 insertions, 54 deletions
diff --git a/test/Fortran/FORTRANSUFFIXES.py b/test/Fortran/FORTRANSUFFIXES.py
index 583b71b..9673e6f 100644
--- a/test/Fortran/FORTRANSUFFIXES.py
+++ b/test/Fortran/FORTRANSUFFIXES.py
@@ -56,51 +56,51 @@ env = Environment(FORTRANPATH = ['.'],
env.Append(FORTRANSUFFIXES = ['.x'])
env.Object(target = 'test1', source = 'test1.f')
env.InstallAs('test1_f', 'test1.f')
-env.InstallAs('test1_h', 'test1.h')
env.InstallAs('test1_x', 'test1.x')
+env.InstallAs('test2_f', 'test2.f')
""" % locals())
test.write('test1.f', """\
test1.f 1
- INCLUDE 'test1.h'
+ INCLUDE 'test2.f'
INCLUDE 'test1.x'
""")
-test.write('test1.h', """\
- test1.h 1
- INCLUDE 'foo.h'
+test.write('test2.f', """\
+ test2.f 1
+ INCLUDE 'foo.f'
""")
test.write('test1.x', """\
test1.x 1
- INCLUDE 'foo.h'
+ INCLUDE 'foo.f'
""")
-test.write('foo.h', """\
- foo.h 1
+test.write('foo.f', """\
+ foo.f 1
""")
expect = test.wrap_stdout("""\
%(_python_)s myfc.py test1.o test1.f
Install file: "test1.f" as "test1_f"
-Install file: "test1.h" as "test1_h"
Install file: "test1.x" as "test1_x"
+Install file: "test2.f" as "test2_f"
""" % locals())
test.run(arguments='.', stdout=expect)
test.must_match('test1.o', """\
test1.f 1
- test1.h 1
- foo.h 1
+ test2.f 1
+ foo.f 1
test1.x 1
- foo.h 1
+ foo.f 1
""")
test.up_to_date(arguments='.')
-test.write('foo.h', """\
- foo.h 2
+test.write('foo.f', """\
+ foo.f 2
""")
expect = test.wrap_stdout("""\
@@ -111,17 +111,17 @@ test.run(arguments='.', stdout=expect)
test.must_match('test1.o', """\
test1.f 1
- test1.h 1
- foo.h 2
+ test2.f 1
+ foo.f 2
test1.x 1
- foo.h 2
+ foo.f 2
""")
test.up_to_date(arguments='.')
test.write('test1.x', """\
test1.x 2
- INCLUDE 'foo.h'
+ INCLUDE 'foo.f'
""")
expect = test.wrap_stdout("""\
@@ -133,32 +133,32 @@ test.run(arguments='.', stdout=expect)
test.must_match('test1.o', """\
test1.f 1
- test1.h 1
- foo.h 2
+ test2.f 1
+ foo.f 2
test1.x 2
- foo.h 2
+ foo.f 2
""")
test.up_to_date(arguments='.')
-test.write('test1.h', """\
- test1.h 2
- INCLUDE 'foo.h'
+test.write('test2.f', """\
+ test2.f 2
+ INCLUDE 'foo.f'
""")
expect = test.wrap_stdout("""\
%(_python_)s myfc.py test1.o test1.f
-Install file: "test1.h" as "test1_h"
+Install file: "test2.f" as "test2_f"
""" % locals())
test.run(arguments='.', stdout=expect)
test.must_match('test1.o', """\
test1.f 1
- test1.h 2
- foo.h 2
+ test2.f 2
+ foo.f 2
test1.x 2
- foo.h 2
+ foo.f 2
""")
test.up_to_date(arguments='.')
diff --git a/test/IDL/IDLSUFFIXES.py b/test/IDL/IDLSUFFIXES.py
index f71ceba..0a9a50c 100644
--- a/test/IDL/IDLSUFFIXES.py
+++ b/test/IDL/IDLSUFFIXES.py
@@ -60,11 +60,6 @@ test.up_to_date(arguments='.')
test.write('foo.h', "foo.h 2\n")
-test.run(arguments='.', stdout=test.wrap_stdout("""\
-Install file: "foo.idl" as "foo_idl"
-Install file: "foo.x" as "foo_x"
-"""))
-
test.up_to_date(arguments='.')
test.pass_test()
diff --git a/test/QT/manual.py b/test/QT/manual.py
index ff38f32..d911fb3 100644
--- a/test/QT/manual.py
+++ b/test/QT/manual.py
@@ -46,13 +46,15 @@ sources = ['aaa.cpp', 'bbb.cpp', 'ddd.cpp', 'eee.cpp', 'main.cpp']
# normal invocation
sources.append(env.Moc('include/aaa.h'))
-env.Moc('bbb.cpp')
+moc = env.Moc('bbb.cpp')
+env.Ignore( moc, moc )
sources.extend(env.Uic('ui/ccc.ui')[1:])
# manual target specification
sources.append(env.Moc('moc-ddd.cpp', 'include/ddd.h',
QT_MOCHPREFIX='')) # Watch out !
-env.Moc('moc_eee.cpp', 'eee.cpp')
+moc = env.Moc('moc_eee.cpp', 'eee.cpp')
+env.Ignore( moc, moc )
sources.extend(env.Uic(['include/uic_fff.hpp', 'fff.cpp', 'fff.moc.cpp'],
'ui/fff.ui')[1:])
diff --git a/test/SWIG/recursive-includes-cpp.py b/test/SWIG/recursive-includes-cpp.py
new file mode 100644
index 0000000..364bd73
--- /dev/null
+++ b/test/SWIG/recursive-includes-cpp.py
@@ -0,0 +1,123 @@
+#!/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__"
+
+"""
+Verify that SWIG include directives produce the correct dependencies
+in cases of recursive inclusion.
+"""
+
+import os
+import TestSCons
+from SCons.Defaults import DefaultEnvironment
+
+DefaultEnvironment( tools = [ 'swig' ] )
+
+test = TestSCons.TestSCons()
+
+# Check for prerequisites of this test.
+for pre_req in ['swig', 'python']:
+ if not test.where_is(pre_req):
+ test.skip_test('Can not find installed "' + pre_req + '", skipping test.%s' % os.linesep)
+
+test.write("recursive.h", """\
+/* An empty header file. */
+""")
+
+test.write("main.h", """\
+#include "recursive.h"
+""")
+
+test.write("main.c", """\
+#include "main.h"
+""")
+
+test.write("mod.i", """\
+%module mod
+
+%include "main.h"
+
+#include "main.h"
+""")
+
+test.write('SConstruct', """\
+import distutils.sysconfig
+
+DefaultEnvironment( tools = [ 'swig' ] )
+
+env = Environment(
+ SWIGFLAGS = [
+ '-python'
+ ],
+ CPPPATH = [
+ distutils.sysconfig.get_python_inc()
+ ],
+ SHLIBPREFIX = ""
+)
+
+env.SharedLibrary(
+ 'mod.so',
+ [
+ "mod.i",
+ "main.c",
+ ]
+)
+""")
+
+expectMain = """\
++-main.os
+ +-main.c
+ +-main.h
+ +-recursive.h"""
+
+expectMod = """\
++-mod_wrap.os
+ +-mod_wrap.c
+ | +-mod.i
+ | +-main.h
+ | +-recursive.h"""
+
+# Validate that the recursive dependencies are found with SWIG scanning first.
+test.run( arguments = '--tree=all mod_wrap.os main.os' )
+
+test.must_contain_all( test.stdout(), expectMain )
+test.must_contain_all( test.stdout(), expectMod )
+
+# Validate that the recursive dependencies are found consistently.
+test.run( arguments = '--tree=all main.os mod_wrap.os' )
+
+test.must_contain_all( test.stdout(), expectMain )
+test.must_contain_all( test.stdout(), expectMod )
+
+test.run()
+test.up_to_date()
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Scanner/CrossLanguageNoExtension.py b/test/Scanner/CrossLanguageNoExtension.py
new file mode 100644
index 0000000..5bf205f
--- /dev/null
+++ b/test/Scanner/CrossLanguageNoExtension.py
@@ -0,0 +1,110 @@
+#!/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__"
+
+import TestSCons
+
+_python_ = TestSCons._python_
+
+test = TestSCons.TestSCons()
+
+# Test behavior of Scanners when evaluating implicit dependencies
+# for nodes that do not have mappings from their scanner_key
+# to a scanner instance
+
+test.write('SConstruct', """
+import re
+
+include_re = re.compile(r'^include\s+(\S+)$', re.M)
+
+def scan(node, env, scanpaths, arg):
+ contents = node.get_text_contents()
+ includes = include_re.findall(contents)
+ return includes
+
+def kfile_scan(node, env, scanpaths, arg):
+ print 'kscan: ' + str(node)
+ return scan(node, env, scanpaths, arg)
+
+def k2file_scan(node, env, scanpaths, arg):
+ print 'k2scan: ' + str(node)
+ return scan(node, env, scanpaths, arg)
+
+kscan = Scanner(name = 'kfile',
+ function = kfile_scan,
+ argument = None,
+ skeys = ['.k'],
+ recursive = True)
+
+k2scan = Scanner(name = 'k2',
+ function = k2file_scan,
+ argument = None,
+ skeys = ['.k2'])
+
+k2scan2 = Scanner(name = 'k2',
+ function = k2file_scan,
+ argument = None,
+ skeys = [''])
+
+env1 = Environment()
+env1.Append(SCANNERS = [ kscan, k2scan ] )
+env1.Command( 'k', 'foo.k', Copy( '$TARGET', '$SOURCE' ) )
+
+env2 = env1.Clone()
+env2.Append(SCANNERS = [ k2scan2 ] )
+env2.Command( 'k2', 'foo.k', Copy( '$TARGET', '$SOURCE' ) )
+""")
+
+test.write('foo.k',
+"""foo.k 1 line 1
+include xxx.k
+include yyy
+foo.k 1 line 4
+""")
+
+test.write('xxx.k', "xxx.k 1\n")
+test.write('yyy', "yyy 1\n")
+test.write('yyy.k2', "yyy.k2 1\n")
+
+expected_stdout = test.wrap_stdout("""\
+kscan: foo.k
+kscan: xxx.k
+kscan: yyy
+Copy("k", "foo.k")
+kscan: foo.k
+kscan: xxx.k
+k2scan: yyy
+Copy("k2", "foo.k")
+""")
+
+test.run(arguments='k k2', stdout=expected_stdout)
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Scanner/generated.py b/test/Scanner/generated.py
index 845111c..b41c7c8 100644
--- a/test/Scanner/generated.py
+++ b/test/Scanner/generated.py
@@ -338,6 +338,7 @@ class CScannerCounter(object):
import SCons.Tool
MyCScanner = CScannerCounter(SCons.Script.CScanner)
SCons.Tool.SourceFileScanner.add_scanner('.c', MyCScanner)
+SCons.Tool.SourceFileScanner.add_scanner('.h', MyCScanner)
env = Environment(CPPPATH = ".")
l = env.StaticLibrary("g", Split("libg_1.c libg_2.c libg_3.c"))
diff --git a/test/explain/basic.py b/test/explain/basic.py
index 5e31cfd..1072ac4 100644
--- a/test/explain/basic.py
+++ b/test/explain/basic.py
@@ -169,10 +169,18 @@ test.write(['src', 'file6.in'], "file6.in 1\n")
test.write(['src', 'subdir', 'file7.in'], "subdir/file7.in 1\n")
-args = '--debug=explain .'
+args = '--debug=explain ..'
expect = test.wrap_stdout("""\
+scons: building `%(inc_aaa)s' because it doesn't exist
+Install file: "aaa" as "%(inc_aaa)s"
+scons: building `%(inc_bbb_k)s' because it doesn't exist
+Install file: "bbb.k" as "%(inc_bbb_k)s"
+scons: building `%(inc_ddd)s' because it doesn't exist
+Install file: "ddd" as "%(inc_ddd)s"
+scons: building `%(inc_eee)s' because it doesn't exist
+Install file: "eee.in" as "%(inc_eee)s"
scons: building `file1' because it doesn't exist
%(_python_)s %(cat_py)s file1 file1.in
scons: building `file2' because it doesn't exist
@@ -181,14 +189,6 @@ scons: building `file3' because it doesn't exist
%(_python_)s %(cat_py)s file3 xxx yyy zzz
scons: building `file4' because it doesn't exist
%(_python_)s %(cat_py)s file4 - file4.in
-scons: building `%(inc_aaa)s' because it doesn't exist
-Install file: "aaa" as "%(inc_aaa)s"
-scons: building `%(inc_ddd)s' because it doesn't exist
-Install file: "ddd" as "%(inc_ddd)s"
-scons: building `%(inc_eee)s' because it doesn't exist
-Install file: "eee.in" as "%(inc_eee)s"
-scons: building `%(inc_bbb_k)s' because it doesn't exist
-Install file: "bbb.k" as "%(inc_bbb_k)s"
scons: building `file5' because it doesn't exist
%(_python_)s %(cat_py)s file5 file5.k
scons: building `file6' because it doesn't exist
@@ -236,6 +236,8 @@ test_value = '"second"'
WriteInitialTest( locals() )
expect = test.wrap_stdout("""\
+scons: rebuilding `%(inc_bbb_k)s' because `bbb.k' changed
+Install file: "bbb.k" as "%(inc_bbb_k)s"
scons: rebuilding `file1' because `file1.in' changed
%(_python_)s %(cat_py)s file1 file1.in
scons: rebuilding `file2' because `yyy' changed
@@ -244,11 +246,6 @@ scons: rebuilding `file3' because:
`yyy' changed
`zzz' changed
%(_python_)s %(cat_py)s file3 xxx yyy zzz
-scons: rebuilding `%(inc_bbb_k)s' because:
- `%(inc_ddd)s' is no longer a dependency
- `%(inc_eee)s' is no longer a dependency
- `bbb.k' changed
-Install file: "bbb.k" as "%(inc_bbb_k)s"
scons: rebuilding `file5' because `%(inc_bbb_k)s' changed
%(_python_)s %(cat_py)s file5 file5.k
scons: rebuilding `file6' because AlwaysBuild() is specified
diff --git a/test/explain/save-info.py b/test/explain/save-info.py
index d2ffc7d..af4c3f5 100644
--- a/test/explain/save-info.py
+++ b/test/explain/save-info.py
@@ -141,7 +141,7 @@ file5.k 1 line 4
test.write(['src', 'subdir', 'file6.in'], "subdir/file6.in 1\n")
#
-test.run(chdir='src', arguments='.')
+test.run(chdir='src', arguments='..')
test.must_match(['src', 'file1'], "file1.in 1\n")
test.must_match(['src', 'file2'], """\
@@ -176,10 +176,7 @@ scons: rebuilding `file3' because:
`yyy' changed
`zzz' changed
%(_python_)s %(cat_py)s file3 xxx yyy zzz
-scons: rebuilding `%(inc_bbb_k)s' because:
- `%(inc_ddd)s' is no longer a dependency
- `%(inc_eee)s' is no longer a dependency
- `bbb.k' changed
+scons: rebuilding `%(inc_bbb_k)s' because `bbb.k' changed
Install file: "bbb.k" as "%(inc_bbb_k)s"
scons: rebuilding `file5' because `%(inc_bbb_k)s' changed
%(_python_)s %(cat_py)s file5 file5.k