15ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org#!/usr/bin/env python 25ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org 3df8224662e615bd36cf8bebae8e58c017201f998sgk@chromium.org# Copyright (c) 2009 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 75ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org""" 8b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgVerifies simple build of a "Hello, world!" program with static libraries, 9b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgincluding verifying that libraries are rebuilt correctly when functions 10b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgmove between libraries. 115ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org""" 125ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org 135ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.orgimport TestGyp 145ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org 155ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.orgtest = TestGyp.TestGyp() 165ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org 17b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgtest.run_gyp('library.gyp', 18b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org '-Dlibrary=static_library', 19b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org '-Dmoveable_function=lib1', 20b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org chdir='src') 215ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org 22bd94f9b3f53e0252712fc5d20ccfabc5dfab9994sgk@chromium.orgtest.relocate('src', 'relocate/src') 23bd94f9b3f53e0252712fc5d20ccfabc5dfab9994sgk@chromium.org 24040d50e7277c41a0b9641dc42c76be8605055637sgk@chromium.orgtest.build('library.gyp', test.ALL, chdir='relocate/src') 255ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org 265ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.orgexpect = """\ 275ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.orgHello from program.c 28bd94f9b3f53e0252712fc5d20ccfabc5dfab9994sgk@chromium.orgHello from lib1.c 29b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello from lib2.c 30b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello from lib1_moveable.c 315ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org""" 32bd94f9b3f53e0252712fc5d20ccfabc5dfab9994sgk@chromium.orgtest.run_built_executable('program', chdir='relocate/src', stdout=expect) 335ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.org 34b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 35b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgtest.run_gyp('library.gyp', 36b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org '-Dlibrary=static_library', 37b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org '-Dmoveable_function=lib2', 38b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org chdir='relocate/src') 39b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 40b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org# Update program.c to force a rebuild. 41b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgtest.sleep() 42b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgcontents = test.read('relocate/src/program.c') 43b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgcontents = contents.replace('Hello', 'Hello again') 44b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgtest.write('relocate/src/program.c', contents) 45b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 46040d50e7277c41a0b9641dc42c76be8605055637sgk@chromium.orgtest.build('library.gyp', test.ALL, chdir='relocate/src') 47b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 48b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgexpect = """\ 49b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello again from program.c 50b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello from lib1.c 51b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello from lib2.c 52b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello from lib2_moveable.c 53b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org""" 54b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgtest.run_built_executable('program', chdir='relocate/src', stdout=expect) 55b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 56b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 57b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgtest.run_gyp('library.gyp', 58b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org '-Dlibrary=static_library', 59b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org '-Dmoveable_function=lib1', 60b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org chdir='relocate/src') 61b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 62f9113f9f8144044157f771ddc89282f4ad18d9b4sgk@chromium.org# Update program.c and lib2.c to force a rebuild. 63b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgtest.sleep() 64b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgcontents = test.read('relocate/src/program.c') 65b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgcontents = contents.replace('again', 'again again') 66b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgtest.write('relocate/src/program.c', contents) 67b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 68f9113f9f8144044157f771ddc89282f4ad18d9b4sgk@chromium.org# TODO(sgk): we have to force a rebuild of lib2 so that it weeds out 69f9113f9f8144044157f771ddc89282f4ad18d9b4sgk@chromium.org# the "moved" module. This should be done in gyp by adding a dependency 70f9113f9f8144044157f771ddc89282f4ad18d9b4sgk@chromium.org# on the generated .vcproj file itself. 71f9113f9f8144044157f771ddc89282f4ad18d9b4sgk@chromium.orgtest.touch('relocate/src/lib2.c') 72f9113f9f8144044157f771ddc89282f4ad18d9b4sgk@chromium.org 73040d50e7277c41a0b9641dc42c76be8605055637sgk@chromium.orgtest.build('library.gyp', test.ALL, chdir='relocate/src') 74b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 75b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgexpect = """\ 76b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello again again from program.c 77b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello from lib1.c 78b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello from lib2.c 79b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgHello from lib1_moveable.c 80b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org""" 81b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.orgtest.run_built_executable('program', chdir='relocate/src', stdout=expect) 82b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 83b06ffce92c3e2a37af13f1c35cb098b735c0f1f7sgk@chromium.org 845ea4dad540d8385c12c322ef95cedd87c16aef0asgk@chromium.orgtest.pass_test() 85