#!/usr/bin/env python

# Copyright (c) 2012 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""
Verifies --generator-output= behavior when using rules.
"""

import TestGyp

# Android doesn't support --generator-output.
test = TestGyp.TestGyp(formats=['!android'])

test.writable(test.workpath('rules'), False)

test.run_gyp('rules.gyp',
             '--generator-output=' + test.workpath('gypfiles'),
             '-G', 'xcode_ninja_target_pattern=^pull_in_all_actions$',
             chdir='rules')

test.writable(test.workpath('rules'), True)

test.relocate('rules', 'relocate/rules')
test.relocate('gypfiles', 'relocate/gypfiles')

test.writable(test.workpath('relocate/rules'), False)

test.writable(test.workpath('relocate/rules/build'), True)
test.writable(test.workpath('relocate/rules/subdir1/build'), True)
test.writable(test.workpath('relocate/rules/subdir2/build'), True)
test.writable(test.workpath('relocate/rules/subdir2/rules-out'), True)

test.build('rules.gyp', test.ALL, chdir='relocate/gypfiles')

expect = """\
Hello from program.c
Hello from function1.in1
Hello from function2.in1
Hello from define3.in0
Hello from define4.in0
"""

if test.format == 'xcode':
  chdir = 'relocate/rules/subdir1'
else:
  chdir = 'relocate/gypfiles'
test.run_built_executable('program', chdir=chdir, stdout=expect)

test.must_match('relocate/rules/subdir2/rules-out/file1.out',
                "Hello from file1.in0\n")
test.must_match('relocate/rules/subdir2/rules-out/file2.out',
                "Hello from file2.in0\n")
test.must_match('relocate/rules/subdir2/rules-out/file3.out',
                "Hello from file3.in1\n")
test.must_match('relocate/rules/subdir2/rules-out/file4.out',
                "Hello from file4.in1\n")

test.pass_test()
