Fix over-zealous common prefix matching when generating Visual Studio project files...
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sun, 12 Feb 2006 15:34:44 +0000 (15:34 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sun, 12 Feb 2006 15:34:44 +0000 (15:34 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1419 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/Tool/msvs.py
src/engine/SCons/Tool/msvs.xml
test/MSVS/common-prefix.py [new file with mode: 0644]
test/MSVS/runfile.py [new file with mode: 0644]
test/MSVS/vs-7.0-files.py
test/MSVS/vs-7.1-files.py
test/MSVS/vs-8.0-files.py

index 1407e3ff76621d8e08c8c47544da7c4e435548c0..5a6935ee1cf086927b695eaf96be38b409b5c2ee 100644 (file)
@@ -25,6 +25,12 @@ RELEASE 0.97 - XXX
   - Support generating more than one project file for a Microsoft
     Visual Studio solution file.
 
+  - Add support for a support "runfile" parameter to Microsoft
+    Visual Studio project file creation.
+
+  - Put the project GUID, not the solution GUID, in the right spot
+    in the solution file.
+
   From Erling Andersen:
 
   - Fix interpretation of Node.FS objects wrapped in Proxy instances,
@@ -226,6 +232,15 @@ RELEASE 0.97 - XXX
     external environment, or settable internally) to put a shortened
     SCons execution line in the Visual Studio project file.
 
+  From David J. Van Maren:
+
+  - Only filter common prefixes from source files names in Visual Studio
+    project files if the prefix is a complete (sub)directory name.
+
+  From Thad Ward:
+
+  - If $MSVSVERSIONS is already set, don't overwrite it with
+    information from the registry.
 
 
 
index 6747d54751ed1841d1a190c38aea4634c546b29d..074733ace2251973e06bc0e0cf2b2eba1ef02a66 100644 (file)
@@ -72,6 +72,8 @@ def xmlify(s):
     s = string.replace(s, '"', "&quot;")
     return s
 
+external_makefile_guid = '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}'
+
 def _generateGUID(slnfile, name):
     """This generates a dummy GUID for the sln file to use.  It is
     based on the MD5 signatures of the sln filename plus the name of
@@ -228,6 +230,28 @@ class _DSPGenerator:
             for v in variants:
                 outdir.append(s)
 
+        if not env.has_key('runfile') or env['runfile'] == None:
+            runfile = buildtarget[-1:]
+        elif SCons.Util.is_String(env['runfile']):
+            runfile = [env['runfile']]
+        elif SCons.Util.is_List(env['runfile']):
+            if len(env['runfile']) != len(variants):
+                raise SCons.Errors.InternalError, \
+                    "Sizes of 'runfile' and 'variant' lists must be the same."
+            runfile = []
+            for s in env['runfile']:
+                if SCons.Util.is_String(s):
+                    runfile.append(s)
+                else:
+                    runfile.append(s.get_abspath())
+        else:
+            runfile = [env['runfile'].get_abspath()]
+        if len(runfile) == 1:
+            s = runfile[0]
+            runfile = []
+            for v in variants:
+                runfile.append(s)
+
         self.sconscript = env['MSVSSCONSCRIPT']
 
         cmdargs = env.get('cmdargs', '')
@@ -238,6 +262,7 @@ class _DSPGenerator:
             self.name = self.env['name']
         else:
             self.name = os.path.basename(SCons.Util.splitext(self.dspfile)[0])
+        self.name = self.env.subst(self.name)
 
         sourcenames = [
             'Source Files',
@@ -272,11 +297,12 @@ class _DSPGenerator:
         for n in sourcenames:
             self.sources[n].sort(lambda a, b: cmp(a.lower(), b.lower()))
 
-        def AddConfig(variant, buildtarget, outdir, cmdargs):
+        def AddConfig(variant, buildtarget, outdir, runfile, cmdargs):
             config = Config()
             config.buildtarget = buildtarget
             config.outdir = outdir
             config.cmdargs = cmdargs
+            config.runfile = runfile
 
             match = re.match('(.*)\|(.*)', variant)
             if match:
@@ -290,7 +316,7 @@ class _DSPGenerator:
             print "Adding '" + self.name + ' - ' + config.variant + '|' + config.platform + "' to '" + str(dspfile) + "'"
 
         for i in range(len(variants)):
-            AddConfig(variants[i], buildtarget[i], outdir[i],cmdargs)
+            AddConfig(variants[i], buildtarget[i], outdir[i], runfile[i], cmdargs)
 
         self.platforms = []
         for key in self.configs.keys():
@@ -521,7 +547,7 @@ V7DSPConfiguration = """\
 \t\t\t\tBuildCommandLine="%(buildcmd)s"
 \t\t\t\tCleanCommandLine="%(cleancmd)s"
 \t\t\t\tRebuildCommandLine="%(rebuildcmd)s"
-\t\t\t\tOutput="%(buildtarget)s"/>
+\t\t\t\tOutput="%(runfile)s"/>
 \t\t</Configuration>
 """
 
@@ -548,7 +574,7 @@ V8DSPConfiguration = """\
 \t\t\t\tBuildCommandLine="%(buildcmd)s"
 \t\t\t\tReBuildCommandLine="%(rebuildcmd)s"
 \t\t\t\tCleanCommandLine="%(cleancmd)s"
-\t\t\t\tOutput="%(buildtarget)s"
+\t\t\t\tOutput="%(runfile)s"
 \t\t\t\tPreprocessorDefinitions=""
 \t\t\t\tIncludeSearchPath=""
 \t\t\t\tForcedIncludes=""
@@ -624,6 +650,7 @@ class _GenerateV7DSP(_DSPGenerator):
             platform = self.configs[kind].platform
             outdir = self.configs[kind].outdir
             buildtarget = self.configs[kind].buildtarget
+            runfile     = self.configs[kind].runfile
             cmdargs = self.configs[kind].cmdargs
 
             env_has_buildtarget = self.env.has_key('MSVSBUILDTARGET')
@@ -682,7 +709,7 @@ class _GenerateV7DSP(_DSPGenerator):
                                 '\t\t\tFilter="%s">\n' % (kind, categories[kind]))
 
 
-            def printSources(hierarchy):
+            def printSources(hierarchy, commonprefix):
                 sorteditems = hierarchy.items()
                 sorteditems.sort(lambda a, b: cmp(a[0].lower(), b[0].lower()))
 
@@ -692,7 +719,7 @@ class _GenerateV7DSP(_DSPGenerator):
                         self.file.write('\t\t\t<Filter\n'
                                         '\t\t\t\tName="%s"\n'
                                         '\t\t\t\tFilter="">\n' % (key))
-                        printSources(value)
+                        printSources(value, commonprefix)
                         self.file.write('\t\t\t</Filter>\n')
 
                 for key, value in sorteditems:
@@ -710,13 +737,14 @@ class _GenerateV7DSP(_DSPGenerator):
             # First remove any common prefix
             commonprefix = None
             if len(sources) > 1:
-                commonprefix = os.path.commonprefix(sources)
-                prefixlen = len(commonprefix)
-                if prefixlen:
-                    sources = map(lambda s, p=prefixlen: s[p:], sources)
+                s = map(os.path.normpath, sources)
+                cp = os.path.commonprefix(s)
+                if cp and s[0][len(cp)] == os.path.sep:
+                    sources = map(lambda s, l=len(cp): s[l:], sources)
+                    commonprefix = cp
 
             hierarchy = makeHierarchy(sources)
-            printSources(hierarchy)
+            printSources(hierarchy, commonprefix=commonprefix)
 
             if len(cats)>1:
                 self.file.write('\t\t</Filter>\n')
@@ -810,6 +838,7 @@ class _DSWGenerator:
             self.name = self.env['name']
         else:
             self.name = os.path.basename(SCons.Util.splitext(self.dswfile)[0])
+        self.name = self.env.subst(self.name)
 
     def Build(self):
         pass
@@ -913,9 +942,9 @@ class _GenerateV7DSW(_DSWGenerator):
             base, suffix = SCons.Util.splitext(name)
             if suffix == '.vcproj':
                 name = base
-            # the next line has the GUID for an external makefile project.
-            self.file.write('Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "%s", "%s", "%s"\n'
-                            % ( name, p, self.slnguid ) )
+            guid = _generateGUID(p, '')
+            self.file.write('Project("%s") = "%s", "%s", "%s"\n'
+                            % ( external_makefile_guid, name, p, guid ) )
             if self.version_num >= 7.1 and self.version_num < 8.0:
                 self.file.write('\tProjectSection(ProjectDependencies) = postProject\n'
                                 '\tEndProjectSection\n')
@@ -1102,21 +1131,24 @@ def get_default_visualstudio_version(env):
 
     version = '6.0'
     versions = [version]
+
     if not env.has_key('MSVS') or not SCons.Util.is_Dict(env['MSVS']):
-        env['MSVS'] = {}
+        env['MSVS'] = {}    
 
-    if env.has_key('MSVS_VERSION'):
-        version = env['MSVS_VERSION']
-        versions = [version]
-    else:
         if SCons.Util.can_read_reg:
-            versions = get_visualstudio_versions()
-            if versions:
-                version = versions[0] #use highest version by default
+            v = get_visualstudio_versions()
+            if v:
+                versions = v
+        if env.has_key('MSVS_VERSION'):
+            version = env['MSVS_VERSION']
+        else:
+            version = versions[0] #use highest version by default
 
-    env['MSVS_VERSION'] = version
-    env['MSVS']['VERSIONS'] = versions
-    env['MSVS']['VERSION'] = version
+        env['MSVS_VERSION'] = version
+        env['MSVS']['VERSIONS'] = versions
+        env['MSVS']['VERSION'] = version
+    else:
+        version = env['MSVS']['VERSION']
 
     return version
 
index babc20f8f3b58340860f1ee9d02bfe591d703d26..56180b00de8e20b352f37d9a10f345c4f91d222f 100644 (file)
@@ -61,8 +61,11 @@ NOT as SCons File Nodes.  This is because they represent file
 names to be added to the project file, not the source files used to
 build the project file.
 
-In addition to the above lists of values (which are all optional,
-although not specifying any of them results in an empty project file),
+The above filename lists are all optional,
+although at least one must be specified
+for the resulting project file to be non-empty.
+
+In addition to the above lists of values,
 the following values may be specified:
 
 <literal>target</literal>:
@@ -108,6 +111,17 @@ entries must match the number of
 <literal>variant</literal>
 entries.
 
+<literal>runfile</literal>:
+The name of the file that Visual Studio 7 and later
+will run and debug.
+This appears as the value of the
+<literal>Output</literal>
+field in the resutling Visual Studio project file.
+If this is not specified,
+the default is the same as the specified
+<literal>buildtarget</literal>
+value.
+
 Example usage:
 
 <example>
diff --git a/test/MSVS/common-prefix.py b/test/MSVS/common-prefix.py
new file mode 100644 (file)
index 0000000..6f508c9
--- /dev/null
@@ -0,0 +1,138 @@
+
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+"""
+Test that we can generate Visual Studio 8.0 project (.vcproj) and
+solution (.sln) files that look correct.
+"""
+
+import os
+import os.path
+import sys
+
+import TestCmd
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+if sys.platform != 'win32':
+    msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform
+    test.skip_test(msg)
+
+expected_vcprojfile = """\
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+\tProjectType="Visual C++"
+\tVersion="8.00"
+\tName="Test"
+\tProjectGUID="<PROJECT_GUID>"
+\tSccProjectName=""
+\tSccLocalPath=""
+\tRootNamespace="Test"
+\tKeyword="MakeFileProj">
+\t<Platforms>
+\t\t<Platform
+\t\t\tName="Win32"/>
+\t</Platforms>
+\t<ToolFiles>
+\t</ToolFiles>
+\t<Configurations>
+\t\t<Configuration
+\t\t\tName="Release|Win32"
+\t\t\tConfigurationType="0"
+\t\t\tUseOfMFC="0"
+\t\t\tATLMinimizesCRunTimeLibraryUsage="false"
+\t\t\t>
+\t\t\t<Tool
+\t\t\t\tName="VCNMakeTool"
+\t\t\t\tBuildCommandLine="echo Starting SCons &amp;&amp; &quot;<PYTHON>&quot; -c &quot;<SCONS_SCRIPT_MAIN_XML>&quot; -C &quot;<WORKPATH>&quot; -f SConstruct Test.exe"
+\t\t\t\tReBuildCommandLine="echo Starting SCons &amp;&amp; &quot;<PYTHON>&quot; -c &quot;<SCONS_SCRIPT_MAIN_XML>&quot; -C &quot;<WORKPATH>&quot; -f SConstruct Test.exe"
+\t\t\t\tCleanCommandLine="echo Starting SCons &amp;&amp; &quot;<PYTHON>&quot; -c &quot;<SCONS_SCRIPT_MAIN_XML>&quot; -C &quot;<WORKPATH>&quot; -f SConstruct -c Test.exe"
+\t\t\t\tOutput="Test.exe"
+\t\t\t\tPreprocessorDefinitions=""
+\t\t\t\tIncludeSearchPath=""
+\t\t\t\tForcedIncludes=""
+\t\t\t\tAssemblySearchPath=""
+\t\t\t\tForcedUsingAssemblies=""
+\t\t\t\tCompileAsManaged=""
+\t\t\t/>
+\t\t</Configuration>
+\t</Configurations>
+\t<References>
+\t</References>
+\t<Files>
+\t\t\t<Filter
+\t\t\t\tName="subdir"
+\t\t\t\tFilter="">
+\t\t\t<File
+\t\t\t\tRelativePath="subdir\\test1.cpp">
+\t\t\t</File>
+\t\t\t<File
+\t\t\t\tRelativePath="subdir\\test2.cpp">
+\t\t\t</File>
+\t\t\t</Filter>
+\t\t<File
+\t\t\tRelativePath="<SCONSCRIPT>">
+\t\t</File>
+\t</Files>
+\t<Globals>
+\t</Globals>
+</VisualStudioProject>
+"""
+
+
+
+SConscript_contents = """\
+env=Environment(MSVS_VERSION = '8.0')
+
+testsrc = ['subdir/test1.cpp', r'subdir\\test2.cpp']
+
+env.MSVSProject(target = 'Test.vcproj',
+                slnguid = '{SLNGUID}',
+                srcs = testsrc,
+                buildtarget = 'Test.exe',
+                variant = 'Release',
+                auto_build_solution = 0)
+"""
+
+
+
+test.subdir('work1')
+
+test.write(['work1', 'SConstruct'], SConscript_contents)
+
+test.run(chdir='work1', arguments="Test.vcproj")
+
+test.must_exist(test.workpath('work1', 'Test.vcproj'))
+vcproj = test.read(['work1', 'Test.vcproj'], 'r')
+expect = test.msvs_substitute(expected_vcprojfile, '8.0', 'work1', 'SConstruct')
+# don't compare the pickled data
+assert vcproj[:len(expect)] == expect, test.diff_substr(expect, vcproj)
+
+
+
+test.pass_test()
diff --git a/test/MSVS/runfile.py b/test/MSVS/runfile.py
new file mode 100644 (file)
index 0000000..581de64
--- /dev/null
@@ -0,0 +1,130 @@
+
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+"""
+Test that we can generate Visual Studio 8.0 project (.vcproj) and
+solution (.sln) files that look correct.
+"""
+
+import os
+import os.path
+import sys
+
+import TestCmd
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+if sys.platform != 'win32':
+    msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform
+    test.skip_test(msg)
+
+expected_vcprojfile = """\
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+\tProjectType="Visual C++"
+\tVersion="8.00"
+\tName="Test"
+\tProjectGUID="<PROJECT_GUID>"
+\tSccProjectName=""
+\tSccLocalPath=""
+\tRootNamespace="Test"
+\tKeyword="MakeFileProj">
+\t<Platforms>
+\t\t<Platform
+\t\t\tName="Win32"/>
+\t</Platforms>
+\t<ToolFiles>
+\t</ToolFiles>
+\t<Configurations>
+\t\t<Configuration
+\t\t\tName="Release|Win32"
+\t\t\tConfigurationType="0"
+\t\t\tUseOfMFC="0"
+\t\t\tATLMinimizesCRunTimeLibraryUsage="false"
+\t\t\t>
+\t\t\t<Tool
+\t\t\t\tName="VCNMakeTool"
+\t\t\t\tBuildCommandLine="echo Starting SCons &amp;&amp; &quot;<PYTHON>&quot; -c &quot;<SCONS_SCRIPT_MAIN_XML>&quot; -C &quot;<WORKPATH>&quot; -f SConstruct Test.exe"
+\t\t\t\tReBuildCommandLine="echo Starting SCons &amp;&amp; &quot;<PYTHON>&quot; -c &quot;<SCONS_SCRIPT_MAIN_XML>&quot; -C &quot;<WORKPATH>&quot; -f SConstruct Test.exe"
+\t\t\t\tCleanCommandLine="echo Starting SCons &amp;&amp; &quot;<PYTHON>&quot; -c &quot;<SCONS_SCRIPT_MAIN_XML>&quot; -C &quot;<WORKPATH>&quot; -f SConstruct -c Test.exe"
+\t\t\t\tOutput="runfile.exe"
+\t\t\t\tPreprocessorDefinitions=""
+\t\t\t\tIncludeSearchPath=""
+\t\t\t\tForcedIncludes=""
+\t\t\t\tAssemblySearchPath=""
+\t\t\t\tForcedUsingAssemblies=""
+\t\t\t\tCompileAsManaged=""
+\t\t\t/>
+\t\t</Configuration>
+\t</Configurations>
+\t<References>
+\t</References>
+\t<Files>
+\t\t\t<File
+\t\t\t\tRelativePath="test.cpp">
+\t\t\t</File>
+\t\t<File
+\t\t\tRelativePath="<SCONSCRIPT>">
+\t\t</File>
+\t</Files>
+\t<Globals>
+\t</Globals>
+</VisualStudioProject>
+"""
+
+
+
+SConscript_contents = """\
+env=Environment(MSVS_VERSION = '8.0')
+
+env.MSVSProject(target = 'Test.vcproj',
+                slnguid = '{SLNGUID}',
+                srcs = ['test.cpp'],
+                buildtarget = 'Test.exe',
+                runfile = 'runfile.exe',
+                variant = 'Release',
+                auto_build_solution = 0)
+"""
+
+
+
+test.subdir('work1')
+
+test.write(['work1', 'SConstruct'], SConscript_contents)
+
+test.run(chdir='work1', arguments="Test.vcproj")
+
+test.must_exist(test.workpath('work1', 'Test.vcproj'))
+vcproj = test.read(['work1', 'Test.vcproj'], 'r')
+expect = test.msvs_substitute(expected_vcprojfile, '8.0', 'work1', 'SConstruct')
+# don't compare the pickled data
+assert vcproj[:len(expect)] == expect, test.diff_substr(expect, vcproj)
+
+
+
+test.pass_test()
index e6826076205f1fd8155057498d5b275a37b44c24..8c82d1aef074da7c65c931a8d1af081b5f1dedb7 100644 (file)
@@ -44,7 +44,7 @@ if sys.platform != 'win32':
 
 expected_slnfile = """\
 Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test.vcproj", "{SLNGUID}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test.vcproj", "{E5466E26-0003-F18B-8F8A-BCD76C86388D}"
 EndProject
 Global
 \tGlobalSection(SolutionConfiguration) = preSolution
@@ -126,7 +126,10 @@ expected_vcprojfile = """\
 \t\t\tName="Source Files"
 \t\t\tFilter="cpp;c;cxx;l;y;def;odl;idl;hpj;bat">
 \t\t\t<File
-\t\t\t\tRelativePath="test.cpp">
+\t\t\t\tRelativePath="test1.cpp">
+\t\t\t</File>
+\t\t\t<File
+\t\t\t\tRelativePath="test2.cpp">
 \t\t\t</File>
 \t\t</Filter>
 \t\t<File
@@ -143,7 +146,7 @@ expected_vcprojfile = """\
 SConscript_contents = """\
 env=Environment(MSVS_VERSION = '7.0')
 
-testsrc = ['test.cpp']
+testsrc = ['test1.cpp', 'test2.cpp']
 testincs = ['sdk.h']
 testlocalincs = ['test.h']
 testresources = ['test.rc']
@@ -259,7 +262,7 @@ test.subdir('work3')
 test.write(['work3', 'SConstruct'], """\
 env=Environment(MSVS_VERSION = '7.0')
 
-testsrc = ['test.cpp']
+testsrc = ['test1.cpp', 'test2.cpp']
 testincs = ['sdk.h']
 testlocalincs = ['test.h']
 testresources = ['test.rc']
index 131e4bd05f782b1979abdce0eb52cfc4cff50a03..bbe6f1e9d8c049f77069a9024fa84026d576a960 100644 (file)
@@ -44,7 +44,7 @@ if sys.platform != 'win32':
 
 expected_slnfile = """\
 Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test.vcproj", "{SLNGUID}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test.vcproj", "{E5466E26-0003-F18B-8F8A-BCD76C86388D}"
 \tProjectSection(ProjectDependencies) = postProject
 \tEndProjectSection
 EndProject
@@ -128,7 +128,10 @@ expected_vcprojfile = """\
 \t\t\tName="Source Files"
 \t\t\tFilter="cpp;c;cxx;l;y;def;odl;idl;hpj;bat">
 \t\t\t<File
-\t\t\t\tRelativePath="test.cpp">
+\t\t\t\tRelativePath="test1.cpp">
+\t\t\t</File>
+\t\t\t<File
+\t\t\t\tRelativePath="test2.cpp">
 \t\t\t</File>
 \t\t</Filter>
 \t\t<File
@@ -145,7 +148,7 @@ expected_vcprojfile = """\
 SConscript_contents = """\
 env=Environment(MSVS_VERSION = '7.1')
 
-testsrc = ['test.cpp']
+testsrc = ['test1.cpp', 'test2.cpp']
 testincs = ['sdk.h']
 testlocalincs = ['test.h']
 testresources = ['test.rc']
@@ -261,7 +264,7 @@ test.subdir('work3')
 test.write(['work3', 'SConstruct'], """\
 env=Environment(MSVS_VERSION = '7.1')
 
-testsrc = ['test.cpp']
+testsrc = ['test1.cpp', 'test2.cpp']
 testincs = ['sdk.h']
 testlocalincs = ['test.h']
 testresources = ['test.rc']
index 65d82462e1ef12e22685e2f552eeaaba5d028c42..878aa3ffc57c79aef7c09456981e35b0b1ee47fa 100644 (file)
@@ -45,7 +45,7 @@ if sys.platform != 'win32':
 expected_slnfile = """\
 Microsoft Visual Studio Solution File, Format Version 9.00
 # Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test.vcproj", "{SLNGUID}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test.vcproj", "{E5466E26-0003-F18B-8F8A-BCD76C86388D}"
 EndProject
 Global
 \tGlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -135,7 +135,10 @@ expected_vcprojfile = """\
 \t\t\tName="Source Files"
 \t\t\tFilter="cpp;c;cxx;l;y;def;odl;idl;hpj;bat">
 \t\t\t<File
-\t\t\t\tRelativePath="test.cpp">
+\t\t\t\tRelativePath="test1.cpp">
+\t\t\t</File>
+\t\t\t<File
+\t\t\t\tRelativePath="test2.cpp">
 \t\t\t</File>
 \t\t</Filter>
 \t\t<File
@@ -152,7 +155,7 @@ expected_vcprojfile = """\
 SConscript_contents = """\
 env=Environment(MSVS_VERSION = '8.0')
 
-testsrc = ['test.cpp']
+testsrc = ['test1.cpp', 'test2.cpp']
 testincs = ['sdk.h']
 testlocalincs = ['test.h']
 testresources = ['test.rc']
@@ -272,7 +275,7 @@ test.subdir('work3')
 test.write(['work3', 'SConstruct'], """\
 env=Environment(MSVS_VERSION = '8.0')
 
-testsrc = ['test.cpp']
+testsrc = ['test1.cpp', 'test2.cpp']
 testincs = ['sdk.h']
 testlocalincs = ['test.h']
 testresources = ['test.rc']