From 1b3b2d73f0675f90378acddce296d0b11299e0b7 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Sat, 1 Feb 2025 10:29:49 -0800 Subject: [PATCH 1/2] Fix Mac gstreamer support Local builds now work --- .../GStreamer/gstqml6gl/CMakeLists.txt | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/VideoManager/VideoReceiver/GStreamer/gstqml6gl/CMakeLists.txt b/src/VideoManager/VideoReceiver/GStreamer/gstqml6gl/CMakeLists.txt index 1c10e713979..7eabaca8e28 100644 --- a/src/VideoManager/VideoReceiver/GStreamer/gstqml6gl/CMakeLists.txt +++ b/src/VideoManager/VideoReceiver/GStreamer/gstqml6gl/CMakeLists.txt @@ -1,10 +1,29 @@ find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick) -set(GST_COMPONENTS Allocators App Audio Codecparsers Controller Fft GlEGL GlPrototypes GlWayland GlX11 Mpegts Net Pbutils Photography Riff Rtp Rtsp Sdp Tag Va) -find_package(GStreamer REQUIRED COMPONENTS OPTIONAL_COMPONENTS ${GST_COMPONENTS}) - qt_add_library(gstqml6gl STATIC) +if(MACOS) + # Using FindGStreamer.cmake is currently bypassed on MACOS since it doesn't work + # So for now we hack in a simple hardwired setup which does work + find_library(GSTREAMER_FRAMEWORK GStreamer) + set(GST_PLUGINS_VERSION 1.24.12) + target_link_libraries(gstqml6gl + PUBLIC + "$" + ) + target_include_directories(gstqml6gl + PUBLIC + /Library/Frameworks/GStreamer.framework/Headers + ) +else() + set(GST_COMPONENTS Allocators App Audio Codecparsers Controller Fft GlEGL GlPrototypes GlWayland GlX11 Mpegts Net Pbutils Photography Riff Rtp Rtsp Sdp Tag Va) + find_package(GStreamer REQUIRED COMPONENTS OPTIONAL_COMPONENTS ${GST_COMPONENTS}) + target_link_libraries(gstqml6gl + PUBLIC + GStreamer::GStreamer + ) +endif() + target_link_libraries(gstqml6gl PRIVATE Qt6::GuiPrivate @@ -13,7 +32,6 @@ target_link_libraries(gstqml6gl Qt6::Gui Qt6::Qml Qt6::Quick - GStreamer::GStreamer ) foreach(component IN LISTS GST_COMPONENTS) From 5dedf9107ab27d594855e3d4d941bfac56762207 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Sat, 1 Feb 2025 14:34:55 -0800 Subject: [PATCH 2/2] Correct creation of signed package --- .github/workflows/macos.yml | 1 - CMakeLists.txt | 49 +++++++------ cmake/CreateMacDMG.cmake | 128 ++++----------------------------- src/AnalyzeView/CMakeLists.txt | 2 - 4 files changed, 40 insertions(+), 140 deletions(-) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 1587aea8b2a..aade00f1f38 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -95,7 +95,6 @@ jobs: run: ${{ env.QT_ROOT_DIR }}/bin/qt-cmake -S ${{ github.workspace }} -B . -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.BuildType }} -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" - -DMACOS_SIGNING_IDENTITY=${{ secrets.MACOS_SIGNING_IDENTITY }} -DQGC_STABLE_BUILD=${{ github.ref_type == 'tag' || contains(github.ref, 'Stable') && 'ON' || 'OFF' }} - name: Build diff --git a/CMakeLists.txt b/CMakeLists.txt index dd8f32dfd1d..c2f86923ea6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -537,33 +537,38 @@ qt_import_plugins(${CMAKE_PROJECT_NAME} # Install Configuration ####################################################### -include(InstallRequiredSystemLibraries) - install( TARGETS ${CMAKE_PROJECT_NAME} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} BUNDLE DESTINATION . ) -set(deploy_tool_options_arg "") -if(MACOS) - if(MACOS_SIGNING_IDENTITY) - message(STATUS "Signing MacOS Bundle") - set(deploy_tool_options_arg -qmldir=${CMAKE_SOURCE_DIR} -verbose=2 -sign-for-notarization=${MACOS_SIGNING_IDENTITY}) # -dmg +if(NOT MACOS) + include(InstallRequiredSystemLibraries) + + install( + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + + set(deploy_tool_options_arg "") + if(MACOS) + if(MACOS_SIGNING_IDENTITY) + message(STATUS "Signing MacOS Bundle") + set(deploy_tool_options_arg -qmldir=${CMAKE_SOURCE_DIR} -verbose=2 -sign-for-notarization=${MACOS_SIGNING_IDENTITY}) # -dmg + endif() endif() -endif() -qt_generate_deploy_qml_app_script( - TARGET ${CMAKE_PROJECT_NAME} - OUTPUT_SCRIPT deploy_script - DEPLOY_TOOL_OPTIONS ${deploy_tool_options_arg} - MACOS_BUNDLE_POST_BUILD - NO_UNSUPPORTED_PLATFORM_ERROR - DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM -) -install(SCRIPT ${deploy_script}) + qt_generate_deploy_qml_app_script( + TARGET ${CMAKE_PROJECT_NAME} + OUTPUT_SCRIPT deploy_script + DEPLOY_TOOL_OPTIONS ${deploy_tool_options_arg} + MACOS_BUNDLE_POST_BUILD + NO_UNSUPPORTED_PLATFORM_ERROR + DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM + ) + install(SCRIPT ${deploy_script}) +endif() if(ANDROID) # get_target_property(QGC_ANDROID_DEPLOY_FILE ${CMAKE_PROJECT_NAME} QT_ANDROID_DEPLOYMENT_SETTINGS_FILE) @@ -600,8 +605,8 @@ elseif(LINUX) elseif(WIN32) install(SCRIPT "${CMAKE_SOURCE_DIR}/cmake/CreateWinInstaller.cmake") elseif(MACOS) - install(CODE "set(OSXRELOCATOR ${CMAKE_SOURCE_DIR}/deploy/macos/osxrelocator.py)") - install(CODE "set(TARGET_NAME ${QGC_APP_NAME})") + install(CODE "set(TARGET_APP_NAME ${QGC_APP_NAME})") + install(CODE "set(MACDEPLOYQT ${Qt6_DIR}/../../../bin/macdeployqt)") install(SCRIPT "${CMAKE_SOURCE_DIR}/cmake/CreateMacDMG.cmake") endif() diff --git a/cmake/CreateMacDMG.cmake b/cmake/CreateMacDMG.cmake index 2776cd86ede..4b35bb5130e 100644 --- a/cmake/CreateMacDMG.cmake +++ b/cmake/CreateMacDMG.cmake @@ -1,122 +1,20 @@ -include(CMakePrintHelpers) - -# message(STATUS "Creating Mac Bundle") - -# set(TARGET_NAME QGroundControl) -set(BUNDLE_PATH ${CMAKE_BINARY_DIR}/staging/${TARGET_NAME}.app) -set(SYSTEM_FRAMEWORK_PATH /Library/Frameworks) -set(BUNDLE_FRAMEWORK_PATH ${BUNDLE_PATH}/Contents/Frameworks) - -# execute_process( -# COMMAND ${CMAKE_SOURCE_DIR}/deploy/macos/prepare_gstreamer_framework.sh ${CMAKE_BINARY_DIR}/gstwork/ staging/${TARGET_NAME}.app ${TARGET_NAME} -# RESULT_VARIABLE GSTREAMER_FRAMEWORK_RESULT -# OUTPUT_VARIABLE GSTREAMER_FRAMEWORK_OUTPUT -# ERROR_VARIABLE GSTREAMER_FRAMEWORK_ERROR -# ) - -# cmake_print_variables(GSTREAMER_FRAMEWORK_RESULT GSTREAMER_FRAMEWORK_OUTPUT GSTREAMER_FRAMEWORK_ERROR) - -# message(STATUS "Copy GStreamer framework into bundle") -# file( -# INSTALL "${SYSTEM_FRAMEWORK_PATH}/GStreamer.framework" -# DESTINATION "${BUNDLE_FRAMEWORK_PATH}" -# PATTERN "*.la" EXCLUDE -# PATTERN "*.a" EXCLUDE -# PATTERN "*/include" EXCLUDE -# PATTERN "*/Headers" EXCLUDE -# ) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/bin) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/etc) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/share) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/Headers) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/include) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/Commands) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/pkgconfig) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/glib-2.0) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/graphene-1.0) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/gst-validate-launcher) -# file(GLOB REMOVE_LIB_FILES ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/*.a) -# file(REMOVE ${REMOVE_LIB_FILES}) -# file(GLOB REMOVE_LIB_FILES ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/*.la) -# file(REMOVE ${REMOVE_LIB_FILES}) -# file(GLOB REMOVE_LIB_FILES ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/gstreamer-1.0/*.a) -# file(REMOVE ${REMOVE_LIB_FILES}) -# file(GLOB REMOVE_LIB_FILES ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/gstreamer-1.0/*.la) -# file(REMOVE ${REMOVE_LIB_FILES}) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/gstreamer-1.0/include) -# file(REMOVE_RECURSE ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/gstreamer-1.0/pkgconfig) - -# execute_process(COMMAND otool -L ${SYSTEM_FRAMEWORK_PATH}/GStreamer.framework/GStreamer) - -# Fix up library paths to point into bundle -# execute_process( -# COMMAND ln -sf ${BUNDLE_FRAMEWORK_PATH} ${BUNDLE_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/libexec -# ) -# execute_process( -# COMMAND install_name_tool -id @executable_path/../Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer ${BUNDLE_PATH}/Contents/Frameworks/GStreamer.framework/Versions/1.0/GStreamer -# RESULT_VARIABLE GSTREAMER_FRAMEWORK_RESULT -# OUTPUT_VARIABLE GSTREAMER_FRAMEWORK_OUTPUT -# ERROR_VARIABLE GSTREAMER_FRAMEWORK_ERROR -# ) -# execute_process( -# COMMAND install_name_tool -change ${SYSTEM_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/GStreamer @executable_path/../Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer ${BUNDLE_PATH}/Contents/MacOS/${TARGET_NAME} -# RESULT_VARIABLE GSTREAMER_FRAMEWORK_RESULT -# OUTPUT_VARIABLE GSTREAMER_FRAMEWORK_OUTPUT -# ERROR_VARIABLE GSTREAMER_FRAMEWORK_ERROR -# ) - -find_package(Python3 REQUIRED) -# set(OSXRELOCATOR ${CMAKE_SOURCE_DIR}/deploy/macos/osxrelocator.py) - -execute_process( - COMMAND ${Python3_EXECUTABLE} ${OSXRELOCATOR} ${BUNDLE_PATH}/Contents/Frameworks/GStreamer.framework/Versions/Current/lib /Library/Frameworks/GStreamer.framework/ @executable_path/../Frameworks/GStreamer.framework/ -r - RESULT_VARIABLE PYTHON_RESULT - OUTPUT_VARIABLE PYTHON_OUTPUT - ERROR_VARIABLE PYTHON_ERROR - OUTPUT_STRIP_TRAILING_WHITESPACE -) -cmake_print_variables(PYTHON_RESULT PYTHON_OUTPUT PYTHON_ERROR) - -execute_process( - COMMAND ${Python3_EXECUTABLE} ${OSXRELOCATOR} ${BUNDLE_PATH}/Contents/Frameworks/GStreamer.framework/Versions/Current/libexec /Library/Frameworks/GStreamer.framework/ @executable_path/../../../../../GStreamer.framework/ -r - RESULT_VARIABLE PYTHON_RESULT - OUTPUT_VARIABLE PYTHON_OUTPUT - ERROR_VARIABLE PYTHON_ERROR - OUTPUT_STRIP_TRAILING_WHITESPACE -) -cmake_print_variables(PYTHON_RESULT PYTHON_OUTPUT PYTHON_ERROR) +message(STATUS "Creating Mac DMG") +set(BUNDLE_PATH ${CMAKE_BINARY_DIR}/staging/${TARGET_APP_NAME}.app) execute_process( - COMMAND ${Python3_EXECUTABLE} ${OSXRELOCATOR} ${BUNDLE_PATH}/Contents/Frameworks/GStreamer.framework/Versions/Current/bin /Library/Frameworks/GStreamer.framework/ @executable_path/../../../../GStreamer.framework/ -r - RESULT_VARIABLE PYTHON_RESULT - OUTPUT_VARIABLE PYTHON_OUTPUT - ERROR_VARIABLE PYTHON_ERROR - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND ${MACDEPLOYQT} "${BUNDLE_PATH}" -appstore-compliant -verbose=1 -qmldir=${CMAKE_SOURCE_DIR}/src + COMMAND_ERROR_IS_FATAL ANY ) -cmake_print_variables(PYTHON_RESULT PYTHON_OUTPUT PYTHON_ERROR) - execute_process( - COMMAND ${Python3_EXECUTABLE} ${OSXRELOCATOR} ${BUNDLE_PATH}/Contents/MacOS /Library/Frameworks/GStreamer.framework/ @executable_path/../Frameworks/GStreamer.framework/ -r - RESULT_VARIABLE PYTHON_RESULT - OUTPUT_VARIABLE PYTHON_OUTPUT - ERROR_VARIABLE PYTHON_ERROR - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND codesign --force --deep -s - "${BUNDLE_PATH}" + COMMAND_ERROR_IS_FATAL ANY ) -cmake_print_variables(PYTHON_RESULT PYTHON_OUTPUT PYTHON_ERROR) - -execute_process(COMMAND otool -L ${BUNDLE_PATH}/Contents/MacOS/${TARGET_NAME}) - -# include(BundleUtilities) - -# fixup_bundle("${BUNDLE_PATH}" "" "${SYSTEM_FRAMEWORK_PATH}/GStreamer.framework/Versions/1.0/lib/GStreamer") -# verify_app("${BUNDLE_PATH}") -# verify_bundle_prerequisites("${BUNDLE_PATH}" VERIFY_BUNDLE_PREREQS_RESULT VERIFY_BUNDLE_PREREQS_INFO) -# cmake_print_variables(VERIFY_BUNDLE_PREREQS_RESULT VERIFY_BUNDLE_PREREQS_INFO) -# verify_bundle_symlinks("${BUNDLE_PATH}" VERIFY_BUNDLE_SYMLINKS_RESULT VERIFY_BUNDLE_SYMLINKS_INFO) -# cmake_print_variables(VERIFY_BUNDLE_SYMLINKS_RESULT VERIFY_BUNDLE_SYMLINKS_INFO) - -message(STATUS "Creating Mac DMG") -file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/package) +if(EXISTS ${CMAKE_BINARY_DIR}/package) + file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/package) +endif() file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/package) file(COPY ${BUNDLE_PATH} DESTINATION ${CMAKE_BINARY_DIR}/package) -execute_process(COMMAND create-dmg --volname "${TARGET_NAME}" --filesystem "APFS" "${TARGET_NAME}.dmg" "${CMAKE_BINARY_DIR}/package/") +execute_process( + COMMAND create-dmg --volname "${TARGET_APP_NAME}" --filesystem "APFS" "${TARGET_APP_NAME}.dmg" "${CMAKE_BINARY_DIR}/package/" + COMMAND_ERROR_IS_FATAL ANY +) diff --git a/src/AnalyzeView/CMakeLists.txt b/src/AnalyzeView/CMakeLists.txt index e37222247da..d3a15078b81 100644 --- a/src/AnalyzeView/CMakeLists.txt +++ b/src/AnalyzeView/CMakeLists.txt @@ -107,8 +107,6 @@ set(EXIV2_VERSION 0.28.3) if(NOT QGC_BUILD_DEPENDENCIES) if(LINUX) set(EXIV2_RELEASE_URL "https://github.com/Exiv2/exiv2/releases/download/v${EXIV2_VERSION}/exiv2-${EXIV2_VERSION}-Linux64.tar.gz") - elseif(MACOS) - set(EXIV2_RELEASE_URL "https://github.com/Exiv2/exiv2/releases/download/v${EXIV2_VERSION}/exiv2-${EXIV2_VERSION}-Darwin.tar.gz") endif() endif()