cbd433927fa50f95a832f92000f9029894f3e4be
[scons.git] / test / AS / ASPPFLAGS.py
1 #!/usr/bin/env python
2 #
3 # __COPYRIGHT__
4 #
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:
12 #
13 # The above copyright notice and this permission notice shall be included
14 # in all copies or substantial portions of the Software.
15 #
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.
23 #
24
25 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
26
27 import os
28 import string
29 import sys
30 import TestSCons
31
32 python = TestSCons.python
33
34 test = TestSCons.TestSCons()
35 _exe = TestSCons._exe
36
37
38 if sys.platform == 'win32':
39
40     o = ' -x'
41
42     o_c = ' -x'
43
44     test.write('mylink.py', r"""
45 import string
46 import sys
47 args = sys.argv[1:]
48 while args:
49     a = args[0]
50     if a[0] != '/':
51         break
52     args = args[1:]
53     if string.lower(a[:5]) == '/out:': out = a[5:]
54 infile = open(args[0], 'rb')
55 outfile = open(out, 'wb')
56 for l in infile.readlines():
57     if l[:5] != '#link':
58         outfile.write(l)
59 sys.exit(0)
60 """)
61
62     test.write('myas.py', r"""
63 import sys
64 args = sys.argv[1:]
65 inf = None
66 optstring = ''
67 while args:
68     a = args[0]
69     args = args[1:]
70     if not a[0] in '/-':
71         if not inf:
72             inf = a
73         continue
74     if a[:2] == '/c':
75         continue
76     if a[:3] == '/Fo':
77         out = a[3:]
78         continue
79     optstring = optstring + ' ' + a
80 infile = open(inf, 'rb')
81 outfile = open(out, 'wb')
82 outfile.write(optstring + "\n")
83 for l in infile.readlines():
84     if l[:3] != '#as':
85         outfile.write(l)
86 sys.exit(0)
87 """)
88
89 else:
90
91     o = ' -x'
92
93     o_c = ' -x -c'
94
95     test.write('mylink.py', r"""
96 import getopt
97 import sys
98 opts, args = getopt.getopt(sys.argv[1:], 'o:')
99 for opt, arg in opts:
100     if opt == '-o': out = arg
101 infile = open(args[0], 'rb')
102 outfile = open(out, 'wb')
103 for l in infile.readlines():
104     if l[:5] != '#link':
105         outfile.write(l)
106 sys.exit(0)
107 """)
108
109     test.write('myas.py', r"""
110 import getopt
111 import sys
112 opts, args = getopt.getopt(sys.argv[1:], 'co:x')
113 optstring = ''
114 for opt, arg in opts:
115     if opt == '-o': out = arg
116     else: optstring = optstring + ' ' + opt
117 infile = open(args[0], 'rb')
118 outfile = open(out, 'wb')
119 outfile.write(optstring + "\n")
120 for l in infile.readlines():
121     if l[:3] != '#as':
122         outfile.write(l)
123 sys.exit(0)
124 """)
125
126
127
128 test.write('SConstruct', """
129 env = Environment(LINK = r'%(python)s mylink.py',
130                   LINKFLAGS = [],
131                   ASPP = r'%(python)s myas.py', ASPPFLAGS = '-x',
132                   CC = r'%(python)s myas.py')
133 env.Program(target = 'test1', source = 'test1.spp')
134 env.Program(target = 'test2', source = 'test2.SPP')
135 """ % locals())
136
137 test.write('test1.spp', r"""This is a .spp file.
138 #as
139 #link
140 """)
141
142 test.write('test2.SPP', r"""This is a .SPP file.
143 #as
144 #link
145 """)
146
147 test.run(arguments = '.', stderr = None)
148
149 test.must_match('test1' + _exe, "%s\nThis is a .spp file.\n" % o_c)
150 test.must_match('test2' + _exe, "%s\nThis is a .SPP file.\n" % o_c)
151
152 test.pass_test()