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 "cmVersion.h"
|
||||||
#include "cmComputeLinkInformation.h"
|
#include "cmComputeLinkInformation.h"
|
||||||
#include "cmAlgorithms.h"
|
#include "cmAlgorithms.h"
|
||||||
|
#include "cmOutputConverter.h"
|
||||||
|
|
||||||
#include <cmsys/auto_ptr.hxx>
|
#include <cmsys/auto_ptr.hxx>
|
||||||
#include <cmsys/FStream.hxx>
|
#include <cmsys/FStream.hxx>
|
||||||
#include <assert.h>
|
#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()
|
cmExportFileGenerator::cmExportFileGenerator()
|
||||||
{
|
{
|
||||||
@ -608,7 +624,8 @@ void cmExportFileGenerator::GenerateInterfaceProperties(cmTarget const* target,
|
|||||||
for(ImportPropertyMap::const_iterator pi = properties.begin();
|
for(ImportPropertyMap::const_iterator pi = properties.begin();
|
||||||
pi != properties.end(); ++pi)
|
pi != properties.end(); ++pi)
|
||||||
{
|
{
|
||||||
os << " " << pi->first << " \"" << pi->second << "\"\n";
|
os << " " << pi->first << " "
|
||||||
|
<< cmExportFileGeneratorEscape(pi->second) << "\n";
|
||||||
}
|
}
|
||||||
os << ")\n\n";
|
os << ")\n\n";
|
||||||
}
|
}
|
||||||
@ -1112,7 +1129,8 @@ cmExportFileGenerator
|
|||||||
for(ImportPropertyMap::const_iterator pi = properties.begin();
|
for(ImportPropertyMap::const_iterator pi = properties.begin();
|
||||||
pi != properties.end(); ++pi)
|
pi != properties.end(); ++pi)
|
||||||
{
|
{
|
||||||
os << " " << pi->first << " \"" << pi->second << "\"\n";
|
os << " " << pi->first << " "
|
||||||
|
<< cmExportFileGeneratorEscape(pi->second) << "\n";
|
||||||
}
|
}
|
||||||
os << " )\n"
|
os << " )\n"
|
||||||
<< "\n";
|
<< "\n";
|
||||||
@ -1223,7 +1241,7 @@ cmExportFileGenerator
|
|||||||
ImportPropertyMap::const_iterator pi = properties.find(*li);
|
ImportPropertyMap::const_iterator pi = properties.find(*li);
|
||||||
if (pi != properties.end())
|
if (pi != properties.end())
|
||||||
{
|
{
|
||||||
os << "\"" << pi->second << "\" ";
|
os << cmExportFileGeneratorEscape(pi->second) << " ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,11 @@ install(FILES
|
|||||||
DESTINATION src
|
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
|
install(TARGETS headeronly sharediface use_auto_type use_c_restrict source_target
|
||||||
|
cmakeonly
|
||||||
EXPORT expInterface
|
EXPORT expInterface
|
||||||
)
|
)
|
||||||
install(TARGETS sharedlib
|
install(TARGETS sharedlib
|
||||||
|
@ -99,3 +99,14 @@ add_executable(interfacetest_exp interfacetest.cpp)
|
|||||||
target_link_libraries(interfacetest_exp exp::sharediface)
|
target_link_libraries(interfacetest_exp exp::sharediface)
|
||||||
|
|
||||||
do_try_compile(exp)
|
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…
x
Reference in New Issue
Block a user