diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/sconsign/script/SConsignFile.py | 1 | ||||
-rw-r--r-- | test/sconsign/script/Signatures.py | 35 | ||||
-rw-r--r-- | test/sconsign/script/no-SConsignFile.py | 56 | ||||
-rw-r--r-- | test/subdivide.py | 52 |
4 files changed, 91 insertions, 53 deletions
diff --git a/test/sconsign/script/SConsignFile.py b/test/sconsign/script/SConsignFile.py index 9341062..71c91cb 100644 --- a/test/sconsign/script/SConsignFile.py +++ b/test/sconsign/script/SConsignFile.py @@ -110,6 +110,7 @@ env1 = Environment(PROGSUFFIX = '.exe', OBJSUFFIX = '.obj', CCCOM = r'%(_python_)s fake_cc.py sub2 $TARGET $SOURCE', LINKCOM = r'%(_python_)s fake_link.py $TARGET $SOURCE') +env1.PrependENVPath('PATHEXT', '.PY') env1.Program('sub1/hello.c') env2 = env1.Clone(CPPPATH = ['sub2']) env2.Program('sub2/hello.c') diff --git a/test/sconsign/script/Signatures.py b/test/sconsign/script/Signatures.py index 823ef1d..9fdf54e 100644 --- a/test/sconsign/script/Signatures.py +++ b/test/sconsign/script/Signatures.py @@ -36,9 +36,6 @@ SourceSignatures('timestamp') with TargetSignatures('content'). import TestSCons import TestSConsign -python = TestSCons.python -_python_ = TestSCons._python_ - test = TestSConsign.TestSConsign(match = TestSConsign.match_re) # Note: We don't use os.path.join() representations of the file names @@ -50,7 +47,20 @@ sub1_hello_obj = 'sub1/hello.obj' test.subdir('sub1', 'sub2') -test.write('fake_cc.py', r""" +# Because this test sets SConsignFile(None), we execute our fake +# scripts directly, not by feeding them to the Python executable. +# That is, we chmod 0755 and us a "#!/usr/bin/env python" first +# line for POSIX systems, and add .PY to the %PATHEXT% variable on +# Windows. If we didn't do this, then running this script with +# suitable prileveges would create a .sconsign file in the directory +# where the Python executable lives. This can happen out of the +# box on Mac OS X, with the result that the .sconsign statefulness +# can mess up other tests. + +fake_cc_py = test.workpath('fake_cc.py') +fake_link_py = test.workpath('fake_link.py') + +test.write(fake_cc_py, r"""#!/usr/bin/env python import os import re import string @@ -83,7 +93,7 @@ process(input, output) sys.exit(0) """) -test.write('fake_link.py', r""" +test.write(fake_link_py, r"""#!/usr/bin/env python import sys output = open(sys.argv[1], 'wb') @@ -96,13 +106,16 @@ output.write(input.read()) sys.exit(0) """) +test.chmod(fake_cc_py, 0755) +test.chmod(fake_link_py, 0755) + test.write('SConstruct', """ SConsignFile(None) Decider('timestamp-newer') env1 = Environment(PROGSUFFIX = '.exe', OBJSUFFIX = '.obj', - CCCOM = r'%(_python_)s fake_cc.py sub2 $TARGET $SOURCE', - LINKCOM = r'%(_python_)s fake_link.py $TARGET $SOURCE') + CCCOM = r'%(fake_cc_py)s sub2 $TARGET $SOURCE', + LINKCOM = r'%(fake_link_py)s $TARGET $SOURCE') env1.Program('sub1/hello.c') env2 = env1.Clone(CPPPATH = ['sub2']) env2.Program('sub2/hello.c') @@ -136,22 +149,22 @@ date_re = r'\S+ \S+ [ \d]\d \d\d:\d\d:\d\d \d\d\d\d' test.run_sconsign(arguments = "-e hello.exe -e hello.obj sub1/.sconsign", stdout = r"""hello.exe: %(sig_re)s \d+ \d+ %(sub1_hello_obj)s: %(sig_re)s \d+ \d+ - %(python)s: None \d+ \d+ + fake_link\.py: None \d+ \d+ %(sig_re)s \[.*\] hello.obj: %(sig_re)s \d+ \d+ %(sub1_hello_c)s: None \d+ \d+ - %(python)s: None \d+ \d+ + fake_cc\.py: None \d+ \d+ %(sig_re)s \[.*\] """ % locals()) test.run_sconsign(arguments = "-e hello.exe -e hello.obj -r sub1/.sconsign", stdout = r"""hello.exe: %(sig_re)s '%(date_re)s' \d+ %(sub1_hello_obj)s: %(sig_re)s '%(date_re)s' \d+ - %(python)s: None '%(date_re)s' \d+ + fake_link\.py: None '%(date_re)s' \d+ %(sig_re)s \[.*\] hello.obj: %(sig_re)s '%(date_re)s' \d+ %(sub1_hello_c)s: None '%(date_re)s' \d+ - %(python)s: None '%(date_re)s' \d+ + fake_cc\.py: None '%(date_re)s' \d+ %(sig_re)s \[.*\] """ % locals()) diff --git a/test/sconsign/script/no-SConsignFile.py b/test/sconsign/script/no-SConsignFile.py index 16389cb..dacc011 100644 --- a/test/sconsign/script/no-SConsignFile.py +++ b/test/sconsign/script/no-SConsignFile.py @@ -32,14 +32,24 @@ Verify that the sconsign script works when using an individual import TestSCons import TestSConsign -python = TestSCons.python -_python_ = TestSCons._python_ - test = TestSConsign.TestSConsign(match = TestSConsign.match_re) test.subdir('sub1', 'sub2') -test.write('fake_cc.py', r""" +# Because this test sets SConsignFile(None), we execute our fake +# scripts directly, not by feeding them to the Python executable. +# That is, we chmod 0755 and us a "#!/usr/bin/env python" first +# line for POSIX systems, and add .PY to the %PATHEXT% variable on +# Windows. If we didn't do this, then running this script with +# suitable prileveges would create a .sconsign file in the directory +# where the Python executable lives. This can happen out of the +# box on Mac OS X, with the result that the .sconsign statefulness +# can mess up other tests. + +fake_cc_py = test.workpath('fake_cc.py') +fake_link_py = test.workpath('fake_link.py') + +test.write(fake_cc_py, r"""#!/usr/bin/env python import os import re import string @@ -72,7 +82,7 @@ process(input, output) sys.exit(0) """) -test.write('fake_link.py', r""" +test.write(fake_link_py, r"""#!/usr/bin/env python import sys output = open(sys.argv[1], 'wb') @@ -85,6 +95,9 @@ output.write(input.read()) sys.exit(0) """) +test.chmod(fake_cc_py, 0755) +test.chmod(fake_link_py, 0755) + # Note: We don't use os.path.join() representations of the file names # in the expected output because paths in the .sconsign files are # canonicalized to use / as the separator. @@ -100,8 +113,9 @@ test.write(['SConstruct'], """ SConsignFile(None) env1 = Environment(PROGSUFFIX = '.exe', OBJSUFFIX = '.obj', - CCCOM = r'%(_python_)s fake_cc.py sub2 $TARGET $SOURCE', - LINKCOM = r'%(_python_)s fake_link.py $TARGET $SOURCE') + CCCOM = r'%(fake_cc_py)s sub2 $TARGET $SOURCE', + LINKCOM = r'%(fake_link_py)s $TARGET $SOURCE') +env1.PrependENVPath('PATHEXT', '.PY') env1.Program('sub1/hello.c') env2 = env1.Clone(CPPPATH = ['sub2']) env2.Program('sub2/hello.c') @@ -132,11 +146,11 @@ sig_re = r'[0-9a-fA-F]{32}' expect = r"""hello.c: %(sig_re)s \d+ \d+ hello.exe: %(sig_re)s \d+ \d+ %(sub1_hello_obj)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_link\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] hello.obj: %(sig_re)s \d+ \d+ %(sub1_hello_c)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_cc\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] """ % locals() @@ -148,11 +162,11 @@ test.run_sconsign(arguments = "--raw sub1/.sconsign", stdout = r"""hello.c: {'csig': '%(sig_re)s', 'timestamp': \d+, 'size': \d+L?, '_version_id': 1} hello.exe: {'csig': '%(sig_re)s', 'timestamp': \d+, 'size': \d+L?, '_version_id': 1} %(sub1_hello_obj)s: {'csig': '%(sig_re)s', 'timestamp': \d+, 'size': \d+L?, '_version_id': 1} - %(python)s: {'csig': '%(sig_re)s', 'timestamp': \d+, 'size': \d+L?, '_version_id': 1} + fake_link\.py: {'csig': '%(sig_re)s', 'timestamp': \d+, 'size': \d+L?, '_version_id': 1} %(sig_re)s \[.*\] hello.obj: {'csig': '%(sig_re)s', 'timestamp': \d+, 'size': \d+L?, '_version_id': 1} %(sub1_hello_c)s: {'csig': '%(sig_re)s', 'timestamp': \d+, 'size': \d+L?, '_version_id': 1} - %(python)s: {'csig': '%(sig_re)s', 'timestamp': \d+, 'size': \d+L?, '_version_id': 1} + fake_cc\.py: {'csig': '%(sig_re)s', 'timestamp': \d+, 'size': \d+L?, '_version_id': 1} %(sig_re)s \[.*\] """ % locals()) @@ -170,7 +184,7 @@ hello.exe: csig: %(sig_re)s timestamp: \d+ size: \d+ - %(python)s: + fake_link\.py: csig: %(sig_re)s timestamp: \d+ size: \d+ @@ -184,7 +198,7 @@ hello.obj: csig: %(sig_re)s timestamp: \d+ size: \d+ - %(python)s: + fake_cc\.py: csig: %(sig_re)s timestamp: \d+ size: \d+ @@ -221,22 +235,22 @@ hello.obj: test.run_sconsign(arguments = "-e hello.obj sub1/.sconsign", stdout = r"""hello.obj: %(sig_re)s \d+ \d+ %(sub1_hello_c)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_cc\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] """ % locals()) test.run_sconsign(arguments = "-e hello.obj -e hello.exe -e hello.obj sub1/.sconsign", stdout = r"""hello.obj: %(sig_re)s \d+ \d+ %(sub1_hello_c)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_cc\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] hello.exe: %(sig_re)s \d+ \d+ %(sub1_hello_obj)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_link\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] hello.obj: %(sig_re)s \d+ \d+ %(sub1_hello_c)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_cc\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] """ % locals()) @@ -244,13 +258,13 @@ test.run_sconsign(arguments = "sub2/.sconsign", stdout = r"""hello.c: %(sig_re)s \d+ \d+ hello.exe: %(sig_re)s \d+ \d+ %(sub2_hello_obj)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_link\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] hello.obj: %(sig_re)s \d+ \d+ %(sub2_hello_c)s: %(sig_re)s \d+ \d+ %(sub2_inc1_h)s: %(sig_re)s \d+ \d+ %(sub2_inc2_h)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_cc\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] inc1.h: %(sig_re)s \d+ \d+ inc2.h: %(sig_re)s \d+ \d+ @@ -273,11 +287,11 @@ test.run_sconsign(arguments = "-e hello.obj sub2/.sconsign sub1/.sconsign", %(sub2_hello_c)s: %(sig_re)s \d+ \d+ %(sub2_inc1_h)s: %(sig_re)s \d+ \d+ %(sub2_inc2_h)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_cc\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] hello.obj: %(sig_re)s \d+ \d+ %(sub1_hello_c)s: %(sig_re)s \d+ \d+ - %(python)s: %(sig_re)s \d+ \d+ + fake_cc\.py: %(sig_re)s \d+ \d+ %(sig_re)s \[.*\] """ % locals()) diff --git a/test/subdivide.py b/test/subdivide.py index 64f914a..16f2d0e 100644 --- a/test/subdivide.py +++ b/test/subdivide.py @@ -35,25 +35,29 @@ TargetSignatures('content'), but we now rely on the default behavior being the equivalent of Decider('content'). """ -import os.path +import os import TestSCons -_python_ = TestSCons._python_ - test = TestSCons.TestSCons() -#if os.path.exists('sconsign.py'): -# sconsign = 'sconsign.py' -#elif os.path.exists('sconsign'): -# sconsign = 'sconsign' -#else: -# print "Can find neither 'sconsign.py' nor 'sconsign' scripts." -# test.no_result(1) - test.subdir('src', ['src', 'sub']) -test.write('fake_cc.py', """\ +# Because this test sets SConsignFile(None), we execute our fake +# scripts directly, not by feeding them to the Python executable. +# That is, we chmod 0755 and us a "#!/usr/bin/env python" first +# line for POSIX systems, and add .PY to the %PATHEXT% variable on +# Windows. If we didn't do this, then running this script with +# suitable prileveges would create a .sconsign file in the directory +# where the Python executable lives. This can happen out of the +# box on Mac OS X, with the result that the .sconsign statefulness +# can mess up other tests. + +fake_cc_py = test.workpath('fake_cc.py') +fake_link_py = test.workpath('fake_link.py') + +test.write(fake_cc_py, """\ +#!/usr/bin/env python import sys ofp = open(sys.argv[1], 'wb') ofp.write('fake_cc.py: %s\\n' % sys.argv) @@ -61,7 +65,8 @@ for s in sys.argv[2:]: ofp.write(open(s, 'rb').read()) """) -test.write('fake_link.py', """\ +test.write(fake_link_py, """\ +#!/usr/bin/env python import sys ofp = open(sys.argv[1], 'wb') ofp.write('fake_link.py: %s\\n' % sys.argv) @@ -69,12 +74,16 @@ for s in sys.argv[2:]: ofp.write(open(s, 'rb').read()) """) +test.chmod(fake_cc_py, 0755) +test.chmod(fake_link_py, 0755) + test.write('SConstruct', """\ SConsignFile(None) env = Environment(PROGSUFFIX = '.exe', OBJSUFFIX = '.obj', - CCCOM = r'%(_python_)s fake_cc.py $TARGET $SOURCES', - LINKCOM = r'%(_python_)s fake_link.py $TARGET $SOURCES') + CCCOM = r'%(fake_cc_py)s $TARGET $SOURCES', + LINKCOM = r'%(fake_link_py)s $TARGET $SOURCES') +env.PrependENVPath('PATHEXT', '.PY') env.SConscript('src/SConstruct', exports=['env']) env.Object('foo.c') """ % locals()) @@ -83,8 +92,9 @@ test.write(['src', 'SConstruct'], """\ SConsignFile(None) env = Environment(PROGSUFFIX = '.exe', OBJSUFFIX = '.obj', - CCCOM = r'%(_python_)s fake_cc.py $TARGET $SOURCES', - LINKCOM = r'%(_python_)s fake_link.py $TARGET $SOURCES') + CCCOM = r'%(fake_cc_py)s $TARGET $SOURCES', + LINKCOM = r'%(fake_link_py)s $TARGET $SOURCES') +env.PrependENVPath('PATHEXT', '.PY') p = env.Program('prog', ['main.c', '../foo$OBJSUFFIX', 'sub/bar.c']) env.Default(p) """ % locals()) @@ -110,12 +120,12 @@ src_sub_bar_c = os.path.join('src', 'sub', 'bar.c') src_sub_bar_obj = os.path.join('src', 'sub', 'bar.obj') expect = """\ -fake_link.py: ['fake_link.py', '%(src_prog_exe)s', '%(src_main_obj)s', 'foo.obj', '%(src_sub_bar_obj)s'] -fake_cc.py: ['fake_cc.py', '%(src_main_obj)s', '%(src_main_c)s'] +fake_link.py: ['%(fake_link_py)s', '%(src_prog_exe)s', '%(src_main_obj)s', 'foo.obj', '%(src_sub_bar_obj)s'] +fake_cc.py: ['%(fake_cc_py)s', '%(src_main_obj)s', '%(src_main_c)s'] src/main.c -fake_cc.py: ['fake_cc.py', 'foo.obj', 'foo.c'] +fake_cc.py: ['%(fake_cc_py)s', 'foo.obj', 'foo.c'] foo.c -fake_cc.py: ['fake_cc.py', '%(src_sub_bar_obj)s', '%(src_sub_bar_c)s'] +fake_cc.py: ['%(fake_cc_py)s', '%(src_sub_bar_obj)s', '%(src_sub_bar_c)s'] src/sub/bar.c """ % locals() |