10c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org#!/usr/bin/env python 20c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 31d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org# Copyright (c) 2012 Google Inc. All rights reserved. 4ea13fb0eee7f81ce6037b95339566fa0fb9d7bd9thomasvl@chromium.org# Use of this source code is governed by a BSD-style license that can be 5ea13fb0eee7f81ce6037b95339566fa0fb9d7bd9thomasvl@chromium.org# found in the LICENSE file. 6ea13fb0eee7f81ce6037b95339566fa0fb9d7bd9thomasvl@chromium.org 70c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org""" 80c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgVerifies that a rule that generates multiple outputs rebuilds 90c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgcorrectly when the inputs change. 100c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org""" 110c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 120c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgimport TestGyp 130c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 14c55f9ca139f2900a3e612c892b4276ed4652328bjeanluc@google.comtest = TestGyp.TestGyp(workdir='workarea_default') 150c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 160c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.run_gyp('same_target.gyp', chdir='src') 170c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 180c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.relocate('src', 'relocate/src') 190c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 200c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 210c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.build('same_target.gyp', chdir='relocate/src') 220c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 230c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgexpect = """\ 240c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgHello from main.c 250c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgHello from prog1.in! 260c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgHello from prog2.in! 270c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org""" 280c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 290c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.run_built_executable('program', chdir='relocate/src', stdout=expect) 300c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 310c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.up_to_date('same_target.gyp', 'program', chdir='relocate/src') 320c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 330c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 340c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.sleep() 350c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgcontents = test.read(['relocate', 'src', 'prog1.in']) 360c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgcontents = contents.replace('!', ' AGAIN!') 370c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.write(['relocate', 'src', 'prog1.in'], contents) 380c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 390c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.build('same_target.gyp', chdir='relocate/src') 400c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 410c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgexpect = """\ 420c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgHello from main.c 430c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgHello from prog1.in AGAIN! 440c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgHello from prog2.in! 450c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org""" 460c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 470c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.run_built_executable('program', chdir='relocate/src', stdout=expect) 480c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 490c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.up_to_date('same_target.gyp', 'program', chdir='relocate/src') 500c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 510c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 520c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.sleep() 530c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgcontents = test.read(['relocate', 'src', 'prog2.in']) 540c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgcontents = contents.replace('!', ' AGAIN!') 550c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.write(['relocate', 'src', 'prog2.in'], contents) 560c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 570c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.build('same_target.gyp', chdir='relocate/src') 580c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 590c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgexpect = """\ 600c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgHello from main.c 610c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgHello from prog1.in AGAIN! 620c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgHello from prog2.in AGAIN! 630c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org""" 640c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 650c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.run_built_executable('program', chdir='relocate/src', stdout=expect) 660c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 670c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.up_to_date('same_target.gyp', 'program', chdir='relocate/src') 680c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 690c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.org 701d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org# Test that modifying a rule's inputs (specifically, make-sources.py) causes 711d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org# the targets to be built. 721d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org 731d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgtest.sleep() 741d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgcontents = test.read(['relocate', 'src', 'make-sources.py']) 751d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgcontents = contents.replace('%s', 'the amazing %s') 761d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgtest.write(['relocate', 'src', 'make-sources.py'], contents) 771d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org 781d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgtest.build('same_target.gyp', chdir='relocate/src') 791d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org 801d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgexpect = """\ 811d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgHello from main.c 821d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgHello from the amazing prog1.in AGAIN! 831d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgHello from the amazing prog2.in AGAIN! 841d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org""" 851d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org 861d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgtest.run_built_executable('program', chdir='relocate/src', stdout=expect) 871d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org 881d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.orgtest.up_to_date('same_target.gyp', 'program', chdir='relocate/src') 891d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org 901d54fed606d6115ae3cc3bb4c55ded088aed0c95grt@chromium.org 910c391ffe6d7c2264f8e237aaf2cee6ad7178e8e7sgk@chromium.orgtest.pass_test() 92