Commits

Anonymous committed d46f1f7

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.

Comments (0)

Files changed (3)

src/engine/SCons/Tool/MSCommon/common.py

 
 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():

src/engine/SCons/Tool/MSCommon/sdk.py

         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):
     """
         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
     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."""
     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

src/engine/SCons/Tool/MSCommon/vs.py

         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.normpath(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)
-                comps = os.path.normpath(comps)
-            if not os.path.exists(comps):
-                debug('%s is not found on the file system' % comps)
-                return None
-            return comps
-
     #
 
     def find_batch_file(self):
         """
         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.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)
+        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:
+            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:
-                if self.batch_file_dir_reg_relpath:
-                    comps = os.path.join(comps, self.batch_file_dir_reg_relpath)
-                    comps = os.path.normpath(comps)
-                if not os.path.exists(comps):
-                    debug('%s is not found on the file system' % comps)
-                    return None
-                return comps
-        else:
-            debug('SCons can not read registry')
+                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)
-                d = os.path.normpath(d)
-            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
 
     #
 
     #),
 
     # 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',
     ),
 
     # 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',
     ),
 
     # 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',
     ),
 
     # 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',
                  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',
                  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',
                  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'],
     ),
         InstalledVSList = []
         InstalledVSMap = {}
         for vs in SupportedVSList:
-            debug('trying to find %s' % vs.version)
+            debug('trying to find VS %s' % vs.version)
             if vs.get_executable():
-                debug('found %s' % vs.version)
+                debug('found VS %s' % vs.version)
                 InstalledVSList.append(vs)
                 InstalledVSMap[vs.version] = vs
     return InstalledVSList