Merge pull request #4584 from siegria/fix_piped_spawn_encoding
[scons.git] / test / MSVS / vs-10.0Exp-exec.py
blob87ddf29cea91eca96d320b0960a6d4c05c0d5dc8
1 #!/usr/bin/env python
3 # __COPYRIGHT__
5 # Permission is hereby granted, free of charge, to any person obtaining
6 # a copy of this software and associated documentation files (the
7 # "Software"), to deal in the Software without restriction, including
8 # without limitation the rights to use, copy, modify, merge, publish,
9 # distribute, sublicense, and/or sell copies of the Software, and to
10 # permit persons to whom the Software is furnished to do so, subject to
11 # the following conditions:
13 # The above copyright notice and this permission notice shall be included
14 # in all copies or substantial portions of the Software.
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
27 """
28 Test that we can actually build a simple program using our generated
29 Visual Studio 10.0 project (.vcxproj) and solution (.sln) files
30 using Visual C++ 10.0 Express edition.
31 """
33 import os
34 import sys
36 import TestSConsMSVS
38 test = TestSConsMSVS.TestSConsMSVS()
40 if sys.platform != 'win32':
41 msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform
42 test.skip_test(msg)
44 msvs_version = '10.0Exp'
46 if not msvs_version in test.msvs_versions():
47 msg = "Visual Studio %s not installed; skipping test.\n" % msvs_version
48 test.skip_test(msg)
52 # Let SCons figure out the Visual Studio environment variables for us and
53 # print out a statement that we can exec to suck them into our external
54 # environment so we can execute devenv and really try to build something.
56 test.run(arguments = '-n -q -Q -f -', stdin = """\
57 env = Environment(tools = ['msvc'], MSVS_VERSION='%(msvs_version)s')
58 if env.WhereIs('cl'):
59 print("os.environ.update(%%s)" %% repr(env['ENV']))
60 """ % locals())
62 if test.stdout() == "":
63 msg = "Visual Studio %s missing cl.exe; skipping test.\n" % msvs_version
64 test.skip_test(msg)
66 exec(test.stdout())
70 test.subdir('sub dir')
72 test.write(['sub dir', 'SConstruct'], """\
73 env=Environment(MSVS_VERSION = '%(msvs_version)s')
75 env.MSVSProject(target = 'foo.vcxproj',
76 srcs = ['foo.c'],
77 buildtarget = 'foo.exe',
78 variant = 'Release')
80 env.Program('foo.c')
81 """ % locals())
83 test.write(['sub dir', 'foo.c'], r"""
84 int
85 main(int argc, char *argv)
87 printf("foo.c\n");
88 exit (0);
90 """)
92 test.run(chdir='sub dir', arguments='.')
94 test.unlink_files('sub dir', ['foo.exe', 'foo.obj', '.sconsign.dblite'])
96 test.vcproj_sys_path(test.workpath('sub dir', 'foo.vcxproj'))
98 import SCons.Platform.win32
99 system_dll_path = os.path.join( SCons.Platform.win32.get_system_root(), 'System32' )
100 os.environ['PATH'] = os.environ['PATH'] + os.pathsep + system_dll_path
102 test.run(chdir='sub dir',
103 program=[test.get_msvs_executable(msvs_version)],
104 arguments=['foo.sln', '/build', 'Release'])
106 test.run(program=test.workpath('sub dir', 'foo'), stdout="foo.c\n")
110 test.pass_test()
112 # Local Variables:
113 # tab-width:4
114 # indent-tabs-mode:nil
115 # End:
116 # vim: set expandtab tabstop=4 shiftwidth=4: