Merge pull request #4655 from bdbaddog/fix_new_ninja_package
[scons.git] / test / Repository / M4.py
blob2e404687b8d5cf14a9564015c90c586d5d51bc06
1 #!/usr/bin/env python
3 # __COPYRIGHT__
5 # Permission is hereby granted, free of charge, to any person obtaining
6 # a copy of this software and associated documentation files (the
7 # "Software"), to deal in the Software without restriction, including
8 # without limitation the rights to use, copy, modify, merge, publish,
9 # distribute, sublicense, and/or sell copies of the Software, and to
10 # permit persons to whom the Software is furnished to do so, subject to
11 # the following conditions:
13 # The above copyright notice and this permission notice shall be included
14 # in all copies or substantial portions of the Software.
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
27 """
28 Test that $M4 and $M4FLAGS work with repositories.
29 """
32 import TestSCons
34 _python_ = TestSCons._python_
36 test = TestSCons.TestSCons()
38 # TODO: figure out how to write the coverage data to the locked folder or maybe somewhere else
39 if test.coverage_run():
40 test.skip_test("this test locks the folder for writing meaning coverage data can not be written; skipping test.")
42 test.subdir('work', 'repository', ['repository', 'src'])
44 test.write('mym4.py', """
45 import sys
46 contents = sys.stdin.read()
47 sys.stdout.write(contents.replace('M4', 'mym4.py'))
48 sys.exit(0)
49 """)
51 mym4_py = test.workpath('mym4.py')
55 opts = "-Y " + test.workpath('repository')
57 test.write(['repository', 'SConstruct'], """\
58 env = Environment(M4 = r'%(_python_)s %(mym4_py)s', tools=['default', 'm4'])
59 env.M4(target = 'aaa.x', source = 'aaa.x.m4')
60 SConscript('src/SConscript', "env", variant_dir="build")
61 """ % locals())
63 test.write(['repository', 'aaa.x.m4'], """\
64 line 1
66 line 3
67 """)
69 test.write(['repository', 'src', 'SConscript'], """
70 Import("env")
71 env.M4('bbb.y', 'bbb.y.m4')
72 """)
74 test.write(['repository', 'src', 'bbb.y.m4'], """\
75 line 1 M4
76 line 2
77 line 3 M4
78 """)
81 # Make the repository non-writable,
82 # so we'll detect if we try to write into it accidentally.
83 test.writable('repository', 0)
86 test.run(chdir = 'work', options = opts, arguments = ".")
88 expect_aaa_x = """\
89 line 1
90 mym4.py
91 line 3
92 """
94 expect_bbb_y = """\
95 line 1 mym4.py
96 line 2
97 line 3 mym4.py
98 """
100 test.fail_test(test.read(test.workpath('work', 'aaa.x'), 'r') != expect_aaa_x)
101 test.fail_test(test.read(test.workpath('work', 'build', 'bbb.y'), 'r') != expect_bbb_y)
104 test.pass_test()
106 # Local Variables:
107 # tab-width:4
108 # indent-tabs-mode:nil
109 # End:
110 # vim: set expandtab tabstop=4 shiftwidth=4: