Merge topic 'fix-ninja-rc-include-flags'

f4c5eade Ninja: Fix RC include directories regression
This commit is contained in:
Brad King 2014-10-13 08:21:04 -04:00 committed by CMake Topic Stage
commit cea13d5536
8 changed files with 32 additions and 9 deletions

View File

@ -1287,9 +1287,11 @@ cmLocalGenerator::ConvertToOutputForExisting(RelativeRoot remote,
//----------------------------------------------------------------------------
std::string
cmLocalGenerator::ConvertToIncludeReference(std::string const& path,
OutputFormat format)
OutputFormat format,
bool forceFullPaths)
{
return this->ConvertToOutputForExisting(path, START_OUTPUT, format);
return this->ConvertToOutputForExisting(
path, forceFullPaths? FULL : START_OUTPUT, format);
}
//----------------------------------------------------------------------------
@ -1297,6 +1299,7 @@ std::string cmLocalGenerator::GetIncludeFlags(
const std::vector<std::string> &includes,
cmGeneratorTarget* target,
const std::string& lang,
bool forceFullPaths,
bool forResponseFile,
const std::string& config)
{
@ -1401,7 +1404,7 @@ std::string cmLocalGenerator::GetIncludeFlags(
flagUsed = true;
}
std::string includePath =
this->ConvertToIncludeReference(*i, shellFormat);
this->ConvertToIncludeReference(*i, shellFormat, forceFullPaths);
if(quotePaths && includePath.size() && includePath[0] != '\"')
{
includeFlags << "\"";

View File

@ -160,6 +160,7 @@ public:
std::string GetIncludeFlags(const std::vector<std::string> &includes,
cmGeneratorTarget* target,
const std::string& lang,
bool forceFullPaths = false,
bool forResponseFile = false,
const std::string& config = "");
@ -215,7 +216,8 @@ public:
OutputFormat format = SHELL);
virtual std::string ConvertToIncludeReference(std::string const& path,
OutputFormat format = SHELL);
OutputFormat format = SHELL,
bool forceFullPaths = false);
/** Called from command-line hook to clear dependencies. */
virtual void ClearDependencies(cmMakefile* /* mf */,

View File

@ -151,9 +151,10 @@ cmLocalNinjaGenerator::ConvertToLinkReference(std::string const& lib,
std::string
cmLocalNinjaGenerator::ConvertToIncludeReference(std::string const& path,
OutputFormat format)
OutputFormat format,
bool forceFullPaths)
{
return this->Convert(path, HOME_OUTPUT, format);
return this->Convert(path, forceFullPaths? FULL : HOME_OUTPUT, format);
}
//----------------------------------------------------------------------------

View File

@ -108,7 +108,8 @@ public:
protected:
virtual std::string ConvertToIncludeReference(std::string const& path,
OutputFormat format = SHELL);
OutputFormat format = SHELL,
bool forceFullPaths = false);
private:

View File

@ -1962,7 +1962,7 @@ void cmMakefileTargetGenerator::AddIncludeFlags(std::string& flags,
std::string includeFlags =
this->LocalGenerator->GetIncludeFlags(includes, this->GeneratorTarget,
lang, useResponseFile);
lang, false, useResponseFile);
if(includeFlags.empty())
{
return;

View File

@ -18,6 +18,11 @@ if(CMAKE_RC_COMPILER MATCHES windres)
message(STATUS "CMAKE_RC_COMPILER MATCHES windres")
add_definitions(/DCMAKE_RCDEFINE=test.txt)
add_definitions(/DCMAKE_RCDEFINE_NO_QUOTED_STRINGS)
if(MSYS AND CMAKE_CURRENT_BINARY_DIR MATCHES " ")
# windres cannot handle spaces in include dir, and
# for the MSys shell we do not convert to shortpath.
set(CMAKE_RC_NO_INCLUDE 1)
endif()
elseif(MSVC60)
# VS6 rc compiler does not deal well with spaces in a "/D" value, but it can
# handle the quoting
@ -30,10 +35,17 @@ else()
set(TEXTFILE_FROM_SOURCE_DIR "textfile, spaces in name, from binary dir")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test.txt
"${CMAKE_CURRENT_BINARY_DIR}/test with spaces.txt" @ONLY)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_definitions(/DCMAKE_RCDEFINE="test with spaces.txt")
endif()
if(CMAKE_RC_NO_INCLUDE)
add_definitions(/DCMAKE_RC_NO_INCLUDE)
else()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include.rc.in
"${CMAKE_CURRENT_BINARY_DIR}/include.rc" @ONLY)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
endif()
add_executable(VSResource main.cpp test.rc)
set_property(TARGET VSResource

View File

@ -0,0 +1 @@
// This file should be included.

View File

@ -1,4 +1,7 @@
#ifdef CMAKE_RCDEFINE
# ifndef CMAKE_RC_NO_INCLUDE
# include <include.rc>
# endif
// This line can compile with either an unquoted or a quoted string
1025 TEXTFILE CMAKE_RCDEFINE