#!/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 'LD' 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_ld_target(test, ld=None, rel_path=False): if rel_path: ld_expected = resolve_path(test, ld) else: ld_expected = ld # Resolve default values if ld_expected is None: if test.format == 'make': # Make generator hasn't set the default value for LD. # You can remove the following assertion as long as it doesn't # break existing projects. test.must_not_contain('Makefile', 'LD ?= ') return elif test.format in ['ninja', 'xcode-ninja']: if sys.platform == 'win32': ld_expected = 'link.exe' else: ld_expected = '$cc' if test.format == 'make': test.must_contain('Makefile', 'LD ?= %s' % ld_expected) elif test.format in ['ninja', 'xcode-ninja']: test.must_contain('out/Default/build.ninja', 'ld = %s' % ld_expected) else: test.fail_test() def verify_ld_host(test, ld=None, rel_path=False): if rel_path: ld_expected = resolve_path(test, ld) else: ld_expected = ld # Resolve default values if ld_expected is None: if test.format == 'make': # Make generator hasn't set the default value for LD.host. # You can remove the following assertion as long as it doesn't # break existing projects. test.must_not_contain('Makefile', 'LD.host ?= ') return elif test.format in ['ninja', 'xcode-ninja']: if sys.platform == 'win32': ld_expected = '$ld' else: ld_expected = '$cc_host' if test.format == 'make': test.must_contain('Makefile', 'LD.host ?= %s' % ld_expected) elif test.format in ['ninja', 'xcode-ninja']: test.must_contain('out/Default/build.ninja', 'ld_host = %s' % ld_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_ld.gyp') verify_ld_target(test) # Check default values with GYP_CROSSCOMPILE enabled. with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): test.run_gyp('make_global_settings_ld.gyp') verify_ld_target(test) verify_ld_host(test) # Test 'LD' in 'make_global_settings'. with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): test.run_gyp('make_global_settings_ld.gyp', '-Dcustom_ld_target=my_ld') verify_ld_target(test, ld='my_ld', rel_path=True) # Test 'LD'/'LD.host' in 'make_global_settings'. with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): test.run_gyp('make_global_settings_ld.gyp', '-Dcustom_ld_target=my_ld_target1', '-Dcustom_ld_host=my_ld_host1') verify_ld_target(test, ld='my_ld_target1', rel_path=True) verify_ld_host(test, ld='my_ld_host1', rel_path=True) # Unlike other environment variables such as $AR/$AR_host, $CC/$CC_host, # and $CXX/$CXX_host, neither Make generator nor Ninja generator recognizes # $LD/$LD_host environment variables as of r1935. This may or may not be # intentional, but here we leave a test case to verify this behavior just for # the record. # If you want to support $LD/$LD_host, please revise the following test case as # well as the generator. with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1', 'LD': 'my_ld_target2', 'LD_host': 'my_ld_host2'}): test.run_gyp('make_global_settings_ld.gyp') if test.format == 'make': test.must_not_contain('Makefile', 'my_ld_target2') test.must_not_contain('Makefile', 'my_ld_host2') elif test.format == 'ninja': test.must_not_contain('out/Default/build.ninja', 'my_ld_target2') test.must_not_contain('out/Default/build.ninja', 'my_ld_host2') test.pass_test()