diff options
author | Zeno Albisser <zeno.albisser@digia.com> | 2013-08-15 21:46:11 +0200 |
---|---|---|
committer | Zeno Albisser <zeno.albisser@digia.com> | 2013-08-15 21:46:11 +0200 |
commit | 679147eead574d186ebf3069647b4c23e8ccace6 (patch) | |
tree | fc247a0ac8ff119f7c8550879ebb6d3dd8d1ff69 /chromium/tools/compile_test | |
download | qtwebengine-chromium-679147eead574d186ebf3069647b4c23e8ccace6.tar.gz |
Initial import.
Diffstat (limited to 'chromium/tools/compile_test')
-rwxr-xr-x | chromium/tools/compile_test/compile_test.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/chromium/tools/compile_test/compile_test.py b/chromium/tools/compile_test/compile_test.py new file mode 100755 index 00000000000..bbda4abfe54 --- /dev/null +++ b/chromium/tools/compile_test/compile_test.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# Copyright (c) 2013 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" +Tries to compile given code, produces different output depending on success. + +This is similar to checks done by ./configure scripts. +""" + + +import optparse +import os +import shutil +import subprocess +import sys +import tempfile + + +def DoMain(argv): + parser = optparse.OptionParser() + parser.add_option('--code') + parser.add_option('--run-linker', action='store_true') + parser.add_option('--on-success', default='') + parser.add_option('--on-failure', default='') + + options, args = parser.parse_args(argv) + + if not options.code: + parser.error('Missing required --code switch.') + + # The environment variable might expand to a string with spaces, + # e.g. "ccache g++". Convert it to a list suitable for argv. + cxx = os.environ.get('CXX', 'g++').split() + + tmpdir = tempfile.mkdtemp() + try: + cxx_path = os.path.join(tmpdir, 'test.cc') + with open(cxx_path, 'w') as f: + f.write(options.code.decode('string-escape')) + + o_path = os.path.join(tmpdir, 'test.o') + + cxx_cmdline = cxx + [cxx_path, '-o', o_path] + if not options.run_linker: + cxx_cmdline.append('-c') + # Pass remaining arguments to the compiler. + cxx_cmdline += args + cxx_popen = subprocess.Popen(cxx_cmdline, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + cxx_stdout, cxx_stderr = cxx_popen.communicate() + if cxx_popen.returncode == 0: + print options.on_success + else: + print options.on_failure + finally: + shutil.rmtree(tmpdir) + + return 0 + + +if __name__ == '__main__': + sys.exit(DoMain(sys.argv[1:])) |