More NT portability fixes.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 24 Nov 2001 23:15:01 +0000 (23:15 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 24 Nov 2001 23:15:01 +0000 (23:15 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@123 fdb21ef1-2011-0410-befe-b5e4ea1792b1

15 files changed:
runtest.py
src/engine/SCons/Builder.py
src/engine/SCons/Defaults.py
src/engine/SCons/Environment.py
src/engine/SCons/Node/FS.py
src/engine/SCons/Node/FSTests.py
src/engine/SCons/Taskmaster.py
test/CC.py
test/CCFLAGS.py
test/Default.py
test/Library.py
test/Object.py
test/Program.py
test/nonwritable-sconsign.py
test/subdir.py

index 108db735a54cee4bb3eaeb577619087dbd661194..dd82b0efe13b7a0aa4344adbed0c2f3cfc31c9e2 100644 (file)
@@ -56,6 +56,11 @@ printcmd = 1
 version = None
 testver = 1
 
+if sys.platform == 'win32':
+    lib_dir = os.path.join(sys.exec_prefix, "lib")
+else:
+    lib_dir = os.path.join(sys.exec_prefix, "lib", "python" + sys.version[0:3])
+
 opts, tests = getopt.getopt(sys.argv[1:], "12ab:dqv:",
                            ['all','build=','debug','quiet','version='])
 
@@ -64,11 +69,7 @@ for o, a in opts:
     elif o == '-2': testver = 2
     elif o == '-a' or o == '--all': all = 1
     elif o == '-b' or o == '--build': build = a
-    elif o == '-d' or o == '--debug': debug = os.path.join(
-                                       sys.exec_prefix,
-                                       "lib",
-                                       "python" + sys.version[0:3],
-                                       "pdb.py")
+    elif o == '-d' or o == '--debug': debug = os.path.join(lib_dir, "pdb.py")
     elif o == '-q' or o == '--quiet': printcmd = 0
     elif o == '-v' or o == '--version': version = a
 
@@ -143,4 +144,12 @@ for path in tests:
     if os.system(cmd):
        fail.append(path)
 
+if fail and len(tests) != 1:
+    if len(fail) == 1:
+        str = "test"
+    else:
+        str = "%d tests" % len(fail)
+    print "\nFailed the following %s:" % str
+    print "\t", string.join(fail, "\n\t")
+
 sys.exit(len(fail))
index fc372fa1caa0a82ca9a1baf03f22a7b8b0c5af1e..e36f332d6c7e578fac96b19c52d9a92f9db1a200 100644 (file)
@@ -85,8 +85,8 @@ elif os.name == 'nt':
                exts = string.split(exts, os.pathsep)
            pairs = []
            for dir in path:
-               for e in [None] + exts:
-                   pairs.append(dir, e)
+               for e in exts:
+                   pairs.append((dir, e))
            for dir, ext in pairs:
                f = os.path.join(dir, cmd)
                if not ext is None:
index 0bc82ebd46abfb24a04317d46fb31974ec6204cd..be750e4296ce05bbeb27709465e6c67744e6ca15 100644 (file)
@@ -102,6 +102,10 @@ if os.name == 'posix':
 
 elif os.name == 'nt':
 
+    MVSdir = r'C:\Program Files\Microsoft Visual Studio'
+    MVSVCdir = r'%s\VC98' % MVSdir
+    MVSCommondir = r'%s\Common' % MVSdir
+
     ConstructionEnvironment = {
         'CC'         : 'cl',
         'CCFLAGS'    : '/nologo',
@@ -111,10 +115,10 @@ elif os.name == 'nt':
         'CXXCOM'     : '$CXX $CXXFLAGS $_INCFLAGS /c $SOURCES /Fo$TARGET',
         'LINK'       : 'link',
         'LINKFLAGS'  : '',
-        'LINKCOM'    : '$LINK $LINKFLAGS /out:$TARGET $_LIBDIRFLAGS $_LIBFLAGS $SOURCES',
+        'LINKCOM'    : '$LINK $LINKFLAGS /OUT:$TARGET $_LIBDIRFLAGS $_LIBFLAGS $SOURCES',
         'AR'         : 'lib',
         'ARFLAGS'    : '/nologo',
-        'ARCOM'      : '$AR $ARFLAGS /out:$TARGET $SOURCES',
+        'ARCOM'      : '$AR $ARFLAGS /OUT:$TARGET $SOURCES',
         'BUILDERS'   : [Object, Program, Library],
         'SCANNERS'   : [CScan],
         'OBJPREFIX'  : '',
@@ -123,14 +127,21 @@ elif os.name == 'nt':
         'PROGSUFFIX' : '.exe',
         'LIBPREFIX'  : '',
         'LIBSUFFIX'  : '.lib',
-        'LIBDIRPREFIX'          : '/L',
+        'LIBDIRPREFIX'          : '/LIBPATH',
         'LIBDIRSUFFIX'          : '',
         'LIBLINKPREFIX'         : '',
         'LIBLINKSUFFIX'         : '$LIBSUFFIX',
         'INCPREFIX'             : '/I',
         'INCSUFFIX'             : '',
         'ENV'        : {
-                        'PATH'    : r'C:\Python20;C:\WINNT\system32;C:\WINNT;C:\Program Files\Microsoft Visual Studio\VC98\Bin\;',
+                        'INCLUDE'  : r'%s\atl\include;%s\mfc\include;%s\include'
+                                     % (MVSVCdir, MVSVCdir, MVSVCdir),
+                        'LIB'      : r'%s\mvc\lib;%s\lib'
+                                     % (MVSVCdir, MVSVCdir),
+                       'MSDEVDIR' : r'%s\MSDev98' % MVSCommondir,
+                        'PATH'     : r'C:\Python20;C:\WINNT\system32;C:\WINNT;%s\Tools\WinNT;%s\MSDev98\Bin;%s\Tools;%s\Bin;'
+                                     % (MVSCommondir, MVSCommondir,
+                                        MVSCommondir, MVSVCdir),
                         'PATHEXT' : '.COM;.EXE;.BAT;.CMD',
                       },
     }
index 812eda71371e16442642e276ffb79670e5c81ca5..f85f72380edf6d312e78082b111c4a982a8bbb2a 100644 (file)
@@ -32,6 +32,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 
 import copy
+import os.path
 import re
 import types
 import SCons.Util
@@ -164,7 +165,7 @@ class Environment:
                 suffix =''
 
             self._dict[strVarAuto] = map(lambda x, suff=suffix, pref=prefix: \
-                                         pref + str(x) + suff,
+                                         pref + os.path.normpath(str(x)) + suff,
                                          src_var)
 
     def __cmp__(self, other):
index 75f7c5c16bed74a105619fb6452fc88175d6c69e..67a5ae7230756e26bb0d800da7c7a508ae55b165 100644 (file)
@@ -97,13 +97,12 @@ class PathDict(UserDict):
     def __delitem__(self, key):
         del(self.data[PathName(key)])
 
-    if not hasattr(UserDict, 'setdefault'):
-        def setdefault(self, key, value):
-            try:
-                return self.data[PathName(key)]
-            except KeyError:
-                self.data[PathName(key)] = value
-                return value
+    def setdefault(self, key, value):
+        try:
+            return self.data[PathName(key)]
+        except KeyError:
+            self.data[PathName(key)] = value
+            return value
 
 class FS:
     def __init__(self, path = None):
@@ -120,7 +119,7 @@ class FS:
         self.Root = PathDict()
         self.Top = self.__doLookup(Dir, path)
         self.Top.path = '.'
-        self.Top.path_ = './'
+        self.Top.path_ = os.path.join('.', '')
         self.cwd = self.Top
 
     def __doLookup(self, fsclass, name, directory=None):
@@ -147,11 +146,16 @@ class FS:
             # None, raise an exception.
 
             drive, tail = os.path.splitdrive(head)
-            if sys.platform is 'win32' and not drive:
-                if not directory:
-                    raise OSError, 'No drive letter supplied for absolute path.'
-                return directory.root()
-            return self.Root.setdefault(drive, Dir(tail))
+            #if sys.platform is 'win32' and not drive:
+            #    if not directory:
+            #        raise OSError, 'No drive letter supplied for absolute path.'
+            #    return directory.root()
+            dir = Dir(tail)
+            dir.path = drive + dir.path
+            dir.path_ = drive + dir.path_
+            dir.abspath = drive + dir.abspath
+            dir.abspath_ = drive + dir.abspath_
+            return self.Root.setdefault(drive, dir)
         if head:
             # Recursively look up our parent directories.
             directory = self.__doLookup(Dir, head, directory)
@@ -181,7 +185,7 @@ class FS:
         usually in preparation for a call to doLookup().
 
         If the path name is prepended with a '#', then it is unconditionally
-        interpreted as replative to the top-level directory of this FS.
+        interpreted as relative to the top-level directory of this FS.
 
         If directory is None, and name is a relative path,
         then the same applies.
@@ -256,7 +260,7 @@ class Entry(SCons.Node.Node):
         if directory:
             self.abspath = os.path.join(directory.abspath, name)
             if str(directory.path) == '.':
-                self.path = os.path.join(name)
+                self.path = name
             else:
                 self.path = os.path.join(directory.path, name)
         else:
@@ -335,9 +339,8 @@ class Dir(Entry):
 
     def children(self):
        #XXX --random:  randomize "dependencies?"
-       kids = map(lambda x, s=self: s.entries[x],
-                  filter(lambda k: k != '.' and k != '..',
-                         self.entries.keys()))
+       keys = filter(lambda k: k != '.' and k != '..', self.entries.keys())
+       kids = map(lambda x, s=self: s.entries[x], keys)
        def c(one, two):
             if one.abspath < two.abspath:
                return -1
index fe35d76681924bd8251e887d9c511bb6ac0a6496..49920990934ac1aab9f0d3bd9c70508ec685b96e 100644 (file)
@@ -92,22 +92,19 @@ class FSTestCase(unittest.TestCase):
             def Dir_test(lpath, path_, abspath_, up_path_, fileSys=fs, s=sep):
                 dir = fileSys.Dir(string.replace(lpath, '/', s))
 
+                if os.sep != '/':
+                    path_ = string.replace(path_, '/', os.sep)
+                    abspath_ = string.replace(abspath_, '/', os.sep)
+                    up_path_ = string.replace(up_path_, '/', os.sep)
+
                 def strip_slash(p):
-                    if p[-1] == '/' and len(p) > 1:
+                    if p[-1] == os.sep and len(p) > 1:
                         p = p[:-1]
                     return p
                 path = strip_slash(path_)
                 abspath = strip_slash(abspath_)
                 up_path = strip_slash(up_path_)
-               name = string.split(abspath, '/')[-1]
-
-               if os.sep != '/':
-                    path = string.replace(path, '/', os.sep)
-                    path_ = string.replace(path_, '/', os.sep)
-                    abspath = string.replace(abspath, '/', os.sep)
-                    abspath_ = string.replace(abspath_, '/', os.sep)
-                    up_path = string.replace(up_path, '/', os.sep)
-                    up_path_ = string.replace(up_path_, '/', os.sep)
+                name = string.split(abspath, os.sep)[-1]
 
                assert dir.name == name, \
                        "dir.name %s != expected name %s" % \
@@ -211,53 +208,57 @@ class FSTestCase(unittest.TestCase):
         f1.build()
         assert built_it
 
+        def match(path, expect):
+            expect = string.replace(expect, '/', os.sep)
+            assert path == expect, "path %s != expected %s" % (path, expect)
+
        e1 = fs.Entry("d1")
        assert e1.__class__.__name__ == 'Dir'
-        assert e1.path == "d1", e1.path
-        assert e1.path_ == "d1/", e1.path_
-       assert e1.dir.path == ".", e1.dir.path
+        match(e1.path, "d1")
+        match(e1.path_, "d1/")
+        match(e1.dir.path, ".")
 
        e2 = fs.Entry("d1/f1")
        assert e2.__class__.__name__ == 'File'
-       assert e2.path == "d1/f1", e2.path
-        assert e2.path_ == "d1/f1", e2.path_
-       assert e2.dir.path == "d1", e2.dir.path
+        match(e2.path, "d1/f1")
+        match(e2.path_, "d1/f1")
+        match(e2.dir.path, "d1")
 
        e3 = fs.Entry("e3")
        assert e3.__class__.__name__ == 'Entry'
-       assert e3.path == "e3", e3.path
-        assert e3.path_ == "e3", e3.path_
-       assert e3.dir.path == ".", e3.dir.path
+        match(e3.path, "e3")
+        match(e3.path_, "e3")
+        match(e3.dir.path, ".")
 
        e4 = fs.Entry("d1/e4")
        assert e4.__class__.__name__ == 'Entry'
-       assert e4.path == "d1/e4", e4.path
-        assert e4.path_ == "d1/e4", e4.path_
-       assert e4.dir.path == "d1", e4.dir.path
+        match(e4.path, "d1/e4")
+        match(e4.path_, "d1/e4")
+        match(e4.dir.path, "d1")
 
        e5 = fs.Entry("e3/e5")
        assert e3.__class__.__name__ == 'Dir'
-        assert e3.path == "e3", e3.path
-        assert e3.path_ == "e3/", e3.path_
-       assert e3.dir.path == ".", e3.dir.path
+        match(e3.path, "e3")
+        match(e3.path_, "e3/")
+        match(e3.dir.path, ".")
        assert e5.__class__.__name__ == 'Entry'
-       assert e5.path == "e3/e5", e5.path
-        assert e5.path_ == "e3/e5", e5.path_
-       assert e5.dir.path == "e3", e5.dir.path
+        match(e5.path, "e3/e5")
+        match(e5.path_, "e3/e5")
+        match(e5.dir.path, "e3")
 
        e6 = fs.Dir("d1/e4")
        assert e6 is e4
        assert e4.__class__.__name__ == 'Dir'
-        assert e4.path == "d1/e4", e4.path
-        assert e4.path_ == "d1/e4/", e4.path_
-       assert e4.dir.path == "d1", e4.dir.path
+        match(e4.path, "d1/e4")
+        match(e4.path_, "d1/e4/")
+        match(e4.dir.path, "d1")
 
        e7 = fs.File("e3/e5")
        assert e7 is e5
        assert e5.__class__.__name__ == 'File'
-       assert e5.path == "e3/e5", e5.path
-        assert e5.path_ == "e3/e5", e5.path_
-       assert e5.dir.path == "e3", e5.dir.path
+        match(e5.path, "e3/e5")
+        match(e5.path_, "e3/e5")
+        match(e5.dir.path, "e3")
 
         e8 = fs.Entry("e8")
         assert e8.get_bsig() is None, e8.get_bsig()
@@ -285,21 +286,21 @@ class FSTestCase(unittest.TestCase):
 
         fs.chdir(fs.Dir('subdir'))
         f11 = fs.File("f11")
-        assert f11.path == "subdir/f11"
+        match(f11.path, "subdir/f11")
         d12 = fs.Dir("d12")
-        assert d12.path_ == "subdir/d12/"
+        match(d12.path_, "subdir/d12/")
         e13 = fs.Entry("subdir/e13")
-        assert e13.path == "subdir/subdir/e13"
+        match(e13.path, "subdir/subdir/e13")
 
         # Test scanning
         f1.scanner = Scanner()
         f1.scan()
-        assert f1.depends[0].path_ == "d1/f1"
+        assert f1.depends[0].path_ == os.path.join("d1", "f1")
         f1.scanner = None
         f1.depends = []
         f1.scanned = 0
         f1.scan()
-        assert f1.depends[0].path_ == "d1/f1"
+        assert f1.depends[0].path_ == os.path.join("d1", "f1")
 
         # Test building a file whose directory is not there yet...
         f1 = fs.File(test.workpath("foo/bar/baz/ack"))
index 2184589356af50d37e38d1cebfd5f9de31a5e255..e7dcfc038e7710582a7c68646d491b2007469760 100644 (file)
@@ -140,7 +140,11 @@ class Taskmaster:
     """
 
     def __init__(self, targets=[], tasker=Task, calc=Calc()):
-        self.walkers = map(SCons.Node.Walker, targets)
+        def out_of_date(node):
+            return filter(lambda x: x.get_state() != SCons.Node.up_to_date,
+                          node.children())
+        self.walkers = map(lambda x, f=out_of_date: SCons.Node.Walker(x, f),
+                           targets)
         self.tasker = tasker
         self.calc = calc
         self.ready = []
index 5d2985f694d174d706cb3e26a7fe8d47f876f138..70e6da5b1a0b85bc93b7da964bfc79e2ff37ede3 100644 (file)
@@ -47,7 +47,7 @@ foo.Program(target = 'foo', source = 'foo.c')
 bar.Program(target = 'bar', source = 'bar.c')
 """ % python)
 
-test.write('foo.c', """
+test.write('foo.c', r"""
 int
 main(int argc, char *argv[])
 {
@@ -57,7 +57,7 @@ main(int argc, char *argv[])
 }
 """)
 
-test.write('bar.c', """
+test.write('bar.c', r"""
 int
 main(int argc, char *argv[])
 {
index 8b0e5a8bc883cf8b35db0d48bd86e0385ede86e4..3c9e716a350eb1e108597d1b7953501281db9cf6 100644 (file)
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
+import sys
 import TestSCons
 
+if sys.platform == 'win32':
+    _obj = '.obj'
+    fooflags = '/nologo -DFOO'
+    barflags = '/nologo -DBAR'
+else:
+    _obj = '.o'
+    fooflags = '-DFOO'
+    barflags = '-DBAR'
+
 test = TestSCons.TestSCons()
 
 test.write('SConstruct', """
-foo = Environment(CCFLAGS = '-DFOO')
-bar = Environment(CCFLAGS = '-DBAR')
-foo.Object(target = 'foo.o', source = 'prog.c')
-bar.Object(target = 'bar.o', source = 'prog.c')
-foo.Program(target = 'foo', source = 'foo.o')
-bar.Program(target = 'bar', source = 'bar.o')
-""")
+foo = Environment(CCFLAGS = '%s')
+bar = Environment(CCFLAGS = '%s')
+foo.Object(target = 'foo%s', source = 'prog.c')
+bar.Object(target = 'bar%s', source = 'prog.c')
+foo.Program(target = 'foo', source = 'foo%s')
+bar.Program(target = 'bar', source = 'bar%s')
+""" % (fooflags, barflags, _obj, _obj, _obj, _obj))
 
-test.write('prog.c', """
+test.write('prog.c', r"""
 int
 main(int argc, char *argv[])
 {
@@ -60,11 +70,11 @@ test.run(program = test.workpath('bar'), stdout = "prog.c:  BAR\n")
 
 test.write('SConstruct', """
 bar = Environment(CCFLAGS = '-DBAR')
-bar.Object(target = 'foo.o', source = 'prog.c')
-bar.Object(target = 'bar.o', source = 'prog.c')
-bar.Program(target = 'foo', source = 'foo.o')
-bar.Program(target = 'bar', source = 'bar.o')
-""")
+bar.Object(target = 'foo%s', source = 'prog.c')
+bar.Object(target = 'bar%s', source = 'prog.c')
+bar.Program(target = 'foo', source = 'foo%s')
+bar.Program(target = 'bar', source = 'bar%s')
+""" % (_obj, _obj, _obj, _obj))
 
 test.run(arguments = '.')
 
index 93e6be60015c94fca4acb7f845e4b693db97ca93..ceab745a7e84691ddff7fca77cc9333077a24584 100644 (file)
@@ -71,9 +71,9 @@ for dir in ['one', 'two', 'three']:
     foo_in = os.path.join(dir, 'foo.in')
     bar_in = os.path.join(dir, 'bar.in')
 
-    test.write(foo_in, foo_in + "\n");
+    test.write(foo_in, dir + "/foo.in\n");
 
-    test.write(bar_in, bar_in + "\n");
+    test.write(bar_in, dir + "/bar.in\n");
 
     test.run(chdir = dir)      # no arguments, use the Default
 
index f5e9edb42ff8f5f3eca7986204eebfcc61a2bc73..12f98f0b8727ef14fa3fdc6cf9c3e164e6ed424b 100644 (file)
@@ -37,7 +37,7 @@ env.Library(target = 'foo3', source = ['f3a.c', 'f3b.c', 'f3c.c'])
 env.Program(target = 'prog', source = 'prog.c')
 """)
 
-test.write('f1.c', """
+test.write('f1.c', r"""
 void
 f1(void)
 {
@@ -45,7 +45,7 @@ f1(void)
 }
 """)
 
-test.write('f2a.c', """
+test.write('f2a.c', r"""
 void
 f2a(void)
 {
@@ -53,7 +53,7 @@ f2a(void)
 }
 """)
 
-test.write('f2b.c', """
+test.write('f2b.c', r"""
 void
 f2b(void)
 {
@@ -61,7 +61,7 @@ f2b(void)
 }
 """)
 
-test.write('f2c.c', """
+test.write('f2c.c', r"""
 void
 f2c(void)
 {
@@ -69,7 +69,7 @@ f2c(void)
 }
 """)
 
-test.write('f3a.c', """
+test.write('f3a.c', r"""
 void
 f3a(void)
 {
@@ -77,7 +77,7 @@ f3a(void)
 }
 """)
 
-test.write('f3b.c', """
+test.write('f3b.c', r"""
 void
 f3b(void)
 {
@@ -85,14 +85,14 @@ f3b(void)
 }
 """)
 
-test.write('f3c.c', """
+test.write('f3c.c', r"""
 f3c(void)
 {
        printf("f3c.c\n");
 }
 """)
 
-test.write('prog.c', """
+test.write('prog.c', r"""
 void f1(void);
 void f2a(void);
 void f2b(void);
@@ -116,7 +116,7 @@ main(int argc, char *argv[])
 }
 """)
 
-test.run(arguments = 'prog')
+test.run(arguments = '.')
 
 test.run(program = test.workpath('prog'),
          stdout = "f1.c\nf2a.c\nf2b.c\nf2c.c\nf3a.c\nf3b.c\nf3c.c\nprog.c\n")
index 53bab3692c7c8cf2be7db320ea251cd13d767c50..ebbdf0f5a426b727f5bdcb506b93dcdd6961f863 100644 (file)
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
+import sys
 import TestSCons
 
+if sys.platform == 'win32':
+    _obj = '.obj'
+else:
+    _obj = '.o'
+
 test = TestSCons.TestSCons()
 
 test.write('SConstruct', """
@@ -33,10 +39,10 @@ env = Environment()
 f1 = env.Object(target = 'f1', source = 'f1.c')
 f2 = env.Object(target = 'f2', source = 'f2.cpp')
 f3 = env.Object(target = 'f3', source = 'f3.c')
-env.Program(target = 'prog1', source = 'f1.o f2.o f3.o prog.cpp')
+env.Program(target = 'prog1', source = 'f1%s f2%s f3%s prog.cpp')
 env.Program(target = 'prog2', source = [f1, f2, f3, 'prog.cpp'])
-env.Program(target = 'prog3', source = ['f1.o', f2, 'f3.o', 'prog.cpp'])
-""")
+env.Program(target = 'prog3', source = ['f1%s', f2, 'f3%s', 'prog.cpp'])
+""" % (_obj, _obj, _obj, _obj, _obj))
 
 test.write('f1.c', """
 void
index 80c1d95b41a843a5e633a2a7fa24010faa577bff..a32c48e992241cb9c3ac9526b61370572330c557 100644 (file)
@@ -39,7 +39,7 @@ env.Program(target = 'foo2', source = 'f2a.c f2b.c f2c.c')
 env.Program(target = 'foo3', source = ['f3a.c', 'f3b.c', 'f3c.c'])
 """)
 
-test.write('f1.c', """
+test.write('f1.c', r"""
 int
 main(int argc, char *argv[])
 {
@@ -49,7 +49,7 @@ main(int argc, char *argv[])
 }
 """)
 
-test.write('f2a.c', """
+test.write('f2a.c', r"""
 void
 f2a(void)
 {
@@ -57,7 +57,7 @@ f2a(void)
 }
 """)
 
-test.write('f2b.c', """
+test.write('f2b.c', r"""
 void
 f2b(void)
 {
@@ -65,7 +65,7 @@ f2b(void)
 }
 """)
 
-test.write('f2c.c', """
+test.write('f2c.c', r"""
 extern void f2a(void);
 extern void f2b(void);
 int
@@ -79,7 +79,7 @@ main(int argc, char *argv[])
 }
 """)
 
-test.write('f3a.c', """
+test.write('f3a.c', r"""
 void
 f3a(void)
 {
@@ -87,7 +87,7 @@ f3a(void)
 }
 """)
 
-test.write('f3b.c', """
+test.write('f3b.c', r"""
 void
 f3b(void)
 {
@@ -95,7 +95,7 @@ f3b(void)
 }
 """)
 
-test.write('f3c.c', """
+test.write('f3c.c', r"""
 extern void f3a(void);
 extern void f3b(void);
 int
@@ -117,7 +117,7 @@ test.run(program = test.workpath('foo3'), stdout = "f3a.c\nf3b.c\nf3c.c\n")
 
 test.up_to_date(arguments = '.')
 
-test.write('f1.c', """
+test.write('f1.c', r"""
 int
 main(int argc, char *argv[])
 {
@@ -127,7 +127,7 @@ main(int argc, char *argv[])
 }
 """)
 
-test.write('f3b.c', """
+test.write('f3b.c', r"""
 void
 f3b(void)
 {
@@ -156,7 +156,7 @@ test.fail_test(not (oldtime1 == os.path.getmtime(test.workpath('foo1'))))
 test.fail_test(not (oldtime2 == os.path.getmtime(test.workpath('foo2'))))
 test.fail_test(not (oldtime3 == os.path.getmtime(test.workpath('foo3'))))
 
-test.write('f1.c', """
+test.write('f1.c', r"""
 int
 main(int argc, char *argv[])
 {
@@ -166,7 +166,7 @@ main(int argc, char *argv[])
 }
 """)
 
-test.write('f3b.c', """
+test.write('f3b.c', r"""
 void
 f3b(void)
 {
@@ -182,7 +182,7 @@ test.run(program = test.workpath('foo3'), stdout = "f3a.c\nf3b.c Y\nf3c.c\n")
 
 test.up_to_date(arguments = 'foo1 foo2 foo3')
 
-test.write('f1.c', """
+test.write('f1.c', r"""
 int
 main(int argc, char *argv[])
 {
@@ -192,7 +192,7 @@ main(int argc, char *argv[])
 }
 """)
 
-test.write('f3b.c', """
+test.write('f3b.c', r"""
 void
 f3b(void)
 {
index 350a63d8d5006d5bda9b34a77d888a47452b4223..4bc04bb3505690a7835489964e0b5256c305cff4 100644 (file)
@@ -34,7 +34,7 @@ env = Environment()
 env.Program(target = 'foo1', source = 'f1.c')
 """)
 
-test.write('f1.c', """
+test.write('f1.c', r"""
 int
 main(int argc, char *argv[])
 {
index 21611959b0c546b2176a39d6a7c90fb10784952f..318cf827741d251302845427f8e83ae816b666d4 100644 (file)
@@ -33,8 +33,8 @@ test.subdir('subdir')
 
 test.write('build.py', r"""
 import sys
-contents = open(sys.argv[2], 'r').read()
-file = open(sys.argv[1], 'w')
+contents = open(sys.argv[2], 'rb').read()
+file = open(sys.argv[1], 'wb')
 file.write(contents)
 file.close()
 """)
@@ -48,17 +48,17 @@ env.B(target = 'subdir/f3.out', source = 'subdir/f3.in')
 env.B(target = 'subdir/f4.out', source = 'subdir/f4.in')
 """)
 
-test.write('subdir/f1.in', "f1.in\n")
-test.write('subdir/f2.in', "f2.in\n")
-test.write('subdir/f3.in', "f3.in\n")
-test.write('subdir/f4.in', "f4.in\n")
+test.write(['subdir', 'f1.in'], "f1.in\n")
+test.write(['subdir', 'f2.in'], "f2.in\n")
+test.write(['subdir', 'f3.in'], "f3.in\n")
+test.write(['subdir', 'f4.in'], "f4.in\n")
 
 test.run(arguments = 'subdir')
 
-test.fail_test(test.read('subdir/f1.out') != "f1.in\n")
-test.fail_test(test.read('subdir/f2.out') != "f2.in\n")
-test.fail_test(test.read('subdir/f3.out') != "f3.in\n")
-test.fail_test(test.read('subdir/f4.out') != "f4.in\n")
+test.fail_test(test.read(['subdir', 'f1.out']) != "f1.in\n")
+test.fail_test(test.read(['subdir', 'f2.out']) != "f2.in\n")
+test.fail_test(test.read(['subdir', 'f3.out']) != "f3.in\n")
+test.fail_test(test.read(['subdir', 'f4.out']) != "f4.in\n")
 
 test.up_to_date(arguments = 'subdir')