diff options
author | Steven Knight <knight@baldmt.com> | 2009-02-21 17:22:56 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2009-02-21 17:22:56 (GMT) |
commit | fe90e08dfad391d01a7a5942d9d155d45b1fcf77 (patch) | |
tree | 3050fa8d27fadd0acbecdaea33c4bc31ee7a114f /src | |
parent | 88c7995942cbf4af6a26f42ede8e940ff59c23e5 (diff) | |
download | SCons-fe90e08dfad391d01a7a5942d9d155d45b1fcf77.zip SCons-fe90e08dfad391d01a7a5942d9d155d45b1fcf77.tar.gz SCons-fe90e08dfad391d01a7a5942d9d155d45b1fcf77.tar.bz2 |
Merged revisions 4025-4029 via svnmerge from
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.
........
Diffstat (limited to 'src')
-rw-r--r-- | src/engine/SCons/Tool/MSCommon/common.py | 20 | ||||
-rw-r--r-- | src/engine/SCons/Tool/MSCommon/sdk.py | 37 | ||||
-rw-r--r-- | src/engine/SCons/Tool/MSCommon/vs.py | 105 |
3 files changed, 82 insertions, 80 deletions
diff --git a/src/engine/SCons/Tool/MSCommon/common.py b/src/engine/SCons/Tool/MSCommon/common.py index 619b242..1e4aef8 100644 --- a/src/engine/SCons/Tool/MSCommon/common.py +++ b/src/engine/SCons/Tool/MSCommon/common.py @@ -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(): diff --git a/src/engine/SCons/Tool/MSCommon/sdk.py b/src/engine/SCons/Tool/MSCommon/sdk.py index 80e6852..6791fd7 100644 --- a/src/engine/SCons/Tool/MSCommon/sdk.py +++ b/src/engine/SCons/Tool/MSCommon/sdk.py @@ -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 diff --git a/src/engine/SCons/Tool/MSCommon/vs.py b/src/engine/SCons/Tool/MSCommon/vs.py index a79d039..da22fa9 100644 --- a/src/engine/SCons/Tool/MSCommon/vs.py +++ b/src/engine/SCons/Tool/MSCommon/vs.py @@ -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 |