blob: fef084b96ae5afc232830adcc9e4e7ca87b67ddd [file] [log] [blame]
enable_language(C)
set(dep_list)
set(import_list)
set(call_list)
foreach(i 1 2 3 4 5 6 7 8 9)
file(WRITE "${CMAKE_BINARY_DIR}/dep${i}.c"
"#ifdef _WIN32
__declspec(dllexport)
#endif
void dep${i}(void)
{
}
")
add_library(dep${i} SHARED "${CMAKE_BINARY_DIR}/dep${i}.c")
list(APPEND dep_list dep${i})
string(APPEND import_list "EXE_IMPORT extern void dep${i}(void);\n")
string(APPEND call_list " dep${i}();\n")
endforeach()
set_target_properties(dep5 PROPERTIES
VERSION 1.2.3
SOVERSION 1
)
file(WRITE "${CMAKE_BINARY_DIR}/main.c"
"#ifdef _WIN32
# define EXE_IMPORT __declspec(dllimport)
#else
# define EXE_IMPORT
#endif
${import_list}
int main(void)
{
${call_list}
return 0;
}
")
add_executable(exe "${CMAKE_BINARY_DIR}/main.c")
target_link_libraries(exe PRIVATE ${dep_list})
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set_property(TARGET exe PROPERTY INSTALL_RPATH "\${ORIGIN}/../lib")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set_property(TARGET exe PROPERTY INSTALL_RPATH "@loader_path/../lib")
endif()
install(TARGETS exe ${dep_list})
install(CODE
[[
function(exec_get_runtime_dependencies depsfile udepsfile cdepsfile)
file(GET_RUNTIME_DEPENDENCIES
RESOLVED_DEPENDENCIES_VAR deps
UNRESOLVED_DEPENDENCIES_VAR udeps
CONFLICTING_DEPENDENCIES_PREFIX cdeps
PRE_INCLUDE_REGEXES "dep[123456789]"
PRE_EXCLUDE_REGEXES ".*"
POST_INCLUDE_REGEXES "dep9"
POST_INCLUDE_FILES
"${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:dep1>"
"${CMAKE_INSTALL_PREFIX}/lib/$<TARGET_FILE_NAME:dep1>"
"${CMAKE_INSTALL_PREFIX}/bin/../bin/$<TARGET_FILE_NAME:dep2>"
"${CMAKE_INSTALL_PREFIX}/bin/../lib/$<TARGET_FILE_NAME:dep2>"
"${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:dep3>"
"${CMAKE_INSTALL_PREFIX}/lib/$<TARGET_FILE_NAME:dep3>"
"${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:dep8>"
"${CMAKE_INSTALL_PREFIX}/lib/$<TARGET_FILE_NAME:dep8>"
POST_EXCLUDE_FILES
"${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:dep3>"
"${CMAKE_INSTALL_PREFIX}/lib/$<TARGET_FILE_NAME:dep3>"
"${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:dep5>"
"${CMAKE_INSTALL_PREFIX}/lib/$<TARGET_FILE_NAME:dep5>"
"${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:dep6>"
"${CMAKE_INSTALL_PREFIX}/lib/$<TARGET_FILE_NAME:dep6>"
"${CMAKE_INSTALL_PREFIX}/bin/../bin/$<TARGET_FILE_NAME:dep7>"
"${CMAKE_INSTALL_PREFIX}/bin/../lib/$<TARGET_FILE_NAME:dep7>"
POST_EXCLUDE_FILES_STRICT
"${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:dep8>"
"${CMAKE_INSTALL_PREFIX}/lib/$<TARGET_FILE_NAME:dep8>"
"${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:dep9>"
"${CMAKE_INSTALL_PREFIX}/lib/$<TARGET_FILE_NAME:dep9>"
${ARGN}
)
list(SORT deps)
list(SORT udeps)
list(SORT cdeps_FILENAMES)
file(WRITE "${CMAKE_INSTALL_PREFIX}/deps/${depsfile}" "${deps}")
file(WRITE "${CMAKE_INSTALL_PREFIX}/deps/${udepsfile}" "${udeps}")
file(WRITE "${CMAKE_INSTALL_PREFIX}/deps/${cdepsfile}" "")
foreach(cdep IN LISTS cdeps_FILENAMES)
set(cdep_values ${cdeps_${cdep}})
list(SORT cdep_values)
file(APPEND "${CMAKE_INSTALL_PREFIX}/deps/${cdepsfile}" "${cdep}:${cdep_values}\n")
endforeach()
endfunction()
exec_get_runtime_dependencies(
deps.txt udeps.txt cdeps.txt
EXECUTABLES
"${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:exe>"
)
]])