diff --git a/cmake_builder/linphone_package/CMakeLists.txt b/cmake_builder/linphone_package/CMakeLists.txt index 4fcf88e1c..2a7d14959 100644 --- a/cmake_builder/linphone_package/CMakeLists.txt +++ b/cmake_builder/linphone_package/CMakeLists.txt @@ -185,7 +185,7 @@ if(WIN32) PATTERN "bin/*_tester.exe" EXCLUDE PATTERN "bin/openh264.dll" EXCLUDE PATTERN "include" EXCLUDE - PATTERN "lib/mediastreamer" EXCLUDE + PATTERN "lib/mediastreamer/plugins/*openh264.*" EXCLUDE PATTERN "lib/pkgconfig" EXCLUDE PATTERN "lib/*.a" EXCLUDE PATTERN "lib/*.def" EXCLUDE @@ -206,10 +206,9 @@ if(WIN32) COMPONENT "msopenh264" FILES_MATCHING PATTERN "b*zip2.*" ) - install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/lib/mediastreamer/plugins/" + install(FILES "${LINPHONE_OUTPUT_DIR}/lib/mediastreamer/plugins/libmsopenh264.dll" DESTINATION "lib/mediastreamer/plugins" COMPONENT "msopenh264" - FILES_MATCHING PATTERN "libmsopenh264.*" ) endif() @@ -233,16 +232,13 @@ elseif(APPLE) install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/share/images" DESTINATION "Linphone.app/Contents/Resources/share" USE_SOURCE_PERMISSIONS) install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/share/sounds" DESTINATION "Linphone.app/Contents/Resources/share" USE_SOURCE_PERMISSIONS) install(FILES "${LINPHONE_OUTPUT_DIR}/share/Linphone/rootca.pem" DESTINATION "Linphone.app/Contents/Resources/share/linphone") + install(FILES "${LINPHONE_OUTPUT_DIR}/share/Linphone/linphonerc-factory" DESTINATION "Linphone.app/Contents/Resources/share/linphone") configure_file("MacPackaging.cmake.in" "MacPackaging.cmake" @ONLY) install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/MacPackaging.cmake") endif() if(MSVC) - install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/lib/mediastreamer/plugins/" - DESTINATION "lib/mediastreamer/plugins" - FILES_MATCHING PATTERN "libmswasapi.dll" - ) string(REGEX REPLACE "Visual Studio ([0-9]+).*" "\\1" MSVC_VERSION "${CMAKE_GENERATOR}") find_file(MSVCP_LIB "msvcp${MSVC_VERSION}0.dll" PATHS "C:/Windows/System32") find_file(UCRTBASE_LIB "ucrtbase.dll" PATHS "C:/Windows/System32") diff --git a/linphone-desktop/CMakeLists.txt b/linphone-desktop/CMakeLists.txt index a9e3de24f..5abddd9a8 100644 --- a/linphone-desktop/CMakeLists.txt +++ b/linphone-desktop/CMakeLists.txt @@ -204,6 +204,13 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/../.git/hooks/pre-commit" ) +# ------------------------------------------------------------------------------ +# Create config.h file +# ------------------------------------------------------------------------------ + +set(MSPLUGINS_DIR "${CMAKE_INSTALL_LIBDIR}/mediastreamer/plugins") +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config.h") + # ------------------------------------------------------------------------------ # Build. # ------------------------------------------------------------------------------ @@ -254,3 +261,7 @@ install(TARGETS ${TARGET_NAME} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) + +install(FILES "assets/linphonerc-factory" + DESTINATION "${CMAKE_INSTALL_DATADIR}/linphone" +) diff --git a/linphone-desktop/assets/linphonerc-factory b/linphone-desktop/assets/linphonerc-factory new file mode 100644 index 000000000..ac033cabd --- /dev/null +++ b/linphone-desktop/assets/linphonerc-factory @@ -0,0 +1,2 @@ +[sound] +ec_filter=MSWebRTCAEC diff --git a/linphone-desktop/config.h.cmake b/linphone-desktop/config.h.cmake new file mode 100644 index 000000000..52ad977d0 --- /dev/null +++ b/linphone-desktop/config.h.cmake @@ -0,0 +1,23 @@ +/*************************************************************************** +* config.h.cmake +* Copyright (C) 2017 Belledonne Communications, Grenoble France +* +**************************************************************************** +* +* 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 2 +* 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, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +****************************************************************************/ + +#cmakedefine MSPLUGINS_DIR "${MSPLUGINS_DIR}" diff --git a/linphone-desktop/src/app/paths/Paths.cpp b/linphone-desktop/src/app/paths/Paths.cpp index 49b7a4624..a8fb4ae65 100644 --- a/linphone-desktop/src/app/paths/Paths.cpp +++ b/linphone-desktop/src/app/paths/Paths.cpp @@ -20,6 +20,7 @@ * Author: Ronan Abhamon */ +#include #include #include #include @@ -28,6 +29,7 @@ #include "../../utils.hpp" #include "Paths.hpp" +#include "config.h" #define PATH_AVATARS "/avatars/" #define PATH_CAPTURES "/captures/" @@ -37,6 +39,7 @@ #define PATH_CALL_HISTORY_LIST "/call-history.db" #define PATH_CONFIG "/linphonerc" +#define PATH_FACTORY_CONFIG "/linphonerc-factory" #define PATH_FRIENDS_LIST "/friends.db" #define PATH_MESSAGE_HISTORY_LIST "/message-history.db" #define PATH_ZRTP_SECRETS "/zidcache" @@ -78,16 +81,48 @@ inline void ensureFilePathExists (const QString &path) { qFatal("Unable to access at path: `%s`", path.toStdString().c_str()); } -inline string getDirectoryPath (const QString &dirname) { - ensureDirectoryPathExists(dirname); +inline string getReadableDirectoryPath (const QString &dirname) { return Utils::qStringToLinphoneString(QDir::toNativeSeparators(dirname)); } -inline string getFilePath (const QString &filename) { - ensureFilePathExists(filename); +inline string getWritableDirectoryPath (const QString &dirname) { + ensureDirectoryPathExists(dirname); + return getReadableDirectoryPath(dirname); +} + +inline string getReadableFilePath (const QString &filename) { return Utils::qStringToLinphoneString(QDir::toNativeSeparators(filename)); } +inline string getWritableFilePath (const QString &filename) { + ensureFilePathExists(filename); + return getReadableFilePath(filename); +} + +static QString getAppPackageDataDirpath () { + QDir dir(QCoreApplication::applicationDirPath()); + if (dir.dirName() == "MacOS") { + dir.cdUp(); + dir.cd("Resources"); + } else { + dir.cdUp(); + } + dir.cd("share/linphone"); + return dir.absolutePath(); +} + +static QString getAppPackageMsPluginsDirpath () { + QDir dir(QCoreApplication::applicationDirPath()); + if (dir.dirName() == "MacOS") { + dir.cdUp(); + dir.cd("Resources"); + } else { + dir.cdUp(); + } + dir.cd(MSPLUGINS_DIR); + return dir.absolutePath(); +} + static QString getAppConfigFilepath () { if (QSysInfo::productType() == "macos") return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_CONFIG; @@ -99,6 +134,10 @@ static QString getAppCallHistoryFilepath () { return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_CALL_HISTORY_LIST; } +static QString getAppFactoryConfigFilepath () { + return getAppPackageDataDirpath() + PATH_FACTORY_CONFIG; +} + static QString getAppFriendsFilepath () { return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_FRIENDS_LIST; } @@ -110,46 +149,58 @@ static QString getAppMessageHistoryFilepath () { // ----------------------------------------------------------------------------- string Paths::getAvatarsDirpath () { - return getDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_AVATARS); + return getWritableDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_AVATARS); } string Paths::getCallHistoryFilepath () { - return getFilePath(getAppCallHistoryFilepath()); + return getWritableFilePath(getAppCallHistoryFilepath()); } string Paths::getConfigFilepath (const QString &config_path) { if (!config_path.isEmpty()) - return getFilePath(QFileInfo(config_path).absoluteFilePath()); + return getWritableFilePath(QFileInfo(config_path).absoluteFilePath()); - return getFilePath(getAppConfigFilepath()); + return getWritableFilePath(getAppConfigFilepath()); +} + +string Paths::getFactoryConfigFilepath () { + return getReadableFilePath(getAppFactoryConfigFilepath()); } string Paths::getFriendsListFilepath () { - return getFilePath(getAppFriendsFilepath()); + return getWritableFilePath(getAppFriendsFilepath()); } string Paths::getLogsDirpath () { - return getDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_LOGS); + return getWritableDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_LOGS); } string Paths::getMessageHistoryFilepath () { - return getFilePath(getAppMessageHistoryFilepath()); + return getWritableFilePath(getAppMessageHistoryFilepath()); +} + +string Paths::getPackageDataDirpath () { + return getReadableDirectoryPath(getAppPackageDataDirpath()); +} + +string Paths::getPackageMsPluginsDirpath () { + return getReadableDirectoryPath(getAppPackageMsPluginsDirpath()); } string Paths::getThumbnailsDirpath () { - return getDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_THUMBNAILS); + return getWritableDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_THUMBNAILS); } string Paths::getCapturesDirpath () { - return getDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_CAPTURES); + return getWritableDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_CAPTURES); } string Paths::getZrtpSecretsFilepath () { - return getFilePath(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + PATH_ZRTP_SECRETS); + return getWritableFilePath(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + PATH_ZRTP_SECRETS); } string Paths::getUserCertificatesDirpath () { - return getDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_USER_CERTIFICATES); + return getWritableDirectoryPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + PATH_USER_CERTIFICATES); } // ----------------------------------------------------------------------------- diff --git a/linphone-desktop/src/app/paths/Paths.hpp b/linphone-desktop/src/app/paths/Paths.hpp index 8c2b4c2e1..279cc3e52 100644 --- a/linphone-desktop/src/app/paths/Paths.hpp +++ b/linphone-desktop/src/app/paths/Paths.hpp @@ -36,8 +36,12 @@ namespace Paths { std::string getThumbnailsDirpath (); std::string getUserCertificatesDirpath (); + std::string getPackageDataDirpath (); + std::string getPackageMsPluginsDirpath (); + std::string getCallHistoryFilepath (); std::string getConfigFilepath (const QString &config_path = QString()); + std::string getFactoryConfigFilepath (); std::string getFriendsListFilepath (); std::string getMessageHistoryFilepath (); std::string getZrtpSecretsFilepath (); diff --git a/linphone-desktop/src/components/core/CoreManager.cpp b/linphone-desktop/src/components/core/CoreManager.cpp index 32236d535..fa748ad23 100644 --- a/linphone-desktop/src/components/core/CoreManager.cpp +++ b/linphone-desktop/src/components/core/CoreManager.cpp @@ -25,7 +25,6 @@ #include "CoreManager.hpp" -#include #include #include #include @@ -97,19 +96,9 @@ void CoreManager::setOtherPaths () { } void CoreManager::setResourcesPaths () { - QDir dir(QCoreApplication::applicationDirPath()); - if (dir.dirName() == "MacOS") { - dir.cdUp(); - dir.cd("Resources"); - QDir mspluginsdir(dir); - mspluginsdir.cd("lib/mediastreamer/plugins"); - QDir datadir(dir); - datadir.cd("share"); - - shared_ptr factory = linphone::Factory::get(); - factory->setMspluginsDir(::Utils::qStringToLinphoneString(mspluginsdir.absolutePath())); - factory->setTopResourcesDir(::Utils::qStringToLinphoneString(datadir.absolutePath())); - } + shared_ptr factory = linphone::Factory::get(); + factory->setMspluginsDir(Paths::getPackageMsPluginsDirpath()); + factory->setTopResourcesDir(Paths::getPackageDataDirpath()); } // ----------------------------------------------------------------------------- @@ -122,7 +111,7 @@ void CoreManager::createLinphoneCore (const QString &config_path) { setResourcesPaths(); - m_core = linphone::Factory::get()->createCore(m_handlers, Paths::getConfigFilepath(config_path), ""); + m_core = linphone::Factory::get()->createCore(m_handlers, Paths::getConfigFilepath(config_path), Paths::getFactoryConfigFilepath()); m_core->setVideoDisplayFilter("MSOGL"); m_core->usePreviewWindow(true);