Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: test/lit.cfg

Issue 904473004: Rebased localmods in libcxx to 223109. (Closed)
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/thread.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # -*- Python -*- vim: set syntax=python tabstop=4 expandtab cc=80: 1 # -*- Python -*- vim: set syntax=python tabstop=4 expandtab cc=80:
2 2
3 # Configuration file for the 'lit' test runner. 3 # Configuration file for the 'lit' test runner.
4 4
5 import errno 5 import errno
6 import locale 6 import locale
7 import os 7 import os
8 import platform 8 import platform
9 import re 9 import re
10 import shlex 10 import shlex
(...skipping 11 matching lines...) Expand all
22 """ 22 """
23 Custom test format handler for use with the test format use by libc++. 23 Custom test format handler for use with the test format use by libc++.
24 24
25 Tests fall into two categories: 25 Tests fall into two categories:
26 FOO.pass.cpp - Executable test which should compile, run, and exit with 26 FOO.pass.cpp - Executable test which should compile, run, and exit with
27 code 0. 27 code 0.
28 FOO.fail.cpp - Negative test case which is expected to fail compilation. 28 FOO.fail.cpp - Negative test case which is expected to fail compilation.
29 """ 29 """
30 30
31 def __init__(self, cxx_under_test, use_verify_for_fail, 31 def __init__(self, cxx_under_test, use_verify_for_fail,
32 cpp_flags, ld_flags, exec_env): 32 cpp_flags, ld_flags, exec_env,
33 # @LOCALMOD
34 exe_suffix, shell_prefix):
33 self.cxx_under_test = cxx_under_test 35 self.cxx_under_test = cxx_under_test
34 self.use_verify_for_fail = use_verify_for_fail 36 self.use_verify_for_fail = use_verify_for_fail
35 self.cpp_flags = list(cpp_flags) 37 self.cpp_flags = list(cpp_flags)
36 self.ld_flags = list(ld_flags) 38 self.ld_flags = list(ld_flags)
37 self.exec_env = dict(exec_env) 39 self.exec_env = dict(exec_env)
40 # @LOCALMOD-START
41 self.exe_suffix = exe_suffix
42 self.shell_prefix = shell_prefix
43 # @LOCALMOD-END
38 44
39 def execute(self, test, lit_config): 45 def execute(self, test, lit_config):
40 while True: 46 while True:
41 try: 47 try:
42 return self._execute(test, lit_config) 48 return self._execute(test, lit_config)
43 except OSError, oe: 49 except OSError, oe:
44 if oe.errno != errno.ETXTBSY: 50 if oe.errno != errno.ETXTBSY:
45 raise 51 raise
46 time.sleep(0.1) 52 time.sleep(0.1)
47 53
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 def _clean(self, exec_path): 115 def _clean(self, exec_path):
110 os.remove(exec_path) 116 os.remove(exec_path)
111 117
112 def _run(self, exec_path, lit_config, in_dir=None): 118 def _run(self, exec_path, lit_config, in_dir=None):
113 cmd = [] 119 cmd = []
114 if self.exec_env: 120 if self.exec_env:
115 cmd.append('env') 121 cmd.append('env')
116 cmd.extend('%s=%s' % (name, value) 122 cmd.extend('%s=%s' % (name, value)
117 for name,value in self.exec_env.items()) 123 for name,value in self.exec_env.items())
118 cmd.append(exec_path) 124 cmd.append(exec_path)
125 # @LOCALMOD-START
126 if self.shell_prefix:
127 cmd = self.shell_prefix + cmd
128 # @LOCALMOD-END
119 if lit_config.useValgrind: 129 if lit_config.useValgrind:
120 cmd = lit_config.valgrindArgs + cmd 130 cmd = lit_config.valgrindArgs + cmd
121 out, err, exitCode = lit.util.executeCommand(cmd, cwd=in_dir) 131 out, err, exitCode = lit.util.executeCommand(cmd, cwd=in_dir)
122 return cmd, out, err, exitCode 132 return cmd, out, err, exitCode
123 133
124 def _evaluate_test(self, test, use_verify, lit_config): 134 def _evaluate_test(self, test, use_verify, lit_config):
125 name = test.path_in_suite[-1] 135 name = test.path_in_suite[-1]
126 source_path = test.getSourcePath() 136 source_path = test.getSourcePath()
127 source_dir = os.path.dirname(source_path) 137 source_dir = os.path.dirname(source_path)
128 138
(...skipping 13 matching lines...) Expand all
142 report = """Command: %s\n""" % ' '.join(["'%s'" % a 152 report = """Command: %s\n""" % ' '.join(["'%s'" % a
143 for a in cmd]) 153 for a in cmd])
144 report += """Exit Code: %d\n""" % rc 154 report += """Exit Code: %d\n""" % rc
145 if out: 155 if out:
146 report += """Standard Output:\n--\n%s--""" % out 156 report += """Standard Output:\n--\n%s--""" % out
147 if err: 157 if err:
148 report += """Standard Error:\n--\n%s--""" % err 158 report += """Standard Error:\n--\n%s--""" % err
149 report += "\n\nExpected compilation to fail!" 159 report += "\n\nExpected compilation to fail!"
150 return lit.Test.FAIL, report 160 return lit.Test.FAIL, report
151 else: 161 else:
152 exec_file = tempfile.NamedTemporaryFile(suffix="exe", delete=False) 162 # @LOCALMOD-START
163 exec_file = tempfile.NamedTemporaryFile(
164 suffix=self.exe_suffix, delete=False)
165 # @LOCALMOD-END
153 exec_path = exec_file.name 166 exec_path = exec_file.name
154 exec_file.close() 167 exec_file.close()
155 168
156 try: 169 try:
157 cmd, out, err, rc = self._build(exec_path, source_path) 170 cmd, out, err, rc = self._build(exec_path, source_path)
158 compile_cmd = cmd 171 compile_cmd = cmd
159 if rc != 0: 172 if rc != 0:
160 report = """Command: %s\n""" % ' '.join(["'%s'" % a 173 report = """Command: %s\n""" % ' '.join(["'%s'" % a
161 for a in cmd]) 174 for a in cmd])
162 report += """Exit Code: %d\n""" % rc 175 report += """Exit Code: %d\n""" % rc
(...skipping 25 matching lines...) Expand all
188 self._clean(exec_path) 201 self._clean(exec_path)
189 except: 202 except:
190 pass 203 pass
191 return lit.Test.PASS, "" 204 return lit.Test.PASS, ""
192 205
193 206
194 class Configuration(object): 207 class Configuration(object):
195 def __init__(self, lit_config, config): 208 def __init__(self, lit_config, config):
196 self.lit_config = lit_config 209 self.lit_config = lit_config
197 self.config = config 210 self.config = config
211 # @LOCALMOD-START
212 self.exe_suffix = None
213 self.shell_prefix = None
214 # @LOCALMOD-END
198 self.cxx = None 215 self.cxx = None
199 self.src_root = None 216 self.src_root = None
200 self.obj_root = None 217 self.obj_root = None
201 self.env = {} 218 self.env = {}
202 self.compile_flags = ['-nostdinc++'] 219 self.compile_flags = ['-nostdinc++']
203 self.link_flags = ['-nodefaultlibs'] 220 self.link_flags = ['-nodefaultlibs']
204 self.use_system_lib = False 221 self.use_system_lib = False
205 self.use_clang_verify = False 222 self.use_clang_verify = False
206 223
207 if platform.system() not in ('Darwin', 'FreeBSD', 'Linux'): 224 if platform.system() not in ('Darwin', 'FreeBSD', 'Linux'):
(...skipping 12 matching lines...) Expand all
220 if conf is None: 237 if conf is None:
221 return None 238 return None
222 if conf.lower() in ('1', 'true'): 239 if conf.lower() in ('1', 'true'):
223 return True 240 return True
224 if conf.lower() in ('', '0', 'false'): 241 if conf.lower() in ('', '0', 'false'):
225 return False 242 return False
226 self.lit_config.fatal( 243 self.lit_config.fatal(
227 "parameter '{}' should be true or false".format(name)) 244 "parameter '{}' should be true or false".format(name))
228 245
229 def configure(self): 246 def configure(self):
247 # @LOCALMOD
248 self.configure_exe_wrappers()
230 self.configure_cxx() 249 self.configure_cxx()
231 self.configure_triple() 250 self.configure_triple()
232 self.configure_src_root() 251 self.configure_src_root()
233 self.configure_obj_root() 252 self.configure_obj_root()
234 self.configure_use_system_lib() 253 self.configure_use_system_lib()
235 self.configure_use_clang_verify() 254 self.configure_use_clang_verify()
236 self.configure_env() 255 self.configure_env()
237 self.configure_std_flag() 256 self.configure_std_flag()
238 self.configure_compile_flags() 257 self.configure_compile_flags()
239 self.configure_link_flags() 258 self.configure_link_flags()
240 self.configure_sanitizer() 259 self.configure_sanitizer()
241 self.configure_features() 260 self.configure_features()
261 # @LOCALMOD-START -- filter out nostdinc++ and nodefaultlibs if needed.
262 if self.use_system_lib:
263 self.compile_flags = [flag for flag in self.compile_flags
264 if flag != '-nostdinc++']
265 self.link_flags = [flag for flag in self.link_flags
266 if flag != '-nodefaultlibs']
267 # @LOCALMOD-END
242 # Print the final compile and link flags. 268 # Print the final compile and link flags.
243 self.lit_config.note('Using compile flags: %s' % self.compile_flags) 269 self.lit_config.note('Using compile flags: %s' % self.compile_flags)
244 self.lit_config.note('Using link flags: %s' % self.link_flags) 270 self.lit_config.note('Using link flags: %s' % self.link_flags)
245 # Print as list to prevent "set([...])" from being printed. 271 # Print as list to prevent "set([...])" from being printed.
246 self.lit_config.note('Using available_features: %s' % 272 self.lit_config.note('Using available_features: %s' %
247 list(self.config.available_features)) 273 list(self.config.available_features))
248 274
249 def get_test_format(self): 275 def get_test_format(self):
250 return LibcxxTestFormat( 276 return LibcxxTestFormat(
251 self.cxx, 277 self.cxx,
252 self.use_clang_verify, 278 self.use_clang_verify,
253 cpp_flags=self.compile_flags, 279 cpp_flags=self.compile_flags,
254 ld_flags=self.link_flags, 280 ld_flags=self.link_flags,
255 exec_env=self.env) 281 exec_env=self.env,
282 # @LOCALMOD
283 exe_suffix=self.exe_suffix,
284 shell_prefix=self.shell_prefix)
285
286 # @LOCALMOD-START
287 def configure_exe_wrappers(self):
288 # Allow customizing the resulting executable's suffix
289 # as well as an wrapper around how to run the executable
290 # via a shell_prefix.
291 self.exe_suffix = self.get_lit_conf('exe_suffix', 'exe')
292 self.shell_prefix = self.get_lit_conf('shell_prefix', None)
293 if self.shell_prefix:
294 self.shell_prefix = shlex.split(self.shell_prefix)
295 # @LOCALMOD-END
256 296
257 def configure_cxx(self): 297 def configure_cxx(self):
258 # Gather various compiler parameters. 298 # Gather various compiler parameters.
259 self.cxx = self.get_lit_conf('cxx_under_test') 299 self.cxx = self.get_lit_conf('cxx_under_test')
260 300
261 # If no specific cxx_under_test was given, attempt to infer it as 301 # If no specific cxx_under_test was given, attempt to infer it as
262 # clang++. 302 # clang++.
263 if self.cxx is None: 303 if self.cxx is None:
264 clangxx = lit.util.which('clang++', 304 clangxx = lit.util.which('clang++',
265 self.config.environment['PATH']) 305 self.config.environment['PATH'])
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 config.test_source_root = os.path.dirname(__file__) 561 config.test_source_root = os.path.dirname(__file__)
522 562
523 cfg_variant = getattr(config, 'configuration_variant', '') 563 cfg_variant = getattr(config, 'configuration_variant', '')
524 if cfg_variant: 564 if cfg_variant:
525 print 'Using configuration variant: %s' % cfg_variant 565 print 'Using configuration variant: %s' % cfg_variant
526 566
527 # Construct an object of the type named `<VARIANT>Configuration`. 567 # Construct an object of the type named `<VARIANT>Configuration`.
528 configuration = globals()['%sConfiguration' % cfg_variant](lit_config, config) 568 configuration = globals()['%sConfiguration' % cfg_variant](lit_config, config)
529 configuration.configure() 569 configuration.configure()
530 config.test_format = configuration.get_test_format() 570 config.test_format = configuration.get_test_format()
OLDNEW
« no previous file with comments | « src/thread.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698