[Cmake-commits] CMake branch, next, updated. v3.3.0-rc2-644-g7797c9c

Brad King brad.king at kitware.com
Wed Jun 24 09:20:15 EDT 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  7797c9c97b63e8e7ad7de9ad6f6ab995f9c1ddcf (commit)
       via  60eb396f104ff6c662029b16f8859288776afbe8 (commit)
      from  43bacced9aad5ce4129290178bb3765cedeb2be3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7797c9c97b63e8e7ad7de9ad6f6ab995f9c1ddcf
commit 7797c9c97b63e8e7ad7de9ad6f6ab995f9c1ddcf
Merge: 43bacce 60eb396
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Jun 24 09:20:14 2015 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Jun 24 09:20:14 2015 -0400

    Merge topic 'export-escaping' into next
    
    60eb396f Export: Escape exported property values when writing CMake language files


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=60eb396f104ff6c662029b16f8859288776afbe8
commit 60eb396f104ff6c662029b16f8859288776afbe8
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Jun 23 10:54:23 2015 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jun 24 09:19:39 2015 -0400

    Export: Escape exported property values when writing CMake language files
    
    When writing export files, correctly encode property values that contain
    characters special to the CMake language parser.  We must ensure that
    they parse correctly when loaded on the consuming side.
    
    Reported-by: Dan Liew <dan at su-root.co.uk>

diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index a51fb2a..094ad4f 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -23,12 +23,28 @@
 #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()
 {
   this->AppendMode = false;
@@ -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) << " ";
       }
     }
 
diff --git a/Tests/ExportImport/Export/Interface/CMakeLists.txt b/Tests/ExportImport/Export/Interface/CMakeLists.txt
index 00a5375..fd55c42 100644
--- a/Tests/ExportImport/Export/Interface/CMakeLists.txt
+++ b/Tests/ExportImport/Export/Interface/CMakeLists.txt
@@ -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
diff --git a/Tests/ExportImport/Import/Interface/CMakeLists.txt b/Tests/ExportImport/Import/Interface/CMakeLists.txt
index 51d518e..c850508 100644
--- a/Tests/ExportImport/Import/Interface/CMakeLists.txt
+++ b/Tests/ExportImport/Import/Interface/CMakeLists.txt
@@ -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()

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list