Home | History | Annotate | Download | only in ar
      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