diff --git a/.gitlab-ci-files/job-windows-desktop.yml b/.gitlab-ci-files/job-windows-desktop.yml index e51523fc1..368bc4ab2 100644 --- a/.gitlab-ci-files/job-windows-desktop.yml +++ b/.gitlab-ci-files/job-windows-desktop.yml @@ -2,124 +2,188 @@ # BUILD ################################################# -#Remove MinGW of MSYS from PATH and add MINGW_TYPE for MSYS2 -.build_all_windows_script: &build_all_windows_script | - SET PATH_TEMP=%PATH:C:\MinGW\bin;=% - SET PATH_TEMP=%PATH_TEMP:C:\Strawberry\c\bin;=% - SET PATH_TEMP=%PATH_TEMP:C:\Strawberry\perl\bin;=% - SET PATH_TEMP=%PATH_TEMP:C:\Program Files\NASM=% - SET Qt5_DIR=C:\Qt\5.14.2\msvc2017\lib\cmake - SET PATH=%PATH_TEMP%;C:\Qt\5.14.2\msvc2017\bin;C:\msys64;C:\msys64\usr\bin;C:\msys64\%MINGW_TYPE%\bin;%SIGNTOOL_ROOT%\x86 - IF EXIST build RMDIR /S /Q build - mkdir build - cd build - mkdir OUTPUT - C:\PROGRA~1\Python37\Scripts\cl -s - cmake .. -G "Visual Studio 15 2017" -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=%CI_BUILD_TYPE% %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS% - cmake --build . --target install --config %CI_BUILD_TYPE% %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false - C:\PROGRA~1\Python37\Scripts\cl -s - -.job-windows-vs2017: +.windows-vs2019: extends: .job-prepare stage: build - tags: [ "windows" ] + tags: [ "windows-powershell" ] + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null + - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null variables: - CMAKE_OPTIONS: -DENABLE_LIME_X3DH=NO -DENABLE_UNIT_TESTS=ON -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DENABLE_G729=ON - MINGW_TYPE: mingw32 + CMAKE_OPTIONS: -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DENABLE_G729=ON + LINPHONESDK_PLATFORM: Desktop + OUTPUT_ZIP_FOLDER: win64 + MINGW_TYPE: mingw64 + CMAKE_GENERATOR: "Visual Studio 16 2019" + CMAKE_ARCHITECTURE : -A x64 script: - - *build_all_windows_script + - Set-Variable -Name "PATH_TEMP" -Value ($(Get-ChildItem -Path Env:\PATH).value) + - echo $env:Path + #Remove MinGW of MSYS from PATH and add MINGW_TYPE for MSYS2 + # We double the "\" to escape paths as -replace uses regular expressions + - $PATH_TEMP = $PATH_TEMP -replace "C:\\MinGW\\bin;" -replace "C:\\Strawberry\\c\\bin;" -replace "C:\\Program Files\\NASM" + - echo $PATH_TEMP + - $env:Path = ($PATH_TEMP + ";C:\msys64;C:\msys64\usr\bin;C:\msys64\" + $MINGW_TYPE + "\bin;" + $env:SIGNTOOL_ROOT + "\x64") + - If ($MINGW_TYPE -eq "mingw64") {Import-BatchEnvironment "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"} Else {Import-BatchEnvironment "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat"} + - If ($MINGW_TYPE -eq "mingw64") {$env:Path = ($env:Path + ";C:\Qt\5.15.2\msvc2019_64\bin")} Else {$env:Path = ($env:Path + ";C:\Qt\5.14.2\msvc2019\bin")} + - echo $env:Path + - If ( Test-Path -Path "build-desktop" ) {Remove-Item -recurse -force -path "build-desktop" } + - mkdir build-desktop + - cd build-desktop + #we launch the msvc-cl wrapper located in python scripts folder + #this wrapper relays only needed calls to the real compiler + #cache stats display + - C:\PROGRA~1\Python37\Scripts\cl -s + - Write-Output $CMAKE_ARCHITECTURE + - Write-Output $SCHEDULE_CMAKE_OPTIONS + - Write-Output $MAKEFILE_JOBS + - Write-Output $CMAKE_C_COMPILER + - Write-Output $CMAKE_CXX_COMPILER + - Write-Output $CMAKE_RC_COMPILER + - Write-Output $DEFAULT_CMAKE_OPTIONS + - Write-Output $CMAKE_OPTIONS + - Write-Output $CMAKE_ARCHITECTURE + - Write-Output $SCHEDULE_CMAKE_OPTIONS + - Write-Output $CMAKE_GENERATOR + - Write-Output $LINPHONESDK_PLATFORM + - Write-Output $MINGW_TYPE + - Write-Output $CLI_OUTPUT_INFO_NINJA + - Write-Output $Write-Output + - Write-Output $NINJA_BUILD_PARALLEL_LEVEL + - Write-Output $PARALLEL_OPTIONS + - Write-Output $NINJA_OPTIMIZATION + - Write-Output $NINJA_EXPLICIT_COMPILER_SET + - Write-Output $DISPLAY_NINJA_LOG + - Write-Output $SEARCH_NINJA_ERROR + - Write-Output $DISPLAY_SEARCH_STATUS + - Write-Output $SET_EXIT_CODE_BASED_ON_SEARCH_STATUS + - Write-Output $SHOW_SEARCH_STATUS_SCRIPT + - Write-Output $LAUNCH_SEARCH_STATUS_SCRIPT + #We are forced to use Invoke-Expression to explain to powershell that we don't want it to touch to spaces in arguments + #If we don't use it, '-A Win32' will be interpreted as "-A ' Win32'" thus making the build fail + - echo $LastExitCode + - Invoke-Expression "& cmake .. -G '$CMAKE_GENERATOR' -DLINPHONESDK_PLATFORM=$LINPHONESDK_PLATFORM -DENABLE_CSHARP_WRAPPER=YES -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $NINJA_BUILD_PARALLEL_LEVEL $NINJA_EXPLICIT_COMPILER_SET $DEFAULT_CMAKE_OPTIONS $DEFAULT_WINDOWS_CMAKE_OPTIONS $CMAKE_OPTIONS $CMAKE_ARCHITECTURE $SCHEDULE_CMAKE_OPTIONS" + - echo $LastExitCode + - 'if (-not ($LastExitCode -eq 0)) {throw "Error: Configure failed"}' + - $CLI_OUTPUT_INFO_NINJA + #Warning : Ninja doesn't return an error code on Linker error. + #Store outputs in a file log + #Only in powershell 7 (Gitlab 14+) + # - cmake --build . --target install --config RelWithDebInfo --parallel $MAKEFILE_JOBS | Select-String -NotMatch -Raw -Pattern "inclusion du fichier" + - Write-Output $PARALLEL_OPTIONS + - Write-Output $NINJA_OPTIMIZATION + # /!\ By design, we must keep $NINJA_OPTIMIZATION as the last option of the line, because it contains an output redirect + - echo $LastExitCode + - Invoke-Expression "cmake --build . --target $BUILD_TARGET --config $CI_BUILD_TYPE $PARALLEL_OPTIONS $NINJA_OPTIMIZATION" + - if ($EXITS_ON_ERROR_MSVC) { Invoke-Expression "$EXITS_ON_ERROR_MSVC" } else { Write-Output "EXITS_ON_ERROR_MSVC is null" } + - if ($DISPLAY_NINJA_LOG) { Invoke-Expression "$DISPLAY_NINJA_LOG" } else { Write-Output "DISPLAY_NINJA_LOG is null" } + - if ($SEARCH_NINJA_ERROR) { Invoke-Expression "$SEARCH_NINJA_ERROR" } else { Write-Output "SEARCH_NINJA_ERROR is null" } + - if ($DISPLAY_SEARCH_STATUS) { Invoke-Expression "$DISPLAY_SEARCH_STATUS" } else { Write-Output "DISPLAY_SEARCH_STATUS is null" } + - if ($SET_EXIT_CODE_BASED_ON_SEARCH_STATUS) { Invoke-Expression "$SET_EXIT_CODE_BASED_ON_SEARCH_STATUS" } else { Write-Output "SET_EXIT_CODE_BASED_ON_SEARCH_STATUS is null" } + - if ($SHOW_SEARCH_STATUS_SCRIPT) { Invoke-Expression "$SHOW_SEARCH_STATUS_SCRIPT" } else { Write-Output "SHOW_SEARCH_STATUS_SCRIPT is null" } + - if ($LAUNCH_SEARCH_STATUS_SCRIPT) { Invoke-Expression "$LAUNCH_SEARCH_STATUS_SCRIPT" -ErrorAction stop } else { Write-Output "LAUNCH_SEARCH_STATUS_SCRIPT is null" } + - C:\PROGRA~1\Python37\Scripts\cl -s + - cd linphone-sdk + - mkdir $OUTPUT_ZIP_FOLDER + - Copy-Item -Path "*.zip" -Destination "$CI_PROJECT_DIR/build-desktop/linphone-sdk/$OUTPUT_ZIP_FOLDER" -Recurse + +################ artifacts: paths: - - build\OUTPUT + - build-desktop\ninja_buildlog.txt + - build-desktop\ninja_buildlog.txt + - build-desktop\invertSearch.ps1 + - build-desktop\OUTPUT\* when: always - expire_in: 2 days + expire_in: 1 week -job-windows-vs2017: - except: - refs: - - schedules - extends: .job-windows-vs2017 - - -################################################# -# NIGHTLY -################################################# - -.job-windows-vs2017-scheduled: - only: - variables: - - $NIGHTLY_MASTER - - $NIGHTLY_RELEASE - - $DEPLOY_PLUGINS - before_script: - #cache disabled on scheduled builds since we dot not need the fastest build - - set "CLCACHE_DISABLE=1" - extends: .job-windows-vs2017 - -job-windows-vs2017-scheduled: - extends: .job-windows-vs2017-scheduled - -job-windows-vs2017-novideo: - extends: .job-windows-vs2017-scheduled - except: - variables: - - $DEPLOY_PLUGINS +.windows-vs2019-msvc: + extends: .windows-vs2019 variables: - CMAKE_OPTIONS: -DENABLE_LIME_X3DH=NO -DENABLE_VIDEO=NO + CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DENABLE_G729=ON + LINPHONESDK_PLATFORM: Desktop + CMAKE_GENERATOR: "Visual Studio 16 2019" + BUILD_TARGET: install + PARALLEL_OPTIONS: "-- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false" + EXITS_ON_ERROR_MSVC: 'if (-not ($$LastExitCode -eq 0)) {throw "Error: Build failed"}' + +.windows-vs2019-scheduled: + extends: .windows-vs2019-msvc + rules: + - if: $NIGHTLY_MASTER + - if: $NIGHTLY_RELEASE + - if: $ENABLE_WINDOWS_TESTS + before_script: + #cache disabled on scheduled builds since we dot not need the fastest build + - Set-Variable -Name "CLCACHE_DISABLE" -Value 1 + +###################################################### +# JOBS +###################################################### + +vs2019-msvc-win64-windows: + extends: .windows-vs2019-msvc + variables: + CMAKE_C_COMPILER : cl.exe + CMAKE_CXX_COMPILER : cl.exe + CMAKE_RC_COMPILER : rc.exe + +###################################################### +# NIGHTLY +###################################################### + +## ON SCHEDULE ## + +vs2019-win64-scheduled-windows: + extends: .windows-vs2019-scheduled + rules: + - if: $NIGHTLY_MASTER + - if: $NIGHTLY_RELEASE + - if: $DEPLOY_RUN_WINDOWS ################################################# # PACKAGE ################################################# #Remove . when packaging process is ready to use -job-windows-vs2017-package: +vs2019-win64-package: stage: package - tags: [ "windows" ] + extends: .windows-vs2019-msvc dependencies: [] - only: - variables: - - $NIGHTLY_MASTER - - $PACKAGE_WINDOWS - - $DEPLOY_WINDOWS + rules: + - if: $NIGHTLY_MASTER + - if: $NIGHTLY_RELEASE + - if: $PACKAGE_WINDOWS + - if: $DEPLOY_WINDOWS variables: - CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DENABLE_G729=ON - MINGW_TYPE: mingw32 - script: - - *build_all_windows_script - - C:\PROGRA~1\Python37\Scripts\cl -s - artifacts: - paths: - - build\OUTPUT - when: always - expire_in: 1 weeks + CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_WINDOWS_SIGN_TOOL=$WINDOWS_SIGN_TOOL -DLINPHONE_WINDOWS_SIGN_TIMESTAMP_URL=$WINDOWS_SIGN_TIMESTAMP_URL -DENABLE_G729=ON + ################################################# # DEPLOY ################################################# -job-windows-vs2017-win32-upload: +vs2019-win64-upload: stage: deploy tags: [ "windows"] - only: - variables: - - $NIGHTLY_MASTER - - $DEPLOY_WINDOWS + rules: + - if: $NIGHTLY_MASTER + - if: $DEPLOY_WINDOWS needs: - - job-windows-vs2017-package + - vs2019-win64-package script: - - scp "build/OUTPUT/Packages/*.exe" "%DEPLOY_SERVER%:%WINDOWS_UPLOAD_DIRECTORY%" + - scp "build-desktop/OUTPUT/Packages/*.exe" "%DEPLOY_SERVER%:%WINDOWS_UPLOAD_DIRECTORY%" -job-windows-vs2017-plugins-upload: +vs2019-win64-plugins-upload: stage: deploy tags: [ "windows"] - only: - variables: - - $DEPLOY_PLUGINS + rules: + - if: $DEPLOY_PLUGINS needs: - - job-windows-vs2017-scheduled + - vs2019-win64-scheduled-windows script: - - scp "build/OUTPUT/plugins/app/*.dll" "%DEPLOY_SERVER%:%WINDOWS_UPLOAD_DIRECTORY%/plugins" + - scp "build-desktop/OUTPUT/plugins/app/*.dll" "%DEPLOY_SERVER%:%WINDOWS_UPLOAD_DIRECTORY%/plugins" diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cb9617223..13f08e4df 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,6 +27,16 @@ variables: DEBIAN_10_IMAGE_VERSION: 20210217_python3 UBUNTU_ROLLING_IMAGE_VERSION: 20211012_add_qtwebview + +workflow: + rules: + - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push" + when: never + #Launch merge request pipeline is there is a merge request open + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE !~ /^Draft:.*/ + #Launch pipeline if there is a schedule event + - if: $CI_PIPELINE_SOURCE == "schedule" + ################################################# # Platforms to test ################################################# @@ -38,26 +48,11 @@ variables: include: - '.gitlab-ci-files/job-linux-prepare.yml' - '.gitlab-ci-files/job-linux-desktop.yml' - #- '.gitlab-ci-files/job-linux-desktop-debian8.yml' #Removed as there is 5.10 and not at least 5.12 - '.gitlab-ci-files/job-linux-desktop-debian9.yml' -## - '.gitlab-ci-files/job-linux-desktop-debian10.yml' -# - '.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml' #Removed as there is no QtWebengine in image -# - '.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml' #Removed as there is no QtWebengine in image -# - '.gitlab-ci-files/job-linux-desktop-centos7.yml' #QtWebengine cannot be build (support for C++14 is not found in configuration) - '.gitlab-ci-files/job-windows-desktop.yml' - '.gitlab-ci-files/job-macosx-desktop.yml' -# - '.gitlab-ci-files/job-linux.yml' -# - '.gitlab-ci-files/job-linux-archlinux.yml' -# - '.gitlab-ci-files/job-linux-centos7.yml' -# - '.gitlab-ci-files/job-linux-debian8.yml' -# - '.gitlab-ci-files/job-linux-debian9.yml' - -# - '.gitlab-ci-files/job-macosx.yml' -# - '.gitlab-ci-files/job-windows.yml' - - stages: - build - package diff --git a/CHANGELOG.md b/CHANGELOG.md index b2e0b0717..9228f4020 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New event on new messages in chat and a shortcut to go to the end of chat if last message is not shown. - Shortcut in Reply to message's origin. - Based on Linphone SDK 5.1 +- 64bits application on Windows ### Fixed - Simplify filtering timelines with 2 modes (minimal or exhaustive) and on 3 kind of search : security level, simple/group chats, ephemerals. diff --git a/linphone-app/CMakeLists.txt b/linphone-app/CMakeLists.txt index be3b60e57..9ebb98dc6 100644 --- a/linphone-app/CMakeLists.txt +++ b/linphone-app/CMakeLists.txt @@ -43,6 +43,7 @@ include(CheckCXXCompilerFlag) set(TARGET_NAME linphone-qt) +set(LINPHONE_QML_DIR "WORK/qml_files/ui") set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS true) set(CMAKE_CXX_STANDARD 11) @@ -623,6 +624,13 @@ add_custom_command(TARGET ${APP_PLUGIN} POST_BUILD COMMAND ${CMAKE_COMMAND} -E m add_custom_command(TARGET ${APP_PLUGIN} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/") add_custom_command(TARGET ${APP_PLUGIN} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/") #add_custom_command(TARGET ${TARGET_NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/include/LinphoneApp/*" "${CMAKE_INSTALL_PREFIX}/include/LinphoneApp/") + + + + + + + #configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/*" "${CMAKE_INSTALL_PREFIX}/include/LinphoneApp/" COPYONLY) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include" DESTINATION ".") @@ -630,6 +638,8 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include" DESTINATION ".") add_subdirectory(build) add_subdirectory(cmake_builder/linphone_package) +deployqt_hack(${TARGET_NAME} ${LINPHONE_QML_DIR}) + # ------------------------------------------------------------------------------ # To start better integration into IDE. diff --git a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt index 3ebd8f96c..657f4fbdd 100644 --- a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt +++ b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt @@ -33,16 +33,9 @@ if (POLICY CMP0079) cmake_policy(SET CMP0079 NEW) endif () -set(LINPHONE_QML_DIR "WORK/qml_files/ui") + set(QT_PATH "${Qt5Core_DIR}/../../..") -install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" \"-E\" \"copy_directory\" \"${CMAKE_CURRENT_SOURCE_DIR}/../../ui\" \"${LINPHONE_QML_DIR}\" WORKING_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/..\")") -if(NOT ENABLE_APP_WEBVIEW) - set(RM_COMMAND "rm") - if(CMAKE_VERSION VERSION_LESS 3.17) - set(RM_COMMAND "remove") - endif() - install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" \"-E\" \"${RM_COMMAND}\" \"-f\" \"${LINPHONE_QML_DIR}/views/App/Main/Assistant/CreateAppSipAccountWithWebView.qml\" WORKING_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/..\")") -endif() + # ============================================================================== # Build package version. # ============================================================================== @@ -112,10 +105,7 @@ endif () # ============================================================================== set(APP_QT_CONF_DPI "1") if (WIN32) - find_program(DEPLOYQT_PROGRAM windeployqt) - if (NOT DEPLOYQT_PROGRAM) - message(FATAL_ERROR "Could not find the windeployqt program. Make sure it is in the PATH.") - endif () + file(GLOB LIB_FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}/*.dll") install(FILES ${LIB_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}/") file(GLOB LIB_FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_BINDIR}/*.dll") @@ -155,23 +145,33 @@ if (WIN32) LIBRARY DESTINATION "${LIBDIR}" RUNTIME DESTINATION "${LIBDIR}" ) -#Workaround windeployqt bug on webview plugin : folder "webview" can be in bin/ where it should be in bin/plugins. Else, we got "Webview plugin not found" => use of --plugindir - install(CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} \"\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${EXECUTABLE_NAME}.exe\" --qmldir=${LINPHONE_QML_DIR} --plugindir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/plugins --compiler-runtime)")# -verbose=2)" COMPONENT binary_application) + +############################## - -#On Windows, OpenLDAP couldn't be build with static libraries. Add them in installation for deployment. + set(BIN_ARCH "win32") + if(MSVC) + set(MSVC_ARCH ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})# ${MSVC_ARCH} MATCHES "X64" + string(TOUPPER ${MSVC_ARCH} MSVC_ARCH) + if(${MSVC_ARCH} MATCHES "X64") + set(MINGW_PACKAGE_PREFIX "mingw-w64-x86_64-") + set(MINGW_TYPE "mingw64") + set(BIN_ARCH "win64") + else() + set(MINGW_PACKAGE_PREFIX "mingw-w64-i686-") + set(MINGW_TYPE "mingw32") + endif() + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64") + set(MINGW_PACKAGE_PREFIX "mingw-w64-x86_64-") + set(MINGW_TYPE "mingw64") + set(BIN_ARCH "win64") + else() + set(MINGW_PACKAGE_PREFIX "mingw-w64-i686-") + set(MINGW_TYPE "mingw32") + endif() find_program(MSYS2_PROGRAM NAMES msys2_shell.cmd HINTS "C:/msys64/" ) - get_filename_component(MSYS2_PATH ${MSYS2_PROGRAM} PATH ) - set(MSVC_ARCH ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})# ${MSVC_ARCH} MATCHES "X64" - string(TOUPPER ${MSVC_ARCH} MSVC_ARCH) - if(${MSVC_ARCH} MATCHES "X64") - set(MSYS2_MINGW "mingw64") - else() - set(MSYS2_MINGW "mingw32") - endif() # list(REMOVE_ITEM SHARE_CONTENT "${CMAKE_INSTALL_DATAROOTDIR}/belr" "${CMAKE_INSTALL_DATAROOTDIR}/Belr" "${CMAKE_INSTALL_DATAROOTDIR}/images" "${CMAKE_INSTALL_DATAROOTDIR}/${APPLICATION_NAME}" "${CMAKE_INSTALL_DATAROOTDIR}/${APPLICATION_NAME}" "${CMAKE_INSTALL_DATAROOTDIR}/sounds") # foreach (ITEM IN LISTS SHARE_CONTENT) @@ -222,13 +222,6 @@ elseif (APPLE) install(CODE "execute_process(COMMAND install_name_tool -add_rpath \"@executable_path/../Frameworks/\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/MacOS/${EXECUTABLE_NAME}\")") install(CODE "execute_process(COMMAND install_name_tool -add_rpath \"@executable_path/../lib/\" \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/MacOS/${EXECUTABLE_NAME}\")") - find_program(DEPLOYQT_PROGRAM macdeployqt) - 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} \${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app -qmldir=${LINPHONE_QML_DIR} -no-strip )") - if (LINPHONE_BUILDER_SIGNING_IDENTITY) install(CODE "file(GLOB FRAMEWORKS_NAMES \"\${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/Frameworks/*\") foreach (FRAMEWORK \${FRAMEWORKS_NAMES}) @@ -386,34 +379,15 @@ if(${ENABLE_APP_PACKAGING}) set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PACKAGE_VERSION}") message(STATUS "Set AppImage CPack generator in OUTPUT/Packages") else() + set(CPACK_GENERATOR "NSIS") set(DO_GENERATOR YES) - set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PACKAGE_VERSION}-win32") string(COMPARE EQUAL ${CPACK_GENERATOR} "NSIS" IS_NSIS) + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PACKAGE_VERSION}-${BIN_ARCH}") if (${IS_NSIS}) find_program(NSIS_PROGRAM makensis) if(NOT NSIS_PROGRAM) - if(MSVC) - set(MSVC_ARCH ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})# ${MSVC_ARCH} MATCHES "X64" - string(TOUPPER ${MSVC_ARCH} MSVC_ARCH) - if(${MSVC_ARCH} MATCHES "X64") - set(MINGW_PACKAGE_PREFIX "mingw-w64-x86_64-") - set(MINGW_TYPE "mingw64") - else() - set(MINGW_PACKAGE_PREFIX "mingw-w64-i686-") - set(MINGW_TYPE "mingw32") - endif() - elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64") - set(MINGW_PACKAGE_PREFIX "mingw-w64-x86_64-") - set(MINGW_TYPE "mingw64") - else() - set(MINGW_PACKAGE_PREFIX "mingw-w64-i686-") - set(MINGW_TYPE "mingw32") - endif() - find_program(MSYS2_PROGRAM - NAMES msys2_shell.cmd - HINTS "C:/msys64/" - ) + message(STATUS "Installing windows tools for nsis") execute_process( COMMAND "${MSYS2_PROGRAM}" "-${MINGW_TYPE}" "-here" "-full-path" "-defterm" "-shell" "sh" "-l" "-c" "pacman -Sy ${MINGW_PACKAGE_PREFIX}nsis --noconfirm --needed" @@ -487,3 +461,54 @@ if(${ENABLE_APP_PACKAGING}) install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/packaging.cmake") include(CPack) endif() + + +function(deployqt_hack target qml_dir) + find_package(Qt5 COMPONENTS Core REQUIRED) + get_target_property(qmake_executable Qt5::qmake IMPORTED_LOCATION) + get_filename_component(_qt_bin_dir "${qmake_executable}" DIRECTORY) +#Note: CMAKE_CURRENT_SOURCE_DIR point to linphone-app because deployqt_hack is called there. + add_custom_command(TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" "-E" "copy_directory" "${CMAKE_CURRENT_SOURCE_DIR}/ui" "${qml_dir}" + WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}/..") + if(NOT ENABLE_APP_WEBVIEW) + set(RM_COMMAND "rm") + if(CMAKE_VERSION VERSION_LESS 3.17) + set(RM_COMMAND "remove") + endif() + add_custom_command(TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" "-E" "${RM_COMMAND}" "-f" "${qml_dir}/views/App/Main/Assistant/CreateAppSipAccountWithWebView.qml" + WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}/..") + 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 + env PATH="${_qt_bin_dir}" "${DEPLOYQT_PROGRAM}" + --qmldir "${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) + elseif(APPLE) + find_program(DEPLOYQT_PROGRAM macdeployqt HINTS "${_qt_bin_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} \${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app -qmldir=${qml_dir} -no-strip )") + endif() +endfunction() diff --git a/linphone-sdk b/linphone-sdk index 6e2b508e4..49f9a1ace 160000 --- a/linphone-sdk +++ b/linphone-sdk @@ -1 +1 @@ -Subproject commit 6e2b508e404b95d04439d2f76f0d24b36fb911d2 +Subproject commit 49f9a1ace8dc5e092d9d176004bc314e5a011c20