| #!/usr/bin/env python |
| |
| # Copyright (c) 2014 Google Inc. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """ |
| Verifies 'AR' in make_global_settings. |
| """ |
| |
| import os |
| import sys |
| import TestGyp |
| |
| def resolve_path(test, path): |
| if path is None: |
| return None |
| elif test.format == 'make': |
| return '$(abspath %s)' % path |
| elif test.format in ['ninja', 'xcode-ninja']: |
| return os.path.join('..', '..', path) |
| else: |
| test.fail_test() |
| |
| |
| def verify_ar_target(test, ar=None, rel_path=False): |
| if rel_path: |
| ar_expected = resolve_path(test, ar) |
| else: |
| ar_expected = ar |
| # Resolve default values |
| if ar_expected is None: |
| if test.format == 'make': |
| # Make generator hasn't set the default value for AR. |
| # You can remove the following assertion as long as it doesn't |
| # break existing projects. |
| test.must_not_contain('Makefile', 'AR ?= ') |
| return |
| elif test.format in ['ninja', 'xcode-ninja']: |
| if sys.platform == 'win32': |
| ar_expected = 'lib.exe' |
| else: |
| ar_expected = 'ar' |
| if test.format == 'make': |
| test.must_contain('Makefile', 'AR ?= %s' % ar_expected) |
| elif test.format in ['ninja', 'xcode-ninja']: |
| test.must_contain('out/Default/build.ninja', 'ar = %s' % ar_expected) |
| else: |
| test.fail_test() |
| |
| |
| def verify_ar_host(test, ar=None, rel_path=False): |
| if rel_path: |
| ar_expected = resolve_path(test, ar) |
| else: |
| ar_expected = ar |
| # Resolve default values |
| if ar_expected is None: |
| if sys.platform == 'win32': |
| ar_expected = 'lib.exe' |
| else: |
| ar_expected = 'ar' |
| if test.format == 'make': |
| test.must_contain('Makefile', 'AR.host ?= %s' % ar_expected) |
| elif test.format in ['ninja', 'xcode-ninja']: |
| test.must_contain('out/Default/build.ninja', 'ar_host = %s' % ar_expected) |
| else: |
| test.fail_test() |
| |
| |
| test_format = ['ninja'] |
| if sys.platform in ('linux2', 'darwin'): |
| test_format += ['make'] |
| |
| test = TestGyp.TestGyp(formats=test_format) |
| |
| # Check default values |
| test.run_gyp('make_global_settings_ar.gyp') |
| verify_ar_target(test) |
| |
| |
| # Check default values with GYP_CROSSCOMPILE enabled. |
| with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): |
| test.run_gyp('make_global_settings_ar.gyp') |
| verify_ar_target(test) |
| verify_ar_host(test) |
| |
| |
| # Test 'AR' in 'make_global_settings'. |
| with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): |
| test.run_gyp('make_global_settings_ar.gyp', '-Dcustom_ar_target=my_ar') |
| verify_ar_target(test, ar='my_ar', rel_path=True) |
| |
| |
| # Test 'AR'/'AR.host' in 'make_global_settings'. |
| with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): |
| test.run_gyp('make_global_settings_ar.gyp', |
| '-Dcustom_ar_target=my_ar_target1', |
| '-Dcustom_ar_host=my_ar_host1') |
| verify_ar_target(test, ar='my_ar_target1', rel_path=True) |
| verify_ar_host(test, ar='my_ar_host1', rel_path=True) |
| |
| |
| # Test $AR and $AR_host environment variables. |
| with TestGyp.LocalEnv({'AR': 'my_ar_target2', |
| 'AR_host': 'my_ar_host2'}): |
| test.run_gyp('make_global_settings_ar.gyp') |
| # Ninja generator resolves $AR in gyp phase. Make generator doesn't. |
| if test.format == 'ninja': |
| if sys.platform == 'win32': |
| # TODO(yukawa): Make sure if this is an expected result or not. |
| verify_ar_target(test, ar='lib.exe', rel_path=False) |
| else: |
| verify_ar_target(test, ar='my_ar_target2', rel_path=False) |
| verify_ar_host(test, ar='my_ar_host2', rel_path=False) |
| |
| |
| # Test 'AR' in 'make_global_settings' with $AR_host environment variable. |
| with TestGyp.LocalEnv({'AR_host': 'my_ar_host3'}): |
| test.run_gyp('make_global_settings_ar.gyp', |
| '-Dcustom_ar_target=my_ar_target3') |
| verify_ar_target(test, ar='my_ar_target3', rel_path=True) |
| verify_ar_host(test, ar='my_ar_host3', rel_path=False) |
| |
| |
| test.pass_test() |