19f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org#!/usr/bin/env python 29f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 39be1d37a9a6561f135412db66806def9f82a29c1steveblock@chromium.org# Copyright (c) 2012 Google Inc. All rights reserved. 49f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org# Use of this source code is governed by a BSD-style license that can be 59f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org# found in the LICENSE file. 69f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 79f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org""" 89f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgVerifies build of an executable with C++ define specified by a gyp define, and 99f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgthe use of the environment during regeneration when the gyp file changes. 109f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org""" 119f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 129f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgimport os 139f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgimport TestGyp 149f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 159f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgenv_stack = [] 169f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 179f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 189f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgdef PushEnv(): 199f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org env_copy = os.environ.copy() 209f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org env_stack.append(env_copy) 219f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 229f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgdef PopEnv(): 239f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org os.eniron=env_stack.pop() 249f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 259f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org# Regenerating build files when a gyp file changes is currently only supported 26dc9d50a9c015fa86d8ffae123d63173cf5bd7b73torne@chromium.org# by the make generator. 27dc9d50a9c015fa86d8ffae123d63173cf5bd7b73torne@chromium.orgtest = TestGyp.TestGyp(formats=['make']) 289f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 299f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgtry: 309f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org PushEnv() 319f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org os.environ['CXXFLAGS'] = '-O0' 329f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org test.run_gyp('cxxflags.gyp') 339f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgfinally: 349f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org # We clear the environ after calling gyp. When the auto-regeneration happens, 359f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org # the same define should be reused anyway. Reset to empty string first in 369f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org # case the platform doesn't support unsetenv. 379f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org PopEnv() 389f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 399f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgtest.build('cxxflags.gyp') 409f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 419f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgexpect = """\ 429f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgUsing no optimization flag 439f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org""" 449f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgtest.run_built_executable('cxxflags', stdout=expect) 459f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 469f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgtest.sleep() 479f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 489f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgtry: 499f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org PushEnv() 509f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org os.environ['CXXFLAGS'] = '-O2' 519f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org test.run_gyp('cxxflags.gyp') 529f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgfinally: 539f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org # We clear the environ after calling gyp. When the auto-regeneration happens, 549f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org # the same define should be reused anyway. Reset to empty string first in 559f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org # case the platform doesn't support unsetenv. 569f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org PopEnv() 579f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 589f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgtest.build('cxxflags.gyp') 599f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 609f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgexpect = """\ 619f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgUsing an optimization flag 629f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org""" 639f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgtest.run_built_executable('cxxflags', stdout=expect) 649f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.org 659f9d0be98ead83b8b1c5be8302c6fc56e57b285cevan@chromium.orgtest.pass_test() 66