1 #!/usr/bin/env python 2 3 # Copyright (c) 2014 Google Inc. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 """ 8 Verifies 'AR' in make_global_settings. 9 """ 10 11 import os 12 import sys 13 import TestGyp 14 15 def resolve_path(test, path): 16 if path is None: 17 return None 18 elif test.format == 'make': 19 return '$(abspath %s)' % path 20 elif test.format == 'ninja': 21 return os.path.join('..', '..', path) 22 else: 23 test.fail_test() 24 25 26 def verify_ar_target(test, ar=None, rel_path=False): 27 if rel_path: 28 ar_expected = resolve_path(test, ar) 29 else: 30 ar_expected = ar 31 # Resolve default values 32 if ar_expected is None: 33 if test.format == 'make': 34 # Make generator hasn't set the default value for AR. 35 # You can remove the following assertion as long as it doesn't 36 # break existing projects. 37 test.must_not_contain('Makefile', 'AR ?= ') 38 return 39 elif test.format == 'ninja': 40 if sys.platform == 'win32': 41 ar_expected = 'lib.exe' 42 else: 43 ar_expected = 'ar' 44 if test.format == 'make': 45 test.must_contain('Makefile', 'AR ?= %s' % ar_expected) 46 elif test.format == 'ninja': 47 test.must_contain('out/Default/build.ninja', 'ar = %s' % ar_expected) 48 else: 49 test.fail_test() 50 51 52 def verify_ar_host(test, ar=None, rel_path=False): 53 if rel_path: 54 ar_expected = resolve_path(test, ar) 55 else: 56 ar_expected = ar 57 # Resolve default values 58 if ar_expected is None: 59 ar_expected = 'ar' 60 if test.format == 'make': 61 test.must_contain('Makefile', 'AR.host ?= %s' % ar_expected) 62 elif test.format == 'ninja': 63 test.must_contain('out/Default/build.ninja', 'ar_host = %s' % ar_expected) 64 else: 65 test.fail_test() 66 67 68 test_format = ['ninja'] 69 if sys.platform in ('linux2', 'darwin'): 70 test_format += ['make'] 71 72 test = TestGyp.TestGyp(formats=test_format) 73 74 # Check default values 75 test.run_gyp('make_global_settings_ar.gyp') 76 verify_ar_target(test) 77 78 79 # Check default values with GYP_CROSSCOMPILE enabled. 80 with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): 81 test.run_gyp('make_global_settings_ar.gyp') 82 verify_ar_target(test) 83 verify_ar_host(test) 84 85 86 # Test 'AR' in 'make_global_settings'. 87 with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): 88 test.run_gyp('make_global_settings_ar.gyp', '-Dcustom_ar_target=my_ar') 89 verify_ar_target(test, ar='my_ar', rel_path=True) 90 91 92 # Test 'AR'/'AR.host' in 'make_global_settings'. 93 with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): 94 test.run_gyp('make_global_settings_ar.gyp', 95 '-Dcustom_ar_target=my_ar_target1', 96 '-Dcustom_ar_host=my_ar_host1') 97 verify_ar_target(test, ar='my_ar_target1', rel_path=True) 98 verify_ar_host(test, ar='my_ar_host1', rel_path=True) 99 100 101 # Test $AR and $AR_host environment variables. 102 with TestGyp.LocalEnv({'AR': 'my_ar_target2', 103 'AR_host': 'my_ar_host2'}): 104 test.run_gyp('make_global_settings_ar.gyp') 105 # Ninja generator resolves $AR in gyp phase. Make generator doesn't. 106 if test.format == 'ninja': 107 if sys.platform == 'win32': 108 # TODO(yukawa): Make sure if this is an expected result or not. 109 verify_ar_target(test, ar='lib.exe', rel_path=False) 110 else: 111 verify_ar_target(test, ar='my_ar_target2', rel_path=False) 112 verify_ar_host(test, ar='my_ar_host2', rel_path=False) 113 114 115 # Test 'AR' in 'make_global_settings' with $AR_host environment variable. 116 with TestGyp.LocalEnv({'AR_host': 'my_ar_host3'}): 117 test.run_gyp('make_global_settings_ar.gyp', 118 '-Dcustom_ar_target=my_ar_target3') 119 verify_ar_target(test, ar='my_ar_target3', rel_path=True) 120 verify_ar_host(test, ar='my_ar_host3', rel_path=False) 121 122 123 test.pass_test() 124