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