From ffc637041019f2689920d827c6930371e18a85d3 Mon Sep 17 00:00:00 2001 From: Gary Oberbrunner Date: Wed, 2 Mar 2011 02:26:35 +0000 Subject: Fix issue #1632: quote /Fp in PCH to make precompiled hdrs work with variant dirs containing spaces. --- src/CHANGES.txt | 3 ++ src/RELEASE.txt | 2 + src/engine/SCons/Tool/msvc.py | 2 +- test/MSVC/pch-spaces-subdir.py | 85 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 test/MSVC/pch-spaces-subdir.py diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 8bb1bb7..2231cef 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -7,6 +7,9 @@ RELEASE 2.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE + From Gary Oberbrunner: + - Fix precompiled headers on Windows when variant dir name has spaces. + From Gary Oberbrunner and Sohail Somani: - new construction variable WINDOWS_EMBED_MANIFEST to automatically embed manifests in Windows EXEs and DLLs. diff --git a/src/RELEASE.txt b/src/RELEASE.txt index f8db734..5ceb8d7 100644 --- a/src/RELEASE.txt +++ b/src/RELEASE.txt @@ -56,6 +56,8 @@ FIXES + - Precompiled headers on Windows no longer break when used with + variant dirs containing spaces. - Delete can now delete symlinks to directories and broken symlinks - CPPDEFINES containing dictionaries now work better. - A problem with using implicit-cache and removing dependencies on diff --git a/src/engine/SCons/Tool/msvc.py b/src/engine/SCons/Tool/msvc.py index 41e793a..066b5e5 100644 --- a/src/engine/SCons/Tool/msvc.py +++ b/src/engine/SCons/Tool/msvc.py @@ -208,7 +208,7 @@ def generate(env): shared_obj.add_emitter(suffix, shared_object_emitter) env['CCPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Z7") or ""}']) - env['CCPCHFLAGS'] = SCons.Util.CLVar(['${(PCH and "/Yu%s /Fp%s"%(PCHSTOP or "",File(PCH))) or ""}']) + env['CCPCHFLAGS'] = SCons.Util.CLVar(['${(PCH and "/Yu%s \\\"/Fp%s\\\""%(PCHSTOP or "",File(PCH))) or ""}']) env['_MSVC_OUTPUT_FLAG'] = msvc_output_flag env['_CCCOMCOM'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS $CCPCHFLAGS $CCPDBFLAGS' env['CC'] = 'cl' diff --git a/test/MSVC/pch-spaces-subdir.py b/test/MSVC/pch-spaces-subdir.py new file mode 100644 index 0000000..90d3b51 --- /dev/null +++ b/test/MSVC/pch-spaces-subdir.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +# +# __COPYRIGHT__ +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" + +""" +Verify PCH works if variant dir has spaces in its name +""" + +import sys +import time + +import TestSCons + +test = TestSCons.TestSCons(match = TestSCons.match_re) + +if sys.platform != 'win32': + msg = "Skipping Visual C/C++ test on non-Windows platform '%s'\n" % sys.platform + test.skip_test(msg) + +test.write('Main.cpp', """\ +#include "Precompiled.h" + +int main() +{ + return testf(); +} +""") + +test.write('Precompiled.cpp', """\ +#include "Precompiled.h" +""") + +test.write('Precompiled.h', """\ +#pragma once + +int testf() +{ + return 0; +} +""") + +test.write('SConstruct', """\ +SConscript('SConscript', variant_dir='Release Output', duplicate=0) +""") + +test.write('SConscript', """\ +env = Environment() + +env['PCHSTOP'] = 'Precompiled.h' +env['PCH'] = env.PCH('Precompiled.cpp')[0] + +env.Program('Main.cpp') +""") + +test.run(arguments='.', stderr=None) + +test.pass_test() + +# Local Variables: +# tab-width:4 +# indent-tabs-mode:nil +# End: +# vim: set expandtab tabstop=4 shiftwidth=4: -- cgit v0.12