diff --git a/CMakeLists.txt b/CMakeLists.txt index 67fadc9b..980065b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,4 +82,9 @@ if("plugin" IN_LIST ENABLE_MODULES OR "shell" IN_LIST ENABLE_MODULES) ) FetchContent_MakeAvailable(m3shapes_external) message(STATUS "Done fetching M3Shapes module") + + # Fix m3shapes wrong rpath + if(TARGET m3shapesplugin) + set_target_properties(m3shapesplugin PROPERTIES INSTALL_RPATH "$ORIGIN") + endif() endif() diff --git a/plugin/cmake/qml-module.cmake b/plugin/cmake/qml-module.cmake index 28d6f021..29dc5fc2 100644 --- a/plugin/cmake/qml-module.cmake +++ b/plugin/cmake/qml-module.cmake @@ -25,11 +25,28 @@ function(qml_module arg_TARGET) message(STATUS "Created QML module: ${module_uri}") + # Modules can't link together properly if the backing target and plugin target + # are in the same dir (because diff modules can't access each other). + # So install backing targets to QMLDIR/.../lib/ instead. + string(REPLACE "/" ";" uri_parts "${module_target_path}") + list(GET uri_parts 0 top_level) + set(backing_lib_dir "${INSTALL_QMLDIR}/${top_level}/lib") set(module_dir "${INSTALL_QMLDIR}/${module_target_path}") - install(TARGETS ${arg_TARGET} LIBRARY DESTINATION "${module_dir}" RUNTIME DESTINATION "${module_dir}") - install(TARGETS "${module_plugin_target}" LIBRARY DESTINATION "${module_dir}" RUNTIME DESTINATION "${module_dir}") + + install(TARGETS ${arg_TARGET} + LIBRARY DESTINATION "${backing_lib_dir}" + RUNTIME DESTINATION "${backing_lib_dir}" + ) + install(TARGETS "${module_plugin_target}" + LIBRARY DESTINATION "${module_dir}" + RUNTIME DESTINATION "${module_dir}" + ) install(FILES "${module_qmldir}" DESTINATION "${module_dir}") install(FILES "${module_typeinfo}" DESTINATION "${module_dir}") target_link_libraries(${arg_TARGET} PRIVATE caelestia-pch Qt::Core Qt::Qml ${arg_LIBRARIES}) + + # Add backing target dir to plugin rpath so it can find its backing target + file(RELATIVE_PATH plugin_to_lib "/${module_target_path}" "/${top_level}/lib") + set_property(TARGET ${module_plugin_target} APPEND PROPERTY INSTALL_RPATH "$ORIGIN/${plugin_to_lib}") endfunction()