From a79d07c220a85c63f9ff38d4b09a15051e2ac6db Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Fri, 22 Sep 2017 13:39:19 +0200
Subject: [PATCH] [CMake] Run CMake after target was built to generate dep
 info.

---
 CMakeLists.txt                                |  2 +-
 scripts/cmake/packaging/GetDependencies.cmake | 43 -------------------
 .../cmake/packaging/InstallDependencies.cmake | 41 +++++++++++++++++-
 scripts/cmake/packaging/package.cmd.in        |  3 --
 scripts/cmake/packaging/package.sh.in         |  4 --
 5 files changed, 40 insertions(+), 53 deletions(-)
 delete mode 100644 scripts/cmake/packaging/GetDependencies.cmake
 delete mode 100644 scripts/cmake/packaging/package.cmd.in
 delete mode 100644 scripts/cmake/packaging/package.sh.in

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 90cc25822e5..4f7df5ebaca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -290,4 +290,4 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/BaseLib/BuildInfo.cpp.in"
     "${CMAKE_CURRENT_BINARY_DIR}/BaseLib/BuildInfo.cpp" @ONLY)
 
 include(scripts/cmake/MarkVariablesAdvanced.cmake)
-include(scripts/cmake/packaging/GetDependencies.cmake)
+unset(PRE_INSTALL_RUN CACHE)
diff --git a/scripts/cmake/packaging/GetDependencies.cmake b/scripts/cmake/packaging/GetDependencies.cmake
deleted file mode 100644
index 878ec3874f3..00000000000
--- a/scripts/cmake/packaging/GetDependencies.cmake
+++ /dev/null
@@ -1,43 +0,0 @@
-foreach(TARGET ${INSTALL_DEPENDENCIES})
-
-    if(MSVC AND NOT CMAKE_GENERATOR STREQUAL "Ninja" )
-        if(USE_CONAN)
-            set(TARGET_EXE ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
-        else()
-            set(TARGET_EXE ${EXECUTABLE_OUTPUT_PATH}/Release/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
-        endif()
-    else()
-        set(TARGET_EXE ${EXECUTABLE_OUTPUT_PATH}/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
-    endif()
-
-    if(EXISTS ${TARGET_EXE})
-        include(GetPrerequisites)
-        # arg3: exclude system, arg4: recursive
-        if (VTK_BUILD_SHARED_LIBS)
-            list(APPEND dirs ${vtkIOXML_RUNTIME_LIBRARY_DIRS})
-        endif()
-        list(APPEND dirs "/usr/local/lib")
-        get_prerequisites(${TARGET_EXE} TARGET_DEPENDENCIES 1 1 "" ${dirs})
-        if(PRE_INSTALL_RUN)
-            message("-- Dependencies of target ${TARGET}:")
-        endif()
-        foreach(DEPENDENCY ${TARGET_DEPENDENCIES})
-            if(NOT ${DEPENDENCY} MATCHES "@loader_path")
-                gp_resolve_item("${TARGET_EXE}" "${DEPENDENCY}" "" "" DEPENDENCY_PATH)
-                get_filename_component(RESOLVED_DEPENDENCY_PATH "${DEPENDENCY_PATH}" REALPATH)
-                string(TOLOWER ${DEPENDENCY} DEPENDENCY_LOWER)
-                set(DEPENDENCY_PATHS ${DEPENDENCY_PATHS} ${RESOLVED_DEPENDENCY_PATH})
-                if(PRE_INSTALL_RUN)
-                    message("     ${RESOLVED_DEPENDENCY_PATH}")
-                endif()
-            endif()
-        endforeach()
-        if(PRE_INSTALL_RUN)
-            message("")
-        endif()
-        install(FILES ${DEPENDENCY_PATHS} DESTINATION bin)
-    endif()
-
-endforeach()
-
-unset(PRE_INSTALL_RUN CACHE)
diff --git a/scripts/cmake/packaging/InstallDependencies.cmake b/scripts/cmake/packaging/InstallDependencies.cmake
index 46e94625f7d..a3076119fb0 100644
--- a/scripts/cmake/packaging/InstallDependencies.cmake
+++ b/scripts/cmake/packaging/InstallDependencies.cmake
@@ -1,4 +1,41 @@
-# Registers a target for installing its dependencies (dll / so files)
 macro(InstallDependencies TARGET)
-    set(INSTALL_DEPENDENCIES "${INSTALL_DEPENDENCIES};${TARGET}" CACHE INTERNAL "")
+    set(EXCLUDE_SYSTEM 1)
+    get_target_property(EXE_DIR ${TARGET} RUNTIME_OUTPUT_DIRECTORY)
+    set(TARGET_EXE ${EXE_DIR}/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
+
+    if(EXISTS ${TARGET_EXE})
+        # Run CMake again after target was built to collect dependencies
+        add_custom_command(TARGET ${TARGET} POST_BUILD
+            COMMAND ${CMAKE_COMMAND} . -DPRE_INSTALL_RUN=ON
+            WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
+        )
+
+        include(GetPrerequisites)
+        # arg3: exclude system, arg4: recursive
+        if (VTK_BUILD_SHARED_LIBS)
+            list(APPEND dirs ${vtkIOXML_RUNTIME_LIBRARY_DIRS})
+        endif()
+        list(APPEND dirs "/usr/local/lib")
+        get_prerequisites(${TARGET_EXE} TARGET_DEPENDENCIES ${EXCLUDE_SYSTEM} 1 "" ${dirs})
+        if(PRE_INSTALL_RUN)
+            message("-- Dependencies of target ${TARGET}:")
+        endif()
+        foreach(DEPENDENCY ${TARGET_DEPENDENCIES})
+            if(NOT ${DEPENDENCY} MATCHES "@loader_path")
+                gp_resolve_item("${TARGET_EXE}" "${DEPENDENCY}" "" "" DEPENDENCY_PATH)
+                get_filename_component(RESOLVED_DEPENDENCY_PATH "${DEPENDENCY_PATH}" REALPATH)
+                string(TOLOWER ${DEPENDENCY} DEPENDENCY_LOWER)
+                set(DEPENDENCY_PATHS ${DEPENDENCY_PATHS} ${RESOLVED_DEPENDENCY_PATH})
+                if(PRE_INSTALL_RUN)
+                    message("     ${RESOLVED_DEPENDENCY_PATH}")
+                endif()
+            endif()
+        endforeach()
+        if(PRE_INSTALL_RUN)
+            message("")
+        endif()
+        install(FILES ${DEPENDENCY_PATHS} DESTINATION bin)
+    endif()
+
 endmacro()
+
diff --git a/scripts/cmake/packaging/package.cmd.in b/scripts/cmake/packaging/package.cmd.in
deleted file mode 100644
index 1fe02f1d9b8..00000000000
--- a/scripts/cmake/packaging/package.cmd.in
+++ /dev/null
@@ -1,3 +0,0 @@
-cmake --build . --config Release
-cmake -DPRE_INSTALL_RUN=ON .
-cmake --build . --target package --config Release
diff --git a/scripts/cmake/packaging/package.sh.in b/scripts/cmake/packaging/package.sh.in
deleted file mode 100644
index cf6690c1f03..00000000000
--- a/scripts/cmake/packaging/package.sh.in
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-cmake --build . --config Release -- -j ${NUM_PROCESSORS}
-cmake -DPRE_INSTALL_RUN=ON .
-cmake --build . --target package --config Release
-- 
GitLab