Fix Fedora Core 3 test portability.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 4 Mar 2005 02:44:26 +0000 (02:44 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 4 Mar 2005 02:44:26 +0000 (02:44 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1240 fdb21ef1-2011-0410-befe-b5e4ea1792b1

etc/TestSCons.py
src/engine/SCons/Tool/javac.py
test/Builder-factories.py
test/Java/JAR.py
test/Java/JARFLAGS.py
test/Java/JAVAC.py
test/Java/JAVACFLAGS.py
test/SWIG/SWIG.py
test/TAR/TARFLAGS.py

index 28f882ba66414efb8c888a4fc9f23f232b1eed3b..f3f39599465ee0338af384de051cc988498da914 100644 (file)
@@ -138,7 +138,21 @@ class TestSCons(TestCommon):
            kw['workdir'] = ''
        apply(TestCommon.__init__, [self], kw)
 
-    def detect(self, var, prog=None):
+    def Environment(self, ENV=None, *args, **kw):
+        """
+        Return a construction Environment that optionally overrides
+        the default external environment with the specified ENV.
+        """
+        import SCons.Environment
+        import SCons.Errors
+        if not ENV is None:
+            kw['ENV'] = ENV
+        try:
+            return apply(SCons.Environment.Environment, args, kw)
+        except (SCons.Errors.UserError, SCons.Errors.InternalError):
+            return None
+
+    def detect(self, var, prog=None, ENV=None):
         """
         Detect a program named 'prog' by first checking the construction
         variable named 'var' and finally searching the path used by
@@ -147,9 +161,7 @@ class TestSCons(TestCommon):
         prog is None, then the value of the environment variable will be
         used as prog.
         """
-
-        import SCons.Environment
-        env = SCons.Environment.Environment()
+        env = self.Environment(ENV)
         try:
             if prog is None:
                 prog = env[var]
@@ -157,26 +169,34 @@ class TestSCons(TestCommon):
         except KeyError:
             return None
 
-    def detect_tool(self, tool, prog=None):
+    def detect_tool(self, tool, prog=None, ENV=None):
         """
         Given a tool (i.e., tool specification that would be passed
-        to the "tools=" parameter of Environment()) and one a program that
+        to the "tools=" parameter of Environment()) and a program that
         corresponds to that tool, return true if and only if we can find
         that tool using Environment.Detect().
 
-        By default, progs is set to the value passed into the tools parameter.
+        By default, prog is set to the value passed into the tools parameter.
         """
 
         if not prog:
             prog = tool
-        import SCons.Environment
-        import SCons.Errors
-        try:
-            env=SCons.Environment.Environment(tools=[tool])
-        except (SCons.Errors.UserError, SCons.Errors.InternalError):
+        env = self.Environment(ENV, tools=[tool])
+        if env is None:
             return None
         return env.Detect([prog])
 
+    def where_is(self, prog, path=None):
+        """
+        Given a program, search for it in the specified external PATH,
+        or in the actual external PATH is none is specified.
+        """
+        import SCons.Environment
+        env = SCons.Environment.Environment()
+        if path is None:
+            path = os.environ['PATH']
+        return env.WhereIs(prog, path)
+
     def wrap_stdout(self, build_str = "", read_str = "", error = 0, cleaning = 0):
         """Wraps standard output string(s) in the normal
         "Reading ... done" and "Building ... done" strings
@@ -222,6 +242,33 @@ class TestSCons(TestCommon):
         kw['match'] = self.match_re_dotall
         apply(self.run, [], kw)
 
+    def java_ENV(self):
+        """
+        Return a default external environment that uses a local Java SDK
+        in preference to whatever's found in the default PATH.
+        """
+        import SCons.Environment
+        env = SCons.Environment.Environment()
+        java_path = [
+            '/usr/local/j2sdk1.4.2/bin',
+            '/usr/local/j2sdk1.4.1/bin',
+            '/usr/local/j2sdk1.3.1/bin',
+            '/usr/local/j2sdk1.3.0/bin',
+            '/usr/local/j2sdk1.2.2/bin',
+            '/usr/local/j2sdk1.2/bin',
+            '/usr/local/j2sdk1.1.8/bin',
+            '/usr/local/j2sdk1.1.7/bin',
+            '/usr/local/j2sdk1.1.6/bin',
+            '/usr/local/j2sdk1.1.5/bin',
+            '/usr/local/j2sdk1.1.4/bin',
+            '/usr/local/j2sdk1.1.3/bin',
+            '/usr/local/j2sdk1.1.2/bin',
+            '/usr/local/j2sdk1.1.1/bin',
+            env['ENV']['PATH'],
+        ]
+        env['ENV']['PATH'] = string.join(java_path, os.pathsep)
+        return env['ENV']
+
 # In some environments, $AR will generate a warning message to stderr
 # if the library doesn't previously exist and is being created.  One
 # way to fix this is to tell AR to be quiet (sometimes the 'c' flag),
index e6a0fc37eb1db58d633aa96791872d110137fcbb..8741c23a7167ae02ee96cb2decb5427f6b88fde4 100644 (file)
@@ -61,6 +61,9 @@ def emit_java_classes(target, source, env):
             java_files = filter(lambda n, js=js:
                                 _my_normcase(n[-len(js):]) == js,
                                 names)
+            # The on-disk entries come back in arbitrary order.  Sort them
+            # so our target and source lists are determinate.
+            java_files.sort()
             mydir = dirnode.Dir(dirname)
             java_paths = map(lambda f, d=mydir: d.File(f), java_files)
             arg.extend(java_paths)
index 8bdcd3a140559ea5d9161bd3aa3c0e4096cc0f29..41f83a2c9a89ab1b624793d97d0113acc1db4e17 100644 (file)
@@ -48,7 +48,9 @@ MakeDirectory = Builder(action=mkdir, target_factory=Dir)
 def collect(env, source, target):
     out = open(str(target[0]), 'wb')
     dir = str(source[0])
-    for f in os.listdir(dir):
+    files = os.listdir(dir)
+    files.sort()
+    for f in files:
         f = os.path.join(dir, f)
         out.write(open(f, 'r').read())
     out.close()
index ea5121347bc692e4df79be621b0a127e34adb806..42f2c5aff6b1b085f9960d4e48a46118579ed188 100644 (file)
@@ -119,29 +119,23 @@ test.run(arguments='classes.jar')
 test.must_match('classes.jar',
                 'cvfm classes.jar foo.mf -C testdir bar.class\n')
 
-if test.detect_tool('javac'):
-    where_javac = test.detect('JAVAC', 'javac')
+ENV = test.java_ENV()
+
+if test.detect_tool('javac', ENV=ENV):
+    where_javac = test.detect('JAVAC', 'javac', ENV=ENV)
 else:
-    import SCons.Environment
-    env = SCons.Environment.Environment()
-    where_javac = env.WhereIs('javac', os.environ['PATH'])
-    if not where_javac:
-        where_javac = env.WhereIs('javac', '/usr/local/j2sdk1.3.1/bin')
-        if not where_javac:
-            print "Could not find Java javac, skipping test(s)."
-            test.pass_test(1)
-
-if test.detect_tool('jar'):
-    where_jar = test.detect('JAR', 'jar')
+    where_javac = test.where_is('javac')
+if not where_javac:
+    print "Could not find Java javac, skipping test(s)."
+    test.pass_test(1)
+
+if test.detect_tool('jar', ENV=ENV):
+    where_jar = test.detect('JAR', 'jar', ENV=ENV)
 else:
-    import SCons.Environment
-    env = SCons.Environment.Environment()
-    where_jar = env.WhereIs('jar', os.environ['PATH'])
-    if not where_jar:
-        where_jar = env.WhereIs('jar', '/usr/local/j2sdk1.3.1/bin')
-        if not where_jar:
-            print "Could not find Java jar, skipping test(s)."
-            test.pass_test(1)
+    where_jar = test.where_is('jar')
+if not where_jar:
+    print "Could not find Java jar, skipping test(s)."
+    test.pass_test(1)
 
 
 test.write("wrapper.py", """\
index 7e3669dacfc56f9c332218601f800502d23d70e5..9a846ecd152005f357847d7fffb9c0634ce3111b 100644 (file)
@@ -32,29 +32,23 @@ test = TestSCons.TestSCons()
 
 test.subdir('src')
 
-if test.detect_tool('javac'):
-    where_javac = test.detect('JAVAC', 'javac')
+ENV = test.java_ENV()
+
+if test.detect_tool('javac', ENV=ENV):
+    where_javac = test.detect('JAVAC', 'javac', ENV=ENV)
 else:
-    import SCons.Environment
-    env = SCons.Environment.Environment()
-    where_javac = env.WhereIs('javac', os.environ['PATH'])
-    if not where_javac:
-        where_javac = env.WhereIs('javac', '/usr/local/j2sdk1.3.1/bin')
-        if not where_javac:
-            print "Could not find Java javac, skipping test(s)."
-            test.pass_test(1)
-
-if test.detect_tool('jar'):
-    where_jar = test.detect('JAR', 'jar')
+    where_javac = test.where_is('javac')
+if not where_javac:
+    print "Could not find Java javac, skipping test(s)."
+    test.pass_test(1)
+
+if test.detect_tool('jar', ENV=ENV):
+    where_jar = test.detect('JAR', 'jar', ENV=ENV)
 else:
-    import SCons.Environment
-    env = SCons.Environment.Environment()
-    where_jar = env.WhereIs('jar', os.environ['PATH'])
-    if not where_jar:
-        where_jar = env.WhereIs('jar', '/usr/local/j2sdk1.3.1/bin')
-        if not where_jar:
-            print "Could not find Java jar, skipping test(s)."
-            test.pass_test(1)
+    where_javac = test.where_is('jar')
+if not where_jar:
+    print "Could not find Java jar, skipping test(s)."
+    test.pass_test(1)
 
 test.write('SConstruct', """
 env = Environment(tools = ['javac', 'jar'],
index 779045fd8f7803d692395b7cbf60cab47107b298..a89ed528473416f1496dd434f3db00113deba59b 100644 (file)
@@ -91,18 +91,17 @@ line 3
     test.must_match('test2.class', "test2.JAVA\nline 3\n")
 
 
-if test.detect_tool('javac'):
-    where_javac = test.detect('JAVAC', 'javac')
+
+ENV = test.java_ENV()
+
+if test.detect_tool('javac', ENV=ENV):
+    where_javac = test.detect('JAVAC', 'javac', ENV=ENV)
 else:
-    import SCons.Environment
-    env = SCons.Environment.Environment()
-    where_javac = env.WhereIs('javac', os.environ['PATH'])
-    if not where_javac:
-        where_javac = env.WhereIs('javac', '/usr/local/j2sdk1.3.1/bin')
-        if not where_javac:
-            print "Could not find Java, skipping test(s)."
-            test.pass_test(1)
-        
+    where_javac = test.where_is('javac')
+if not where_javac:
+    print "Could not find Java javac, skipping test(s)."
+    test.pass_test(1)
+
 
 
 test.write("wrapper.py", """\
index ef084cd5054fc944dcdad42274711b147ccbae34..d0ab8479be5897d2823a8577a7d1b0f2c006c6ef 100644 (file)
@@ -30,17 +30,15 @@ import TestSCons
 
 test = TestSCons.TestSCons()
 
-if test.detect_tool('javac'):
-    where_javac = test.detect('JAVAC', 'javac')
+ENV = test.java_ENV()
+
+if test.detect_tool('javac', ENV=ENV):
+    where_javac = test.detect('JAVAC', 'javac', ENV=ENV)
 else:
-    import SCons.Environment
-    env = SCons.Environment.Environment()
-    where_javac = env.WhereIs('javac', os.environ['PATH'])
-    if not where_javac:
-        where_javac = env.WhereIs('javac', '/usr/local/j2sdk1.3.1/bin')
-        if not where_javac:
-            print "Could not find Java javac, skipping test(s)."
-            test.pass_test(1)
+    where_javac = test.where_is('javac')
+if not where_javac:
+    print "Could not find Java javac, skipping test(s)."
+    test.pass_test(1)
 
 test.subdir('src')
 
index af76d6c4e45ca682e551090b055ee4dab23e7658..21a6a18670d608da48d263cc1777d19ba5859fc3 100644 (file)
@@ -121,15 +121,15 @@ if swig:
     version = sys.version[:3] # see also sys.prefix documentation
 
     # handle testing on other platforms:
+    ldmodule_prefix = '_'
+
     frameworks = ''
-    ldmodule_prefix = ''
     platform_sys_prefix = sys.prefix
     if sys.platform == 'darwin':
         # OS X has a built-in Python but no static libpython
         # so you should link to it using apple's 'framework' scheme.
         # (see top of file for further explanation)
         frameworks = '-framework Python'
-        ldmodule_prefix = '_'
         platform_sys_prefix = '/System/Library/Frameworks/Python.framework/Versions/%s/' % version
     
     test.write("wrapper.py",
@@ -191,7 +191,7 @@ extern char *bar_string();
 
     test.run(arguments = ldmodule_prefix+'foo' + _dll)
 
-    test.fail_test(os.path.exists(test.workpath('wrapper.out')))
+    test.must_not_exist(test.workpath('wrapper.out'))
 
     test.run(program = python, stdin = """\
 import foo
@@ -204,7 +204,7 @@ This is foo.c!
 
     test.run(arguments = ldmodule_prefix+'bar' + _dll)
 
-    test.fail_test(test.read('wrapper.out') != "wrapper.py\n")
+    test.must_match('wrapper.out', "wrapper.py\n")
 
     test.run(program = python, stdin = """\
 import foo
index 58642412418dfe44b2952953d9bdb238aa5b08e9..fcf7394ff0a25a0c750f0aeca637da2872381698 100644 (file)
@@ -49,7 +49,9 @@ for opt, arg in cmd_opts:
     else: opt_string = opt_string + ' ' + opt
 def process(outfile, name):
     if os.path.isdir(name):
-        for entry in os.listdir(name):
+        entries = os.listdir(name)
+        entries.sort()
+        for entry in entries:
            process(outfile, os.path.join(name, entry))
     else:
         outfile.write(open(name, 'rb').read())