Commit 1051c4c8 authored by Brad King's avatar Brad King Committed by Kitware Robot
Browse files

Merge topic 'export-escaping'

60eb396f Export: Escape exported property values when writing CMake language files
parents bd5bf762 60eb396f
......@@ -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) << " ";
}
}
......
......@@ -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
......
......@@ -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()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment