diff --git a/.gitlab-ci-files/job-macosx-desktop.yml b/.gitlab-ci-files/job-macosx-desktop.yml index 169e4e17e..0835b5e49 100644 --- a/.gitlab-ci-files/job-macosx-desktop.yml +++ b/.gitlab-ci-files/job-macosx-desktop.yml @@ -31,7 +31,7 @@ CMAKE_TOOLCHAIN_FILE: linphone-sdk/cmake/toolchains/toolchain-mac-x86_64.cmake artifacts: paths: - - build/OUTPUT + - build/OUTPUT/linphone-app/macos when: always expire_in: 1 week @@ -108,7 +108,7 @@ job-macosx-makefile-package: artifacts: when: always paths: - - build/OUTPUT/* + - build/OUTPUT/linphone-app/macos/* when: always expire_in: 1 week @@ -124,7 +124,7 @@ job-macosx-codesigning: - $DEPLOY_MACOSX script: - cd build - - codesign --options runtime,library --verbose -s "$MACOS_SIGNING_IDENTITY" OUTPUT/Packages/*.dmg + - codesign --options runtime,library --verbose -s "$MACOS_SIGNING_IDENTITY" OUTPUT/linphone-app/macos/Packages/*.dmg - ./../tools/app_notarization.sh artifacts: when: always @@ -147,11 +147,11 @@ job-macosx-makefile-deploy: - $NIGHTLY_MASTER - $DEPLOY_MACOSX script: - - rsync -rlv --ignore-existing build/OUTPUT/Packages/Linphone*.dmg $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM/$APP_FOLDER + - rsync -rlv --ignore-existing build/OUTPUT/linphone-app/macos/Packages/Linphone*.dmg $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM/$APP_FOLDER - |- if [[ $MAKE_RELEASE_FILE_URL != "" ]]; then - rsync -rlv build/OUTPUT/RELEASE $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM - rsync -rlv build/OUTPUT/RELEASE $MAIN_DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM + rsync -rlv build/OUTPUT/linphone-app/macos/RELEASE $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM + rsync -rlv build/OUTPUT/linphone-app/macos/RELEASE $MAIN_DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM fi @@ -164,5 +164,5 @@ job-macosx-makefile-plugins-deploy: variables: - $DEPLOY_PLUGINS script: - - rsync -rlv --ignore-existing build/OUTPUT/plugins/app/*.dylib $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM/$APP_FOLDER/plugins + - rsync -rlv --ignore-existing build/OUTPUT/linphone-app/macos/plugins/app/*.dylib $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$MACOSX_PLATFORM/$APP_FOLDER/plugins diff --git a/cmake/GenerateAppMacos.cmake b/cmake/GenerateAppMacos.cmake new file mode 100644 index 000000000..e07407151 --- /dev/null +++ b/cmake/GenerateAppMacos.cmake @@ -0,0 +1,102 @@ +################################################################################ +# GenerateFrameworks.cmake +# Copyright (c) 2021-2023 Belledonne Communications SARL. +# +# 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 . +# +################################################################################ + +cmake_policy(SET CMP0009 NEW) # Do not follow symlinks when doing file(GLOB_RECURSE) + +include("${LINPHONESDK_DIR}/cmake/LinphoneSdkUtils.cmake") + + +linphone_sdk_convert_comma_separated_list_to_cmake_list("${LINPHONEAPP_MACOS_ARCHS}" _MACOS_ARCHS) + + +# Create the desktop directory that will contain the merged content of all architectures +execute_process( + COMMAND "${CMAKE_COMMAND}" "-E" "remove_directory" "${CMAKE_INSTALL_PREFIX}" + COMMAND "${CMAKE_COMMAND}" "-E" "make_directory" "${CMAKE_INSTALL_PREFIX}" +) + +# Copy and merge content of all architectures in the desktop directory +list(GET _MACOS_ARCHS 0 _FIRST_ARCH) +execute_process(# Do not use copy_directory because of symlinks + COMMAND "cp" "-R" "${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_FIRST_ARCH}/" "${CMAKE_INSTALL_PREFIX}" + WORKING_DIRECTORY "${LINPHONEAPP_BUILD_DIR}" +) + +#message(FATAL_ERROR "${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_FIRST_ARCH}/ == ${CMAKE_INSTALL_PREFIX} == ${LINPHONEAPP_BUILD_DIR}") +#if(NOT ENABLE_FAT_BINARY) +# execute_process( +# COMMAND "${CMAKE_COMMAND}" "-E" "remove_directory" "${CMAKE_INSTALL_PREFIX}/Frameworks" +# COMMAND "${CMAKE_COMMAND}" "-E" "make_directory" "${CMAKE_INSTALL_PREFIX}/XCFrameworks" +# ) +#endif() + +##### MIX +# Get all files in output +file(GLOB_RECURSE _BINARIES RELATIVE "${LINPHONEAPP_BUILD_DIR}/${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_FIRST_ARCH}/" "${LINPHONEAPP_BUILD_DIR}/${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_FIRST_ARCH}/*") + +if(NOT ENABLE_FAT_BINARY) + # Remove all .framework inputs from the result + list(FILTER _BINARIES EXCLUDE REGEX ".*\\.framework.*") +endif() + +foreach(_FILE IN LISTS ${_BINARIES}) + get_filename_component(ABSOLUTE_FILE "${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_FIRST_ARCH}/${_FILE}" ABSOLUTE) + if(NOT IS_SYMLINK ${ABSOLUTE_FILE}) + # Check if lipo can detect an architecture + execute_process(COMMAND lipo -archs "${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_FIRST_ARCH}/${_FILE}" + OUTPUT_VARIABLE FILE_ARCHITECTURE + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${LINPHONEAPP_BUILD_DIR}" + ERROR_QUIET + ) + if(NOT "${FILE_ARCHITECTURE}" STREQUAL "") + # There is at least one architecture : Use this candidate to mix with another architecture + set(_ALL_ARCH_FILES) + foreach(_ARCH IN LISTS ${_ARCHS}) + list(APPEND _ALL_ARCH_FILES "${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_ARCH}/${_FILE}") + endforeach() + string(REPLACE ";" " " _ARCH_STRING "${_ARCHS}") + message(STATUS "Mixing ${_FILE} for archs [${_ARCH_STRING}]") + execute_process( + COMMAND "lipo" "-create" "-output" "${CMAKE_INSTALL_PREFIX}/${_FILE}" ${_ALL_ARCH_FILES} + WORKING_DIRECTORY "${LINPHONEAPP_BUILD_DIR}" + ) + endif() + endif() +endforeach() +#[[ +if(NOT ENABLE_FAT_BINARY) + # Generate XCFrameworks + file(GLOB _FRAMEWORKS "${LINPHONEAPP_BUILD_DIR}/${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_FIRST_ARCH}/Frameworks/*.framework") + foreach(_FRAMEWORK IN LISTS _FRAMEWORKS) + get_filename_component(_FRAMEWORK_NAME "${_FRAMEWORK}" NAME_WE) + set(_ALL_ARCH_FRAMEWORKS) + foreach(_ARCH IN LISTS _MACOS_ARCHS) + list(APPEND _ALL_ARCH_FRAMEWORKS "-framework") + list(APPEND _ALL_ARCH_FRAMEWORKS "${LINPHONEAPP_BUILD_DIR}/${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM}-${_ARCH}/Frameworks/${_FRAMEWORK_NAME}.framework") + endforeach() + string(REPLACE ";" " " _ARCH_STRING "${_MACOS_ARCHS}") + message(STATUS "Creating XCFramework for ${_FRAMEWORK_NAME} for archs [${_ARCH_STRING}]") + execute_process( + COMMAND "xcodebuild" "-create-xcframework" "-output" "${CMAKE_INSTALL_PREFIX}/XCFrameworks/${_FRAMEWORK_NAME}.xcframework" ${_ALL_ARCH_FRAMEWORKS} + WORKING_DIRECTORY "${LINPHONEAPP_BUILD_DIR}" + ) + endforeach() +endif() +#]] diff --git a/cmake/TasksMacos.cmake b/cmake/TasksMacos.cmake index 7cc8a6575..603a68045 100644 --- a/cmake/TasksMacos.cmake +++ b/cmake/TasksMacos.cmake @@ -26,88 +26,55 @@ option(ENABLE_FAT_BINARY "Enable fat binary generation using lipo." ON) set(_MACOS_ARCHS ${LINPHONEAPP_MACOS_ARCHS}) #linphone_sdk_convert_comma_separated_list_to_cmake_list("${LINPHONESDK_MACOS_ARCHS}" _MACOS_ARCHS) - -############################################################################ -# Clean previously generated SDK -############################################################################ - -#add_custom_target(clean-sdk ALL -# COMMAND "${CMAKE_COMMAND}" -# "-DLINPHONESDK_DIR=${PROJECT_SOURCE_DIR}" -# "-DLINPHONESDK_BUILD_DIR=${PROJECT_BINARY_DIR}" -# "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}" -# "-P" "${PROJECT_SOURCE_DIR}/cmake/macos/CleanSDK.cmake" -# WORKING_DIRECTORY ${PROJECT_BINARY_DIR} -# COMMENT "Cleaning SDK" -# USES_TERMINAL -#) - +set(LINPHONEAPP_NAME "linphone-app") +set(LINPHONEAPP_PLATFORM "macos") +string(TOLOWER "${LINPHONEAPP_PLATFORM}" LINPHONEAPP_PLATFORM_LOWER) +set(_MACOS_INSTALL_RELATIVE_DIR "${LINPHONEAPP_NAME}/${LINPHONEAPP_PLATFORM_LOWER}") +set(_MACOS_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${_MACOS_INSTALL_RELATIVE_DIR}") ############################################################################ # Build each selected architecture ############################################################################ -#linphone_sdk_get_inherited_cmake_args(_CMAKE_CONFIGURE_ARGS _CMAKE_BUILD_ARGS) -#linphone_sdk_get_enable_cmake_args(_MACOS_CMAKE_ARGS) - - -#-DLINPHONE_OUTPUT_DIR=${LINPHONE_OUTPUT_DIR} - set(_MACOS_TARGETS) foreach(_MACOS_ARCH IN LISTS _MACOS_ARCHS) - set(_MACOS_ARCH_BINARY_DIR "${PROJECT_BINARY_DIR}/app_mac-${_MACOS_ARCH}") - set(_MACOS_ARCH_INSTALL_DIR "${PROJECT_BINARY_DIR}/OUTPUT/mac-${_MACOS_ARCH}") - add_custom_target(app_mac-${_MACOS_ARCH} ALL - COMMAND ${CMAKE_COMMAND} -B ${_MACOS_ARCH_BINARY_DIR} ${USER_ARGS} ${OPTION_LIST} -DCMAKE_INSTALL_PREFIX=${_MACOS_ARCH_INSTALL_DIR} -DLINPHONE_OUTPUT_DIR=${LINPHONE_OUTPUT_DIR} -DCMAKE_TOOLCHAIN_FILE=${PROJECT_SOURCE_DIR}/cmake/toolchains/toolchain-mac-x86_64.cmake -DLINPHONEAPP_BUILD_TYPE="Normal" - COMMAND ${CMAKE_COMMAND} --build ${_MACOS_ARCH_BINARY_DIR} --target install ${_CMAKE_BUILD_ARGS} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/linphone-app - DEPENDS sdk - COMMENT "Building Linphone APP for MacOS ${_MACOS_ARCH}" - USES_TERMINAL - COMMAND_EXPAND_LISTS - ) - list(APPEND _MACOS_TARGETS mac-${_MACOS_ARCH}) + set(_TARGET_NAME app_macos-${_MACOS_ARCH}) + set(_MACOS_ARCH_BINARY_DIR "${PROJECT_BINARY_DIR}/${_TARGET_NAME}") + #set(_MACOS_ARCH_INSTALL_DIR "${PROJECT_BINARY_DIR}/${LINPHONEAPP_NAME}/mac-${_MACOS_ARCH}") + set(_MACOS_ARCH_INSTALL_DIR "${_MACOS_INSTALL_DIR}-${_MACOS_ARCH}") + + add_custom_target(${_TARGET_NAME} ALL + COMMAND ${CMAKE_COMMAND} -B ${_MACOS_ARCH_BINARY_DIR} ${USER_ARGS} ${OPTION_LIST} -DCMAKE_INSTALL_PREFIX=${_MACOS_ARCH_INSTALL_DIR} -DLINPHONE_OUTPUT_DIR=${LINPHONE_OUTPUT_DIR} -DCMAKE_TOOLCHAIN_FILE=${PROJECT_SOURCE_DIR}/cmake/toolchains/toolchain-mac-x86_64.cmake -DLINPHONEAPP_BUILD_TYPE="Normal" + COMMAND ${CMAKE_COMMAND} --build ${_MACOS_ARCH_BINARY_DIR} --target install ${_CMAKE_BUILD_ARGS} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/linphone-app + DEPENDS sdk + COMMENT "Building Linphone APP for MacOS ${_MACOS_ARCH}" + USES_TERMINAL + COMMAND_EXPAND_LISTS + ) + list(APPEND _MACOS_TARGETS ${_TARGET_NAME}) endforeach() ############################################################################ -# Generate the aggregated frameworks +# Generate the aggregated apps ############################################################################ - -#add_custom_target(gen-frameworks ALL -# COMMAND "${CMAKE_COMMAND}" -# "-DLINPHONESDK_DIR=${PROJECT_SOURCE_DIR}" -# "-DLINPHONESDK_BUILD_DIR=${PROJECT_BINARY_DIR}" -# "-DLINPHONESDK_MACOS_ARCHS=${LINPHONESDK_MACOS_ARCHS}" -# "-DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}/linphone-sdk/mac" -# "-DENABLE_FAT_BINARY=${ENABLE_FAT_BINARY}" -# "-P" "${PROJECT_SOURCE_DIR}/cmake/macos/GenerateFrameworks.cmake" -# DEPENDS ${_MACOS_TARGETS} -# WORKING_DIRECTORY ${PROJECT_BINARY_DIR} -# COMMENT "Aggregating frameworks of all architectures" -# USES_TERMINAL -#) +add_custom_target(gen-apps ALL + COMMAND "${CMAKE_COMMAND}" + "-DLINPHONESDK_DIR=${PROJECT_SOURCE_DIR}/linphone-sdk" + "-DLINPHONEAPP_BUILD_DIR=${CMAKE_INSTALL_PREFIX}" + "-DLINPHONEAPP_MACOS_ARCHS=${LINPHONEAPP_MACOS_ARCHS}" + "-DLINPHONEAPP_NAME=${LINPHONEAPP_NAME}" + "-DLINPHONEAPP_PLATFORM=${LINPHONEAPP_PLATFORM_LOWER}" + "-DCMAKE_INSTALL_PREFIX=${_MACOS_INSTALL_DIR}" + "-DENABLE_FAT_BINARY=${ENABLE_FAT_BINARY}" + "-P" "${PROJECT_SOURCE_DIR}/cmake/GenerateAppMacos.cmake" + DEPENDS ${_MACOS_TARGETS} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMENT "Aggregating applications of all architectures" + USES_TERMINAL +) -############################################################################ -# Generate the SDK -############################################################################ -#list(GET _MACOS_ARCHS 0 _FIRST_ARCH) -#add_custom_target(sdk ALL -# COMMAND "${CMAKE_COMMAND}" -# "-DLINPHONESDK_PLATFORM=${LINPHONESDK_PLATFORM}" -# "-DLINPHONESDK_DIR=${PROJECT_SOURCE_DIR}" -# "-DLINPHONESDK_BUILD_DIR=${PROJECT_BINARY_DIR}" -# "-DLINPHONESDK_VERSION=${LINPHONESDK_VERSION}" -# "-DLINPHONESDK_ENABLED_FEATURES_FILENAME=${CMAKE_BINARY_DIR}/enabled_features.txt" -# "-DLINPHONESDK_MACOS_ARCHS=${LINPHONESDK_MACOS_ARCHS}" -# "-DLINPHONESDK_MACOS_BASE_URL=${LINPHONESDK_MACOS_BASE_URL}" -# "-DENABLE_FAT_BINARY=${ENABLE_FAT_BINARY}" -# "-P" "${PROJECT_SOURCE_DIR}/cmake/macos/GenerateSDK.cmake" -# DEPENDS gen-frameworks -# WORKING_DIRECTORY ${PROJECT_BINARY_DIR} -# COMMENT "Generating the SDK (zip file and podspec)" -# USES_TERMINAL -#) diff --git a/linphone-app/ui/modules/Linphone/History/History.js b/linphone-app/ui/modules/Linphone/History/History.js index 5adc56a02..51ec36e37 100644 --- a/linphone-app/ui/modules/Linphone/History/History.js +++ b/linphone-app/ui/modules/Linphone/History/History.js @@ -50,7 +50,7 @@ function getComponentFromEntry (historyEntry) { } function handleMoreEntriesLoaded (n) { - history.positionViewAtIndex(n - 1, QtQuick.ListView.Beginning) + history.positionViewAtIndex(history.count - n, QtQuick.ListView.Beginning) history.tryToLoadMoreEntries = false } diff --git a/linphone-app/ui/views/App/Main/MainWindow.qml b/linphone-app/ui/views/App/Main/MainWindow.qml index 392f57d8e..7d958b9e4 100644 --- a/linphone-app/ui/views/App/Main/MainWindow.qml +++ b/linphone-app/ui/views/App/Main/MainWindow.qml @@ -359,7 +359,6 @@ ApplicationWindow { isCustom: true backgroundRadius: 4 colorSet: MainWindowStyle.buttons.settingsMenu - visible: Qt.platform.os !== 'osx' toggled: menuBar.isOpenned onClicked: toggled ? menuBar.close() : menuBar.open()// a bit useless as Menu will depopup on losing focus but this code is kept for giving idea diff --git a/linphone-sdk b/linphone-sdk index fd8702387..1b6299a81 160000 --- a/linphone-sdk +++ b/linphone-sdk @@ -1 +1 @@ -Subproject commit fd870238723c152091426e6554e41e0e59fefe0a +Subproject commit 1b6299a81396aabec600071565ad86fc374d1374