From 9b234550b56cbe72a54f050b4a9adca956bba637 Mon Sep 17 00:00:00 2001 From: stevenknight Date: Thu, 11 Dec 2008 13:42:43 +0000 Subject: [PATCH] Issue 2102: Add support for Microsoft Visual Studio 9. (Dmitri Rubinstein) git-svn-id: http://scons.tigris.org/svn/scons/trunk@3828 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- src/CHANGES.txt | 4 ++ src/engine/SCons/Tool/msvc.py | 69 ++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 75b04015..d8ab3c0d 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -18,6 +18,10 @@ RELEASE 1.X - XXX - Add a --warn=future-deprecated option for advance warnings about deprecated features that still have warnings hidden by default. + From Dmitri Rubinestein: + + - Add detection of Microsoft Visual Studio 9. + From Matthew Wesley: - Copy file attributes so we identify, and can link a shared library diff --git a/src/engine/SCons/Tool/msvc.py b/src/engine/SCons/Tool/msvc.py index b324a323..afb463f0 100644 --- a/src/engine/SCons/Tool/msvc.py +++ b/src/engine/SCons/Tool/msvc.py @@ -533,6 +533,70 @@ def _get_msvc8_default_paths(env, version, suite, use_mfc_dirs): exe_path = string.join(exe_paths, os.pathsep ) return (include_path, lib_path, exe_path) +def _get_msvc9_default_paths(env, version, suite, use_mfc_dirs): + """Return a 3-tuple of (INCLUDE, LIB, PATH) as the values of those + three environment variables that should be set in order to execute + the MSVC 9 tools properly, if the information wasn't available + from the registry.""" + + MVSdir = None + paths = {} + exe_paths = [] + lib_paths = [] + include_paths = [] + try: + paths = SCons.Tool.msvs.get_msvs_install_dirs(version, suite) + MVSdir = paths['VSINSTALLDIR'] + except (KeyError, SCons.Util.RegError, SCons.Errors.InternalError): + if os.environ.has_key('VSCOMNTOOLS'): + MVSdir = os.path.normpath(os.path.join(os.environ['VSCOMNTOOLS'],'..','..')) + else: + # last resort -- default install location + MVSdir = os.getenv('ProgramFiles') + r'\Microsoft Visual Studio ' + str(version) + + if MVSdir: + if SCons.Util.can_read_reg and paths.has_key('VCINSTALLDIR'): + MVSVCdir = paths['VCINSTALLDIR'] + else: + MVSVCdir = os.path.join(MVSdir,'VC') + + MVSCommondir = os.path.join(MVSdir, 'Common7') + include_paths.append( os.path.join(MVSVCdir, 'include') ) + lib_paths.append( os.path.join(MVSVCdir, 'lib') ) + for base, subdir in [(MVSCommondir,'IDE'), (MVSVCdir,'bin'), + (MVSCommondir,'Tools'), (MVSCommondir,r'Tools\bin')]: + exe_paths.append( os.path.join( base, subdir) ) + + if paths.has_key('PLATFORMSDKDIR'): + PlatformSdkDir = paths['PLATFORMSDKDIR'] + else: + PlatformSdkDir = os.path.join(MVSVCdir,'PlatformSDK') + platform_include_path = os.path.join( PlatformSdkDir, 'Include' ) + include_paths.append( platform_include_path ) + lib_paths.append( os.path.join( PlatformSdkDir, 'Lib' ) ) + if use_mfc_dirs: + if paths.has_key('PLATFORMSDKDIR'): + include_paths.append( os.path.join( platform_include_path, 'mfc' ) ) + include_paths.append( os.path.join( platform_include_path, 'atl' ) ) + else: + atlmfc_path = os.path.join( MVSVCdir, 'atlmfc' ) + include_paths.append( os.path.join( atlmfc_path, 'include' ) ) + lib_paths.append( os.path.join( atlmfc_path, 'lib' ) ) + + if SCons.Util.can_read_reg and paths.has_key('FRAMEWORKSDKDIR'): + fwdir = paths['FRAMEWORKSDKDIR'] + include_paths.append( os.path.join( fwdir, 'include' ) ) + lib_paths.append( os.path.join( fwdir, 'lib' ) ) + exe_paths.append( os.path.join( fwdir, 'bin' ) ) + + if SCons.Util.can_read_reg and paths.has_key('FRAMEWORKDIR') and paths.has_key('FRAMEWORKVERSION'): + exe_paths.append( os.path.join( paths['FRAMEWORKDIR'], paths['FRAMEWORKVERSION'] ) ) + + include_path = string.join( include_paths, os.pathsep ) + lib_path = string.join(lib_paths, os.pathsep ) + exe_path = string.join(exe_paths, os.pathsep ) + return (include_path, lib_path, exe_path) + def get_msvc_paths(env, version=None, use_mfc_dirs=0): """Return a 3-tuple of (INCLUDE, LIB, PATH) as the values of those three environment variables that should be set @@ -554,7 +618,10 @@ def get_msvc_paths(env, version=None, use_mfc_dirs=0): # base installation from the registry and deduce the default # directories. version_num, suite = SCons.Tool.msvs.msvs_parse_version(version) - if version_num >= 8.0: + if version_num >= 9.0: + suite = SCons.Tool.msvs.get_default_visualstudio9_suite(env) + defpaths = _get_msvc9_default_paths(env, version, suite, use_mfc_dirs) + elif version_num >= 8.0: suite = SCons.Tool.msvs.get_default_visualstudio8_suite(env) defpaths = _get_msvc8_default_paths(env, version, suite, use_mfc_dirs) elif version_num >= 7.0: -- 2.26.2