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