154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org#!/usr/bin/env python 254d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# Copyright (c) 2012 Google Inc. All rights reserved. 354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# Use of this source code is governed by a BSD-style license that can be 454d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# found in the LICENSE file. 554d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org""" 654d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgVerifies that the user can override the compiler and linker using CC/CXX/LD 754d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgenvironment variables. 854d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org""" 954d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org 1054d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgimport TestGyp 1154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgimport os 1254d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgimport copy 1354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgimport sys 1454d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org 1554d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orghere = os.path.dirname(os.path.abspath(__file__)) 1654d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org 1754d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgif sys.platform == 'win32': 1802717b7ddda2293e7152c260999035d122b21c09dimator@google.com # cross compiling not supported by ninja on windows 1954d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org # and make not supported on windows at all. 2054d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org sys.exit(0) 2154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org 223ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org# Clear any existing compiler related env vars. 2344c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.orgfor key in ['CC', 'CXX', 'LINK', 'CC_host', 'CXX_host', 'LINK_host']: 243ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org if key in os.environ: 253ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org del os.environ[key] 263ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 2754d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org 283ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.orgdef CheckCompiler(test, gypfile, check_for, run_gyp): 293ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org if run_gyp: 303ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org test.run_gyp(gypfile) 3154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org test.build(gypfile) 3254d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org 3354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org test.must_contain_all_lines(test.stdout(), check_for) 3454d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org 353ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 363ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.orgtest = TestGyp.TestGyp(formats=['ninja', 'make']) 373ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 383ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.orgdef TestTargetOveride(): 3944c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org expected = ['my_cc.py', 'my_cxx.py', 'FOO' ] 4044c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org if test.format != 'ninja': # ninja just uses $CC / $CXX as linker. 4144c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org expected.append('FOO_LINK') 4244c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org 4354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org # Check that CC, CXX and LD set target compiler 443ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org oldenv = os.environ.copy() 453ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org try: 463ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ['CC'] = 'python %s/my_cc.py FOO' % here 473ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ['CXX'] = 'python %s/my_cxx.py FOO' % here 4844c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org os.environ['LINK'] = 'python %s/my_ld.py FOO_LINK' % here 493ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 5002717b7ddda2293e7152c260999035d122b21c09dimator@google.com CheckCompiler(test, 'compiler-exe.gyp', expected, True) 513ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org finally: 523ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ.clear() 533ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ.update(oldenv) 543ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 553ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # Run the same tests once the eviron has been restored. The 563ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # generated should have embedded all the settings in the 573ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # project files so the results should be the same. 5802717b7ddda2293e7152c260999035d122b21c09dimator@google.com CheckCompiler(test, 'compiler-exe.gyp', expected, False) 5902717b7ddda2293e7152c260999035d122b21c09dimator@google.com 603ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 613ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.orgdef TestTargetOverideCompilerOnly(): 623ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # Same test again but with that CC, CXX and not LD 633ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org oldenv = os.environ.copy() 643ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org try: 653ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ['CC'] = 'python %s/my_cc.py FOO' % here 663ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ['CXX'] = 'python %s/my_cxx.py FOO' % here 6754d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org 6802717b7ddda2293e7152c260999035d122b21c09dimator@google.com CheckCompiler(test, 'compiler-exe.gyp', 693ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org ['my_cc.py', 'my_cxx.py', 'FOO'], 703ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org True) 713ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org finally: 723ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ.clear() 733ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ.update(oldenv) 743ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 753ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # Run the same tests once the eviron has been restored. The 763ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # generated should have embedded all the settings in the 773ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # project files so the results should be the same. 7802717b7ddda2293e7152c260999035d122b21c09dimator@google.com CheckCompiler(test, 'compiler-exe.gyp', 793ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org ['my_cc.py', 'my_cxx.py', 'FOO'], 803ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org False) 813ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 823ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 833ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.orgdef TestHostOveride(): 8444c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org expected = ['my_cc.py', 'my_cxx.py', 'HOST' ] 8544c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org if test.format != 'ninja': # ninja just uses $CC / $CXX as linker. 8644c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org expected.append('HOST_LINK') 8744c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org 8854d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org # Check that CC_host sets host compilee 893ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org oldenv = os.environ.copy() 903ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org try: 913ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ['CC_host'] = 'python %s/my_cc.py HOST' % here 923ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ['CXX_host'] = 'python %s/my_cxx.py HOST' % here 9344c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org os.environ['LINK_host'] = 'python %s/my_ld.py HOST_LINK' % here 9444c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org CheckCompiler(test, 'compiler-host.gyp', expected, True) 953ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org finally: 963ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ.clear() 973ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org os.environ.update(oldenv) 983ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 993ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # Run the same tests once the eviron has been restored. The 1003ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # generated should have embedded all the settings in the 1013ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org # project files so the results should be the same. 10244c1a6c35b0c9762c1066afff961068be4808423thakis@chromium.org CheckCompiler(test, 'compiler-host.gyp', expected, False) 1033ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 1043ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.org 1053ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.orgTestTargetOveride() 1063ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.orgTestTargetOverideCompilerOnly() 1073ae45ea0689cdd8777d13f943ac3b73d87c6c0e7sbc@chromium.orgTestHostOveride() 10854d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org 10954d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgtest.pass_test() 110