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 an explicit build target of 'all'. 945a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org""" 1045a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 110064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgimport glob 120064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgimport os 1345a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgimport TestGyp 1445a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 15c55f9ca139f2900a3e612c892b4276ed4652328bjeanluc@google.comtest = TestGyp.TestGyp(workdir='workarea_all') 1645a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 1745a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgtest.run_gyp('actions.gyp', chdir='src') 1845a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 19fa5b46b96b21ff75d8b6b3dacc4693b69c43654csgk@chromium.orgtest.relocate('src', 'relocate/src') 2045a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 21f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org# Some gyp files use an action that mentions an output but never 22f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org# writes it as a means to making the action run on every build. That 23f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org# doesn't mesh well with ninja's semantics. TODO(evan): figure out 24f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org# how to work always-run actions in to ninja. 259be1d37a9a6561f135412db66806def9f82a29c1steveblock@chromium.org# Android also can't do this as it doesn't have order-only dependencies. 269be1d37a9a6561f135412db66806def9f82a29c1steveblock@chromium.orgif test.format in ['ninja', 'android']: 27f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.build('actions.gyp', test.ALL, chdir='relocate/src') 28f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.orgelse: 29f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # Test that an "always run" action increases a counter on multiple 30f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # invocations, and that a dependent action updates in step. 31f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.build('actions.gyp', test.ALL, chdir='relocate/src') 32f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '1') 33f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '1') 34f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.build('actions.gyp', test.ALL, chdir='relocate/src') 35f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '2') 36f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '2') 37f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org 38f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # The "always run" action only counts to 2, but the dependent target 39f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # will count forever if it's allowed to run. This verifies that the 40f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # dependent target only runs when the "always run" action generates 41f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org # new output, not just because the "always run" ran. 42f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.build('actions.gyp', test.ALL, chdir='relocate/src') 43f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '2') 44f040c6194657a5972871a96cb8c3572e9296ef37evan@chromium.org test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '2') 45d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 46f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgexpect = """\ 47f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgHello from program.c 48f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgHello from make-prog1.py 49f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgHello from make-prog2.py 50f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.org""" 51f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.org 5265f1cdd22ad8f73f507077d3baab38c6314f13c8mmoss@chromium.orgif test.format == 'xcode': 5345a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org chdir = 'relocate/src/subdir1' 5445a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgelse: 5545a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org chdir = 'relocate/src' 56f187950af9c156ac83af453d63b57edfeed6b200sgk@chromium.orgtest.run_built_executable('program', chdir=chdir, stdout=expect) 5745a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 58d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 5945a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgtest.must_match('relocate/src/subdir2/file.out', "Hello from make-file.py\n") 6045a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.org 61d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 62d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.orgexpect = "Hello from generate_main.py\n" 63d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 64d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.orgif test.format == 'xcode': 65d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org chdir = 'relocate/src/subdir3' 66d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.orgelse: 67d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org chdir = 'relocate/src' 68d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.orgtest.run_built_executable('null_input', chdir=chdir, stdout=expect) 69d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 70d27ec050ed1676c69bae71faaa2b675804a2ab73sgk@chromium.org 710064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org# Clean out files which may have been created if test.ALL was run. 720064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgdef clean_dep_files(): 730064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org for file in (glob.glob('relocate/src/dep_*.txt') + 740064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org glob.glob('relocate/src/deps_all_done_*.txt')): 750064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org if os.path.exists(file): 760064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org os.remove(file) 770064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org 780064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org# Confirm our clean. 790064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgclean_dep_files() 800064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgtest.must_not_exist('relocate/src/dep_1.txt') 810064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgtest.must_not_exist('relocate/src/deps_all_done_first_123.txt') 820064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org 830064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org# Make sure all deps finish before an action is run on a 'None' target. 840064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org# If using the Make builder, add -j to make things more difficult. 850064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgarguments = [] 860064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgif test.format == 'make': 870064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org arguments = ['-j'] 880064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgtest.build('actions.gyp', 'action_with_dependencies_123', chdir='relocate/src', 890064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org arguments=arguments) 900064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgtest.must_exist('relocate/src/deps_all_done_first_123.txt') 910064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org 920064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org# Try again with a target that has deps in reverse. Output files from 930064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org# previous tests deleted. Confirm this execution did NOT run the ALL 940064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org# target which would mess up our dep tests. 950064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgclean_dep_files() 960064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgtest.build('actions.gyp', 'action_with_dependencies_321', chdir='relocate/src', 970064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org arguments=arguments) 980064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgtest.must_exist('relocate/src/deps_all_done_first_321.txt') 990064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.orgtest.must_not_exist('relocate/src/deps_all_done_first_123.txt') 1000064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org 1010064df5e9ec0afc53d4103d7c61c0c7f75b6c641jrg@chromium.org 10245a90d82e8c974fb09788af03418fccf97e03f29sgk@chromium.orgtest.pass_test() 103