diff --git a/python/extension/CMakeLists.txt b/python/extension/CMakeLists.txt index 3478e60bbec904b0e10038828416df6190bd783b..4990adaa61869030a1deb9c220e3f4e01774af59 100644 --- a/python/extension/CMakeLists.txt +++ b/python/extension/CMakeLists.txt @@ -29,7 +29,11 @@ target_link_libraries(extension PRIVATE robofish::trackviewer::cpp) install(TARGETS extension OPTIONAL DESTINATION .) -set_target_properties(extension PROPERTIES INSTALL_RPATH "\$ORIGIN;") +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + set_target_properties(extension PROPERTIES INSTALL_RPATH "\$ORIGIN;") +elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") + set_target_properties(extension PROPERTIES INSTALL_RPATH "@loader_path") +endif() include(Locate) @@ -60,6 +64,34 @@ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") endif() get_filename_component(library_path "${library_path}" REALPATH) get_filename_component(library_name "${library_path}" NAME) - install(FILES "${library_path}" RENAME "${library_name}" DESTINATION .) + + execute_process( + COMMAND otool -D "${library_path}" + OUTPUT_VARIABLE _output + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE _res + ) + if(NOT "${_res}" STREQUAL "0") + message(FATAL_ERROR "Could not get shared library id name for ${library_path}") + endif() + string(REPLACE "\n" ";" _output_lines "${_output}") + list(GET _output_lines 1 library_id) + + add_custom_command( + TARGET extension POST_BUILD + COMMAND install_name_tool -change "${library_id}" "@loader_path/${library_name}" "$<TARGET_FILE:extension>" + VERBATIM + ) + + file(COPY "${library_path}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}" FILE_PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE) + execute_process( + COMMAND install_name_tool -id "@loader_path/${library_name}" "${CMAKE_CURRENT_BINARY_DIR}/${library_name}" + RESULT_VARIABLE _res + ) + if(NOT "${_res}" STREQUAL "0") + message(FATAL_ERROR "Could not patch shared library id name for ${library_path}") + endif() + + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${library_name}" RENAME "${library_name}" DESTINATION .) endforeach() endif()