From 691db8c0812206911f943977057a1cf45ad4dc15 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Tue, 4 Feb 2020 17:56:59 +0100 Subject: [PATCH 1/9] Fix Settings GUI and App Nap --- CMakeLists.txt | 12 ++++++++++- resources.qrc | 3 +-- src/app/App.cpp | 9 +++++++-- src/app/App.hpp | 3 +++ .../other/desktop-tools/DesktopToolsLinux.hpp | 2 ++ .../other/desktop-tools/DesktopToolsMacOs.hpp | 3 ++- .../desktop-tools/DesktopToolsWindows.hpp | 2 ++ .../state-process/StaeProcessMacOs.m | 0 .../state-process/StateProcessMacOs.mm | 20 +++++++++++++++++++ src/native/mac.mm | 0 ui/views/App/Main/MainWindow.qml | 5 +++-- ui/views/App/Main/MainWindowMenuBar.qml | 2 ++ 12 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 src/components/other/desktop-tools/state-process/StaeProcessMacOs.m create mode 100644 src/components/other/desktop-tools/state-process/StateProcessMacOs.mm create mode 100644 src/native/mac.mm diff --git a/CMakeLists.txt b/CMakeLists.txt index 5646aabf6..41879cd52 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -235,6 +235,7 @@ if (APPLE) src/components/core/event-count-notifier/EventCountNotifierMacOs.m src/components/other/desktop-tools/DesktopToolsMacOs.cpp src/components/other/desktop-tools/screen-saver/ScreenSaverMacOs.m + src/components/other/desktop-tools/state-process/StateProcessMacOs.mm ) list(APPEND HEADERS src/app/single-application/SingleApplicationPrivate.hpp @@ -326,6 +327,15 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/tools/private/pre-commit" "${CMAKE_CURRENT_SOURCE_DIR}/.git/hooks/pre-commit" ) +set(_QML_IMPORT_PATHS "") +list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/modules") +list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/dev-modules") +list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/scripts") +list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/views") + + +set(QML_IMPORT_PATH ${_QML_IMPORT_PATHS} CACHE STRING "Path used to locate CMake modules by Qt Creator" FORCE) + # ------------------------------------------------------------------------------ # Create config.h file @@ -432,7 +442,7 @@ if (UNIX AND NOT APPLE) RENAME "${EXECUTABLE_NAME}.svg" ) - set(ICON_DIRS 16x16 22x22 24x24 32x32 64x64 128x128) + set(ICON_DIRS 16x16 22x22 24x24 32x32 64x64 128x128 256x256) foreach (DIR ${ICON_DIRS}) install(FILES "${ASSETS_DIR}/icons/hicolor/${DIR}/apps/icon.png" DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/${DIR}/apps/" diff --git a/resources.qrc b/resources.qrc index 58a27a6c0..d85bde972 100644 --- a/resources.qrc +++ b/resources.qrc @@ -404,7 +404,6 @@ ui/views/App/Calls/IncomingCall.qml ui/views/App/Calls/OutgoingCall.qml ui/views/App/Calls/ZrtpTokenAuthentication.qml - ui/views/App/Main/+5.9/MainWindowMenuBar.qml ui/views/App/Main/Assistant/ActivateAppSipAccountWithEmail.qml ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml ui/views/App/Main/Assistant/AssistantAbstractView.qml @@ -430,7 +429,6 @@ ui/views/App/Main/Dialogs/ManageAccounts.qml ui/views/App/Main/Home.qml ui/views/App/Main/InviteFriends.qml - ui/views/App/Main/+mac/MainWindowMenuBar.qml ui/views/App/Main/MainWindow.js ui/views/App/Main/MainWindowMenuBar.qml ui/views/App/Main/MainWindow.qml @@ -479,5 +477,6 @@ ui/views/App/Styles/Settings/SettingsAudioStyle.qml ui/views/App/Styles/Settings/SettingsWindowStyle.qml assets/images/linphone_logo.svg + ui/views/App/Main/MainWindowTopMenuBar.qml diff --git a/src/app/App.cpp b/src/app/App.cpp index 72886dbbe..e145727c6 100644 --- a/src/app/App.cpp +++ b/src/app/App.cpp @@ -47,6 +47,7 @@ #include "translator/DefaultTranslator.hpp" #include "utils/LinphoneUtils.hpp" #include "utils/Utils.hpp" +#include "components/other/desktop-tools/DesktopTools.hpp" #include "App.hpp" @@ -173,6 +174,9 @@ static inline shared_ptr getConfigIfExists (const QCommandLine // ----------------------------------------------------------------------------- App::App (int &argc, char *argv[]) : SingleApplication(argc, argv, true, Mode::User | Mode::ExcludeAppPath | Mode::ExcludeAppVersion) { + + connect(this, SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(stateChanged(Qt::ApplicationState))); + setWindowIcon(QIcon(LinphoneUtils::WindowIconPath)); createParser(); @@ -405,11 +409,12 @@ void App::smartShowWindow (QQuickWindow *window) { } // ----------------------------------------------------------------------------- - bool App::hasFocus () const { return getMainWindow()->isActive() || (mCallsWindow && mCallsWindow->isActive()); } - +void App::stateChanged(Qt::ApplicationState pState) { + DesktopTools::applicationStateChanged(pState); +} // ----------------------------------------------------------------------------- void App::createParser () { diff --git a/src/app/App.hpp b/src/app/App.hpp index f57c8db75..f499fdc7f 100644 --- a/src/app/App.hpp +++ b/src/app/App.hpp @@ -103,6 +103,9 @@ public: Q_INVOKABLE static void smartShowWindow (QQuickWindow *window); +public slots: + void stateChanged(Qt::ApplicationState); + signals: void configLocaleChanged (const QString &locale); diff --git a/src/components/other/desktop-tools/DesktopToolsLinux.hpp b/src/components/other/desktop-tools/DesktopToolsLinux.hpp index fb0385174..14abc158b 100644 --- a/src/components/other/desktop-tools/DesktopToolsLinux.hpp +++ b/src/components/other/desktop-tools/DesktopToolsLinux.hpp @@ -40,6 +40,8 @@ public: bool getScreenSaverStatus () const; void setScreenSaverStatus (bool status); + static void applicationStateChanged(Qt::ApplicationState){}; + signals: void screenSaverStatusChanged (bool status); diff --git a/src/components/other/desktop-tools/DesktopToolsMacOs.hpp b/src/components/other/desktop-tools/DesktopToolsMacOs.hpp index a61655d4c..935ba9ea3 100644 --- a/src/components/other/desktop-tools/DesktopToolsMacOs.hpp +++ b/src/components/other/desktop-tools/DesktopToolsMacOs.hpp @@ -24,7 +24,6 @@ #define DESKTOP_TOOLS_MAC_OS_H_ #include - // ============================================================================= class DesktopTools : public QObject { @@ -39,6 +38,8 @@ public: bool getScreenSaverStatus () const; void setScreenSaverStatus (bool status); + static void applicationStateChanged(Qt::ApplicationState currentState); + signals: void screenSaverStatusChanged (bool status); diff --git a/src/components/other/desktop-tools/DesktopToolsWindows.hpp b/src/components/other/desktop-tools/DesktopToolsWindows.hpp index 7f5fe28cc..8dcce6ad9 100644 --- a/src/components/other/desktop-tools/DesktopToolsWindows.hpp +++ b/src/components/other/desktop-tools/DesktopToolsWindows.hpp @@ -39,6 +39,8 @@ public: bool getScreenSaverStatus () const; void setScreenSaverStatus (bool status); + static void applicationStateChanged(Qt::ApplicationState){}; + signals: void screenSaverStatusChanged (bool status); diff --git a/src/components/other/desktop-tools/state-process/StaeProcessMacOs.m b/src/components/other/desktop-tools/state-process/StaeProcessMacOs.m new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/other/desktop-tools/state-process/StateProcessMacOs.mm b/src/components/other/desktop-tools/state-process/StateProcessMacOs.mm new file mode 100644 index 000000000..cb536ba5a --- /dev/null +++ b/src/components/other/desktop-tools/state-process/StateProcessMacOs.mm @@ -0,0 +1,20 @@ +#include "../DesktopToolsMacOs.hpp" +#import +#import + +// Store a unique global instance of Activity to avoid App Nap of MacOs +static id g_backgroundActivity =0; + +void DesktopTools::applicationStateChanged(Qt::ApplicationState p_currentState) +{ + if( p_currentState == Qt::ApplicationActive && g_backgroundActivity != 0 ) + {// Entering Foreground + [[NSProcessInfo processInfo] endActivity:g_backgroundActivity]; + [g_backgroundActivity release]; + g_backgroundActivity = 0; + }else if( g_backgroundActivity == 0 ) + {// Doesn't begin activity if it is already started + g_backgroundActivity = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityUserInitiatedAllowingIdleSystemSleep reason:@"Linphone : Continue to receive requests while in Background"]; + [g_backgroundActivity retain]; + } +} diff --git a/src/native/mac.mm b/src/native/mac.mm new file mode 100644 index 000000000..e69de29bb diff --git a/ui/views/App/Main/MainWindow.qml b/ui/views/App/Main/MainWindow.qml index 9661c6a0f..f0c062472 100644 --- a/ui/views/App/Main/MainWindow.qml +++ b/ui/views/App/Main/MainWindow.qml @@ -1,6 +1,7 @@ import QtQuick 2.7 import QtQuick.Controls 2.2 import QtQuick.Layouts 1.3 +import Qt.labs.platform 1.0 import Common 1.0 import Linphone 1.0 @@ -192,14 +193,14 @@ ApplicationWindow { visible: Qt.platform.os !== 'osx' onClicked: menuBar.open() - MainWindowMenuBar { id: menuBar } + } } } - + MainWindowTopMenuBar{} // ----------------------------------------------------------------------- // Content. // ----------------------------------------------------------------------- diff --git a/ui/views/App/Main/MainWindowMenuBar.qml b/ui/views/App/Main/MainWindowMenuBar.qml index e32b8fe31..8acb0faec 100644 --- a/ui/views/App/Main/MainWindowMenuBar.qml +++ b/ui/views/App/Main/MainWindowMenuBar.qml @@ -1,5 +1,6 @@ import QtQuick 2.7 import QtQuick.Controls 2.3 +import Qt.labs.platform 1.0 import Linphone 1.0 @@ -48,6 +49,7 @@ Item { Menu { id: menu + title: qsTr('Settings') MenuItem { text: qsTr('settings') From 231a7755accd363e4934ee45a44f5a1130ad8707 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Tue, 4 Feb 2020 17:59:11 +0100 Subject: [PATCH 2/9] Delete StaeProcessMacOs.m --- .../other/desktop-tools/state-process/StaeProcessMacOs.m | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/components/other/desktop-tools/state-process/StaeProcessMacOs.m diff --git a/src/components/other/desktop-tools/state-process/StaeProcessMacOs.m b/src/components/other/desktop-tools/state-process/StaeProcessMacOs.m deleted file mode 100644 index e69de29bb..000000000 From 311d4fb9e6a5d4c010a30353fb2bd4bc1ae21466 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Tue, 4 Feb 2020 18:03:17 +0100 Subject: [PATCH 3/9] clean files --- src/native/mac.mm | 0 ui/views/App/Main/+5.9/MainWindowMenuBar.qml | 79 -------------------- ui/views/App/Main/+mac/MainWindowMenuBar.qml | 79 -------------------- 3 files changed, 158 deletions(-) delete mode 100644 src/native/mac.mm delete mode 100644 ui/views/App/Main/+5.9/MainWindowMenuBar.qml delete mode 100644 ui/views/App/Main/+mac/MainWindowMenuBar.qml diff --git a/src/native/mac.mm b/src/native/mac.mm deleted file mode 100644 index e69de29bb..000000000 diff --git a/ui/views/App/Main/+5.9/MainWindowMenuBar.qml b/ui/views/App/Main/+5.9/MainWindowMenuBar.qml deleted file mode 100644 index 48a0dde3b..000000000 --- a/ui/views/App/Main/+5.9/MainWindowMenuBar.qml +++ /dev/null @@ -1,79 +0,0 @@ -import QtQuick 2.7 - -// Experimental. -import Qt.labs.platform 1.0 - -import Linphone 1.0 - -// ============================================================================= - -Item { - function open () { - menu.open() - } - - // --------------------------------------------------------------------------- - // Shortcuts. - // --------------------------------------------------------------------------- - - Shortcut { - id: settingsShortcut - - sequence: 'Ctrl+P' - - onActivated: App.smartShowWindow(App.getSettingsWindow()) - } - - Shortcut { - id: quitShortcut - - context: Qt.ApplicationShortcut - sequence: StandardKey.Quit - - onActivated: Qt.quit() - } - - Shortcut { - id: aboutShortcut - - sequence: StandardKey.HelpContents - - onActivated: { - window.detachVirtualWindow() - window.attachVirtualWindow(Qt.resolvedUrl('Dialogs/About.qml')) - } - } - - // --------------------------------------------------------------------------- - // Menu. - // --------------------------------------------------------------------------- - - MenuBar { - Menu { - id: menu - - MenuItem { - role: MenuItem.PreferencesRole - shortcut: settingsShortcut.sequence - text: qsTr('settings') - - onTriggered: settingsShortcut.onActivated() - } - - MenuItem { - role: MenuItem.AboutRole - text: qsTr('about') - - onTriggered: aboutShortcut.onActivated() - } - - MenuItem { - role: MenuItem.QuitRole - shortcut: quitShortcut.sequence - text: qsTr('quit') - - onTriggered: quitShortcut.onActivated() - } - } - } -} diff --git a/ui/views/App/Main/+mac/MainWindowMenuBar.qml b/ui/views/App/Main/+mac/MainWindowMenuBar.qml deleted file mode 100644 index 48a0dde3b..000000000 --- a/ui/views/App/Main/+mac/MainWindowMenuBar.qml +++ /dev/null @@ -1,79 +0,0 @@ -import QtQuick 2.7 - -// Experimental. -import Qt.labs.platform 1.0 - -import Linphone 1.0 - -// ============================================================================= - -Item { - function open () { - menu.open() - } - - // --------------------------------------------------------------------------- - // Shortcuts. - // --------------------------------------------------------------------------- - - Shortcut { - id: settingsShortcut - - sequence: 'Ctrl+P' - - onActivated: App.smartShowWindow(App.getSettingsWindow()) - } - - Shortcut { - id: quitShortcut - - context: Qt.ApplicationShortcut - sequence: StandardKey.Quit - - onActivated: Qt.quit() - } - - Shortcut { - id: aboutShortcut - - sequence: StandardKey.HelpContents - - onActivated: { - window.detachVirtualWindow() - window.attachVirtualWindow(Qt.resolvedUrl('Dialogs/About.qml')) - } - } - - // --------------------------------------------------------------------------- - // Menu. - // --------------------------------------------------------------------------- - - MenuBar { - Menu { - id: menu - - MenuItem { - role: MenuItem.PreferencesRole - shortcut: settingsShortcut.sequence - text: qsTr('settings') - - onTriggered: settingsShortcut.onActivated() - } - - MenuItem { - role: MenuItem.AboutRole - text: qsTr('about') - - onTriggered: aboutShortcut.onActivated() - } - - MenuItem { - role: MenuItem.QuitRole - shortcut: quitShortcut.sequence - text: qsTr('quit') - - onTriggered: quitShortcut.onActivated() - } - } - } -} From 66a648ed02788adc0ecd5af980183ae866ee21d6 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Tue, 4 Feb 2020 18:18:35 +0100 Subject: [PATCH 4/9] Add missing file --- ui/views/App/Main/MainWindowTopMenuBar.qml | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 ui/views/App/Main/MainWindowTopMenuBar.qml diff --git a/ui/views/App/Main/MainWindowTopMenuBar.qml b/ui/views/App/Main/MainWindowTopMenuBar.qml new file mode 100644 index 000000000..66cb7154c --- /dev/null +++ b/ui/views/App/Main/MainWindowTopMenuBar.qml @@ -0,0 +1,72 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.3 +import Qt.labs.platform 1.0 + +import Linphone 1.0 + +// ============================================================================= + +MenuBar { + function open () { + menu.open() + } + + // --------------------------------------------------------------------------- + // Shortcuts. + // --------------------------------------------------------------------------- + + Shortcut { + id: settingsShortcut + + sequence: 'Ctrl+P' + + onActivated: App.smartShowWindow(App.getSettingsWindow()) + } + + Shortcut { + id: quitShortcut + + context: Qt.ApplicationShortcut + sequence: StandardKey.Quit + + onActivated: Qt.quit() + } + + Shortcut { + id: aboutShortcut + + sequence: StandardKey.HelpContents + + onActivated: { + window.detachVirtualWindow() + window.attachVirtualWindow(Qt.resolvedUrl('Dialogs/About.qml')) + } + } + + // --------------------------------------------------------------------------- + // Menu. + // --------------------------------------------------------------------------- + + Menu { + id: menu + title: qsTr('Settings') + + MenuItem { + text: qsTr('settings') + + onTriggered: settingsShortcut.onActivated() + } + + MenuItem { + text: qsTr('about') + + onTriggered: aboutShortcut.onActivated() + } + + MenuItem { + text: qsTr('quit') + + onTriggered: quitShortcut.onActivated() + } + } +} From 8bcecb04d12bf670ced4f26ee7b78edefcca1494 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Wed, 5 Feb 2020 08:57:38 +0100 Subject: [PATCH 5/9] Fix item text --- ui/views/App/Main/MainWindowMenuBar.qml | 2 +- ui/views/App/Main/MainWindowTopMenuBar.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/views/App/Main/MainWindowMenuBar.qml b/ui/views/App/Main/MainWindowMenuBar.qml index 8acb0faec..2ee2476bf 100644 --- a/ui/views/App/Main/MainWindowMenuBar.qml +++ b/ui/views/App/Main/MainWindowMenuBar.qml @@ -49,7 +49,7 @@ Item { Menu { id: menu - title: qsTr('Settings') + title: qsTr('settings') MenuItem { text: qsTr('settings') diff --git a/ui/views/App/Main/MainWindowTopMenuBar.qml b/ui/views/App/Main/MainWindowTopMenuBar.qml index 66cb7154c..9ed15d392 100644 --- a/ui/views/App/Main/MainWindowTopMenuBar.qml +++ b/ui/views/App/Main/MainWindowTopMenuBar.qml @@ -49,7 +49,7 @@ MenuBar { Menu { id: menu - title: qsTr('Settings') + title: qsTr('settings') MenuItem { text: qsTr('settings') From dac7ccdb1213f07dfbf7a0842c704ac56e9030f6 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Wed, 5 Feb 2020 12:44:12 +0100 Subject: [PATCH 6/9] Update build for Mac[ci skip] --- build_all_macos.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build_all_macos.sh b/build_all_macos.sh index 2d15fee6e..4c2f313b3 100755 --- a/build_all_macos.sh +++ b/build_all_macos.sh @@ -38,22 +38,22 @@ mkdir -p submodules/externals/minizip/build-minizip #SDK building cd linphone-sdk/build-sdk #LINPHONESDK_DOXYGEN_PROGRAM is set just to be sure to get the version of the Application folder -cmake .. -DLINPHONESDK_DOXYGEN_PROGRAM=/Applications/Doxygen.app/Contents/Resources/doxygen -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -cmake --build . --target all --parallel 5 +cmake .. -DLINPHONESDK_DOXYGEN_PROGRAM=/Applications/Doxygen.app/Contents/Resources/doxygen -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_BUILD_TYPE=RelWithDebInfo +cmake --build . --target all --config RelWithDebInfo --parallel 5 rsync -a linphone-sdk/desktop/ ../../build-desktop/OUTPUT/ cd ../.. #MiniZip Building cd submodules/externals/minizip/build-minizip -cmake .. -DCMAKE_INSTALL_PREFIX=../../../../build-desktop/OUTPUT -DCMAKE_PREFIX_PATH=../../../build-desktop/OUTPUT -cmake --build . --target all --parallel 5 +cmake .. -DCMAKE_INSTALL_PREFIX=../../../../build-desktop/OUTPUT -DCMAKE_PREFIX_PATH=../../../build-desktop/OUTPUT -DCMAKE_BUILD_TYPE=RelWithDebInfo +cmake --build . --target all --config RelWithDebInfo --parallel 5 cmake --build . --target install cd ../../../.. #Desktop Building cd build-desktop -cmake .. -DCMAKE_INSTALL_PREFIX=OUTPUT -cmake --build . --target all +cmake .. -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_BUILD_TYPE=RelWithDebInfo +cmake --build . --target all --config RelWithDebInfo cmake --build . --target install From 9a65b710334f75be2158e015dacdc3f3a3365aee Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Thu, 6 Feb 2020 19:45:18 +0100 Subject: [PATCH 7/9] Installation reworking with old packaging. CPack is temporary removed --- CMakeLists.txt | 14 ++- build_all_macos.sh | 2 +- cmake_builder/install.cmake | 2 +- cmake_builder/linphone_package/CMakeLists.txt | 101 ++++++++++-------- .../linphone_package/macos/Info.plist.in | 4 +- 5 files changed, 76 insertions(+), 47 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 41879cd52..e27064832 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,9 @@ cmake_minimum_required(VERSION 3.1) project(linphoneqt VERSION 4.1.1) +list(APPEND CMAKE_PREFIX_PATH "linphone-sdk/build-sdk/linphone-sdk/desktop") +list(APPEND CMAKE_PREFIX_PATH "submodules/externals/minizip/build-minizip/OUTPUT") + set(APP_LIBRARY app-library) include(application_info.cmake) @@ -97,6 +100,7 @@ set(QT5_PACKAGES_OPTIONAL TextToSpeech) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + find_package(LinphoneCxx CONFIG REQUIRED) find_package(Linphone CONFIG REQUIRED) find_package(bctoolbox CONFIG REQUIRED) @@ -386,7 +390,7 @@ endif () set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME "${EXECUTABLE_NAME}") set(INCLUDED_DIRECTORIES "${LINPHONECXX_INCLUDE_DIRS}" "${LINPHONE_INCLUDE_DIRS}" "${BELCARD_INCLUDE_DIRS}" "${BCTOOLBOX_INCLUDE_DIRS}" "${MEDIASTREAMER2_INCLUDE_DIRS}" "${MINIZIP_INCLUDE_DIRS}") -set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${MINIZIP_LIBRARIES} ${OPUS_LIBRARIES}) +set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${OPUS_LIBRARIES}) foreach (package ${QT5_PACKAGES}) list(APPEND INCLUDED_DIRECTORIES "${Qt5${package}_INCLUDE_DIRS}") @@ -414,7 +418,6 @@ if (APPLE) list(APPEND LIBRARIES "-framework Cocoa -framework IOKit") # -framework linphone") #This doesn't work yet endif () - target_include_directories(${APP_LIBRARY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES}) target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES}) @@ -475,8 +478,15 @@ install(FILES "${ASSETS_ASSISTANT_DIR}/use-app-sip-account.rc" # ------------------------------------------------------------------------------ # CPack settings & RPM. # ------------------------------------------------------------------------------ +set(LINPHONE_DESKTOP_DIR "${CMAKE_SOURCE_DIR}") +set(LINPHONE_OUTPUT_DIR "${CMAKE_INSTALL_PREFIX}") +set(LINPHONE_SDK_DIR "${CMAKE_SOURCE_DIR}/linphone-sdk/build-sdk/linphone-sdk") +set(TOOLS_DIR "${CMAKE_BINARY_DIR}/programs") +set(LINPHONE_SOURCE_DIR ${EP_linphone_SOURCE_DIR}) +set(LINPHONE_BUILDER_SIGNING_IDENTITY ${LINPHONE_BUILDER_SIGNING_IDENTITY}) add_subdirectory(build) +add_subdirectory(cmake_builder/linphone_package) # ------------------------------------------------------------------------------ # To start better integration into IDE. diff --git a/build_all_macos.sh b/build_all_macos.sh index 4c2f313b3..6e81f98bf 100755 --- a/build_all_macos.sh +++ b/build_all_macos.sh @@ -45,7 +45,7 @@ cd ../.. #MiniZip Building cd submodules/externals/minizip/build-minizip -cmake .. -DCMAKE_INSTALL_PREFIX=../../../../build-desktop/OUTPUT -DCMAKE_PREFIX_PATH=../../../build-desktop/OUTPUT -DCMAKE_BUILD_TYPE=RelWithDebInfo +cmake .. -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_PREFIX_PATH=../../../build-desktop/OUTPUT -DCMAKE_BUILD_TYPE=RelWithDebInfo cmake --build . --target all --config RelWithDebInfo --parallel 5 cmake --build . --target install cd ../../../.. diff --git a/cmake_builder/install.cmake b/cmake_builder/install.cmake index 05b88cc53..a2ab59415 100644 --- a/cmake_builder/install.cmake +++ b/cmake_builder/install.cmake @@ -21,7 +21,7 @@ ############################################################################ if (APPLE) - execute_process(COMMAND install_name_tool -id "@executable_path/../lib/libminizip.dylib" "${CMAKE_INSTALL_PREFIX}/lib/libminizip.dylib") + #execute_process(COMMAND install_name_tool -id "@executable_path/../lib/libminizip.dylib" "${CMAKE_INSTALL_PREFIX}/lib/libminizip.dylib") execute_process(COMMAND install_name_tool -add_rpath "@executable_path/../Frameworks/" "${CMAKE_INSTALL_PREFIX}/bin/linphone") execute_process(COMMAND install_name_tool -add_rpath "@executable_path/../lib/" "${CMAKE_INSTALL_PREFIX}/bin/linphone") else () diff --git a/cmake_builder/linphone_package/CMakeLists.txt b/cmake_builder/linphone_package/CMakeLists.txt index 209dfed9a..eb82d6271 100644 --- a/cmake_builder/linphone_package/CMakeLists.txt +++ b/cmake_builder/linphone_package/CMakeLists.txt @@ -20,13 +20,17 @@ # ############################################################################ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.13) project(LINPHONE_PACKAGE) # Dummy project. include("${LINPHONE_DESKTOP_DIR}/application_info.cmake") find_package(Linphone REQUIRED) find_package(Git) +#Policy set to allow link from other directory +if (POLICY CMP0079) + cmake_policy(SET CMP0079 NEW) +endif () set(LINPHONE_QML_DIR "${LINPHONE_DESKTOP_DIR}/ui") @@ -58,11 +62,18 @@ set(PACKAGE_VERSION "${LINPHONE_VERSION}") # Preparing the Linphone SDK bundle. # ============================================================================== +# Create sdk-temp folder where we can find all needed files (libs, includes etc.) set(LINPHONE_SDK_TMP "${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-tmp") file(REMOVE_RECURSE "${LINPHONE_SDK_TMP}") -file(COPY "${LINPHONE_OUTPUT_DIR}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") +message(${LINPHONE_SDK_DIR}) +file(COPY "${LINPHONE_SDK_DIR}/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") +file(GLOB MINIZIP_FILES "${CMAKE_SOURCE_DIR}/submodules/externals/minizip/build-minizip/OUTPUT/*") +file(COPY ${MINIZIP_FILES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/desktop/") +if(APPLE) + execute_process(COMMAND install_name_tool -id "@executable_path/../Frameworks/libminizip.dylib" "${CMAKE_CURRENT_BINARY_DIR}/desktop/lib/libminizip.dylib") +endif() file(RENAME "${CMAKE_CURRENT_BINARY_DIR}/desktop" "${LINPHONE_SDK_TMP}") - +target_link_libraries(${TARGET_NAME} "${LINPHONE_SDK_TMP}/lib/libminizip.dylib") # Generates a zip archive containing the development files. macro (add_sdk_list_file NAME) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/sdk_content/${NAME}.list.in" "${LINPHONE_SDK_TMP}/${NAME}.list" @ONLY) @@ -88,6 +99,7 @@ add_sdk_list_file(ortp) add_sdk_list_file(ms2) add_sdk_list_file(ms2plugins) add_sdk_list_file(linphone) +add_sdk_list_file(linphonecxx) if (WIN32) add_sdk_list_file(sqlite3) add_sdk_list_file(xml2) @@ -148,6 +160,7 @@ elseif (APPLE) COMMAND zip -ry "${CMAKE_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-${LINPHONE_GIT_REVISION}-mac.zip" . -i "@${EXECUTABLE_NAME}-sdk.list" WORKING_DIRECTORY ${LINPHONE_SDK_TMP} ) + install() endif () # ============================================================================== @@ -195,43 +208,48 @@ if (WIN32) ) endif () elseif (APPLE) - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/Info.plist.in" "${APPLICATION_NAME}.app/Contents/Info.plist" @ONLY) - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/linphone.icns" "${APPLICATION_NAME}.app/Contents/Resources/${EXECUTABLE_NAME}.icns" COPYONLY) - file(COPY "${LINPHONE_OUTPUT_DIR}/bin/${EXECUTABLE_NAME}" DESTINATION "${APPLICATION_NAME}.app/Contents/MacOS") - file(GLOB SHARED_LIBRARIES "${LINPHONE_OUTPUT_DIR}/lib/lib*.dylib") + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/Info.plist.in" "${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/Info.plist" @ONLY) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/linphone.icns" "${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app/Contents/Resources/${EXECUTABLE_NAME}.icns" COPYONLY) + install(DIRECTORY "${LINPHONE_SDK_TMP}/Frameworks/" DESTINATION "${APPLICATION_NAME}.app/Contents/Frameworks" USE_SOURCE_PERMISSIONS) + install(PROGRAMS "${CMAKE_INSTALL_PREFIX}/bin/${EXECUTABLE_NAME}" DESTINATION "${APPLICATION_NAME}.app/Contents/MacOS") + #file(COPY "${LINPHONE_OUTPUT_DIR}/bin/${EXECUTABLE_NAME}" DESTINATION "${APPLICATION_NAME}.app/Contents/MacOS") + file(GLOB SHARED_LIBRARIES "${LINPHONE_SDK_TMP}/lib/lib*.dylib") foreach (LIBRARY ${SHARED_LIBRARIES}) - file(COPY "${LIBRARY}" DESTINATION "${APPLICATION_NAME}.app/Contents/Frameworks") + install(FILES "${LIBRARY}" DESTINATION "${APPLICATION_NAME}.app/Contents/Frameworks") endforeach () 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 () - execute_process( - COMMAND "${DEPLOYQT_PROGRAM}" "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app" "-qmldir=${LINPHONE_QML_DIR}" "-verbose=2" - ) + if (EXISTS "${LINPHONE_OUTPUT_DIR}/lib/mediastreamer") file(COPY "${LINPHONE_OUTPUT_DIR}/lib/mediastreamer" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/lib" USE_SOURCE_PERMISSIONS) endif () - file(COPY "${LINPHONE_OUTPUT_DIR}/share/Belr/grammars/cpim_grammar" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/belr/grammars/") - file(COPY "${LINPHONE_OUTPUT_DIR}/share/Belr/grammars/vcard_grammar" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/belr/grammars/") - file(COPY "${LINPHONE_OUTPUT_DIR}/share/images" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share" USE_SOURCE_PERMISSIONS) - file(COPY "${LINPHONE_OUTPUT_DIR}/share/sounds" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share" USE_SOURCE_PERMISSIONS) - file(COPY "${LINPHONE_OUTPUT_DIR}/share/${APPLICATION_NAME}/rootca.pem" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}") - file(COPY "${LINPHONE_OUTPUT_DIR}/share/${APPLICATION_NAME}/linphonerc-factory" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}") + install(FILES "${LINPHONE_SDK_TMP}/share/Belr/grammars/cpim_grammar" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/belr/grammars/") + install(FILES "${LINPHONE_SDK_TMP}/share/Belr/grammars/vcard_grammar" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/belr/grammars/") + install(DIRECTORY "${LINPHONE_SDK_TMP}/share/images" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share" USE_SOURCE_PERMISSIONS) + install(DIRECTORY "${LINPHONE_SDK_TMP}/share/sounds" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share" USE_SOURCE_PERMISSIONS) + install(FILES "${LINPHONE_SDK_TMP}/share/${APPLICATION_NAME}/rootca.pem" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}") + install(FILES "${LINPHONE_OUTPUT_DIR}/share/${APPLICATION_NAME}/linphonerc-factory" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}") - file(COPY "${LINPHONE_OUTPUT_DIR}/share/${APPLICATION_NAME}/assistant/use-other-sip-account.rc" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}/assistant") - file(COPY "${LINPHONE_OUTPUT_DIR}/share/${APPLICATION_NAME}/assistant/create-app-sip-account.rc" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}/assistant") - file(COPY "${LINPHONE_OUTPUT_DIR}/share/${APPLICATION_NAME}/assistant/use-app-sip-account.rc" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}/assistant") + install(FILES "${LINPHONE_OUTPUT_DIR}/share/${APPLICATION_NAME}/assistant/use-other-sip-account.rc" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}/assistant") + install(FILES "${LINPHONE_OUTPUT_DIR}/share/${APPLICATION_NAME}/assistant/create-app-sip-account.rc" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}/assistant") + install(FILES "${LINPHONE_OUTPUT_DIR}/share/${APPLICATION_NAME}/assistant/use-app-sip-account.rc" DESTINATION "${APPLICATION_NAME}.app/Contents/Resources/share/${EXECUTABLE_NAME}/assistant") file(GLOB SHARED_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app/Contents/Frameworks/lib*.dylib") + foreach (LIBRARY ${SHARED_LIBRARIES}) get_filename_component(LIBRARY_FILENAME ${LIBRARY} NAME) - message("Changing RPATH of ${LIBRARY_FILENAME} from '${LINPHONE_OUTPUT_DIR}/lib' to '@executable_path/../Frameworks'") - execute_process(COMMAND install_name_tool -rpath "${LINPHONE_OUTPUT_DIR}/lib" "@executable_path/../Frameworks" "${LIBRARY}") + if(NOT ("${LIBRARY_FILENAME}" STREQUAL "libminizip.dylib")) + message("Changing RPATH of ${LIBRARY_FILENAME} from '${LINPHONE_OUTPUT_DIR}/lib' to '@executable_path/../Frameworks'") + execute_process(COMMAND install_name_tool -rpath "${LINPHONE_OUTPUT_DIR}/lib" "@executable_path/../Frameworks" "${LIBRARY}") + endif() endforeach () + install( CODE "execute_process(COMMAND ${DEPLOYQT_PROGRAM} ${CMAKE_INSTALL_PREFIX}/${APPLICATION_NAME}.app -qmldir=${LINPHONE_QML_DIR} -verbose=2)" ) + if (LINPHONE_BUILDER_SIGNING_IDENTITY) file(GLOB FRAMEWORKS_NAMES "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app/Contents/Frameworks/*") foreach (FRAMEWORK ${FRAMEWORKS_NAMES}) @@ -246,11 +264,10 @@ elseif (APPLE) endforeach () execute_process(COMMAND "codesign" "--verbose" "-s" "${LINPHONE_BUILDER_SIGNING_IDENTITY}" "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app") endif () +# install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app" DESTINATION "." USE_SOURCE_PERMISSIONS) - install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app" DESTINATION "." USE_SOURCE_PERMISSIONS) - - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/packaging.cmake.in" "packaging.cmake" @ONLY) - install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/packaging.cmake") +# configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/packaging.cmake.in" "packaging.cmake" @ONLY) +# install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/packaging.cmake") endif () if (MSVC) @@ -278,24 +295,24 @@ endif () # CPack. # ============================================================================== -set(CPACK_PACKAGE_NAME "${APPLICATION_NAME}") -set(CPACK_PACKAGE_VENDOR "${APPLICATION_VENDOR}") -set(CPACK_PACKAGE_VERSION_MAJOR ${LINPHONE_MAJOR_VERSION}) -set(CPACK_PACKAGE_VERSION_MINOR ${LINPHONE_MINOR_VERSION}) -if (LINPHONE_MICRO_VERSION) - set(CPACK_PACKAGE_VERSION_PATCH ${LINPHONE_MICRO_VERSION}) -endif () -set(CPACK_PACKAGE_EXECUTABLES "${EXECUTABLE_NAME};${APPLICATION_NAME}") -set(CPACK_PACKAGE_INSTALL_DIRECTORY "${APPLICATION_NAME}") -set(CPACK_RESOURCE_FILE_LICENSE "${LINPHONE_DESKTOP_DIR}/LICENSE.txt") +#set(CPACK_PACKAGE_NAME "${APPLICATION_NAME}") +#set(CPACK_PACKAGE_VENDOR "${APPLICATION_VENDOR}") +#set(CPACK_PACKAGE_VERSION_MAJOR ${LINPHONE_MAJOR_VERSION}) +#set(CPACK_PACKAGE_VERSION_MINOR ${LINPHONE_MINOR_VERSION}) +#if (LINPHONE_MICRO_VERSION) +# set(CPACK_PACKAGE_VERSION_PATCH ${LINPHONE_MICRO_VERSION}) +#endif () +#set(CPACK_PACKAGE_EXECUTABLES "${EXECUTABLE_NAME};${APPLICATION_NAME}") +#set(CPACK_PACKAGE_INSTALL_DIRECTORY "${APPLICATION_NAME}") +#set(CPACK_RESOURCE_FILE_LICENSE "${LINPHONE_DESKTOP_DIR}/LICENSE.txt") -if (APPLE) - set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${LINPHONE_GIT_REVISION}-mac") - set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/macos/background_dmg.jpg") +#if (APPLE) +# set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${LINPHONE_GIT_REVISION}-mac") +# set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/macos/background_dmg.jpg") - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/linphone_dmg.scpt.in" "${CMAKE_CURRENT_BINARY_DIR}/linphone_dmg.scpt" @ONLY) - set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/linphone_dmg.scpt") -endif () +# configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/linphone_dmg.scpt.in" "${CMAKE_CURRENT_BINARY_DIR}/linphone_dmg.scpt" @ONLY) +# set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/linphone_dmg.scpt") +#endif () if (WIN32) set(CPACK_GENERATOR "NSIS") diff --git a/cmake_builder/linphone_package/macos/Info.plist.in b/cmake_builder/linphone_package/macos/Info.plist.in index 6e4b7c817..1703aa7e8 100644 --- a/cmake_builder/linphone_package/macos/Info.plist.in +++ b/cmake_builder/linphone_package/macos/Info.plist.in @@ -27,7 +27,7 @@ CFBundleVersion @PACKAGE_VERSION@ NSHumanReadableCopyright - Copyright 2011-2018 @APPLICATION_VENDOR@ + Copyright 2011-2020 @APPLICATION_VENDOR@ LSMinimumSystemVersion @CMAKE_OSX_DEPLOYMENT_TARGET@ NSAppSleepDisabled @@ -50,5 +50,7 @@ NSApplication NSHighResolutionCapable True + NSCameraUsageDescription + Streaming Video between devices From 6f385559af3df3f6a44ef67b9eeda8946e1274e2 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Thu, 6 Feb 2020 19:58:30 +0100 Subject: [PATCH 8/9] Add missing file --- .../linphone_package/sdk_content/linphonecxx.list.in | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cmake_builder/linphone_package/sdk_content/linphonecxx.list.in diff --git a/cmake_builder/linphone_package/sdk_content/linphonecxx.list.in b/cmake_builder/linphone_package/sdk_content/linphonecxx.list.in new file mode 100644 index 000000000..6ed9fc40d --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/linphonecxx.list.in @@ -0,0 +1,4 @@ +@LIBDIR@/@LIBPREFIX@linphone*.@LIBEXT@ +include/linphone++/* +share/doc/linphoneCxx-* +share/LinphoneCxx/cmake/* \ No newline at end of file From 71774a1aef8c6232c4038985060e129272654bf3 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Fri, 7 Feb 2020 10:08:00 +0100 Subject: [PATCH 9/9] Update MacOs auto building script [ci skip] --- build_all_macos.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build_all_macos.sh b/build_all_macos.sh index 6e81f98bf..d58982ecf 100755 --- a/build_all_macos.sh +++ b/build_all_macos.sh @@ -40,12 +40,11 @@ cd linphone-sdk/build-sdk #LINPHONESDK_DOXYGEN_PROGRAM is set just to be sure to get the version of the Application folder cmake .. -DLINPHONESDK_DOXYGEN_PROGRAM=/Applications/Doxygen.app/Contents/Resources/doxygen -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_BUILD_TYPE=RelWithDebInfo cmake --build . --target all --config RelWithDebInfo --parallel 5 -rsync -a linphone-sdk/desktop/ ../../build-desktop/OUTPUT/ cd ../.. #MiniZip Building cd submodules/externals/minizip/build-minizip -cmake .. -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_PREFIX_PATH=../../../build-desktop/OUTPUT -DCMAKE_BUILD_TYPE=RelWithDebInfo +cmake .. -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_PREFIX_PATH=../../../linphone-sdk/build-sdk/linphone-sdk/desktop -DCMAKE_BUILD_TYPE=RelWithDebInfo cmake --build . --target all --config RelWithDebInfo --parallel 5 cmake --build . --target install cd ../../../..