summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Oberbrunner <garyo@oberbrunner.com>2011-05-15 14:05:26 +0000
committerGary Oberbrunner <garyo@oberbrunner.com>2011-05-15 14:05:26 +0000
commite4b3ac6a7bf6a3484607fae8675e80d205d63892 (patch)
tree90a06df59a3591b9cf37937f2c34a6936c4ec645
parentf96b105c4c523f898d53d11c601360e2ac8468d8 (diff)
downloadscons-git-e4b3ac6a7bf6a3484607fae8675e80d205d63892.tar.gz
Fix issue #2702, MSVS generation fails when CPPPATH contains Dir nodes. Also make MSVS project depend on values of CPPDEFINES and CPPPATH so it gets properly regenerated when they change.
-rw-r--r--src/CHANGES.txt2
-rw-r--r--src/RELEASE.txt3
-rw-r--r--src/engine/SCons/Tool/msvs.py21
3 files changed, 24 insertions, 2 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index 147a016ba..c1467b3e7 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -26,6 +26,8 @@ RELEASE 2.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE
embed manifests in Windows EXEs and DLLs.
From Gary Oberbrunner:
+ - Fix Visual Studio project generation when CPPPATH contains Dir nodes
+ - Ensure Visual Studio project is regenerated when CPPPATH or CPPDEFINES change
- Fix unicode error when using non-ASCII filenames with Copy or Install
- Put RPATH in LINKCOM rather than LINKFLAGS so resetting
LINKFLAGS doesn't kill RPATH
diff --git a/src/RELEASE.txt b/src/RELEASE.txt
index 67f27a4ee..8cd46a959 100644
--- a/src/RELEASE.txt
+++ b/src/RELEASE.txt
@@ -56,6 +56,9 @@
FIXES
+ - Visual Studio project generation now works when CPPPATH contains Dir nodes
+ - Visual Studio projects are regenerated when CPPPATH or CPPDEFINES change
+ NOTE: this will cause all MSVS projects to be regenerated with this version.
- Passing MSVC_BATCH=False works now (treated same as 0)
- Long compile lines no longer break MSVC_BATCH mode
- RPATH is now in LINKCOM rather than LINKFLAGS, so resetting
diff --git a/src/engine/SCons/Tool/msvs.py b/src/engine/SCons/Tool/msvs.py
index 7eae6e97e..5414ada31 100644
--- a/src/engine/SCons/Tool/msvs.py
+++ b/src/engine/SCons/Tool/msvs.py
@@ -47,6 +47,7 @@ import SCons.Builder
import SCons.Node.FS
import SCons.Platform.win32
import SCons.Script.SConscript
+import SCons.PathList
import SCons.Util
import SCons.Warnings
@@ -64,6 +65,12 @@ def xmlify(s):
s = s.replace('"', "&quot;")
return s
+# Process a CPPPATH list in includes, given the env, target and source.
+# Returns a tuple of nodes.
+def processIncludes(includes, env, target, source):
+ return SCons.PathList.PathList(includes).subst_path(env, target, source)
+
+
external_makefile_guid = '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}'
def _generateGUID(slnfile, name):
@@ -705,9 +712,13 @@ class _GenerateV7DSP(_DSPGenerator):
rebuildcmd = xmlify(starting + self.env.subst('$MSVSREBUILDCOM', 1) + cmdargs)
cleancmd = xmlify(starting + self.env.subst('$MSVSCLEANCOM', 1) + cmdargs)
+ # This isn't perfect; CPPDEFINES and CPPPATH can contain $TARGET and $SOURCE,
+ # so they could vary depending on the command being generated. This code
+ # assumes they don't.
preprocdefs = xmlify(';'.join(processDefines(self.env.get('CPPDEFINES', []))))
- includepath = xmlify(';'.join(self.env.get('CPPPATH', [])))
-
+ includepath_Dirs = processIncludes(self.env.get('CPPPATH', []), self.env, None, None)
+ includepath = xmlify(';'.join([str(x) for x in includepath_Dirs]))
+
if not env_has_buildtarget:
del self.env['MSVSBUILDTARGET']
@@ -1568,6 +1579,12 @@ def projectEmitter(target, source, env):
source = source + env.subst('$MSVSSCONSCOM', 1)
source = source + env.subst('$MSVSENCODING', 1)
+ # Project file depends on CPPDEFINES and CPPPATH
+ preprocdefs = xmlify(';'.join(processDefines(env.get('CPPDEFINES', []))))
+ includepath_Dirs = processIncludes(env.get('CPPPATH', []), env, None, None)
+ includepath = xmlify(';'.join([str(x) for x in includepath_Dirs]))
+ source = source + "; ppdefs:%s incpath:%s"%(preprocdefs, includepath)
+
if 'buildtarget' in env and env['buildtarget'] != None:
if SCons.Util.is_String(env['buildtarget']):
source = source + ' "%s"' % env['buildtarget']