Merged revisions 4025-4029 via svnmerge from
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 21 Feb 2009 17:22:56 +0000 (17:22 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 21 Feb 2009 17:22:56 +0000 (17:22 +0000)
http://scons.tigris.org/svn/scons/branches/vs_revamp

........
  r4025 | stevenknight | 2009-02-19 22:47:45 -0800 (Thu, 19 Feb 2009) | 2 lines

  Remove the MSVCCommon directory itself.
........
  r4026 | stevenknight | 2009-02-20 06:37:55 -0800 (Fri, 20 Feb 2009) | 7 lines

  Since we're now treating Pro and Express editions as just separate
  versions, use the actual Visual Studio executable, not the .bat file,
  to decide if a version is installed.
  Add separate tests scripts for executing the Express editions.
  Add (untested) 9.0 and 9.0Exp test scripts, cut-and-paste from 8.0 and 8.0Exp.
  Ignore generated *.py[co] files in the Tool/MSCommon directory.
........
  r4027 | stevenknight | 2009-02-21 06:50:58 -0800 (Sat, 21 Feb 2009) | 3 lines

  Escape CC and LINK path names in the expected output to match path
  names that contain regular expression characters (e.g. " (x86)").
........
  r4028 | stevenknight | 2009-02-21 06:56:42 -0800 (Sat, 21 Feb 2009) | 7 lines

  Fix devenv.com paths for VS 7.0 and 7.1 (.NET and .NET 2003).
  Remove unused methods.
  Put debug() calls under control of a SCONS_MSCOMMON_DEBUG environment
  variable.
  Regularize debug messages and make it obvious who's printing what.
  Rename "install_dir" methods in sdk.py to "sdk_dir" to help.
........

git-svn-id: http://scons.tigris.org/svn/scons/trunk@4030 fdb21ef1-2011-0410-befe-b5e4ea1792b1

12 files changed:
src/engine/SCons/Tool/MSCommon/common.py
src/engine/SCons/Tool/MSCommon/sdk.py
src/engine/SCons/Tool/MSCommon/vs.py
test/MSVS/vs-6.0-exec.py
test/MSVS/vs-7.0-exec.py
test/MSVS/vs-7.1-exec.py
test/MSVS/vs-8.0-exec.py
test/MSVS/vs-8.0Exp-exec.py [new file with mode: 0644]
test/MSVS/vs-9.0-exec.py [new file with mode: 0644]
test/MSVS/vs-9.0Exp-exec.py [new file with mode: 0644]
test/sconsign/script/Configure.py
test/sconsign/script/dblite.py

index 619b242fa5ec1ecc8175a795e8b4bc332f77125d..1e4aef87841077a49d259f7a1b0b1b1c0d6ba921 100644 (file)
@@ -34,17 +34,19 @@ import re
 
 import SCons.Util
 
-# Uncomment to enable debug logging to your choice of file
-#import logging,os
-#os.unlink('c:/tmp/debug.log')
-#logging.basicConfig(filename='c:/tmp/debug.log', level=logging.DEBUG,)
 
-try:
-    from logging import debug
-except ImportError:
-    debug = lambda x : None
+logfile = os.environ.get('SCONS_MSCOMMON_DEBUG')
+if logfile:
+    try:
+        import logging
+    except ImportError:
+        debug = lambda x: open(logfile, 'a').write(x + '\n')
+    else:
+        logging.basicConfig(filename=logfile, level=logging.DEBUG)
+        debug = logging.debug
+else:
+    debug = lambda x: None
 
-#debug = lambda x : open('con', 'w').write(x + '\n')
 
 # TODO(sgk): unused
 def is_win64():
index 80e68521d32f6f02ada5ffafebfbe83728db399a..6791fd7c0587a97baa42df6a48f9121e196ba221 100644 (file)
@@ -63,43 +63,42 @@ class SDKDefinition:
         self.version = version
         self.__dict__.update(kw)
 
-    def find_install_dir(self):
+    def find_sdk_dir(self):
         """Try to find the MS SDK from the registry.
 
         Return None if failed or the directory does not exist.
         """
         if not SCons.Util.can_read_reg:
-            debug('SCons cannot read registry')
+            debug('find_sdk_dir():  can not read registry')
             return None
 
         hkey = self.HKEY_FMT % self.hkey_data
 
         try:
-            install_dir = read_reg(hkey)
-            debug('Found sdk dir in registry: %s' % install_dir)
+            sdk_dir = read_reg(hkey)
         except WindowsError, e:
-            debug('Did not find sdk dir key %s in registry' % hkey)
+            debug('find_sdk_dir(): no registry key %s' % hkey)
             return None
 
-        if not os.path.exists(install_dir):
-            debug('%s is not found on the filesystem' % install_dir)
+        if not os.path.exists(sdk_dir):
+            debug('find_sdk_dir():  %s not on file system' % sdk_dir)
             return None
 
-        ftc = os.path.join(install_dir, self.sanity_check_file)
+        ftc = os.path.join(sdk_dir, self.sanity_check_file)
         if not os.path.exists(ftc):
-            debug("File %s used for sanity check not found" % ftc)
+            debug("find_sdk_dir():  sanity check %s not found" % ftc)
             return None
 
-        return install_dir
+        return sdk_dir
 
-    def get_install_dir(self):
+    def get_sdk_dir(self):
         """Return the MSSSDK given the version string."""
         try:
-            return self._install_dir
+            return self._sdk_dir
         except AttributeError:
-            install_dir = self.find_install_dir()
-            self._install_dir = install_dir
-            return install_dir
+            sdk_dir = self.find_sdk_dir()
+            self._sdk_dir = sdk_dir
+            return sdk_dir
 
 class WindowsSDK(SDKDefinition):
     """
@@ -165,7 +164,9 @@ def get_installed_sdks():
         InstalledSDKList = []
         InstalledSDKMap = {}
         for sdk in SupportedSDKList:
-            if sdk.get_install_dir():
+            debug('trying to find SDK %s' % sdk.version)
+            if sdk.get_sdk_dir():
+                debug('found SDK %s' % sdk.version)
                 InstalledSDKList.append(sdk)
                 InstalledSDKMap[sdk.version] = sdk
     return InstalledSDKList
@@ -239,7 +240,7 @@ def set_sdk_by_version(env, mssdk):
     if not sdk:
         msg = "SDK version %s is not installed" % repr(mssdk)
         raise SCons.Errors.UserError, msg
-    set_sdk_by_directory(env, sdk.get_install_dir())
+    set_sdk_by_directory(env, sdk.get_sdk_dir())
 
 def set_default_sdk(env, msver):
     """Set up the default Platform/Windows SDK."""
@@ -247,7 +248,7 @@ def set_default_sdk(env, msver):
     if msver >= 8:
         sdks = get_installed_sdks()
         if len(sdks) > 0:
-            set_sdk_by_directory(env, sdks[0].get_install_dir())
+            set_sdk_by_directory(env, sdks[0].get_sdk_dir())
 
 # Local Variables:
 # tab-width:4
index a79d039698eeacb238fa4e18619073e32781b4d3..da22fa9e686cd844827038a9b09e5fb2d6829787 100644 (file)
@@ -47,31 +47,6 @@ class VisualStudio:
         self.__dict__.update(kw)
         self._cache = {}
 
-    def batch_file_path(self):
-        pdir = self.get_vc_product_dir()
-        if not pdir:
-            return None
-        return os.path.join(pdir, self.batch_file)
-
-    def common_tools_path(self):
-        return os.environ.get(self.common_tools_var)
-
-    def vc_product_dir_path(self):
-        if not SCons.Util.can_read_reg:
-            debug('SCons can not read registry')
-            return None
-        key = self.hkey_root + '\\' + self.vc_product_dir_key
-        try:
-            comps = read_reg(key)
-        except WindowsError, e:
-            debug('Did not find product dir key %s in registry' % key)
-        else:
-            if self.batch_file_dir_reg_relpath:
-                comps = os.path.join(comps, self.batch_file_dir_reg_relpath)
-            if os.path.exists(comps):
-                return comps
-            debug('%s is not found on the file system' % comps)
-
     #
 
     def find_batch_file(self):
@@ -81,47 +56,57 @@ class VisualStudio:
         """
         pdir = self.get_vc_product_dir()
         if not pdir:
-            debug('find_batch_file();  no pdir')
+            debug('find_batch_file():  no pdir')
             return None
-        batch_file = os.path.join(pdir, self.batch_file)
+        batch_file = os.path.normpath(os.path.join(pdir, self.batch_file))
+        batch_file = os.path.normpath(batch_file)
         if not os.path.isfile(batch_file):
-            debug('%s file not on file system' % batch_file)
+            debug('find_batch_file():  %s not on file system' % batch_file)
             return None
         return batch_file
 
     def find_executable(self):
         pdir = self.get_vc_product_dir()
         if not pdir:
+            debug('find_executable():  no pdir')
             return None
         executable = os.path.join(pdir, self.executable_path)
+        executable = os.path.normpath(executable)
         if not os.path.isfile(executable):
-            debug('%s file not on file system' % executable)
+            debug('find_executable():  %s not on file system' % executable)
             return None
         return executable
 
     def find_vc_product_dir(self):
-        if SCons.Util.can_read_reg:
-            key = self.hkey_root + '\\' + self.vc_product_dir_key
-            try:
-                comps = read_reg(key)
-            except WindowsError, e:
-                debug('Did not find product dir key %s in registry' % key)
-            else:
-                if self.batch_file_dir_reg_relpath:
-                    comps = os.path.join(comps, self.batch_file_dir_reg_relpath)
-                if os.path.exists(comps):
-                    return comps
-                debug('%s is not found on the file system' % comps)
+        if not SCons.Util.can_read_reg:
+            debug('find_vc_product_dir():  can not read registry')
+            return None
+        key = self.hkey_root + '\\' + self.vc_product_dir_key
+        try:
+            comps = read_reg(key)
+        except WindowsError, e:
+            debug('find_vc_product_dir():  no registry key %s' % key)
         else:
-            debug('SCons can not read registry')
+            if self.batch_file_dir_reg_relpath:
+                comps = os.path.join(comps, self.batch_file_dir_reg_relpath)
+                comps = os.path.normpath(comps)
+            if os.path.exists(comps):
+                return comps
+            else:
+                debug('find_vc_product_dir():  %s not on file system' % comps)
 
         d = os.environ.get(self.common_tools_var)
-        if d and os.path.isdir(d):
-            debug('%s found from %s' % (d, self.common_tools_var))
-            if self.batch_file_dir_env_relpath:
-                d = os.path.join(d, self.batch_file_dir_env_relpath)
-            return d
-        return None
+        if not d:
+            msg = 'find_vc_product_dir():  no %s variable'
+            debug(msg % self.common_tools_var)
+            return None
+        if not os.path.isdir(d):
+            debug('find_vc_product_dir():  %s not on file system' % d)
+            return None
+        if self.batch_file_dir_env_relpath:
+            d = os.path.join(d, self.batch_file_dir_env_relpath)
+            d = os.path.normpath(d)
+        return d
 
     #
 
@@ -221,6 +206,8 @@ SupportedVSList = [
     #),
 
     # Visual Studio 2008
+    # The batch file we look for is in the VC directory,
+    # so the devenv.com executable is up in ..\..\Common7\IDE.
     VisualStudio('9.0',
                  hkey_root=r'Software\Microsoft\VisualStudio\9.0',
                  common_tools_var='VS90COMNTOOLS',
@@ -234,6 +221,8 @@ SupportedVSList = [
     ),
 
     # Visual C++ 2008 Express Edition
+    # The batch file we look for is in the VC directory,
+    # so the VCExpress.exe executable is up in ..\..\Common7\IDE.
     VisualStudio('9.0Exp',
                  hkey_root=r'Software\Microsoft\VisualStudio\9.0',
                  common_tools_var='VS90COMNTOOLS',
@@ -247,6 +236,8 @@ SupportedVSList = [
     ),
 
     # Visual Studio 2005
+    # The batch file we look for is in the VC directory,
+    # so the devenv.com executable is up in ..\..\Common7\IDE.
     VisualStudio('8.0',
                  hkey_root=r'Software\Microsoft\VisualStudio\8.0',
                  common_tools_var='VS80COMNTOOLS',
@@ -260,6 +251,8 @@ SupportedVSList = [
     ),
 
     # Visual C++ 2005 Express Edition
+    # The batch file we look for is in the VC directory,
+    # so the VCExpress.exe executable is up in ..\..\Common7\IDE.
     VisualStudio('8.0Exp',
                  hkey_root=r'Software\Microsoft\VCExpress\8.0',
                  common_tools_var='VS80COMNTOOLS',
@@ -267,12 +260,16 @@ SupportedVSList = [
                  vc_product_dir_key=r'Setup\VC\ProductDir',
                  batch_file_dir_reg_relpath=None,
                  batch_file_dir_env_relpath=r'..\..\VC',
+                 # The batch file is in the VC directory, so
+                 # so the devenv.com executable is next door in ..\IDE.
                  executable_path=r'..\Common7\IDE\VCExpress.exe',
                  default_dirname='Microsoft Visual Studio 8',
                  supported_arch=['x86'],
     ),
 
     # Visual Studio .NET 2003
+    # The batch file we look for is in the Common7\Tools directory,
+    # so the devenv.com executable is next door in ..\IDE.
     VisualStudio('7.1',
                  hkey_root=r'Software\Microsoft\VisualStudio\7.1',
                  common_tools_var='VS71COMNTOOLS',
@@ -280,12 +277,14 @@ SupportedVSList = [
                  vc_product_dir_key=r'Setup\VC\ProductDir',
                  batch_file_dir_reg_relpath=r'..\Common7\Tools',
                  batch_file_dir_env_relpath=None,
-                 executable_path=r'..\Common7\IDE\devenv.com',
+                 executable_path=r'..\IDE\devenv.com',
                  default_dirname='Microsoft Visual Studio .NET',
                  supported_arch=['x86'],
     ),
 
     # Visual Studio .NET
+    # The batch file we look for is in the Common7\Tools directory,
+    # so the devenv.com executable is next door in ..\IDE.
     VisualStudio('7.0',
                  hkey_root=r'Software\Microsoft\VisualStudio\7.0',
                  common_tools_var='VS70COMNTOOLS',
@@ -293,7 +292,7 @@ SupportedVSList = [
                  vc_product_dir_key=r'Setup\VC\ProductDir',
                  batch_file_dir_reg_relpath=r'..\Common7\Tools',
                  batch_file_dir_env_relpath=None,
-                 executable_path=r'..\Common7\IDE\devenv.com',
+                 executable_path=r'..\IDE\devenv.com',
                  default_dirname='Microsoft Visual Studio .NET',
                  supported_arch=['x86'],
     ),
@@ -333,9 +332,9 @@ def get_installed_visual_studios():
         InstalledVSList = []
         InstalledVSMap = {}
         for vs in SupportedVSList:
-            debug('trying to find %s' % vs.version)
-            if vs.get_batch_file():
-                debug('found %s' % vs.version)
+            debug('trying to find VS %s' % vs.version)
+            if vs.get_executable():
+                debug('found VS %s' % vs.version)
                 InstalledVSList.append(vs)
                 InstalledVSMap[vs.version] = vs
     return InstalledVSList
index 36ce30c0f716209ce36daae98bf161c8f607926f..fe08a772170b64b8334d819bcc47bd784594aefc 100644 (file)
@@ -40,8 +40,10 @@ if sys.platform != 'win32':
     msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform
     test.skip_test(msg)
 
-if not '6.0' in test.msvs_versions():
-    msg = "Visual Studio 6 not installed; skipping test.\n"
+msvs_version = '6.0'
+
+if not msvs_version in test.msvs_versions():
+    msg = "Visual Studio %s not installed; skipping test.\n" % msvs_version
     test.skip_test(msg)
 
 
@@ -51,9 +53,9 @@ if not '6.0' in test.msvs_versions():
 # environment so we can execute msdev and really try to build something.
 
 test.run(arguments = '-n -q -Q -f -', stdin = """\
-env = Environment(tools = ['msvc'])
-print "os.environ.update(%s)" % repr(env['ENV'])
-""")
+env = Environment(tools = ['msvc'], MSVS_VERSION='%(msvs_version)s')
+print "os.environ.update(%%s)" %% repr(env['ENV'])
+""" % locals())
 
 exec(test.stdout())
 
@@ -62,7 +64,7 @@ exec(test.stdout())
 test.subdir('sub dir')
 
 test.write(['sub dir', 'SConstruct'], """\
-env=Environment(MSVS_VERSION = '6.0')
+env=Environment(MSVS_VERSION = '%(msvs_version)s')
 
 env.MSVSProject(target = 'foo.dsp',
                 srcs = ['foo.c'],
@@ -70,7 +72,7 @@ env.MSVSProject(target = 'foo.dsp',
                 variant = 'Release')
 
 env.Program('foo.c')
-""")
+""" % locals())
 
 test.write(['sub dir', 'foo.c'], r"""
 int
@@ -84,7 +86,7 @@ main(int argc, char *argv)
 test.run(chdir='sub dir', arguments='.')
 
 test.run(chdir='sub dir',
-         program=[test.get_msvs_executable('6.0')],
+         program=[test.get_msvs_executable(msvs_version)],
          arguments=['Test.dsp', '/MAKE', 'foo - Win32 Release'])
 
 test.run(program=test.workpath('sub dir', 'foo'), stdout="foo.c\n")
index 29647bb002f715f08e424ddb97b156d7ff876660..cc141f30f9a7c70b0a33667c3fe68f8bafb23947 100644 (file)
@@ -40,8 +40,10 @@ if sys.platform != 'win32':
     msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform
     test.skip_test(msg)
 
-if not '7.0' in test.msvs_versions():
-    msg = "Visual Studio 7.0 not installed; skipping test.\n"
+msvs_version = '7.0'
+
+if not msvs_version in test.msvs_versions():
+    msg = "Visual Studio %s not installed; skipping test.\n" % msvs_version
     test.skip_test(msg)
 
 
@@ -51,9 +53,9 @@ if not '7.0' in test.msvs_versions():
 # environment so we can execute devenv and really try to build something.
 
 test.run(arguments = '-n -q -Q -f -', stdin = """\
-env = Environment(tools = ['msvc'])
-print "os.environ.update(%s)" % repr(env['ENV'])
-""")
+env = Environment(tools = ['msvc'], MSVS_VERSION='%(msvs_version)s')
+print "os.environ.update(%%s)" %% repr(env['ENV'])
+""" % locals())
 
 exec(test.stdout())
 
@@ -62,7 +64,7 @@ exec(test.stdout())
 test.subdir('sub dir')
 
 test.write(['sub dir', 'SConstruct'], """\
-env=Environment(MSVS_VERSION = '7.0')
+env=Environment(MSVS_VERSION = '%(msvs_version)s')
 
 env.MSVSProject(target = 'foo.vcproj',
                 srcs = ['foo.c'],
@@ -70,7 +72,7 @@ env.MSVSProject(target = 'foo.vcproj',
                 variant = 'Release')
 
 env.Program('foo.c')
-""")
+""" % locals())
 
 test.write(['sub dir', 'foo.c'], r"""
 int
@@ -86,7 +88,7 @@ test.run(chdir='sub dir', arguments='.')
 test.vcproj_sys_path(test.workpath('sub dir', 'foo.vcproj'))
 
 test.run(chdir='sub dir',
-         program=[test.get_msvs_executable('7.0')],
+         program=[test.get_msvs_executable(msvs_version)],
          arguments=['foo.sln', '/build', 'Release'])
 
 test.run(program=test.workpath('sub dir', 'foo'), stdout="foo.c\n")
index 5dd2a176badc6ef7218bdfda983b741b4bba9fa2..f44af80b5a8e6d679de93ce0615137a417345779 100644 (file)
@@ -26,7 +26,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 """
 Test that we can actually build a simple program using our generated
-Visual Studio 7.1 project (.vcproj) and solution (.sln) files.
+Visual Studio 7.1 project (.vcproj) and solution (.sln) files
 """
 
 import os
@@ -40,8 +40,10 @@ if sys.platform != 'win32':
     msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform
     test.skip_test(msg)
 
-if not '7.1' in test.msvs_versions():
-    msg = "Visual Studio 7.1 not installed; skipping test.\n"
+msvs_version = '7.1'
+
+if not msvs_version in test.msvs_versions():
+    msg = "Visual Studio %s not installed; skipping test.\n" % msvs_version
     test.skip_test(msg)
 
 
@@ -51,9 +53,9 @@ if not '7.1' in test.msvs_versions():
 # environment so we can execute devenv and really try to build something.
 
 test.run(arguments = '-n -q -Q -f -', stdin = """\
-env = Environment(tools = ['msvc'])
-print "os.environ.update(%s)" % repr(env['ENV'])
-""")
+env = Environment(tools = ['msvc'], MSVS_VERSION='%(msvs_version)s')
+print "os.environ.update(%%s)" %% repr(env['ENV'])
+""" % locals())
 
 exec(test.stdout())
 
@@ -62,7 +64,7 @@ exec(test.stdout())
 test.subdir('sub dir')
 
 test.write(['sub dir', 'SConstruct'], """\
-env=Environment(MSVS_VERSION = '7.1')
+env=Environment(MSVS_VERSION = '%(msvs_version)s')
 
 env.MSVSProject(target = 'foo.vcproj',
                 srcs = ['foo.c'],
@@ -70,7 +72,7 @@ env.MSVSProject(target = 'foo.vcproj',
                 variant = 'Release')
 
 env.Program('foo.c')
-""")
+""" % locals())
 
 test.write(['sub dir', 'foo.c'], r"""
 int
@@ -86,7 +88,7 @@ test.run(chdir='sub dir', arguments='.')
 test.vcproj_sys_path(test.workpath('sub dir', 'foo.vcproj'))
 
 test.run(chdir='sub dir',
-         program=[test.get_msvs_executable('7.1')],
+         program=[test.get_msvs_executable(msvs_version)],
          arguments=['foo.sln', '/build', 'Release'])
 
 test.run(program=test.workpath('sub dir', 'foo'), stdout="foo.c\n")
index ad61a5e514bff9e3faab4d495d5b4d02890b3850..cff7ca22f7469c245ec72ec04f00d08f71fc0330 100644 (file)
@@ -26,7 +26,8 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 """
 Test that we can actually build a simple program using our generated
-Visual Studio 8.0 project (.vcproj) and solution (.sln) files.
+Visual Studio 8.0 project (.vcproj) and solution (.sln) files
+using Visual Studio 8.0 (Professional edition).
 """
 
 import os
@@ -40,8 +41,10 @@ if sys.platform != 'win32':
     msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform
     test.skip_test(msg)
 
-if not '8.0' in test.msvs_versions():
-    msg = "Visual Studio 8.0 not installed; skipping test.\n"
+msvs_version = '8.0'
+
+if not msvs_version in test.msvs_versions():
+    msg = "Visual Studio %s not installed; skipping test.\n" % msvs_version
     test.skip_test(msg)
 
 
@@ -51,9 +54,9 @@ if not '8.0' in test.msvs_versions():
 # environment so we can execute devenv and really try to build something.
 
 test.run(arguments = '-n -q -Q -f -', stdin = """\
-env = Environment(tools = ['msvc'])
-print "os.environ.update(%s)" % repr(env['ENV'])
-""")
+env = Environment(tools = ['msvc'], MSVS_VERSION='%(msvs_version)s')
+print "os.environ.update(%%s)" %% repr(env['ENV'])
+""" % locals())
 
 exec(test.stdout())
 
@@ -62,7 +65,7 @@ exec(test.stdout())
 test.subdir('sub dir')
 
 test.write(['sub dir', 'SConstruct'], """\
-env=Environment(MSVS_VERSION = '8.0')
+env=Environment(MSVS_VERSION = '%(msvs_version)s')
 
 env.MSVSProject(target = 'foo.vcproj',
                 srcs = ['foo.c'],
@@ -70,7 +73,7 @@ env.MSVSProject(target = 'foo.vcproj',
                 variant = 'Release')
 
 env.Program('foo.c')
-""")
+""" % locals())
 
 test.write(['sub dir', 'foo.c'], r"""
 int
@@ -90,7 +93,7 @@ system_dll_path = os.path.join( SCons.Platform.win32.get_system_root(), 'System3
 os.environ['PATH'] = os.environ['PATH'] + os.pathsep + system_dll_path
 
 test.run(chdir='sub dir',
-         program=[test.get_msvs_executable('8.0')],
+         program=[test.get_msvs_executable(msvs_version)],
          arguments=['foo.sln', '/build', 'Release'])
 
 test.run(program=test.workpath('sub dir', 'foo'), stdout="foo.c\n")
diff --git a/test/MSVS/vs-8.0Exp-exec.py b/test/MSVS/vs-8.0Exp-exec.py
new file mode 100644 (file)
index 0000000..c7ceb5a
--- /dev/null
@@ -0,0 +1,109 @@
+#!/usr/bin/env python\r
+#\r
+# __COPYRIGHT__\r
+#\r
+# Permission is hereby granted, free of charge, to any person obtaining\r
+# a copy of this software and associated documentation files (the\r
+# "Software"), to deal in the Software without restriction, including\r
+# without limitation the rights to use, copy, modify, merge, publish,\r
+# distribute, sublicense, and/or sell copies of the Software, and to\r
+# permit persons to whom the Software is furnished to do so, subject to\r
+# the following conditions:\r
+#\r
+# The above copyright notice and this permission notice shall be included\r
+# in all copies or substantial portions of the Software.\r
+#\r
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY\r
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\r
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+#\r
+\r
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"\r
+\r
+"""\r
+Test that we can actually build a simple program using our generated\r
+Visual Studio 8.0 project (.vcproj) and solution (.sln) files\r
+using Visual C++ 8.0 Express edition.\r
+"""\r
+\r
+import os\r
+import sys\r
+\r
+import TestSConsMSVS\r
+\r
+test = TestSConsMSVS.TestSConsMSVS()\r
+\r
+if sys.platform != 'win32':\r
+    msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform\r
+    test.skip_test(msg)\r
+\r
+msvs_version = '8.0Exp'\r
+\r
+if not msvs_version in test.msvs_versions():\r
+    msg = "Visual Studio %s not installed; skipping test.\n" % msvs_version\r
+    test.skip_test(msg)\r
+\r
+\r
+\r
+# Let SCons figure out the Visual Studio environment variables for us and\r
+# print out a statement that we can exec to suck them into our external\r
+# environment so we can execute devenv and really try to build something.\r
+\r
+test.run(arguments = '-n -q -Q -f -', stdin = """\\r
+env = Environment(tools = ['msvc'], MSVS_VERSION='%(msvs_version)s')\r
+print "os.environ.update(%%s)" %% repr(env['ENV'])\r
+""" % locals())\r
+\r
+exec(test.stdout())\r
+\r
+\r
+\r
+test.subdir('sub dir')\r
+\r
+test.write(['sub dir', 'SConstruct'], """\\r
+env=Environment(MSVS_VERSION = '%(msvs_version)s')\r
+\r
+env.MSVSProject(target = 'foo.vcproj',\r
+                srcs = ['foo.c'],\r
+                buildtarget = 'foo.exe',\r
+                variant = 'Release')\r
+\r
+env.Program('foo.c')\r
+""" % locals())\r
+\r
+test.write(['sub dir', 'foo.c'], r"""\r
+int\r
+main(int argc, char *argv)\r
+{\r
+    printf("foo.c\n");\r
+    exit (0);\r
+}\r
+""")\r
+\r
+test.run(chdir='sub dir', arguments='.')\r
+\r
+test.vcproj_sys_path(test.workpath('sub dir', 'foo.vcproj'))\r
+\r
+import SCons.Platform.win32\r
+system_dll_path = os.path.join( SCons.Platform.win32.get_system_root(), 'System32' )\r
+os.environ['PATH'] = os.environ['PATH'] + os.pathsep + system_dll_path\r
+\r
+test.run(chdir='sub dir',\r
+         program=[test.get_msvs_executable(msvs_version)],\r
+         arguments=['foo.sln', '/build', 'Release'])\r
+\r
+test.run(program=test.workpath('sub dir', 'foo'), stdout="foo.c\n")\r
+\r
+\r
+\r
+test.pass_test()\r
+\r
+# Local Variables:\r
+# tab-width:4\r
+# indent-tabs-mode:nil\r
+# End:\r
+# vim: set expandtab tabstop=4 shiftwidth=4:\r
diff --git a/test/MSVS/vs-9.0-exec.py b/test/MSVS/vs-9.0-exec.py
new file mode 100644 (file)
index 0000000..79e2ad0
--- /dev/null
@@ -0,0 +1,109 @@
+#!/usr/bin/env python\r
+#\r
+# __COPYRIGHT__\r
+#\r
+# Permission is hereby granted, free of charge, to any person obtaining\r
+# a copy of this software and associated documentation files (the\r
+# "Software"), to deal in the Software without restriction, including\r
+# without limitation the rights to use, copy, modify, merge, publish,\r
+# distribute, sublicense, and/or sell copies of the Software, and to\r
+# permit persons to whom the Software is furnished to do so, subject to\r
+# the following conditions:\r
+#\r
+# The above copyright notice and this permission notice shall be included\r
+# in all copies or substantial portions of the Software.\r
+#\r
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY\r
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\r
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+#\r
+\r
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"\r
+\r
+"""\r
+Test that we can actually build a simple program using our generated\r
+Visual Studio 9.0 project (.vcproj) and solution (.sln) files\r
+using Visual Studio 9.0 (Professional edition).\r
+"""\r
+\r
+import os\r
+import sys\r
+\r
+import TestSConsMSVS\r
+\r
+test = TestSConsMSVS.TestSConsMSVS()\r
+\r
+if sys.platform != 'win32':\r
+    msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform\r
+    test.skip_test(msg)\r
+\r
+msvs_version = '9.0'\r
+\r
+if not msvs_version in test.msvs_versions():\r
+    msg = "Visual Studio %s not installed; skipping test.\n" % msvs_version\r
+    test.skip_test(msg)\r
+\r
+\r
+\r
+# Let SCons figure out the Visual Studio environment variables for us and\r
+# print out a statement that we can exec to suck them into our external\r
+# environment so we can execute devenv and really try to build something.\r
+\r
+test.run(arguments = '-n -q -Q -f -', stdin = """\\r
+env = Environment(tools = ['msvc'], MSVS_VERSION='%(msvs_version)s')\r
+print "os.environ.update(%%s)" %% repr(env['ENV'])\r
+""" % locals())\r
+\r
+exec(test.stdout())\r
+\r
+\r
+\r
+test.subdir('sub dir')\r
+\r
+test.write(['sub dir', 'SConstruct'], """\\r
+env=Environment(MSVS_VERSION = '%(msvs_version)s')\r
+\r
+env.MSVSProject(target = 'foo.vcproj',\r
+                srcs = ['foo.c'],\r
+                buildtarget = 'foo.exe',\r
+                variant = 'Release')\r
+\r
+env.Program('foo.c')\r
+""" % locals())\r
+\r
+test.write(['sub dir', 'foo.c'], r"""\r
+int\r
+main(int argc, char *argv)\r
+{\r
+    printf("foo.c\n");\r
+    exit (0);\r
+}\r
+""")\r
+\r
+test.run(chdir='sub dir', arguments='.')\r
+\r
+test.vcproj_sys_path(test.workpath('sub dir', 'foo.vcproj'))\r
+\r
+import SCons.Platform.win32\r
+system_dll_path = os.path.join( SCons.Platform.win32.get_system_root(), 'System32' )\r
+os.environ['PATH'] = os.environ['PATH'] + os.pathsep + system_dll_path\r
+\r
+test.run(chdir='sub dir',\r
+         program=[test.get_msvs_executable(msvs_version)],\r
+         arguments=['foo.sln', '/build', 'Release'])\r
+\r
+test.run(program=test.workpath('sub dir', 'foo'), stdout="foo.c\n")\r
+\r
+\r
+\r
+test.pass_test()\r
+\r
+# Local Variables:\r
+# tab-width:4\r
+# indent-tabs-mode:nil\r
+# End:\r
+# vim: set expandtab tabstop=4 shiftwidth=4:\r
diff --git a/test/MSVS/vs-9.0Exp-exec.py b/test/MSVS/vs-9.0Exp-exec.py
new file mode 100644 (file)
index 0000000..69726d7
--- /dev/null
@@ -0,0 +1,109 @@
+#!/usr/bin/env python\r
+#\r
+# __COPYRIGHT__\r
+#\r
+# Permission is hereby granted, free of charge, to any person obtaining\r
+# a copy of this software and associated documentation files (the\r
+# "Software"), to deal in the Software without restriction, including\r
+# without limitation the rights to use, copy, modify, merge, publish,\r
+# distribute, sublicense, and/or sell copies of the Software, and to\r
+# permit persons to whom the Software is furnished to do so, subject to\r
+# the following conditions:\r
+#\r
+# The above copyright notice and this permission notice shall be included\r
+# in all copies or substantial portions of the Software.\r
+#\r
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY\r
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\r
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+#\r
+\r
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"\r
+\r
+"""\r
+Test that we can actually build a simple program using our generated\r
+Visual Studio 9.0 project (.vcproj) and solution (.sln) files\r
+using Visual C++ 9.0 Express edition.\r
+"""\r
+\r
+import os\r
+import sys\r
+\r
+import TestSConsMSVS\r
+\r
+test = TestSConsMSVS.TestSConsMSVS()\r
+\r
+if sys.platform != 'win32':\r
+    msg = "Skipping Visual Studio test on non-Windows platform '%s'\n" % sys.platform\r
+    test.skip_test(msg)\r
+\r
+msvs_version = '9.0Exp'\r
+\r
+if not msvs_version in test.msvs_versions():\r
+    msg = "Visual Studio %s not installed; skipping test.\n" % msvs_version\r
+    test.skip_test(msg)\r
+\r
+\r
+\r
+# Let SCons figure out the Visual Studio environment variables for us and\r
+# print out a statement that we can exec to suck them into our external\r
+# environment so we can execute devenv and really try to build something.\r
+\r
+test.run(arguments = '-n -q -Q -f -', stdin = """\\r
+env = Environment(tools = ['msvc'], MSVS_VERSION='%(msvs_version)s')\r
+print "os.environ.update(%%s)" %% repr(env['ENV'])\r
+""" % locals())\r
+\r
+exec(test.stdout())\r
+\r
+\r
+\r
+test.subdir('sub dir')\r
+\r
+test.write(['sub dir', 'SConstruct'], """\\r
+env=Environment(MSVS_VERSION = '%(msvs_version)s')\r
+\r
+env.MSVSProject(target = 'foo.vcproj',\r
+                srcs = ['foo.c'],\r
+                buildtarget = 'foo.exe',\r
+                variant = 'Release')\r
+\r
+env.Program('foo.c')\r
+""" % locals())\r
+\r
+test.write(['sub dir', 'foo.c'], r"""\r
+int\r
+main(int argc, char *argv)\r
+{\r
+    printf("foo.c\n");\r
+    exit (0);\r
+}\r
+""")\r
+\r
+test.run(chdir='sub dir', arguments='.')\r
+\r
+test.vcproj_sys_path(test.workpath('sub dir', 'foo.vcproj'))\r
+\r
+import SCons.Platform.win32\r
+system_dll_path = os.path.join( SCons.Platform.win32.get_system_root(), 'System32' )\r
+os.environ['PATH'] = os.environ['PATH'] + os.pathsep + system_dll_path\r
+\r
+test.run(chdir='sub dir',\r
+         program=[test.get_msvs_executable(msvs_version)],\r
+         arguments=['foo.sln', '/build', 'Release'])\r
+\r
+test.run(program=test.workpath('sub dir', 'foo'), stdout="foo.c\n")\r
+\r
+\r
+\r
+test.pass_test()\r
+\r
+# Local Variables:\r
+# tab-width:4\r
+# indent-tabs-mode:nil\r
+# End:\r
+# vim: set expandtab tabstop=4 shiftwidth=4:\r
index 607d01d37126f26e8e369b9e502907c4b4994948..fb54dd23c4dbab699b18311fdf5ca1f9c45b0bc6 100644 (file)
@@ -41,6 +41,8 @@ test = TestSConsign.TestSConsign(match = TestSConsign.match_re)
 
 CC = test.detect('CC', norm=1)
 CC_dir, CC_file = os.path.split(CC)
+
+CC = re.escape(CC)
 CC_dir = re.escape(os.path.normcase(CC_dir))
 CC_file = re.escape(CC_file)
 
index 60232de0fea22b11eb054dfd5120360f99baccd2..2a53b2e4af789a09120b50dbfc44f95a5182a755 100644 (file)
@@ -29,6 +29,8 @@ Verify that various ways of getting at a an sconsign file written with
 the default dblite module and default .dblite suffix work correctly.
 """
 
+import re
+
 import TestSConsign
 
 test = TestSConsign.TestSConsign(match = TestSConsign.match_re)
@@ -37,6 +39,9 @@ CC = test.detect('CC', norm=1)
 LINK = test.detect('LINK', norm=1)
 if LINK is None: LINK = CC
 
+CC = re.escape(CC)
+LINK = re.escape(LINK)
+
 test.subdir('sub1', 'sub2')
 
 # Note:  We don't use os.path.join() representations of the file names