Skip to content

Commit 5049306

Browse files
committed
BUG: Fix execution of Qt designer executable packaged on macOS
This commit explicitly install the "QtDesignerComponents.framework" and generate "qt.conf" to ensure only Qt plugins available in Slicer package are loaded. git-svn-id: http://svn.slicer.org/Slicer4/trunk@27714 3bd1e089-480b-0410-8dfb-8563597acbee
1 parent 50f265e commit 5049306

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

CMake/SlicerCPackBundleFixup.cmake.in

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,12 +367,14 @@ function(fixup_bundle_with_plugins app)
367367
endif()
368368

369369
# Since BundleUtilities module does not know how to install .app directory withing
370-
# an existing app, the following explicitly install the designer application.
370+
# an existing app, the following explicitly install the designer application as well
371+
# as the QtDesignerComponents.framework.
371372
set(Slicer_BUILD_QT_DESIGNER_PLUGINS "@Slicer_BUILD_QT_DESIGNER_PLUGINS@")
372373
set(designer_app_subdir "Designer.app")
373374
set(designer_src_dir "${qt_root_dir}/../bin/${designer_app_subdir}")
374375
set(designer_dest_dir "${app_dir}/Contents/bin/${designer_app_subdir}")
375376
if(Slicer_BUILD_QT_DESIGNER_PLUGINS AND EXISTS ${designer_src_dir})
377+
# Designer
376378
file(COPY "${designer_src_dir}/Contents" DESTINATION "${designer_dest_dir}/" USE_SOURCE_PERMISSIONS)
377379
set(designer_executable "${designer_dest_dir}/Contents/MacOS/Designer")
378380
# Collect list of Qt framework dependencies
@@ -396,6 +398,32 @@ function(fixup_bundle_with_plugins app)
396398
-rpath "@executable_path/Frameworks" "@loader_path/../../../../"
397399
${changes} "${designer_executable}"
398400
)
401+
# Generate qt.conf file to override plugin paths and ensure plugins provided
402+
# by Slicer package are loaded
403+
file(WRITE "${designer_dest_dir}/Contents/Resources/qt.conf" "[Paths]
404+
Plugins=../../../@Slicer_QtPlugins_DIR@
405+
")
406+
407+
# QtDesignerComponents.framework
408+
set(resolved_item "${qt_root_dir}/QtDesignerComponents.framework/Versions/5/QtDesignerComponents")
409+
set(resolved_embedded_item "${app_dir}/Contents/Frameworks/QtDesignerComponents.framework/Versions/5/QtDesignerComponents")
410+
copy_resolved_framework_into_bundle("${resolved_item}" "${resolved_embedded_item}")
411+
# Collect list of Qt framework dependencies
412+
set(prereqs )
413+
get_prerequisites(${resolved_embedded_item} "prereqs" 1 0 "" "")
414+
# Generate list of "-change" arguments
415+
set(changes "")
416+
foreach(item ${prereqs})
417+
gp_item_default_embedded_path_override("${item}" path)
418+
get_filename_component(item_name "${item}" NAME)
419+
string(REGEX REPLACE "^.*(${item_name}.framework/.*/?${item_name}).*$" "${path}/\\1" embedded_item "${item}")
420+
set(changes ${changes} "-change" "${item}" "${embedded_item}")
421+
endforeach()
422+
# Update executable
423+
execute_process(COMMAND install_name_tool
424+
${changes} -id "@rpath/Frameworks/QtDesignerComponents.framework/Versions/5/QtDesignerComponents"
425+
"${resolved_embedded_item}"
426+
)
399427
endif()
400428
endif()
401429

0 commit comments

Comments
 (0)