Merge topic 'export-escaping'

60eb396f Export: Escape exported property values when writing CMake language files
This commit is contained in:
Brad King 2015-06-25 10:39:21 -04:00 committed by CMake Topic Stage
commit 1051c4c810
3 changed files with 36 additions and 3 deletions

View File

@ -23,11 +23,27 @@
#include "cmVersion.h"
#include "cmComputeLinkInformation.h"
#include "cmAlgorithms.h"
#include "cmOutputConverter.h"
#include <cmsys/auto_ptr.hxx>
#include <cmsys/FStream.hxx>
#include <assert.h>
//----------------------------------------------------------------------------
static std::string cmExportFileGeneratorEscape(std::string const& str)
{
// Escape a property value for writing into a .cmake file.
std::string result = cmOutputConverter::EscapeForCMake(str);
// Un-escape variable references generated by our own export code.
cmSystemTools::ReplaceString(result,
"\\${_IMPORT_PREFIX}",
"${_IMPORT_PREFIX}");
cmSystemTools::ReplaceString(result,
"\\${CMAKE_IMPORT_LIBRARY_SUFFIX}",
"${CMAKE_IMPORT_LIBRARY_SUFFIX}");
return result;
}
//----------------------------------------------------------------------------
cmExportFileGenerator::cmExportFileGenerator()
{
@ -608,7 +624,8 @@ void cmExportFileGenerator::GenerateInterfaceProperties(cmTarget const* target,
for(ImportPropertyMap::const_iterator pi = properties.begin();
pi != properties.end(); ++pi)
{
os << " " << pi->first << " \"" << pi->second << "\"\n";
os << " " << pi->first << " "
<< cmExportFileGeneratorEscape(pi->second) << "\n";
}
os << ")\n\n";
}
@ -1112,7 +1129,8 @@ cmExportFileGenerator
for(ImportPropertyMap::const_iterator pi = properties.begin();
pi != properties.end(); ++pi)
{
os << " " << pi->first << " \"" << pi->second << "\"\n";
os << " " << pi->first << " "
<< cmExportFileGeneratorEscape(pi->second) << "\n";
}
os << " )\n"
<< "\n";
@ -1223,7 +1241,7 @@ cmExportFileGenerator
ImportPropertyMap::const_iterator pi = properties.find(*li);
if (pi != properties.end())
{
os << "\"" << pi->second << "\" ";
os << cmExportFileGeneratorEscape(pi->second) << " ";
}
}

View File

@ -39,7 +39,11 @@ install(FILES
DESTINATION src
)
add_library(cmakeonly INTERFACE)
set_property(TARGET cmakeonly PROPERTY INTERFACE_COMPILE_DEFINITIONS [[DEF="\"\$\B"]])
install(TARGETS headeronly sharediface use_auto_type use_c_restrict source_target
cmakeonly
EXPORT expInterface
)
install(TARGETS sharedlib

View File

@ -99,3 +99,14 @@ add_executable(interfacetest_exp interfacetest.cpp)
target_link_libraries(interfacetest_exp exp::sharediface)
do_try_compile(exp)
foreach(ns exp bld)
get_property(defs TARGET ${ns}::cmakeonly PROPERTY INTERFACE_COMPILE_DEFINITIONS)
if(NOT defs STREQUAL [[DEF="\"\$\B"]])
message(SEND_ERROR
"${ns}::cmakeonly property INTERFACE_COMPILE_DEFINITIONS is:\n"
" ${defs}\n"
"not\n"
" " [[DEF="\"\$\B"]] "\n")
endif()
endforeach()