summaryrefslogtreecommitdiffstats
path: root/third_party/python/gyp/test/msvs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/python/gyp/test/msvs')
-rw-r--r--third_party/python/gyp/test/msvs/buildevents/buildevents.gyp14
-rwxr-xr-xthird_party/python/gyp/test/msvs/buildevents/gyptest-msbuild-supports-prepostbuild.py24
-rwxr-xr-xthird_party/python/gyp/test/msvs/buildevents/gyptest-ninja-warnings.py29
-rw-r--r--third_party/python/gyp/test/msvs/buildevents/main.cc5
-rw-r--r--third_party/python/gyp/test/msvs/config_attrs/gyptest-config_attrs.py41
-rw-r--r--third_party/python/gyp/test/msvs/config_attrs/hello.c11
-rw-r--r--third_party/python/gyp/test/msvs/config_attrs/hello.gyp21
-rw-r--r--third_party/python/gyp/test/msvs/express/base/base.gyp22
-rw-r--r--third_party/python/gyp/test/msvs/express/express.gyp19
-rwxr-xr-xthird_party/python/gyp/test/msvs/express/gyptest-express.py29
-rw-r--r--third_party/python/gyp/test/msvs/external_builder/external.gyp68
-rw-r--r--third_party/python/gyp/test/msvs/external_builder/external_builder.py9
-rw-r--r--third_party/python/gyp/test/msvs/external_builder/gyptest-all.py59
-rw-r--r--third_party/python/gyp/test/msvs/external_builder/hello.cpp10
-rw-r--r--third_party/python/gyp/test/msvs/external_builder/hello.z6
-rw-r--r--third_party/python/gyp/test/msvs/external_builder/msbuild_action.py9
-rw-r--r--third_party/python/gyp/test/msvs/external_builder/msbuild_rule.py11
-rw-r--r--third_party/python/gyp/test/msvs/filters/filters.gyp47
-rw-r--r--third_party/python/gyp/test/msvs/filters/gyptest-filters-2008.py68
-rw-r--r--third_party/python/gyp/test/msvs/filters/gyptest-filters-2010.py57
-rw-r--r--third_party/python/gyp/test/msvs/list_excluded/gyptest-all.py51
-rw-r--r--third_party/python/gyp/test/msvs/list_excluded/hello.cpp10
-rw-r--r--third_party/python/gyp/test/msvs/list_excluded/hello_exclude.gyp19
-rw-r--r--third_party/python/gyp/test/msvs/list_excluded/hello_mac.cpp10
-rw-r--r--third_party/python/gyp/test/msvs/missing_sources/gyptest-missing.py43
-rw-r--r--third_party/python/gyp/test/msvs/missing_sources/hello_missing.gyp15
-rw-r--r--third_party/python/gyp/test/msvs/multiple_actions_error_handling/action_fail.py7
-rw-r--r--third_party/python/gyp/test/msvs/multiple_actions_error_handling/action_succeed.py7
-rw-r--r--third_party/python/gyp/test/msvs/multiple_actions_error_handling/actions.gyp40
-rw-r--r--third_party/python/gyp/test/msvs/multiple_actions_error_handling/gyptest.py26
-rw-r--r--third_party/python/gyp/test/msvs/props/AppName.props14
-rw-r--r--third_party/python/gyp/test/msvs/props/AppName.vsprops11
-rw-r--r--third_party/python/gyp/test/msvs/props/gyptest-props.py22
-rw-r--r--third_party/python/gyp/test/msvs/props/hello.c11
-rw-r--r--third_party/python/gyp/test/msvs/props/hello.gyp22
-rw-r--r--third_party/python/gyp/test/msvs/rules_stdout_stderr/dummy.bar5
-rw-r--r--third_party/python/gyp/test/msvs/rules_stdout_stderr/dummy.foo5
-rw-r--r--third_party/python/gyp/test/msvs/rules_stdout_stderr/gyptest-rules-stdout-stderr.py29
-rw-r--r--third_party/python/gyp/test/msvs/rules_stdout_stderr/rule_stderr.py8
-rw-r--r--third_party/python/gyp/test/msvs/rules_stdout_stderr/rule_stdout.py7
-rw-r--r--third_party/python/gyp/test/msvs/rules_stdout_stderr/rules-stdout-stderr.gyp52
-rw-r--r--third_party/python/gyp/test/msvs/shared_output/common.gypi17
-rw-r--r--third_party/python/gyp/test/msvs/shared_output/gyptest-shared_output.py41
-rw-r--r--third_party/python/gyp/test/msvs/shared_output/hello.c12
-rw-r--r--third_party/python/gyp/test/msvs/shared_output/hello.gyp21
-rw-r--r--third_party/python/gyp/test/msvs/shared_output/there/there.c12
-rw-r--r--third_party/python/gyp/test/msvs/shared_output/there/there.gyp16
-rw-r--r--third_party/python/gyp/test/msvs/uldi2010/gyptest-all.py20
-rw-r--r--third_party/python/gyp/test/msvs/uldi2010/hello.c13
-rw-r--r--third_party/python/gyp/test/msvs/uldi2010/hello.gyp26
-rw-r--r--third_party/python/gyp/test/msvs/uldi2010/hello2.c10
51 files changed, 1161 insertions, 0 deletions
diff --git a/third_party/python/gyp/test/msvs/buildevents/buildevents.gyp b/third_party/python/gyp/test/msvs/buildevents/buildevents.gyp
new file mode 100644
index 0000000000..e0304dd5c6
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/buildevents/buildevents.gyp
@@ -0,0 +1,14 @@
+# Copyright (c) 2011 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.
+{
+ 'targets': [
+ {
+ 'target_name': 'main',
+ 'type': 'executable',
+ 'sources': [ 'main.cc', ],
+ 'msvs_prebuild': r'echo starting',
+ 'msvs_postbuild': r'echo finished',
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/buildevents/gyptest-msbuild-supports-prepostbuild.py b/third_party/python/gyp/test/msvs/buildevents/gyptest-msbuild-supports-prepostbuild.py
new file mode 100755
index 0000000000..208f434560
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/buildevents/gyptest-msbuild-supports-prepostbuild.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2011 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 that msvs_prebuild and msvs_postbuild can be specified in both
+VS 2008 and 2010.
+"""
+
+import TestGyp
+
+test = TestGyp.TestGyp(formats=['msvs'], workdir='workarea_all')
+
+test.run_gyp('buildevents.gyp', '-G', 'msvs_version=2008')
+test.must_contain('main.vcproj', 'Name="VCPreBuildEventTool"')
+test.must_contain('main.vcproj', 'Name="VCPostBuildEventTool"')
+
+test.run_gyp('buildevents.gyp', '-G', 'msvs_version=2010')
+test.must_contain('main.vcxproj', '<PreBuildEvent>')
+test.must_contain('main.vcxproj', '<PostBuildEvent>')
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/buildevents/gyptest-ninja-warnings.py b/third_party/python/gyp/test/msvs/buildevents/gyptest-ninja-warnings.py
new file mode 100755
index 0000000000..be4ec9921a
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/buildevents/gyptest-ninja-warnings.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2014 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 that ninja errors out when encountering msvs_prebuild/msvs_postbuild.
+"""
+
+import sys
+import TestCmd
+import TestGyp
+
+
+if sys.platform == 'win32':
+ test = TestGyp.TestGyp(formats=['ninja'])
+
+ test.run_gyp('buildevents.gyp',
+ status=1,
+ stderr=r'.*msvs_prebuild not supported \(target main\).*',
+ match=TestCmd.match_re_dotall)
+
+ test.run_gyp('buildevents.gyp',
+ status=1,
+ stderr=r'.*msvs_postbuild not supported \(target main\).*',
+ match=TestCmd.match_re_dotall)
+
+ test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/buildevents/main.cc b/third_party/python/gyp/test/msvs/buildevents/main.cc
new file mode 100644
index 0000000000..03c0285a6c
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/buildevents/main.cc
@@ -0,0 +1,5 @@
+// Copyright (c) 2014 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.
+
+int main() {}
diff --git a/third_party/python/gyp/test/msvs/config_attrs/gyptest-config_attrs.py b/third_party/python/gyp/test/msvs/config_attrs/gyptest-config_attrs.py
new file mode 100644
index 0000000000..29a8022bd4
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/config_attrs/gyptest-config_attrs.py
@@ -0,0 +1,41 @@
+#!/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 that msvs_configuration_attributes and
+msbuild_configuration_attributes are applied by using
+them to set the OutputDirectory.
+"""
+
+from __future__ import print_function
+
+import TestGyp
+import os
+
+import sys
+
+if sys.platform == 'win32':
+ print("This test is currently disabled: https://crbug.com/483696.")
+ sys.exit(0)
+
+
+
+test = TestGyp.TestGyp(workdir='workarea_all',formats=['msvs'])
+
+vc_version = 'VC90'
+
+if os.getenv('GYP_MSVS_VERSION'):
+ vc_version = ['VC90','VC100'][int(os.getenv('GYP_MSVS_VERSION')) >= 2010]
+
+expected_exe_file = os.path.join(test.workdir, vc_version, 'hello.exe')
+
+test.run_gyp('hello.gyp')
+
+test.build('hello.gyp')
+
+test.must_exist(expected_exe_file)
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/config_attrs/hello.c b/third_party/python/gyp/test/msvs/config_attrs/hello.c
new file mode 100644
index 0000000000..faadc75e2c
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/config_attrs/hello.c
@@ -0,0 +1,11 @@
+/* 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. */
+
+#include <stdio.h>
+
+int main(void)
+{
+ printf("Hello, world!\n");
+ return 0;
+}
diff --git a/third_party/python/gyp/test/msvs/config_attrs/hello.gyp b/third_party/python/gyp/test/msvs/config_attrs/hello.gyp
new file mode 100644
index 0000000000..810a80edd8
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/config_attrs/hello.gyp
@@ -0,0 +1,21 @@
+# 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'hello',
+ 'type': 'executable',
+ 'sources': [
+ 'hello.c',
+ ],
+ 'msvs_configuration_attributes': {
+ 'OutputDirectory':'$(SolutionDir)VC90/'
+ },
+ 'msbuild_configuration_attributes': {
+ 'OutputDirectory':'$(SolutionDir)VC100/',
+ },
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/express/base/base.gyp b/third_party/python/gyp/test/msvs/express/base/base.gyp
new file mode 100644
index 0000000000..b7c9fc6d81
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/express/base/base.gyp
@@ -0,0 +1,22 @@
+# Copyright (c) 2009 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'a',
+ 'type': 'static_library',
+ 'sources': [
+ 'a.c',
+ ],
+ },
+ {
+ 'target_name': 'b',
+ 'type': 'static_library',
+ 'sources': [
+ 'b.c',
+ ],
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/express/express.gyp b/third_party/python/gyp/test/msvs/express/express.gyp
new file mode 100644
index 0000000000..917abe2cc0
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/express/express.gyp
@@ -0,0 +1,19 @@
+# Copyright (c) 2009 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'express',
+ 'type': 'executable',
+ 'dependencies': [
+ 'base/base.gyp:a',
+ 'base/base.gyp:b',
+ ],
+ 'sources': [
+ 'main.c',
+ ],
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/express/gyptest-express.py b/third_party/python/gyp/test/msvs/express/gyptest-express.py
new file mode 100755
index 0000000000..54c06f664a
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/express/gyptest-express.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2009 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 that flat solutions get generated for Express versions of
+Visual Studio.
+"""
+
+import TestGyp
+
+test = TestGyp.TestGyp(formats=['msvs'])
+
+test.run_gyp('express.gyp', '-G', 'msvs_version=2005')
+test.must_contain('express.sln', '(base)')
+
+test.run_gyp('express.gyp', '-G', 'msvs_version=2008')
+test.must_contain('express.sln', '(base)')
+
+test.run_gyp('express.gyp', '-G', 'msvs_version=2005e')
+test.must_not_contain('express.sln', '(base)')
+
+test.run_gyp('express.gyp', '-G', 'msvs_version=2008e')
+test.must_not_contain('express.sln', '(base)')
+
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/external_builder/external.gyp b/third_party/python/gyp/test/msvs/external_builder/external.gyp
new file mode 100644
index 0000000000..abe5b5889c
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/external_builder/external.gyp
@@ -0,0 +1,68 @@
+# Copyright (c) 2013 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.
+
+{
+ 'variables': {
+ # the test driver switches this flag when testing external builder
+ 'use_external_builder%': 0,
+ },
+ 'targets': [
+ {
+ 'target_name': 'external',
+ 'type': 'executable',
+ 'sources': [
+ 'hello.cpp',
+ 'hello.z',
+ ],
+ 'rules': [
+ {
+ 'rule_name': 'test_rule',
+ 'extension': 'z',
+ 'outputs': [
+ 'msbuild_rule.out',
+ ],
+ 'action': [
+ 'python',
+ 'msbuild_rule.py',
+ '<(RULE_INPUT_PATH)',
+ 'a', 'b', 'c',
+ ],
+ 'msvs_cygwin_shell': 0,
+ },
+ ],
+ 'actions': [
+ {
+ 'action_name': 'test action',
+ 'inputs': [
+ 'msbuild_action.py',
+ ],
+ 'outputs': [
+ 'msbuild_action.out',
+ ],
+ 'action': [
+ 'python',
+ '<@(_inputs)',
+ 'x', 'y', 'z',
+ ],
+ 'msvs_cygwin_shell': 0,
+ },
+ ],
+ 'conditions': [
+ ['use_external_builder==1', {
+ 'msvs_external_builder': 'test',
+ 'msvs_external_builder_build_cmd': [
+ 'python',
+ 'external_builder.py',
+ 'build', '1', '2', '3',
+ ],
+ 'msvs_external_builder_clean_cmd': [
+ 'python',
+ 'external_builder.py',
+ 'clean', '4', '5',
+ ],
+ }],
+ ],
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/external_builder/external_builder.py b/third_party/python/gyp/test/msvs/external_builder/external_builder.py
new file mode 100644
index 0000000000..ddfc1e5e33
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/external_builder/external_builder.py
@@ -0,0 +1,9 @@
+# Copyright (c) 2013 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.
+
+import sys
+
+with open('external_builder.out', 'w') as f:
+ f.write(' '.join(sys.argv))
+
diff --git a/third_party/python/gyp/test/msvs/external_builder/gyptest-all.py b/third_party/python/gyp/test/msvs/external_builder/gyptest-all.py
new file mode 100644
index 0000000000..72faa7ab7f
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/external_builder/gyptest-all.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2013 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 that msvs_external_builder being set will invoke the provided
+msvs_external_builder_build_cmd and msvs_external_builder_clean_cmd, and will
+not invoke MSBuild actions and rules.
+"""
+
+import os
+import sys
+import TestGyp
+
+if int(os.environ.get('GYP_MSVS_VERSION', 0)) < 2010:
+ sys.exit(0)
+
+test = TestGyp.TestGyp(formats=['msvs'], workdir='workarea_all')
+
+# without the flag set
+test.run_gyp('external.gyp')
+test.build('external.gyp', target='external')
+test.must_not_exist('external_builder.out')
+test.must_exist('msbuild_rule.out')
+test.must_exist('msbuild_action.out')
+test.must_match('msbuild_rule.out', 'msbuild_rule.py hello.z a b c')
+test.must_match('msbuild_action.out', 'msbuild_action.py x y z')
+os.remove('msbuild_rule.out')
+os.remove('msbuild_action.out')
+
+# with the flag set, using Build
+try:
+ os.environ['GYP_DEFINES'] = 'use_external_builder=1'
+ test.run_gyp('external.gyp')
+ test.build('external.gyp', target='external')
+finally:
+ del os.environ['GYP_DEFINES']
+test.must_not_exist('msbuild_rule.out')
+test.must_not_exist('msbuild_action.out')
+test.must_exist('external_builder.out')
+test.must_match('external_builder.out', 'external_builder.py build 1 2 3')
+os.remove('external_builder.out')
+
+# with the flag set, using Clean
+try:
+ os.environ['GYP_DEFINES'] = 'use_external_builder=1'
+ test.run_gyp('external.gyp')
+ test.build('external.gyp', target='external', clean=True)
+finally:
+ del os.environ['GYP_DEFINES']
+test.must_not_exist('msbuild_rule.out')
+test.must_not_exist('msbuild_action.out')
+test.must_exist('external_builder.out')
+test.must_match('external_builder.out', 'external_builder.py clean 4 5')
+os.remove('external_builder.out')
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/external_builder/hello.cpp b/third_party/python/gyp/test/msvs/external_builder/hello.cpp
new file mode 100644
index 0000000000..bc0c0265b5
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/external_builder/hello.cpp
@@ -0,0 +1,10 @@
+// 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.
+
+#include <stdio.h>
+
+int main(void) {
+ printf("Hello, world!\n");
+ return 0;
+}
diff --git a/third_party/python/gyp/test/msvs/external_builder/hello.z b/third_party/python/gyp/test/msvs/external_builder/hello.z
new file mode 100644
index 0000000000..aa478827b5
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/external_builder/hello.z
@@ -0,0 +1,6 @@
+# Copyright (c) 2013 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.
+
+This file will be passed to the test rule.
+
diff --git a/third_party/python/gyp/test/msvs/external_builder/msbuild_action.py b/third_party/python/gyp/test/msvs/external_builder/msbuild_action.py
new file mode 100644
index 0000000000..632d786922
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/external_builder/msbuild_action.py
@@ -0,0 +1,9 @@
+# Copyright (c) 2013 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.
+
+import sys
+
+with open('msbuild_action.out', 'w') as f:
+ f.write(' '.join(sys.argv))
+
diff --git a/third_party/python/gyp/test/msvs/external_builder/msbuild_rule.py b/third_party/python/gyp/test/msvs/external_builder/msbuild_rule.py
new file mode 100644
index 0000000000..0d6e315775
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/external_builder/msbuild_rule.py
@@ -0,0 +1,11 @@
+# Copyright (c) 2013 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.
+
+import sys, os.path
+
+sys.argv[1] = os.path.basename(sys.argv[1])
+
+with open('msbuild_rule.out', 'w') as f:
+ f.write(' '.join(sys.argv))
+
diff --git a/third_party/python/gyp/test/msvs/filters/filters.gyp b/third_party/python/gyp/test/msvs/filters/filters.gyp
new file mode 100644
index 0000000000..a4106dc8eb
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/filters/filters.gyp
@@ -0,0 +1,47 @@
+# Copyright (c) 2014 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'no_source_files',
+ 'type': 'none',
+ 'sources': [ ],
+ },
+ {
+ 'target_name': 'one_source_file',
+ 'type': 'executable',
+ 'sources': [
+ '../folder/a.c',
+ ],
+ },
+ {
+ 'target_name': 'two_source_files',
+ 'type': 'executable',
+ 'sources': [
+ '../folder/a.c',
+ '../folder/b.c',
+ ],
+ },
+ {
+ 'target_name': 'three_files_in_two_folders',
+ 'type': 'executable',
+ 'sources': [
+ '../folder1/a.c',
+ '../folder1/b.c',
+ '../folder2/c.c',
+ ],
+ },
+ {
+ 'target_name': 'nested_folders',
+ 'type': 'executable',
+ 'sources': [
+ '../folder1/nested/a.c',
+ '../folder2/d.c',
+ '../folder1/nested/b.c',
+ '../folder1/other/c.c',
+ ],
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/filters/gyptest-filters-2008.py b/third_party/python/gyp/test/msvs/filters/gyptest-filters-2008.py
new file mode 100644
index 0000000000..41ca085823
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/filters/gyptest-filters-2008.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2014 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 that extra filters are pruned correctly for Visual Studio 2008.
+"""
+
+import re
+import TestGyp
+
+
+def strip_ws(str):
+ return re.sub('^ +', '', str, flags=re.M).replace('\n', '')
+
+
+test = TestGyp.TestGyp(formats=['msvs'])
+
+test.run_gyp('filters.gyp', '-G', 'standalone', '-G', 'msvs_version=2008')
+
+test.must_contain('no_source_files.vcproj', '<Files/>')
+
+test.must_contain('one_source_file.vcproj', strip_ws('''\
+<Files>
+ <File RelativePath="..\\folder\\a.c"/>
+</Files>
+'''))
+
+test.must_contain('two_source_files.vcproj', strip_ws('''\
+<Files>
+ <File RelativePath="..\\folder\\a.c"/>
+ <File RelativePath="..\\folder\\b.c"/>
+</Files>
+'''))
+
+test.must_contain('three_files_in_two_folders.vcproj', strip_ws('''\
+<Files>
+ <Filter Name="folder1">
+ <File RelativePath="..\\folder1\\a.c"/>
+ <File RelativePath="..\\folder1\\b.c"/>
+ </Filter>
+ <Filter Name="folder2">
+ <File RelativePath="..\\folder2\\c.c"/>
+ </Filter>
+</Files>
+'''))
+
+test.must_contain('nested_folders.vcproj', strip_ws('''\
+<Files>
+ <Filter Name="folder1">
+ <Filter Name="nested">
+ <File RelativePath="..\\folder1\\nested\\a.c"/>
+ <File RelativePath="..\\folder1\\nested\\b.c"/>
+ </Filter>
+ <Filter Name="other">
+ <File RelativePath="..\\folder1\\other\\c.c"/>
+ </Filter>
+ </Filter>
+ <Filter Name="folder2">
+ <File RelativePath="..\\folder2\\d.c"/>
+ </Filter>
+</Files>
+'''))
+
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/filters/gyptest-filters-2010.py b/third_party/python/gyp/test/msvs/filters/gyptest-filters-2010.py
new file mode 100644
index 0000000000..d8131d5d7b
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/filters/gyptest-filters-2010.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2014 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 that extra filters are pruned correctly for Visual Studio 2010
+and later.
+"""
+
+import TestGyp
+
+
+test = TestGyp.TestGyp(formats=['msvs'])
+
+test.run_gyp('filters.gyp', '-G', 'standalone', '-G', 'msvs_version=2010')
+
+test.must_not_exist('no_source_files.vcxproj.filters')
+
+test.must_not_exist('one_source_file.vcxproj.filters')
+
+test.must_not_exist('two_source_files.vcxproj.filters')
+
+test.must_contain('three_files_in_two_folders.vcxproj.filters', '''\
+ <ItemGroup>
+ <ClCompile Include="..\\folder1\\a.c">
+ <Filter>folder1</Filter>
+ </ClCompile>
+ <ClCompile Include="..\\folder1\\b.c">
+ <Filter>folder1</Filter>
+ </ClCompile>
+ <ClCompile Include="..\\folder2\\c.c">
+ <Filter>folder2</Filter>
+ </ClCompile>
+ </ItemGroup>
+'''.replace('\n', '\r\n'))
+
+test.must_contain('nested_folders.vcxproj.filters', '''\
+ <ItemGroup>
+ <ClCompile Include="..\\folder1\\nested\\a.c">
+ <Filter>folder1\\nested</Filter>
+ </ClCompile>
+ <ClCompile Include="..\\folder2\\d.c">
+ <Filter>folder2</Filter>
+ </ClCompile>
+ <ClCompile Include="..\\folder1\\nested\\b.c">
+ <Filter>folder1\\nested</Filter>
+ </ClCompile>
+ <ClCompile Include="..\\folder1\\other\\c.c">
+ <Filter>folder1\\other</Filter>
+ </ClCompile>
+ </ItemGroup>
+'''.replace('\n', '\r\n'))
+
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/list_excluded/gyptest-all.py b/third_party/python/gyp/test/msvs/list_excluded/gyptest-all.py
new file mode 100644
index 0000000000..5a370f6b47
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/list_excluded/gyptest-all.py
@@ -0,0 +1,51 @@
+#!/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 that msvs_list_excluded_files=0 doesn't list files that would
+normally be in _excluded_files, and that if that flag is not set, then they
+are still listed.
+"""
+
+import os
+import TestGyp
+
+test = TestGyp.TestGyp(formats=['msvs'], workdir='workarea_all')
+
+
+# with the flag set to 0
+try:
+ os.environ['GYP_GENERATOR_FLAGS'] = 'msvs_list_excluded_files=0'
+ test.run_gyp('hello_exclude.gyp')
+finally:
+ del os.environ['GYP_GENERATOR_FLAGS']
+if test.uses_msbuild:
+ test.must_not_contain('hello.vcxproj', 'hello_mac')
+else:
+ test.must_not_contain('hello.vcproj', 'hello_mac')
+
+
+# with the flag not set
+test.run_gyp('hello_exclude.gyp')
+if test.uses_msbuild:
+ test.must_contain('hello.vcxproj', 'hello_mac')
+else:
+ test.must_contain('hello.vcproj', 'hello_mac')
+
+
+# with the flag explicitly set to 1
+try:
+ os.environ['GYP_GENERATOR_FLAGS'] = 'msvs_list_excluded_files=1'
+ test.run_gyp('hello_exclude.gyp')
+finally:
+ del os.environ['GYP_GENERATOR_FLAGS']
+if test.uses_msbuild:
+ test.must_contain('hello.vcxproj', 'hello_mac')
+else:
+ test.must_contain('hello.vcproj', 'hello_mac')
+
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/list_excluded/hello.cpp b/third_party/python/gyp/test/msvs/list_excluded/hello.cpp
new file mode 100644
index 0000000000..bc0c0265b5
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/list_excluded/hello.cpp
@@ -0,0 +1,10 @@
+// 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.
+
+#include <stdio.h>
+
+int main(void) {
+ printf("Hello, world!\n");
+ return 0;
+}
diff --git a/third_party/python/gyp/test/msvs/list_excluded/hello_exclude.gyp b/third_party/python/gyp/test/msvs/list_excluded/hello_exclude.gyp
new file mode 100644
index 0000000000..aa160f2367
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/list_excluded/hello_exclude.gyp
@@ -0,0 +1,19 @@
+# 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'hello',
+ 'type': 'executable',
+ 'sources': [
+ 'hello.cpp',
+ 'hello_mac.cpp',
+ ],
+ 'conditions': [
+ ['OS!="mac"', {'sources!': ['hello_mac.cpp']}],
+ ]
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/list_excluded/hello_mac.cpp b/third_party/python/gyp/test/msvs/list_excluded/hello_mac.cpp
new file mode 100644
index 0000000000..b9f6242c4b
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/list_excluded/hello_mac.cpp
@@ -0,0 +1,10 @@
+// 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.
+
+#include <stdio.h>
+
+int hello2() {
+ printf("Hello, two!\n");
+ return 0;
+}
diff --git a/third_party/python/gyp/test/msvs/missing_sources/gyptest-missing.py b/third_party/python/gyp/test/msvs/missing_sources/gyptest-missing.py
new file mode 100644
index 0000000000..62a99ef0f1
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/missing_sources/gyptest-missing.py
@@ -0,0 +1,43 @@
+#!/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 that missing 'sources' files are treated as fatal errors when the
+the generator flag 'msvs_error_on_missing_sources' is set.
+"""
+
+import TestGyp
+import os
+import sys
+
+if sys.platform == 'win32':
+ test = TestGyp.TestGyp(formats=['msvs', 'ninja'], workdir='workarea_all')
+
+ # With the flag not set
+ test.run_gyp('hello_missing.gyp')
+
+ # With the flag explicitly set to 0
+ try:
+ os.environ['GYP_GENERATOR_FLAGS'] = 'msvs_error_on_missing_sources=0'
+ test.run_gyp('hello_missing.gyp')
+ finally:
+ del os.environ['GYP_GENERATOR_FLAGS']
+
+ # With the flag explicitly set to 1
+ try:
+ os.environ['GYP_GENERATOR_FLAGS'] = 'msvs_error_on_missing_sources=1'
+ # Test to make sure GYP raises an exception (exit status 1). Since this will
+ # also print a backtrace, ensure that TestGyp is not checking that stderr is
+ # empty by specifying None, which means do not perform any checking.
+ # Instead, stderr is checked below to ensure it contains the expected
+ # output.
+ test.run_gyp('hello_missing.gyp', status=1, stderr=None)
+ finally:
+ del os.environ['GYP_GENERATOR_FLAGS']
+ test.must_contain_any_line(test.stderr(),
+ ["Missing input files:"])
+
+ test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/missing_sources/hello_missing.gyp b/third_party/python/gyp/test/msvs/missing_sources/hello_missing.gyp
new file mode 100644
index 0000000000..c08926bbff
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/missing_sources/hello_missing.gyp
@@ -0,0 +1,15 @@
+# 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'hello',
+ 'type': 'executable',
+ 'sources': [
+ 'hello_missing.cpp',
+ ],
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/multiple_actions_error_handling/action_fail.py b/third_party/python/gyp/test/msvs/multiple_actions_error_handling/action_fail.py
new file mode 100644
index 0000000000..286fc4e132
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/multiple_actions_error_handling/action_fail.py
@@ -0,0 +1,7 @@
+# Copyright (c) 2014 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.
+
+import sys
+
+sys.exit(1)
diff --git a/third_party/python/gyp/test/msvs/multiple_actions_error_handling/action_succeed.py b/third_party/python/gyp/test/msvs/multiple_actions_error_handling/action_succeed.py
new file mode 100644
index 0000000000..3554373197
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/multiple_actions_error_handling/action_succeed.py
@@ -0,0 +1,7 @@
+# Copyright (c) 2014 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.
+
+import sys
+
+sys.exit(0)
diff --git a/third_party/python/gyp/test/msvs/multiple_actions_error_handling/actions.gyp b/third_party/python/gyp/test/msvs/multiple_actions_error_handling/actions.gyp
new file mode 100644
index 0000000000..ab99e929e2
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/multiple_actions_error_handling/actions.gyp
@@ -0,0 +1,40 @@
+# Copyright (c) 2014 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'actions-test',
+ 'type': 'none',
+ 'actions': [
+ {
+ 'action_name': 'first action (fails)',
+ 'inputs': [
+ 'action_fail.py',
+ ],
+ 'outputs': [
+ 'ALWAYS_OUT_OF_DATE',
+ ],
+ 'action': [
+ 'python', '<@(_inputs)'
+ ],
+ 'msvs_cygwin_shell': 0,
+ },
+ {
+ 'action_name': 'second action (succeeds)',
+ 'inputs': [
+ 'action_succeed.py',
+ ],
+ 'outputs': [
+ 'ALWAYS_OUT_OF_DATE',
+ ],
+ 'action': [
+ 'python', '<@(_inputs)'
+ ],
+ 'msvs_cygwin_shell': 0,
+ },
+ ],
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/multiple_actions_error_handling/gyptest.py b/third_party/python/gyp/test/msvs/multiple_actions_error_handling/gyptest.py
new file mode 100644
index 0000000000..3aa6b8fdb2
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/multiple_actions_error_handling/gyptest.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2014 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 that failing actions make the build fail reliably, even when there
+are multiple actions in one project.
+"""
+
+import os
+import sys
+import TestGyp
+import TestCmd
+
+test = TestGyp.TestGyp(formats=['msvs'], workdir='workarea_all')
+
+test.run_gyp('actions.gyp')
+test.build('actions.gyp',
+ target='actions-test',
+ status=1,
+ stdout=r'.*"cmd\.exe" exited with code 1\..*',
+ match=TestCmd.match_re_dotall)
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/props/AppName.props b/third_party/python/gyp/test/msvs/props/AppName.props
new file mode 100644
index 0000000000..b688f663d5
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/props/AppName.props
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="UserMacros">
+ <AppName>Greet</AppName>
+ </PropertyGroup>
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+ </PropertyGroup>
+ <ItemGroup>
+ <BuildMacro Include="AppName">
+ <Value>$(AppName)</Value>
+ </BuildMacro>
+ </ItemGroup>
+</Project>
diff --git a/third_party/python/gyp/test/msvs/props/AppName.vsprops b/third_party/python/gyp/test/msvs/props/AppName.vsprops
new file mode 100644
index 0000000000..84b9af3800
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/props/AppName.vsprops
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="Common"
+ >
+ <UserMacro
+ Name="AppName"
+ Value="Greet"
+ />
+</VisualStudioPropertySheet>
diff --git a/third_party/python/gyp/test/msvs/props/gyptest-props.py b/third_party/python/gyp/test/msvs/props/gyptest-props.py
new file mode 100644
index 0000000000..abd4df2241
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/props/gyptest-props.py
@@ -0,0 +1,22 @@
+#!/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 props files are added by using a
+props file to set the name of the built executable.
+"""
+
+import TestGyp
+
+test = TestGyp.TestGyp(workdir='workarea_all', formats=['msvs'])
+
+test.run_gyp('hello.gyp')
+
+test.build('hello.gyp')
+
+test.built_file_must_exist('Greet.exe')
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/props/hello.c b/third_party/python/gyp/test/msvs/props/hello.c
new file mode 100644
index 0000000000..faadc75e2c
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/props/hello.c
@@ -0,0 +1,11 @@
+/* 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. */
+
+#include <stdio.h>
+
+int main(void)
+{
+ printf("Hello, world!\n");
+ return 0;
+}
diff --git a/third_party/python/gyp/test/msvs/props/hello.gyp b/third_party/python/gyp/test/msvs/props/hello.gyp
new file mode 100644
index 0000000000..5a58317fa7
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/props/hello.gyp
@@ -0,0 +1,22 @@
+# 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.
+{
+ 'targets': [
+ {
+ 'target_name': 'hello',
+ 'product_name': '$(AppName)',
+ 'type': 'executable',
+ 'sources': [
+ 'hello.c',
+ ],
+ 'msvs_props': [
+ '$(SolutionDir)AppName.vsprops'
+ ],
+ 'msbuild_props': [
+ '$(SolutionDir)AppName.props'
+ ],
+ },
+ ],
+}
+
diff --git a/third_party/python/gyp/test/msvs/rules_stdout_stderr/dummy.bar b/third_party/python/gyp/test/msvs/rules_stdout_stderr/dummy.bar
new file mode 100644
index 0000000000..25178696d2
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/rules_stdout_stderr/dummy.bar
@@ -0,0 +1,5 @@
+# Copyright (c) 2015 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.
+
+A dummy file with the .bar extension (used for stderr rule).
diff --git a/third_party/python/gyp/test/msvs/rules_stdout_stderr/dummy.foo b/third_party/python/gyp/test/msvs/rules_stdout_stderr/dummy.foo
new file mode 100644
index 0000000000..6a7990bb98
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/rules_stdout_stderr/dummy.foo
@@ -0,0 +1,5 @@
+# Copyright (c) 2015 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.
+
+A dummy file with the .foo extension (used for stdout rule).
diff --git a/third_party/python/gyp/test/msvs/rules_stdout_stderr/gyptest-rules-stdout-stderr.py b/third_party/python/gyp/test/msvs/rules_stdout_stderr/gyptest-rules-stdout-stderr.py
new file mode 100644
index 0000000000..804505a23d
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/rules_stdout_stderr/gyptest-rules-stdout-stderr.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2015 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 that stdout and stderr from rules get logged in the build's
+stdout."""
+
+import sys
+import TestGyp
+
+if sys.platform == 'win32':
+ test = TestGyp.TestGyp(formats=['msvs'])
+
+ test.run_gyp('rules-stdout-stderr.gyp')
+ test.build('rules-stdout-stderr.gyp', test.ALL)
+
+ expected_stdout_lines = [
+ 'testing stdout',
+ 'This will go to stdout',
+
+ # Note: stderr output from rules will go to the build's stdout.
+ 'testing stderr',
+ 'This will go to stderr',
+ ]
+ test.must_contain_all_lines(test.stdout(), expected_stdout_lines)
+
+ test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/rules_stdout_stderr/rule_stderr.py b/third_party/python/gyp/test/msvs/rules_stdout_stderr/rule_stderr.py
new file mode 100644
index 0000000000..2081513ec8
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/rules_stdout_stderr/rule_stderr.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python
+# Copyright (c) 2015 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.
+
+from __future__ import print_function
+import sys
+print("This will go to stderr", file=sys.stderr)
diff --git a/third_party/python/gyp/test/msvs/rules_stdout_stderr/rule_stdout.py b/third_party/python/gyp/test/msvs/rules_stdout_stderr/rule_stdout.py
new file mode 100644
index 0000000000..4c073ebc45
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/rules_stdout_stderr/rule_stdout.py
@@ -0,0 +1,7 @@
+#!/usr/bin/env python
+# Copyright (c) 2015 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.
+
+from __future__ import print_function
+print("This will go to stdout")
diff --git a/third_party/python/gyp/test/msvs/rules_stdout_stderr/rules-stdout-stderr.gyp b/third_party/python/gyp/test/msvs/rules_stdout_stderr/rules-stdout-stderr.gyp
new file mode 100644
index 0000000000..ce93643f8e
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/rules_stdout_stderr/rules-stdout-stderr.gyp
@@ -0,0 +1,52 @@
+# Copyright (c) 2015 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'test',
+ 'type': 'none',
+ 'sources': [
+ 'dummy.foo',
+ 'dummy.bar',
+ ],
+ 'rules': [
+ {
+ 'rule_name': 'test_stdout',
+ 'extension': 'foo',
+ 'message': 'testing stdout',
+ 'msvs_cygwin_shell': 0,
+ 'inputs': [
+ 'rule_stdout.py',
+ ],
+ 'outputs': [
+ 'dummy.foo_output',
+ ],
+ 'action': [
+ 'python',
+ 'rule_stdout.py',
+ '<(RULE_INPUT_PATH)',
+ ],
+ },
+ {
+ 'rule_name': 'test_stderr',
+ 'extension': 'bar',
+ 'message': 'testing stderr',
+ 'msvs_cygwin_shell': 0,
+ 'inputs': [
+ 'rule_stderr.py',
+ ],
+ 'outputs': [
+ 'dummy.bar_output',
+ ],
+ 'action': [
+ 'python',
+ 'rule_stderr.py',
+ '<(RULE_INPUT_PATH)',
+ ],
+ },
+ ],
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/shared_output/common.gypi b/third_party/python/gyp/test/msvs/shared_output/common.gypi
new file mode 100644
index 0000000000..c6fa341d68
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/shared_output/common.gypi
@@ -0,0 +1,17 @@
+# 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.
+
+{
+ 'target_defaults': {
+ 'default_configuration': 'Baz',
+ 'configurations': {
+ 'Baz': {
+ 'msvs_configuration_attributes': {
+ 'OutputDirectory': '<(DEPTH)/foo',
+ 'IntermediateDirectory': '$(OutDir)/bar',
+ },
+ },
+ },
+ },
+}
diff --git a/third_party/python/gyp/test/msvs/shared_output/gyptest-shared_output.py b/third_party/python/gyp/test/msvs/shared_output/gyptest-shared_output.py
new file mode 100644
index 0000000000..270b280e6b
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/shared_output/gyptest-shared_output.py
@@ -0,0 +1,41 @@
+#!/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.
+
+"""
+Test checking that IntermediateDirectory can be defined in terms of
+OutputDirectory. We previously had emitted the definition of
+IntermediateDirectory before the definition of OutputDirectory.
+This is required so that $(IntDir) can be based on $(OutDir).
+"""
+
+import TestGyp
+import os
+
+# NOTE: This test really is vcbuild/msbuild specific (not applicable to windows
+# ninja), as it is testing the msvs output location when opening an .sln
+# other than all.sln.
+test = TestGyp.TestGyp(workdir='workarea_shared_output', formats=['msvs'])
+
+test.run_gyp('hello.gyp')
+test.set_configuration('Baz')
+
+test.build('there/there.gyp', test.ALL)
+test.must_exist(os.path.join(test.workdir, 'foo', 'there.exe'))
+test.must_exist(os.path.join(test.workdir, 'foo', 'bar', 'there.obj'))
+
+test.build('hello.gyp', test.ALL)
+test.must_exist(os.path.join(test.workdir, 'foo', 'hello.exe'))
+test.must_exist(os.path.join(test.workdir, 'foo', 'bar', 'hello.obj'))
+
+if test.format == 'msvs':
+ if test.uses_msbuild:
+ test.must_contain('pull_in_there.vcxproj',
+ '<IntDir>$(OutDir)bar\\</IntDir>')
+ else:
+ test.must_contain('pull_in_there.vcproj',
+ 'IntermediateDirectory="$(OutDir)bar\\"')
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/shared_output/hello.c b/third_party/python/gyp/test/msvs/shared_output/hello.c
new file mode 100644
index 0000000000..698e4fd36c
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/shared_output/hello.c
@@ -0,0 +1,12 @@
+/*
+ * 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.
+ */
+
+#include <stdio.h>
+
+int main(void) {
+ printf("Hello, world!\n");
+ return 0;
+}
diff --git a/third_party/python/gyp/test/msvs/shared_output/hello.gyp b/third_party/python/gyp/test/msvs/shared_output/hello.gyp
new file mode 100644
index 0000000000..f80e5cfca1
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/shared_output/hello.gyp
@@ -0,0 +1,21 @@
+# 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.
+
+{
+ 'includes': ['common.gypi'],
+ 'targets': [
+ {
+ 'target_name': 'pull_in_there',
+ 'type': 'none',
+ 'dependencies': ['there/there.gyp:*'],
+ },
+ {
+ 'target_name': 'hello',
+ 'type': 'executable',
+ 'sources': [
+ 'hello.c',
+ ],
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/shared_output/there/there.c b/third_party/python/gyp/test/msvs/shared_output/there/there.c
new file mode 100644
index 0000000000..698e4fd36c
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/shared_output/there/there.c
@@ -0,0 +1,12 @@
+/*
+ * 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.
+ */
+
+#include <stdio.h>
+
+int main(void) {
+ printf("Hello, world!\n");
+ return 0;
+}
diff --git a/third_party/python/gyp/test/msvs/shared_output/there/there.gyp b/third_party/python/gyp/test/msvs/shared_output/there/there.gyp
new file mode 100644
index 0000000000..56feff326c
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/shared_output/there/there.gyp
@@ -0,0 +1,16 @@
+# 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.
+
+{
+ 'includes': ['../common.gypi'],
+ 'targets': [
+ {
+ 'target_name': 'there',
+ 'type': 'executable',
+ 'sources': [
+ 'there.c',
+ ],
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/uldi2010/gyptest-all.py b/third_party/python/gyp/test/msvs/uldi2010/gyptest-all.py
new file mode 100644
index 0000000000..cc248fbd63
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/uldi2010/gyptest-all.py
@@ -0,0 +1,20 @@
+#!/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 that uldi can be disabled on a per-project-reference basis in vs2010.
+"""
+
+import TestGyp
+
+test = TestGyp.TestGyp(formats=['msvs'], workdir='workarea_all')
+
+test.run_gyp('hello.gyp')
+
+if test.uses_msbuild:
+ test.must_contain('hello.vcxproj', '<UseLibraryDependencyInputs>false')
+
+test.pass_test()
diff --git a/third_party/python/gyp/test/msvs/uldi2010/hello.c b/third_party/python/gyp/test/msvs/uldi2010/hello.c
new file mode 100644
index 0000000000..06e6a02905
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/uldi2010/hello.c
@@ -0,0 +1,13 @@
+/* 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. */
+
+#include <stdio.h>
+
+extern int hello2();
+
+int main(void) {
+ printf("Hello, world!\n");
+ hello2();
+ return 0;
+}
diff --git a/third_party/python/gyp/test/msvs/uldi2010/hello.gyp b/third_party/python/gyp/test/msvs/uldi2010/hello.gyp
new file mode 100644
index 0000000000..a2bf2badb1
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/uldi2010/hello.gyp
@@ -0,0 +1,26 @@
+# 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'hello',
+ 'type': 'executable',
+ 'sources': [
+ 'hello.c',
+ ],
+ 'dependencies': [
+ 'hellolib',
+ ]
+ },
+ {
+ 'target_name': 'hellolib',
+ 'type': 'static_library',
+ 'sources': [
+ 'hello2.c',
+ ],
+ 'msvs_2010_disable_uldi_when_referenced': 1,
+ },
+ ],
+}
diff --git a/third_party/python/gyp/test/msvs/uldi2010/hello2.c b/third_party/python/gyp/test/msvs/uldi2010/hello2.c
new file mode 100644
index 0000000000..e2f23238d1
--- /dev/null
+++ b/third_party/python/gyp/test/msvs/uldi2010/hello2.c
@@ -0,0 +1,10 @@
+/* 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. */
+
+#include <stdio.h>
+
+int hello2() {
+ printf("Hello, two!\n");
+ return 0;
+}