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