154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org#!/usr/bin/env python
254d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# Copyright (c) 2012 Google Inc. All rights reserved.
354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# Use of this source code is governed by a BSD-style license that can be
454d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# found in the LICENSE file.
554d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org"""
654d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgVerifies that make_global_settings can be used to override the
754d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgcompiler settings.
854d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org"""
954d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
1054d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgimport TestGyp
1154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgimport os
1254d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgimport copy
1354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgimport sys
1454d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgfrom string import Template
1554d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
1654d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
1754d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgif sys.platform == 'win32':
1854d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org  # cross compiling not support by ninja on windows
1954d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org  # and make not supported on windows at all.
2054d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org  sys.exit(0)
2154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
2254d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgtest = TestGyp.TestGyp(formats=['ninja', 'make'])
2354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
2454d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orggypfile = 'compiler-global-settings.gyp'
2554d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
2654d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgreplacements = { 'PYTHON': '/usr/bin/python', 'PWD': os.getcwd()}
2754d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
2854d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# Process the .in gyp file to produce the final gyp file
2954d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# since we need to include absolute paths in the make_global_settings
3054d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# section.
3154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgreplacements['TOOLSET'] = 'target'
3254d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgs = Template(open(gypfile + '.in').read())
3354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgoutput = open(gypfile, 'w')
3454d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgoutput.write(s.substitute(replacements))
3554d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgoutput.close()
3654d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
37ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.orgold_env = dict(os.environ)
38ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.orgos.environ['GYP_CROSSCOMPILE'] = '1'
3954d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgtest.run_gyp(gypfile)
40ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.orgos.environ.clear()
41ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.orgos.environ.update(old_env)
42ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.org
4354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgtest.build(gypfile)
4454d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgtest.must_contain_all_lines(test.stdout(), ['my_cc.py', 'my_cxx.py', 'FOO'])
4554d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
4654d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org# Same again but with the host toolset.
4754d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgreplacements['TOOLSET'] = 'host'
4854d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgs = Template(open(gypfile + '.in').read())
4954d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgoutput = open(gypfile, 'w')
5054d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgoutput.write(s.substitute(replacements))
5154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgoutput.close()
5254d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
53ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.orgold_env = dict(os.environ)
54ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.orgos.environ['GYP_CROSSCOMPILE'] = '1'
5554d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgtest.run_gyp(gypfile)
56ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.orgos.environ.clear()
57ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.orgos.environ.update(old_env)
58ad617c17daad58cf225fc030081a2d663552b096thakis@chromium.org
5954d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgtest.build(gypfile)
6054d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgtest.must_contain_all_lines(test.stdout(), ['my_cc.py', 'my_cxx.py', 'BAR'])
6154d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.org
6222cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.org# Check that CC_host overrides make_global_settings
6322cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.orgold_env = dict(os.environ)
6422cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.orgos.environ['CC_host'] = '%s %s/my_cc.py SECRET' % (replacements['PYTHON'],
6522cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.org                                                   replacements['PWD'])
6622cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.orgtest.run_gyp(gypfile)
6722cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.orgos.environ.clear()
6822cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.orgos.environ.update(old_env)
6922cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.org
7022cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.orgtest.build(gypfile)
7122cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.orgtest.must_contain_all_lines(test.stdout(), ['SECRET', 'my_cxx.py', 'BAR'])
7222cb58987910c8486ca89c9ce6f3bf0ba3e4d8fdthakis@chromium.org
7354d2f6fe6d8a7b9d9786bd1f8540df6b4f46b83fsbc@chromium.orgtest.pass_test()
74