145a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org#!/usr/bin/env python 245a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 39be1d37a9a6561f135412db66806def9f82a29c1steveblock@chromium.org# Copyright (c) 2012 Google Inc. All rights reserved. 4df8224662e615bd36cf8bebae8e58c017201f998sgk@chromium.org# Use of this source code is governed by a BSD-style license that can be 5df8224662e615bd36cf8bebae8e58c017201f998sgk@chromium.org# found in the LICENSE file. 6df8224662e615bd36cf8bebae8e58c017201f998sgk@chromium.org 745a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org""" 845a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgVerifies simple actions when using the default build target. 945a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org""" 1045a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 1145a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgimport TestGyp 1245a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 13c55f9ca139f2900a3e612c892b4276ed4652328bjeanluc@google.comtest = TestGyp.TestGyp(workdir='workarea_default') 1445a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 1545a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgtest.run_gyp('actions.gyp', chdir='src') 1645a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 17fa5b46b96b21ff75d8b6b3dacc4693b69c43654csgk@chromium.orgtest.relocate('src', 'relocate/src') 1845a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 19f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org# Some gyp files use an action that mentions an output but never 20f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org# writes it as a means to making the action run on every build. That 21f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org# doesn't mesh well with ninja's semantics. TODO(evan): figure out 22f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org# how to work always-run actions in to ninja. 239be1d37a9a6561f135412db66806def9f82a29c1steveblock@chromium.org# Android also can't do this as it doesn't have order-only dependencies. 249be1d37a9a6561f135412db66806def9f82a29c1steveblock@chromium.orgif test.format in ['ninja', 'android']: 25f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.build('actions.gyp', test.ALL, chdir='relocate/src') 26f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.orgelse: 27f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # Test that an "always run" action increases a counter on multiple 28f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # invocations, and that a dependent action updates in step. 29f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.build('actions.gyp', chdir='relocate/src') 30f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '1') 31f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '1') 32f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.build('actions.gyp', chdir='relocate/src') 33f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '2') 34f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '2') 35f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org 36f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # The "always run" action only counts to 2, but the dependent target 37f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # will count forever if it's allowed to run. This verifies that the 38f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # dependent target only runs when the "always run" action generates 39f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # new output, not just because the "always run" ran. 40f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.build('actions.gyp', test.ALL, chdir='relocate/src') 41f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '2') 42f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '2') 43d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 44f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgexpect = """\ 45f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgHello from program.c 46f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgHello from make-prog1.py 47f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgHello from make-prog2.py 48f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.org""" 49f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.org 5065f1cdd22ad8f73f507077d3baab38c6314f13c8mmoss@chromium.orgif test.format == 'xcode': 5145a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org chdir = 'relocate/src/subdir1' 5245a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgelse: 5345a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org chdir = 'relocate/src' 54f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgtest.run_built_executable('program', chdir=chdir, stdout=expect) 5545a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 56d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 5745a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgtest.must_match('relocate/src/subdir2/file.out', "Hello from make-file.py\n") 5845a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 59d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 60d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.orgexpect = "Hello from generate_main.py\n" 61d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 62d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.orgif test.format == 'xcode': 63d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org chdir = 'relocate/src/subdir3' 64d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.orgelse: 65d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org chdir = 'relocate/src' 66d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.orgtest.run_built_executable('null_input', chdir=chdir, stdout=expect) 67d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 68d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 6945a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgtest.pass_test() 70