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""" 8Verifies 'AR' in make_global_settings. 9""" 10 11import os 12import sys 13import TestGyp 14 15def 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 in ['ninja', 'xcode-ninja']: 21 return os.path.join('..', '..', path) 22 else: 23 test.fail_test() 24 25 26def 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 in ['ninja', 'xcode-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 in ['ninja', 'xcode-ninja']: 47 test.must_contain('out/Default/build.ninja', 'ar = %s' % ar_expected) 48 else: 49 test.fail_test() 50 51 52def 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 if sys.platform == 'win32': 60 ar_expected = 'lib.exe' 61 else: 62 ar_expected = 'ar' 63 if test.format == 'make': 64 test.must_contain('Makefile', 'AR.host ?= %s' % ar_expected) 65 elif test.format in ['ninja', 'xcode-ninja']: 66 test.must_contain('out/Default/build.ninja', 'ar_host = %s' % ar_expected) 67 else: 68 test.fail_test() 69 70 71test_format = ['ninja'] 72if sys.platform in ('linux2', 'darwin'): 73 test_format += ['make'] 74 75test = TestGyp.TestGyp(formats=test_format) 76 77# Check default values 78test.run_gyp('make_global_settings_ar.gyp') 79verify_ar_target(test) 80 81 82# Check default values with GYP_CROSSCOMPILE enabled. 83with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): 84 test.run_gyp('make_global_settings_ar.gyp') 85verify_ar_target(test) 86verify_ar_host(test) 87 88 89# Test 'AR' in 'make_global_settings'. 90with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): 91 test.run_gyp('make_global_settings_ar.gyp', '-Dcustom_ar_target=my_ar') 92verify_ar_target(test, ar='my_ar', rel_path=True) 93 94 95# Test 'AR'/'AR.host' in 'make_global_settings'. 96with TestGyp.LocalEnv({'GYP_CROSSCOMPILE': '1'}): 97 test.run_gyp('make_global_settings_ar.gyp', 98 '-Dcustom_ar_target=my_ar_target1', 99 '-Dcustom_ar_host=my_ar_host1') 100verify_ar_target(test, ar='my_ar_target1', rel_path=True) 101verify_ar_host(test, ar='my_ar_host1', rel_path=True) 102 103 104# Test $AR and $AR_host environment variables. 105with TestGyp.LocalEnv({'AR': 'my_ar_target2', 106 'AR_host': 'my_ar_host2'}): 107 test.run_gyp('make_global_settings_ar.gyp') 108# Ninja generator resolves $AR in gyp phase. Make generator doesn't. 109if test.format == 'ninja': 110 if sys.platform == 'win32': 111 # TODO(yukawa): Make sure if this is an expected result or not. 112 verify_ar_target(test, ar='lib.exe', rel_path=False) 113 else: 114 verify_ar_target(test, ar='my_ar_target2', rel_path=False) 115verify_ar_host(test, ar='my_ar_host2', rel_path=False) 116 117 118# Test 'AR' in 'make_global_settings' with $AR_host environment variable. 119with TestGyp.LocalEnv({'AR_host': 'my_ar_host3'}): 120 test.run_gyp('make_global_settings_ar.gyp', 121 '-Dcustom_ar_target=my_ar_target3') 122verify_ar_target(test, ar='my_ar_target3', rel_path=True) 123verify_ar_host(test, ar='my_ar_host3', rel_path=False) 124 125 126test.pass_test() 127