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