From 8ba61d800f22e48984d4f144af7d5df9f1da9d2e Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Tue, 7 May 2024 16:24:14 +0200 Subject: [PATCH] Fix Windows installation + Update SDK --- cmake/install/cleanCPack.cmake.in | 61 +++++++++++++++++++++++++ cmake/install/install.cmake | 38 +++++++++++++-- cmake/install/macos/cleanCPack.cmake.in | 54 ---------------------- external/linphone-sdk | 2 +- 4 files changed, 97 insertions(+), 58 deletions(-) create mode 100644 cmake/install/cleanCPack.cmake.in delete mode 100644 cmake/install/macos/cleanCPack.cmake.in diff --git a/cmake/install/cleanCPack.cmake.in b/cmake/install/cleanCPack.cmake.in new file mode 100644 index 000000000..53246b1f5 --- /dev/null +++ b/cmake/install/cleanCPack.cmake.in @@ -0,0 +1,61 @@ +################################################################################ +# +# Copyright (c) 2017-2024 Belledonne Communications SARL. +# +# This file is part of linphone-desktop +# (see https://www.linphone.org). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +################################################################################ + +# This script is used for CPack to remove root folders that comes from SDK. +# As CPack call install() from SDK, its files are into cmake_install_prefix too. +# It is neccessary to use it because CPack doesn't take account of some install() (those that do the move) + +set(DO_SIGNING @LINPHONE_BUILDER_SIGNING_IDENTITY@) +set(DEPLOYQT_PROGRAM @DEPLOYQT_PROGRAM@) + +if(APPLE) + 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/") + + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/include/" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@CMAKE_INSTALL_INCLUDEDIR@/") + execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/include/") + # move share + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/share/" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@CMAKE_INSTALL_DATAROOTDIR@/") + execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/share/") + # move mkspecs + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/mkspecs/" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@CMAKE_INSTALL_DATAROOTDIR@/") + execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/mkspecs/") + # remove other folders + 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/") + + + message(STATUS "Execute : @DEPLOYQT_PROGRAM@ ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@APPLICATION_NAME@.app -qmldir=@LINPHONE_QML_DIR@ -no-strip -verbose=2 -always-overwrite") + execute_process(COMMAND @DEPLOYQT_PROGRAM@ "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@APPLICATION_NAME@.app" "-qmldir=@LINPHONE_QML_DIR@" "-no-strip" "-verbose=2" "-always-overwrite") + + #CPack doesn't sign all files. + if (DO_SIGNING) + execute_process(COMMAND bash "@CMAKE_SOURCE_DIR@/cmake/install/sign_package.sh" codesign "@LINPHONE_BUILDER_SIGNING_IDENTITY@" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE") + #execute_process(COMMAND codesign --entitlements" "@CMAKE_CURRENT_BINARY_DIR@/../../entitlements.xml" "--force" "--deep" "--timestamp" "--options" "runtime,library" "--verbose" "-s" "@LINPHONE_BUILDER_SIGNING_IDENTITY@" "@APPLICATION_OUTPUT_DIR@/@APPLICATION_NAME@.app") + endif() +elseif(WIN32) + message(STATUS "Execute : @DEPLOYQT_PROGRAM@ ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/@CMAKE_INSTALL_BINDIR@/@EXECUTABLE_NAME@.exe --qmldir=@LINPHONE_QML_DIR@ --verbose=2 --no-compiler-runtime") + execute_process(COMMAND @DEPLOYQT_PROGRAM@ "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/@CMAKE_INSTALL_BINDIR@/@EXECUTABLE_NAME@.exe" "--qmldir=@LINPHONE_QML_DIR@" "--verbose=2" "--no-compiler-runtime") + # --plugindir "${CMAKE_CURRENT_BINARY_DIR}/winqt/plugins" + # --dir "${CMAKE_CURRENT_BINARY_DIR}/winqt/" +endif() diff --git a/cmake/install/install.cmake b/cmake/install/install.cmake index 5838d049b..c93cf3d13 100644 --- a/cmake/install/install.cmake +++ b/cmake/install/install.cmake @@ -96,6 +96,7 @@ if(APPLE) if (NOT DEPLOYQT_PROGRAM) message(FATAL_ERROR "Could not find the macdeployqt program. Make sure it is in the PATH.") endif() + #Packaging is done by CPack in the cleanCpack.cmake file. But on mac, we need Qt files in .app if(NOT ENABLE_APP_PACKAGING) install(CODE "MESSAGE(\"MacDeploy install: execute_process(COMMAND ${DEPLOYQT_PROGRAM} ${APPLICATION_OUTPUT_DIR}/${APPLICATION_NAME}.app -qmldir=${LINPHONE_QML_DIR} -no-strip -verbose=2 -always-overwrite) \")") install(CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} ${APPLICATION_OUTPUT_DIR}/${APPLICATION_NAME}.app -qmldir=${LINPHONE_QML_DIR} -no-strip -verbose=2 -always-overwrite)") @@ -114,8 +115,39 @@ elseif(WIN32) NAMES msys2_shell.cmd HINTS "C:/msys64/" ) + 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 () endif() +#Windeployqt hack for CPack. WindeployQt cannot be used only with a simple 'install(CODE "execute_process' or CPack will not have all required files. +#Call it from target folder +function(deployqt_hack target) + if(WIN32) + 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 + env PATH="${_qt_bin_dir}" "${DEPLOYQT_PROGRAM}" + --qmldir "${LINPHONE_QML_DIR}" + --plugindir "${CMAKE_CURRENT_BINARY_DIR}/winqt/plugins" + --verbose 0 + --no-compiler-runtime + --dir "${CMAKE_CURRENT_BINARY_DIR}/winqt/" + "$" + COMMENT "Deploying Qt..." + WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}/.." + ) + install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/winqt/" DESTINATION bin) + set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE) + include(InstallRequiredSystemLibraries) + endif() +endfunction() + # ============================================================================== # CPack. # ============================================================================== @@ -142,6 +174,9 @@ if(${ENABLE_APP_PACKAGING}) set(CPACK_RESOURCE_FILE_LICENSE_PROVIDED ${ENABLE_APP_LICENSE}) set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/Linphone/data/icon.ico") set(PERFORM_SIGNING 0) + + configure_file("${CMAKE_SOURCE_DIR}/cmake/install/cleanCpack.cmake.in" "${CMAKE_BINARY_DIR}/cmake/install/cleanCpack.cmake" @ONLY) + set(CPACK_PRE_BUILD_SCRIPTS "${CMAKE_BINARY_DIR}/cmake/install/cleanCPack.cmake") if(APPLE) ############################################## @@ -155,9 +190,6 @@ if(${ENABLE_APP_PACKAGING}) set(CPACK_BUNDLE_APPLE_CERT_APP ${LINPHONE_BUILDER_SIGNING_IDENTITY}) set(PACKAGE_EXT "dmg") - configure_file("${CMAKE_SOURCE_DIR}/cmake/install/macos/cleanCpack.cmake.in" "${CMAKE_BINARY_DIR}/cmake/install/macos/cleanCpack.cmake" @ONLY) - set(CPACK_PRE_BUILD_SCRIPTS "${CMAKE_BINARY_DIR}/cmake/install/macos/cleanCPack.cmake") - message(STATUS "Set DragNDrop CPack generator in OUTPUT/Packages") elseif(WIN32) ############################################## diff --git a/cmake/install/macos/cleanCPack.cmake.in b/cmake/install/macos/cleanCPack.cmake.in deleted file mode 100644 index 568d3a70b..000000000 --- a/cmake/install/macos/cleanCPack.cmake.in +++ /dev/null @@ -1,54 +0,0 @@ -################################################################################ -# -# Copyright (c) 2017-2024 Belledonne Communications SARL. -# -# This file is part of linphone-desktop -# (see https://www.linphone.org). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -################################################################################ - -# This script is used for CPack to remove root folders that comes from SDK. -# As CPack call install() from SDK, its files are into cmake_install_prefix too. -# It is neccessary to use it because CPack doesn't take account of some install() (those that do the move) - -set(DO_SIGNING @LINPHONE_BUILDER_SIGNING_IDENTITY@) -set(DO_SIGNING @LINPHONE_BUILDER_SIGNING_IDENTITY@) - -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/") - -execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/include/" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@CMAKE_INSTALL_INCLUDEDIR@/") -execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/include/") -# move share -execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/share/" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@CMAKE_INSTALL_DATAROOTDIR@/") -execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/share/") -# move mkspecs -execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/mkspecs/" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@CMAKE_INSTALL_DATAROOTDIR@/") -execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/mkspecs/") -# remove other folders -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/") - - -message(STATUS "Execute : @DEPLOYQT_PROGRAM@ ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@APPLICATION_NAME@.app -qmldir=@LINPHONE_QML_DIR@ -no-strip -verbose=2 -always-overwrite") -execute_process(COMMAND @DEPLOYQT_PROGRAM@ "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/@APPLICATION_NAME@.app" "-qmldir=@LINPHONE_QML_DIR@" "-no-strip" "-verbose=2" "-always-overwrite") - -#CPack doesn't sign all files. -if (DO_SIGNING) - execute_process(COMMAND bash "@CMAKE_SOURCE_DIR@/cmake/install/sign_package.sh" codesign "@LINPHONE_BUILDER_SIGNING_IDENTITY@" "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE") - #execute_process(COMMAND codesign --entitlements" "@CMAKE_CURRENT_BINARY_DIR@/../../entitlements.xml" "--force" "--deep" "--timestamp" "--options" "runtime,library" "--verbose" "-s" "@LINPHONE_BUILDER_SIGNING_IDENTITY@" "@APPLICATION_OUTPUT_DIR@/@APPLICATION_NAME@.app") -endif() diff --git a/external/linphone-sdk b/external/linphone-sdk index c07748c06..54bb7fb4d 160000 --- a/external/linphone-sdk +++ b/external/linphone-sdk @@ -1 +1 @@ -Subproject commit c07748c0683510f0c6267e29f83085a144cf9385 +Subproject commit 54bb7fb4d84141bb94042a09b157257df84d8be9