diff --git a/CMakeLists.txt b/CMakeLists.txt index 1dee0d6dd..2b5da603b 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) @@ -122,6 +125,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) @@ -260,6 +264,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 @@ -351,6 +356,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) + set(_QML_IMPORT_PATHS "") list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/modules") @@ -409,7 +423,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}") @@ -437,7 +451,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}) @@ -465,7 +478,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/" @@ -498,8 +511,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 2d15fee6e..d58982ecf 100755 --- a/build_all_macos.sh +++ b/build_all_macos.sh @@ -38,22 +38,21 @@ 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 -rsync -a linphone-sdk/desktop/ ../../build-desktop/OUTPUT/ +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 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=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 ../../../.. #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 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 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 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 da1f33687..b0b5396cf 100644 --- a/src/app/App.cpp +++ b/src/app/App.cpp @@ -46,6 +46,7 @@ #include "translator/DefaultTranslator.hpp" #include "utils/LinphoneUtils.hpp" #include "utils/Utils.hpp" +#include "components/other/desktop-tools/DesktopTools.hpp" // ============================================================================= @@ -170,6 +171,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(); @@ -402,11 +406,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/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/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() - } - } - } -} 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..2ee2476bf 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') diff --git a/ui/views/App/Main/+5.9/MainWindowMenuBar.qml b/ui/views/App/Main/MainWindowTopMenuBar.qml similarity index 64% rename from ui/views/App/Main/+5.9/MainWindowMenuBar.qml rename to ui/views/App/Main/MainWindowTopMenuBar.qml index 48a0dde3b..9ed15d392 100644 --- a/ui/views/App/Main/+5.9/MainWindowMenuBar.qml +++ b/ui/views/App/Main/MainWindowTopMenuBar.qml @@ -1,13 +1,12 @@ import QtQuick 2.7 - -// Experimental. +import QtQuick.Controls 2.3 import Qt.labs.platform 1.0 import Linphone 1.0 // ============================================================================= -Item { +MenuBar { function open () { menu.open() } @@ -48,32 +47,26 @@ Item { // Menu. // --------------------------------------------------------------------------- - MenuBar { - Menu { - id: menu + Menu { + id: menu + title: qsTr('settings') - MenuItem { - role: MenuItem.PreferencesRole - shortcut: settingsShortcut.sequence - text: qsTr('settings') + MenuItem { + text: qsTr('settings') - onTriggered: settingsShortcut.onActivated() - } + onTriggered: settingsShortcut.onActivated() + } - MenuItem { - role: MenuItem.AboutRole - text: qsTr('about') + MenuItem { + text: qsTr('about') - onTriggered: aboutShortcut.onActivated() - } + onTriggered: aboutShortcut.onActivated() + } - MenuItem { - role: MenuItem.QuitRole - shortcut: quitShortcut.sequence - text: qsTr('quit') + MenuItem { + text: qsTr('quit') - onTriggered: quitShortcut.onActivated() - } + onTriggered: quitShortcut.onActivated() } } }