From 95fbcdf3a14d9346ba1c721f05ccdf07bc1ec6bc Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Wed, 18 Oct 2023 14:26:41 +0200 Subject: [PATCH] Fix Mac build on propagated variables. Execute macdeploy on cpack before making dmg. --- CMakeLists.txt | 8 +++++--- cmake/TasksMacos.cmake | 1 + .../cmake_builder/linphone_package/CMakeLists.txt | 5 ++--- .../cmake_builder/linphone_package/cleanCPack.cmake.in | 3 +++ 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56ac8630b..1507544bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,7 @@ if( APPLE ) set(CMAKE_INSTALL_DATAROOTDIR "${APPLICATION_NAME}.app/Contents/Resources/share") if( NOT CMAKE_OSX_DEPLOYMENT_TARGET) - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version") + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15")#Qt: 'path' is unavailable: introduced in macOS 10.15 endif() if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm64")# TODO: add universal build set(LINPHONESDK_MACOS_ARCHS "x86_64" CACHE STRING "MacOS architectures to build for: comma-separated list of values in [x86_64]") @@ -223,8 +223,10 @@ if(NOT APPLE OR MONO_ARCH) endif() function(add_linphone_app) set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) # Prevent project from overriding the options we just set here - if(UNIX) - set(CMAKE_INSTALL_RPATH "$ORIGIN:$ORIGIN/lib64:$ORIGIN/../lib64:$ORIGIN/lib:$ORIGIN/../lib") + if(APPLE) + set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks") + elseif(UNIX) + set(CMAKE_INSTALL_RPATH "$ORIGIN:$ORIGIN/lib64:$ORIGIN/../lib64:$ORIGIN/lib:$ORIGIN/../lib") endif() add_subdirectory("linphone-app") endfunction() diff --git a/cmake/TasksMacos.cmake b/cmake/TasksMacos.cmake index 95d2a5b58..e966ffdce 100644 --- a/cmake/TasksMacos.cmake +++ b/cmake/TasksMacos.cmake @@ -40,6 +40,7 @@ set(_MACOS_INSTALL_DIR "${APPLICATION_OUTPUT_DIR}/${_MACOS_INSTALL_RELATIVE_DIR} #linphone_sdk_get_inherited_cmake_args(_CMAKE_CONFIGURE_ARGS _CMAKE_BUILD_ARGS) #linphone_sdk_get_enable_cmake_args(_MACOS_CMAKE_ARGS) +set(_MACOS_CMAKE_ARGS ${CMAKE_OSX_DEPLOYMENT_TARGET}) set(_MACOS_TARGETS) foreach(_MACOS_ARCH IN LISTS _MACOS_ARCHS) diff --git a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt index f312c25a7..fc17de4c4 100644 --- a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt +++ b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt @@ -538,14 +538,13 @@ function(deployqt_hack target qml_dir) COMMAND "${CMAKE_COMMAND}" "-E" "${RM_COMMAND}" "-f" "${qml_dir}/views/App/Main/Assistant/CreateAppSipAccountWithWebView.qml" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") endif() - + if(WIN32) #Windeployqt hack for CPack. WindeployQt cannot be used only with a simple 'install(CODE "execute_process' or CPack will not have all required files. find_program(DEPLOYQT_PROGRAM windeployqt HINTS "${_qt_bin_dir}") if (NOT DEPLOYQT_PROGRAM) message(FATAL_ERROR "Could not find the windeployqt program. Make sure it is in the PATH.") endif () - add_custom_command(TARGET ${target} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/" COMMAND "${CMAKE_COMMAND}" -E @@ -567,6 +566,6 @@ function(deployqt_hack target qml_dir) if (NOT DEPLOYQT_PROGRAM) message(FATAL_ERROR "Could not find the macdeployqt program. Make sure it is in the PATH.") endif() - install(CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} ${APPLICATION_OUTPUT_DIR}/${APPLICATION_NAME}.app -qmldir=${qml_dir} -no-strip )") + #install(CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} ${APPLICATION_OUTPUT_DIR}/${APPLICATION_NAME}.app -qmldir=${qml_dir} -no-strip )") endif() endfunction() diff --git a/linphone-app/cmake_builder/linphone_package/cleanCPack.cmake.in b/linphone-app/cmake_builder/linphone_package/cleanCPack.cmake.in index 4592e6903..679e6ad93 100644 --- a/linphone-app/cmake_builder/linphone_package/cleanCPack.cmake.in +++ b/linphone-app/cmake_builder/linphone_package/cleanCPack.cmake.in @@ -26,6 +26,7 @@ set(DO_SIGNING @LINPHONE_BUILDER_SIGNING_IDENTITY@) +message(STATUS "Scripting CPACK on ${CPACK_TEMPORARY_INSTALL_DIRECTORY}") execute_process(COMMAND rsync -a --force "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/Frameworks/" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@CMAKE_INSTALL_LIBDIR@/") #Use rsync to bypass symlinks override issues of frameworks. copy_directory will fail without explicit error... #execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/Frameworks/" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@CMAKE_INSTALL_LIBDIR@/") execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/Frameworks/") @@ -42,6 +43,8 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_ execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/cmake/") execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/lib/") +execute_process(COMMAND "@DEPLOYQT_PROGRAM@" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@APPLICATION_NAME@.app" -qmldir=@CMAKE_BINARY_DIR@/@LINPHONE_QML_DIR@ -no-strip) + #CPack doesn't sign all files. if (DO_SIGNING) execute_process(COMMAND bash "@CMAKE_SOURCE_DIR@/linphone-app/tools/sign_package.sh" codesign "@LINPHONE_BUILDER_SIGNING_IDENTITY@" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE")