Fix tests that use the Python interpreter to execute internal scripts
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 26 Jan 2009 17:17:19 +0000 (17:17 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 26 Jan 2009 17:17:19 +0000 (17:17 +0000)
and also set SConsignFile(None) so the implicit command dependencies
don't cause .sconsign files to be written into the system directory
where the Python executable lives.

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

test/sconsign/script/SConsignFile.py
test/sconsign/script/Signatures.py
test/sconsign/script/no-SConsignFile.py
test/subdivide.py

index 9341062fc3740470c60000fc206f6ae21f16e879..71c91cb19c2a8de9e5679e6a139db937b96e31b2 100644 (file)
@@ -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')
index 823ef1df50ca5e2bbfc94e4141facae6dbfe4f7b..9fdf54e801e4b54fcaebaa3e94d30bb1527c3ff4 100644 (file)
@@ -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())
 
index 16389cb4fc9be7d075fb483801db6ae6131ac626..dacc01140e94aeba19ec7c7b8047cb9168a018eb 100644 (file)
@@ -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())
 
index 64f914a0f1c655f847c1f6d16944e1e752cbbee8..16f2d0ecd623d6df7b173eeb2e4c8e8011366713 100644 (file)
@@ -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()