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, master has been updated
       via  ce7408514c98d39612c7f1e1d85929c223f71068 (commit)
       via  a0e2e0ca9725996c5ff4662f84d9bca8ea4edd35 (commit)
       via  deeab72aae14de3bfce4189ea5e9ee42e7ad94dc (commit)
       via  3c85f11fedf55c5072cd00deb129a0782130d78c (commit)
       via  2ec1156b80485fedba5b6d9b0802c21e1cbc2d8f (commit)
      from  0ff5bdd4c99824bb6e4b1c19f6f9f9e47ee96088 (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 -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ce7408514c98d39612c7f1e1d85929c223f71068
commit ce7408514c98d39612c7f1e1d85929c223f71068
Merge: 0ff5bdd4c9 a0e2e0ca97
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Wed Nov 6 14:32:13 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Wed Nov 6 09:32:22 2019 -0500

    Merge topic 'install-name-dir-genex'
    
    a0e2e0ca97 Help: Add documentation and release notes for INSTALL_NAME_DIR 
genex
    deeab72aae Tests: Add tests for INSTALL_NAME_DIR
    3c85f11fed INSTALL_NAME_DIR: Add support for generator expressions
    2ec1156b80 Refactor: Generalize 
cmExportInstallFileGenerator::ReplaceInstallPrefix()
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !3989


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a0e2e0ca9725996c5ff4662f84d9bca8ea4edd35
commit a0e2e0ca9725996c5ff4662f84d9bca8ea4edd35
Author:     Kyle Edwards <kyle.edwa...@kitware.com>
AuthorDate: Mon Nov 4 12:08:53 2019 -0500
Commit:     Kyle Edwards <kyle.edwa...@kitware.com>
CommitDate: Mon Nov 4 19:02:16 2019 -0500

    Help: Add documentation and release notes for INSTALL_NAME_DIR genex

diff --git a/Help/manual/cmake-generator-expressions.7.rst 
b/Help/manual/cmake-generator-expressions.7.rst
index 75f4bd48a2..691481b992 100644
--- a/Help/manual/cmake-generator-expressions.7.rst
+++ b/Help/manual/cmake-generator-expressions.7.rst
@@ -596,7 +596,8 @@ Target-Dependent Queries
   requirement.
 ``$<INSTALL_PREFIX>``
   Content of the install prefix when the target is exported via
-  :command:`install(EXPORT)` and empty otherwise.
+  :command:`install(EXPORT)`, or when evaluated in
+  :prop_tgt:`INSTALL_NAME_DIR`, and empty otherwise.
 
 Output-Related Expressions
 --------------------------
diff --git a/Help/prop_tgt/INSTALL_NAME_DIR.rst 
b/Help/prop_tgt/INSTALL_NAME_DIR.rst
index 2216072acb..747615ac8e 100644
--- a/Help/prop_tgt/INSTALL_NAME_DIR.rst
+++ b/Help/prop_tgt/INSTALL_NAME_DIR.rst
@@ -10,3 +10,7 @@ installed targets.
 This property is initialized by the value of the variable
 :variable:`CMAKE_INSTALL_NAME_DIR` if it is set when a target is
 created.
+
+This property supports :manual:`generator expressions 
<cmake-generator-expressions(7)>`.
+In particular, the ``$<INSTALL_PREFIX>`` generator expression can be used to 
set the
+directory relative to the install-time prefix.
diff --git a/Help/release/dev/install-name-dir-genex.rst 
b/Help/release/dev/install-name-dir-genex.rst
new file mode 100644
index 0000000000..0cb41f08d9
--- /dev/null
+++ b/Help/release/dev/install-name-dir-genex.rst
@@ -0,0 +1,7 @@
+install-name-dir-genex
+----------------------
+
+* The :prop_tgt:`INSTALL_NAME_DIR` target property now supports
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
+  In particular, the ``$<INSTALL_PREFIX>`` generator expression can
+  be used to set the directory relative to the install-time prefix.

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=deeab72aae14de3bfce4189ea5e9ee42e7ad94dc
commit deeab72aae14de3bfce4189ea5e9ee42e7ad94dc
Author:     Kyle Edwards <kyle.edwa...@kitware.com>
AuthorDate: Mon Nov 4 12:01:44 2019 -0500
Commit:     Kyle Edwards <kyle.edwa...@kitware.com>
CommitDate: Mon Nov 4 19:02:16 2019 -0500

    Tests: Add tests for INSTALL_NAME_DIR

diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 31b280b779..449075122a 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -290,6 +290,9 @@ add_RunCMake_test(set_property)
 add_RunCMake_test(string)
 add_RunCMake_test(test_include_dirs)
 add_RunCMake_test(BundleUtilities)
+if(APPLE)
+  add_RunCMake_test(INSTALL_NAME_DIR)
+endif()
 
 function(add_RunCMake_test_try_compile)
   if(CMAKE_VERSION VERSION_LESS 3.9.20170907 AND "x${CMAKE_CXX_COMPILER_ID}" 
STREQUAL "xMSVC")
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/CMakeLists.txt 
b/Tests/RunCMake/INSTALL_NAME_DIR/CMakeLists.txt
new file mode 100644
index 0000000000..5253d3479e
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/CMakeLists.txt
@@ -0,0 +1,4 @@
+cmake_minimum_required(VERSION 3.16)
+project(${RunCMake_TEST} NONE)
+include(${CMAKE_CURRENT_LIST_DIR}/INSTALL_NAME_DIR.cmake)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/INSTALL_NAME_DIR.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/INSTALL_NAME_DIR.cmake
new file mode 100644
index 0000000000..eaa0b456a6
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/INSTALL_NAME_DIR.cmake
@@ -0,0 +1,15 @@
+function(add_install_name_dir_libraries install_name_dir)
+  add_library(build_dir SHARED test.c)
+  add_library(install_dir SHARED test.c)
+  if(NOT install_name_dir STREQUAL "NONE")
+    set_target_properties(build_dir install_dir PROPERTIES
+      INSTALL_NAME_DIR "${install_name_dir}"
+      )
+  endif()
+  set_target_properties(install_dir PROPERTIES
+    BUILD_WITH_INSTALL_NAME_DIR TRUE
+    )
+  install(TARGETS build_dir install_dir EXPORT InstallNameDirTest DESTINATION 
lib)
+  install(EXPORT InstallNameDirTest DESTINATION lib/cmake/InstallNameDirTest 
FILE InstallNameDirTest-targets.cmake)
+  file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/targets.txt" CONTENT 
"$<TARGET_FILE:build_dir>\n$<TARGET_FILE:install_dir>\n" CONDITION 
$<CONFIG:Debug>)
+endfunction()
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/RunCMakeTest.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/RunCMakeTest.cmake
new file mode 100644
index 0000000000..2aa03ddab3
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/RunCMakeTest.cmake
@@ -0,0 +1,69 @@
+cmake_minimum_required(VERSION 3.16)
+
+include(RunCMake)
+
+function(run_install_test case)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE:STRING=Debug 
"-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/fake_install")
+  file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+  file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+  run_cmake(${case})
+  run_cmake_command(${case}-build ${CMAKE_COMMAND} --build . --config Debug)
+  run_cmake_command(${case}-install ${CMAKE_COMMAND} --install . --config 
Debug --prefix "${RunCMake_TEST_BINARY_DIR}/real_install")
+endfunction()
+
+find_program(OTOOL_COMMAND otool)
+
+function(check_install_name_dir file expected)
+  execute_process(COMMAND ${OTOOL_COMMAND} -l ${file} RESULT_VARIABLE _result 
OUTPUT_VARIABLE _output)
+  if(_result)
+    string(APPEND RunCMake_TEST_FAILED "Could not run otool on ${file}\n")
+  elseif(_output MATCHES "cmd LC_ID_DYLIB\n[^\n]*\n *name ([^\n]*) \\(offset 
[0-9]+\\)\n")
+    set(_install_name "${CMAKE_MATCH_1}")
+    if(NOT _install_name MATCHES "${expected}")
+      string(APPEND RunCMake_TEST_FAILED "Install name of ${file} did not 
match ${expected} (actual: ${_install_name})\n")
+    endif()
+  else()
+    string(APPEND RunCMake_TEST_FAILED "otool did not print install name for 
${file}\n")
+  endif()
+
+  set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+endfunction()
+
+function(check_imported_soname contents target expected)
+  if(contents MATCHES "set_target_properties\\(${target} PROPERTIES\n[^\n]*\n 
*IMPORTED_SONAME_DEBUG \"([^\n]*)\"\n")
+    set(_soname "${CMAKE_MATCH_1}")
+    set(_regex "^${expected}lib${target}\\.dylib$")
+    if(NOT _soname MATCHES "${_regex}")
+      string(APPEND RunCMake_TEST_FAILED "Target ${target}'s 
IMPORTED_SONAME_DEBUG did not match ${_regex} (actual: ${_soname})\n")
+    endif()
+  else()
+    string(APPEND RunCMake_TEST_FAILED "Could not find IMPORTED_SONAME_DEBUG 
for target ${target} in package config file\n")
+  endif()
+
+  set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+endfunction()
+
+function(check_libraries fake_install real_install soname_prefix)
+  file(STRINGS "${RunCMake_TEST_BINARY_DIR}/targets.txt" _targets)
+  list(GET _targets 0 _build_dir)
+  list(GET _targets 1 _install_dir)
+  check_install_name_dir("${_build_dir}" "^@rpath/libbuild_dir\\.dylib$")
+  check_install_name_dir("${_install_dir}" 
"^${fake_install}libinstall_dir\\.dylib$")
+  
check_install_name_dir("${RunCMake_TEST_BINARY_DIR}/real_install/lib/libbuild_dir.dylib"
 "^${real_install}libbuild_dir\\.dylib$")
+  
check_install_name_dir("${RunCMake_TEST_BINARY_DIR}/real_install/lib/libinstall_dir.dylib"
 "^${real_install}libinstall_dir\\.dylib$")
+
+  file(READ 
"${RunCMake_TEST_BINARY_DIR}/real_install/lib/cmake/InstallNameDirTest/InstallNameDirTest-targets-debug.cmake"
 _targets)
+  check_imported_soname("${_targets}" build_dir "${soname_prefix}")
+  check_imported_soname("${_targets}" install_dir "${soname_prefix}")
+
+  set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+endfunction()
+
+run_install_test(none)
+run_install_test(empty)
+run_install_test(simple)
+run_install_test(simple_genex)
+run_install_test(prefix_genex)
+run_install_test(empty_genex)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/empty-install-check.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/empty-install-check.cmake
new file mode 100644
index 0000000000..db87d2cb9d
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/empty-install-check.cmake
@@ -0,0 +1 @@
+check_libraries("" "" "")
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/empty.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/empty.cmake
new file mode 100644
index 0000000000..0cde4d1184
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/empty.cmake
@@ -0,0 +1,3 @@
+enable_language(C)
+
+add_install_name_dir_libraries("")
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/empty_genex-install-check.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/empty_genex-install-check.cmake
new file mode 100644
index 0000000000..db87d2cb9d
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/empty_genex-install-check.cmake
@@ -0,0 +1 @@
+check_libraries("" "" "")
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/empty_genex.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/empty_genex.cmake
new file mode 100644
index 0000000000..321c8d1ab9
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/empty_genex.cmake
@@ -0,0 +1,3 @@
+enable_language(C)
+
+add_install_name_dir_libraries($<0:/usr/local/lib>)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/none-install-check.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/none-install-check.cmake
new file mode 100644
index 0000000000..c3e7ac4f72
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/none-install-check.cmake
@@ -0,0 +1 @@
+check_libraries(@rpath/ @rpath/ @rpath/)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/none.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/none.cmake
new file mode 100644
index 0000000000..79c5e7d754
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/none.cmake
@@ -0,0 +1,3 @@
+enable_language(C)
+
+add_install_name_dir_libraries(NONE)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex-install-check.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex-install-check.cmake
new file mode 100644
index 0000000000..8cf7db82d8
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex-install-check.cmake
@@ -0,0 +1,6 @@
+check_libraries(
+  ".*/Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex-build/fake_install/lib/"
+  ".*/Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex-build/real_install/lib/"
+  # "$" has to be escaped twice because of its significance in regexes.
+  "\\\${_IMPORT_PREFIX}/lib/"
+  )
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex.cmake
new file mode 100644
index 0000000000..7e26208f53
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex.cmake
@@ -0,0 +1,3 @@
+enable_language(C)
+
+add_install_name_dir_libraries($<1:$<INSTALL_PREFIX>/lib>)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/simple-install-check.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/simple-install-check.cmake
new file mode 100644
index 0000000000..5f737cbfb8
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/simple-install-check.cmake
@@ -0,0 +1 @@
+check_libraries(/usr/local/lib/ /usr/local/lib/ /usr/local/lib/)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/simple.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/simple.cmake
new file mode 100644
index 0000000000..d0198750dc
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/simple.cmake
@@ -0,0 +1,3 @@
+enable_language(C)
+
+add_install_name_dir_libraries(/usr/local/lib)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/simple_genex-install-check.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/simple_genex-install-check.cmake
new file mode 100644
index 0000000000..5f737cbfb8
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/simple_genex-install-check.cmake
@@ -0,0 +1 @@
+check_libraries(/usr/local/lib/ /usr/local/lib/ /usr/local/lib/)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/simple_genex.cmake 
b/Tests/RunCMake/INSTALL_NAME_DIR/simple_genex.cmake
new file mode 100644
index 0000000000..1e729e86f8
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/simple_genex.cmake
@@ -0,0 +1,3 @@
+enable_language(C)
+
+add_install_name_dir_libraries($<1:/usr/local/lib>)
diff --git a/Tests/RunCMake/INSTALL_NAME_DIR/test.c 
b/Tests/RunCMake/INSTALL_NAME_DIR/test.c
new file mode 100644
index 0000000000..c2db61cc82
--- /dev/null
+++ b/Tests/RunCMake/INSTALL_NAME_DIR/test.c
@@ -0,0 +1,3 @@
+void test(void)
+{
+}

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3c85f11fedf55c5072cd00deb129a0782130d78c
commit 3c85f11fedf55c5072cd00deb129a0782130d78c
Author:     Kyle Edwards <kyle.edwa...@kitware.com>
AuthorDate: Fri Nov 1 17:37:59 2019 -0400
Commit:     Kyle Edwards <kyle.edwa...@kitware.com>
CommitDate: Mon Nov 4 12:01:05 2019 -0500

    INSTALL_NAME_DIR: Add support for generator expressions

diff --git a/Source/cmExportInstallFileGenerator.cxx 
b/Source/cmExportInstallFileGenerator.cxx
index 090e30f5e6..987ec9ea7b 100644
--- a/Source/cmExportInstallFileGenerator.cxx
+++ b/Source/cmExportInstallFileGenerator.cxx
@@ -517,13 +517,14 @@ void 
cmExportInstallFileGenerator::ComplainAboutMissingTarget(
 }
 
 std::string cmExportInstallFileGenerator::InstallNameDir(
-  cmGeneratorTarget* target, const std::string& /*config*/)
+  cmGeneratorTarget* target, const std::string& config)
 {
   std::string install_name_dir;
 
   cmMakefile* mf = target->Target->GetMakefile();
   if (mf->IsOn("CMAKE_PLATFORM_HAS_INSTALLNAME")) {
-    install_name_dir = target->GetInstallNameDirForInstallTree();
+    install_name_dir =
+      target->GetInstallNameDirForInstallTree(config, "${_IMPORT_PREFIX}");
   }
 
   return install_name_dir;
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index d5e58b0062..d750d96431 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -2125,7 +2125,9 @@ std::string 
cmGeneratorTarget::GetInstallNameDirForBuildTree(
     // If building directly for installation then the build tree install_name
     // is the same as the install tree.
     if (this->MacOSXUseInstallNameDir()) {
-      return this->GetInstallNameDirForInstallTree();
+      std::string installPrefix =
+        this->Makefile->GetSafeDefinition("CMAKE_INSTALL_PREFIX");
+      return this->GetInstallNameDirForInstallTree(config, installPrefix);
     }
 
     // Use the build tree directory for the target.
@@ -2143,7 +2145,8 @@ std::string 
cmGeneratorTarget::GetInstallNameDirForBuildTree(
   return "";
 }
 
-std::string cmGeneratorTarget::GetInstallNameDirForInstallTree() const
+std::string cmGeneratorTarget::GetInstallNameDirForInstallTree(
+  const std::string& config, const std::string& installPrefix) const
 {
   if (this->Makefile->IsOn("CMAKE_PLATFORM_HAS_INSTALLNAME")) {
     std::string dir;
@@ -2151,7 +2154,13 @@ std::string 
cmGeneratorTarget::GetInstallNameDirForInstallTree() const
 
     if (this->CanGenerateInstallNameDir(INSTALL_NAME_FOR_INSTALL)) {
       if (install_name_dir && *install_name_dir) {
-        dir = cmStrCat(install_name_dir, '/');
+        dir = install_name_dir;
+        cmGeneratorExpression::ReplaceInstallPrefix(dir, installPrefix);
+        dir =
+          cmGeneratorExpression::Evaluate(dir, this->LocalGenerator, config);
+        if (!dir.empty()) {
+          dir = cmStrCat(dir, '/');
+        }
       }
     }
     if (!install_name_dir) {
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index 4623513140..62b88c5259 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -276,7 +276,8 @@ public:
 
   /** Return the install name directory for the target in the
    * install tree.  For example: "\@rpath/" or "\@loader_path/". */
-  std::string GetInstallNameDirForInstallTree() const;
+  std::string GetInstallNameDirForInstallTree(
+    const std::string& config, const std::string& installPrefix) const;
 
   cmListFileBacktrace GetBacktrace() const;
 
diff --git a/Source/cmInstallTargetGenerator.cxx 
b/Source/cmInstallTargetGenerator.cxx
index 0cd04cc1d9..90cccaba41 100644
--- a/Source/cmInstallTargetGenerator.cxx
+++ b/Source/cmInstallTargetGenerator.cxx
@@ -554,7 +554,8 @@ void cmInstallTargetGenerator::AddInstallNamePatchRule(
       // components of the install_name field then we need to create a
       // mapping to be applied after installation.
       std::string for_build = tgt->GetInstallNameDirForBuildTree(config);
-      std::string for_install = tgt->GetInstallNameDirForInstallTree();
+      std::string for_install = tgt->GetInstallNameDirForInstallTree(
+        config, "${CMAKE_INSTALL_PREFIX}");
       if (for_build != for_install) {
         // The directory portions differ.  Append the filename to
         // create the mapping.
@@ -577,7 +578,8 @@ void cmInstallTargetGenerator::AddInstallNamePatchRule(
   if (this->Target->GetType() == cmStateEnums::SHARED_LIBRARY) {
     std::string for_build =
       this->Target->GetInstallNameDirForBuildTree(config);
-    std::string for_install = this->Target->GetInstallNameDirForInstallTree();
+    std::string for_install = this->Target->GetInstallNameDirForInstallTree(
+      config, "${CMAKE_INSTALL_PREFIX}");
 
     if (this->Target->IsFrameworkOnApple() && for_install.empty()) {
       // Frameworks seem to have an id corresponding to their own full

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2ec1156b80485fedba5b6d9b0802c21e1cbc2d8f
commit 2ec1156b80485fedba5b6d9b0802c21e1cbc2d8f
Author:     Kyle Edwards <kyle.edwa...@kitware.com>
AuthorDate: Fri Nov 1 16:50:42 2019 -0400
Commit:     Kyle Edwards <kyle.edwa...@kitware.com>
CommitDate: Fri Nov 1 17:29:37 2019 -0400

    Refactor: Generalize cmExportInstallFileGenerator::ReplaceInstallPrefix()

diff --git a/Source/cmExportInstallFileGenerator.cxx 
b/Source/cmExportInstallFileGenerator.cxx
index 6d29c9994f..090e30f5e6 100644
--- a/Source/cmExportInstallFileGenerator.cxx
+++ b/Source/cmExportInstallFileGenerator.cxx
@@ -258,15 +258,7 @@ void 
cmExportInstallFileGenerator::LoadConfigFiles(std::ostream& os)
 
 void cmExportInstallFileGenerator::ReplaceInstallPrefix(std::string& input)
 {
-  std::string::size_type pos = 0;
-  std::string::size_type lastPos = pos;
-
-  while ((pos = input.find("$<INSTALL_PREFIX>", lastPos)) !=
-         std::string::npos) {
-    std::string::size_type endPos = pos + sizeof("$<INSTALL_PREFIX>") - 1;
-    input.replace(pos, endPos - pos, "${_IMPORT_PREFIX}");
-    lastPos = endPos;
-  }
+  cmGeneratorExpression::ReplaceInstallPrefix(input, "${_IMPORT_PREFIX}");
 }
 
 bool cmExportInstallFileGenerator::GenerateImportFileConfig(
diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx
index b7f7d1d9b6..de43d3e732 100644
--- a/Source/cmGeneratorExpression.cxx
+++ b/Source/cmGeneratorExpression.cxx
@@ -385,6 +385,20 @@ bool cmGeneratorExpression::IsValidTargetName(const 
std::string& input)
   return targetNameValidator.find(input);
 }
 
+void cmGeneratorExpression::ReplaceInstallPrefix(
+  std::string& input, const std::string& replacement)
+{
+  std::string::size_type pos = 0;
+  std::string::size_type lastPos = pos;
+
+  while ((pos = input.find("$<INSTALL_PREFIX>", lastPos)) !=
+         std::string::npos) {
+    std::string::size_type endPos = pos + sizeof("$<INSTALL_PREFIX>") - 1;
+    input.replace(pos, endPos - pos, replacement);
+    lastPos = endPos;
+  }
+}
+
 void cmCompiledGeneratorExpression::GetMaxLanguageStandard(
   const cmGeneratorTarget* tgt, std::map<std::string, std::string>& mapping)
 {
diff --git a/Source/cmGeneratorExpression.h b/Source/cmGeneratorExpression.h
index 4bd1c9f88a..cd35e1e25d 100644
--- a/Source/cmGeneratorExpression.h
+++ b/Source/cmGeneratorExpression.h
@@ -87,6 +87,9 @@ public:
     return input != nullptr && input[0] == '$' && input[1] == '<';
   }
 
+  static void ReplaceInstallPrefix(std::string& input,
+                                   const std::string& replacement);
+
 private:
   cmListFileBacktrace Backtrace;
 };

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

Summary of changes:
 Help/manual/cmake-generator-expressions.7.rst      |  3 +-
 Help/prop_tgt/INSTALL_NAME_DIR.rst                 |  4 ++
 Help/release/dev/install-name-dir-genex.rst        |  7 +++
 Source/cmExportInstallFileGenerator.cxx            | 15 ++---
 Source/cmGeneratorExpression.cxx                   | 14 +++++
 Source/cmGeneratorExpression.h                     |  3 +
 Source/cmGeneratorTarget.cxx                       | 15 ++++-
 Source/cmGeneratorTarget.h                         |  3 +-
 Source/cmInstallTargetGenerator.cxx                |  6 +-
 Tests/RunCMake/CMakeLists.txt                      |  3 +
 Tests/RunCMake/INSTALL_NAME_DIR/CMakeLists.txt     |  4 ++
 .../INSTALL_NAME_DIR/INSTALL_NAME_DIR.cmake        | 15 +++++
 Tests/RunCMake/INSTALL_NAME_DIR/RunCMakeTest.cmake | 69 ++++++++++++++++++++++
 .../INSTALL_NAME_DIR/empty-install-check.cmake     |  1 +
 Tests/RunCMake/INSTALL_NAME_DIR/empty.cmake        |  3 +
 .../empty_genex-install-check.cmake                |  1 +
 Tests/RunCMake/INSTALL_NAME_DIR/empty_genex.cmake  |  3 +
 .../INSTALL_NAME_DIR/none-install-check.cmake      |  1 +
 Tests/RunCMake/INSTALL_NAME_DIR/none.cmake         |  3 +
 .../prefix_genex-install-check.cmake               |  6 ++
 Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex.cmake |  3 +
 .../INSTALL_NAME_DIR/simple-install-check.cmake    |  1 +
 Tests/RunCMake/INSTALL_NAME_DIR/simple.cmake       |  3 +
 .../simple_genex-install-check.cmake               |  1 +
 Tests/RunCMake/INSTALL_NAME_DIR/simple_genex.cmake |  3 +
 .../test.h => INSTALL_NAME_DIR/test.c}             |  0
 26 files changed, 172 insertions(+), 18 deletions(-)
 create mode 100644 Help/release/dev/install-name-dir-genex.rst
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/CMakeLists.txt
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/INSTALL_NAME_DIR.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/RunCMakeTest.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/empty-install-check.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/empty.cmake
 create mode 100644 
Tests/RunCMake/INSTALL_NAME_DIR/empty_genex-install-check.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/empty_genex.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/none-install-check.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/none.cmake
 create mode 100644 
Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex-install-check.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/prefix_genex.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/simple-install-check.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/simple.cmake
 create mode 100644 
Tests/RunCMake/INSTALL_NAME_DIR/simple_genex-install-check.cmake
 create mode 100644 Tests/RunCMake/INSTALL_NAME_DIR/simple_genex.cmake
 copy Tests/RunCMake/{CommandLine/cmake_depends/test.h => 
INSTALL_NAME_DIR/test.c} (100%)


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
https://cmake.org/mailman/listinfo/cmake-commits

Reply via email to