- Windows : convert cmd into powershell and build for x64 with msvc2019

- Fix Qt deploy on Windows where some files weren't deployed.
This commit is contained in:
Julien Wadel 2022-03-15 14:32:37 +01:00
parent b206e2bf6a
commit 975a672280
6 changed files with 250 additions and 155 deletions

View file

@ -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"

View file

@ -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

View file

@ -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.

View file

@ -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 $<TARGET_FILE:${APP_PLUGIN}> "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/")
add_custom_command(TARGET ${APP_PLUGIN} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_LINKER_FILE:${APP_PLUGIN}> "${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.

View file

@ -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/"
"$<TARGET_FILE:${target}>"
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()

@ -1 +1 @@
Subproject commit 6e2b508e404b95d04439d2f76f0d24b36fb911d2
Subproject commit 49f9a1ace8dc5e092d9d176004bc314e5a011c20