Skip to content
Snippets Groups Projects
Commit a79d07c2 authored by Lars Bilke's avatar Lars Bilke
Browse files

[CMake] Run CMake after target was built to generate dep info.

parent 5f0fc9cd
No related branches found
No related tags found
No related merge requests found
......@@ -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)
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)
# 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()
cmake --build . --config Release
cmake -DPRE_INSTALL_RUN=ON .
cmake --build . --target package --config Release
#!/bin/sh
cmake --build . --config Release -- -j ${NUM_PROCESSORS}
cmake -DPRE_INSTALL_RUN=ON .
cmake --build . --target package --config Release
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment