Merge topic 'export-escaping'
60eb396f
Export: Escape exported property values when writing CMake language files
This commit is contained in:
commit
1051c4c810
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue