@@ -9,14 +9,15 @@ macro(DeployMacOS TARGET)
99 OUTPUT_STRIP_TRAILING_WHITESPACE
1010 )
1111
12- install (CODE "set(TARGET_FILE \" ${TARGET_FILE} \" )" COMPONENT "Hyperion" )
13- install (CODE "set(TARGET_BUNDLE_NAME \" ${TARGET} .app\" )" COMPONENT "Hyperion" )
14- install (CODE "set(PLUGIN_DIR \" ${QT_PLUGIN_DIR} \" )" COMPONENT "Hyperion" )
15- install (CODE "set(BUILD_DIR \" ${CMAKE_BINARY_DIR} \" )" COMPONENT "Hyperion" )
12+ install (CODE "set(TARGET_FILE \" ${TARGET_FILE} \" )" COMPONENT "Hyperion" )
13+ install (CODE "set(TARGET_BUNDLE_NAME \" ${TARGET} .app\" )" COMPONENT "Hyperion" )
14+ install (CODE "set(PLUGIN_DIR \" ${QT_PLUGIN_DIR} \" )" COMPONENT "Hyperion" )
1615 install (CODE "set(ENABLE_EFFECTENGINE \" ${ENABLE_EFFECTENGINE} \" )" COMPONENT "Hyperion" )
1716
1817 install (CODE [[
1918
19+ set(BUNDLE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}")
20+
2021 file(GET_RUNTIME_DEPENDENCIES
2122 EXECUTABLES ${TARGET_FILE}
2223 RESOLVED_DEPENDENCIES_VAR resolved_deps
@@ -28,13 +29,13 @@ macro(DeployMacOS TARGET)
2829 if (${_index} GREATER -1)
2930 file(INSTALL
3031 FILES "${dependency}"
31- DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME }/Contents/Frameworks"
32+ DESTINATION "${BUNDLE_INSTALL_DIR }/Contents/Frameworks"
3233 TYPE SHARED_LIBRARY
3334 )
3435 else()
3536 file(INSTALL
3637 FILES "${dependency}"
37- DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME }/Contents/lib"
38+ DESTINATION "${BUNDLE_INSTALL_DIR }/Contents/lib"
3839 TYPE SHARED_LIBRARY
3940 FOLLOW_SYMLINK_CHAIN
4041 )
@@ -58,18 +59,18 @@ macro(DeployMacOS TARGET)
5859
5960 foreach(DEPENDENCY ${PLUGINS})
6061 file(INSTALL
61- DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME }/Contents/lib"
62+ DESTINATION "${BUNDLE_INSTALL_DIR }/Contents/lib"
6263 TYPE SHARED_LIBRARY
6364 FILES ${DEPENDENCY}
6465 FOLLOW_SYMLINK_CHAIN
6566 )
6667 endforeach()
6768
6869 get_filename_component(singleQtLib ${file} NAME)
69- list(APPEND QT_PLUGINS "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME }/Contents/plugins/${PLUGIN}/${singleQtLib}")
70+ list(APPEND QT_PLUGINS "${BUNDLE_INSTALL_DIR }/Contents/plugins/${PLUGIN}/${singleQtLib}")
7071 file(INSTALL
7172 FILES ${file}
72- DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME }/Contents/plugins/${PLUGIN}"
73+ DESTINATION "${BUNDLE_INSTALL_DIR }/Contents/plugins/${PLUGIN}"
7374 TYPE SHARED_LIBRARY
7475 )
7576
@@ -78,10 +79,10 @@ macro(DeployMacOS TARGET)
7879 endforeach()
7980
8081 include(BundleUtilities)
81- fixup_bundle("${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}" "${QT_PLUGINS}" "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/lib" IGNORE_ITEM "python;python3;Python;Python3;.Python;.Python3")
82+ fixup_bundle("${BUNDLE_INSTALL_DIR}" "${QT_PLUGINS}" "${BUNDLE_INSTALL_DIR}/Contents/lib" IGNORE_ITEM "python;python3;Python;Python3;.Python;.Python3")
83+ file(REMOVE_RECURSE "${BUNDLE_INSTALL_DIR}/Contents/lib")
8284
8385 if(ENABLE_EFFECTENGINE)
84-
8586 # Detect the Python version and modules directory
8687 if(NOT CMAKE_VERSION VERSION_LESS "3.12")
8788 find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
@@ -98,24 +99,37 @@ macro(DeployMacOS TARGET)
9899
99100 # Copy Python modules to '/../Frameworks/Python.framework/Versions/Current/lib/PythonMAJOR.MINOR' and ignore the unnecessary stuff listed below
100101 if (PYTHON_MODULES_DIR)
102+ set(PYTHON_FRAMEWORK "${BUNDLE_INSTALL_DIR}/Contents/Frameworks/Python.framework")
101103 file(
102104 COPY ${PYTHON_MODULES_DIR}/
103- DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/Frameworks/Python.framework/Versions/Current/lib/python${PYTHON_VERSION_MAJOR_MINOR}"
104- PATTERN "*.pyc" EXCLUDE # compiled bytecodes
105- PATTERN "__pycache__" EXCLUDE # any cache
106- PATTERN "config-${PYTHON_VERSION_MAJOR_MINOR}*" EXCLUDE # static libs
107- PATTERN "lib2to3" EXCLUDE # automated Python 2 to 3 code translation
108- PATTERN "tkinter" EXCLUDE # Tk interface
109- PATTERN "turtledemo" EXCLUDE # Tk demo folder
110- PATTERN "turtle.py" EXCLUDE # Tk demo file
111- PATTERN "test" EXCLUDE # unittest module
112- PATTERN "sitecustomize.py" EXCLUDE # site-specific configs
105+ DESTINATION "${PYTHON_FRAMEWORK}/Versions/Current/lib/python${PYTHON_VERSION_MAJOR_MINOR}"
106+ PATTERN "*.pyc" EXCLUDE # compiled bytecodes
107+ PATTERN "__pycache__" EXCLUDE # any cache
108+ PATTERN "config-${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}*" EXCLUDE # static libs
109+ PATTERN "lib2to3" EXCLUDE # automated Python 2 to 3 code translation
110+ PATTERN "tkinter" EXCLUDE # Tk interface
111+ PATTERN "lib-dynload/_tkinter.*" EXCLUDE
112+ PATTERN "idlelib" EXCLUDE
113+ PATTERN "turtle.py" EXCLUDE # Tk demo
114+ PATTERN "test" EXCLUDE # unittest module
115+ PATTERN "sitecustomize.py" EXCLUDE # site-specific configs
113116 )
114117 endif(PYTHON_MODULES_DIR)
115118 endif(ENABLE_EFFECTENGINE)
116119
117- file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/lib")
118- file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/share")
120+ file(GLOB_RECURSE LIBS FOLLOW_SYMLINKS "${BUNDLE_INSTALL_DIR}/*.dylib")
121+ file(GLOB FRAMEWORKS FOLLOW_SYMLINKS LIST_DIRECTORIES ON "${BUNDLE_INSTALL_DIR}/Contents/Frameworks/*")
122+ foreach(item ${LIBS} ${FRAMEWORKS} ${PYTHON_FRAMEWORK} ${BUNDLE_INSTALL_DIR})
123+ set(cmd codesign --deep --force --sign - "${item}")
124+ execute_process(
125+ COMMAND ${cmd}
126+ RESULT_VARIABLE codesign_result
127+ )
128+
129+ if(NOT codesign_result EQUAL 0)
130+ message(WARNING "macOS signing failed; ${cmd} returned ${codesign_result}")
131+ endif()
132+ endforeach()
119133
120134 ]] COMPONENT "Hyperion" )
121135
0 commit comments