diff --git a/application_info.cmake b/application_info.cmake index 77ae7b09a..617e2a8ad 100644 --- a/application_info.cmake +++ b/application_info.cmake @@ -1,3 +1,6 @@ -set(EXECUTABLE_NAME linphone) -set(APPLICATION_NAME Linphone) set(APPLICATION_DESCRIPTION "A libre SIP client") +set(APPLICATION_NAME Linphone) +set(APPLICATION_URL "https://www.linphone.org") +set(APPLICATION_VENDOR "Belledonne Communications") + +set(EXECUTABLE_NAME linphone) diff --git a/cmake_builder/linphone_package/CMakeLists.txt b/cmake_builder/linphone_package/CMakeLists.txt index 645c16bc4..04beda267 100644 --- a/cmake_builder/linphone_package/CMakeLists.txt +++ b/cmake_builder/linphone_package/CMakeLists.txt @@ -30,6 +30,10 @@ find_package(Git) set(LINPHONE_QML_DIR "${LINPHONE_DESKTOP_DIR}/ui") +# ============================================================================== +# Build package version. +# ============================================================================== + if (GIT_EXECUTABLE) execute_process( COMMAND ${GIT_EXECUTABLE} describe --always @@ -50,17 +54,21 @@ if (SPLITTED_LINPHONE_VERSION_LENGTH GREATER 2) endif () set(PACKAGE_VERSION "${LINPHONE_VERSION}") +# ============================================================================== # Preparing the Linphone SDK bundle. +# ============================================================================== + 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}") file(RENAME "${CMAKE_CURRENT_BINARY_DIR}/desktop" "${LINPHONE_SDK_TMP}") -# Generates a zip archive containing the development files of liblinphone. -macro (add_list_file NAME) +# 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) list(APPEND LIST_FILES "${LINPHONE_SDK_TMP}/${NAME}.list") endmacro () + if (WIN32) set(LIBDIR "bin") set(LIBPREFIX "") @@ -72,56 +80,58 @@ elseif (APPLE) set(LIBEXT "dylib") set(PLUGINEXT "so") endif () + set(LIST_FILES ) -add_list_file(bctoolbox) -add_list_file(bellesip) -add_list_file(ortp) -add_list_file(ms2) -add_list_file(ms2plugins) -add_list_file(linphone) +add_sdk_list_file(bctoolbox) +add_sdk_list_file(bellesip) +add_sdk_list_file(ortp) +add_sdk_list_file(ms2) +add_sdk_list_file(ms2plugins) +add_sdk_list_file(linphone) if (WIN32) - add_list_file(sqlite3) - add_list_file(xml2) - add_list_file(zlib) + add_sdk_list_file(sqlite3) + add_sdk_list_file(xml2) + add_sdk_list_file(zlib) endif () if (ENABLE_UNIT_TESTS) - add_list_file(bcunit) + add_sdk_list_file(bcunit) endif () if (ENABLE_VCARD) - add_list_file(vcard) + add_sdk_list_file(vcard) endif () if (ENABLE_BV16) - add_list_file(bv16) + add_sdk_list_file(bv16) endif () if (ENABLE_GSM) - add_list_file(gsm) + add_sdk_list_file(gsm) endif () if (ENABLE_OPUS) - add_list_file(opus) + add_sdk_list_file(opus) endif () if (ENABLE_SPEEX) - add_list_file(speex) + add_sdk_list_file(speex) endif () if (ENABLE_MBEDTLS) - add_list_file(mbedtls) + add_sdk_list_file(mbedtls) endif () if (ENABLE_POLARSSL) - add_list_file(polarssl) + add_sdk_list_file(polarssl) endif () if (ENABLE_SRTP) - add_list_file(srtp) + add_sdk_list_file(srtp) endif () if (ENABLE_ZRTP) - add_list_file(bzrtp) + add_sdk_list_file(bzrtp) endif () if (ENABLE_FFMPEG) - add_list_file(ffmpeg) + add_sdk_list_file(ffmpeg) endif () file(WRITE "${LINPHONE_SDK_TMP}/${EXECUTABLE_NAME}-sdk.list" "") -foreach (_file ${LIST_FILES}) - file(READ "${_file}" _content) - file(APPEND "${LINPHONE_SDK_TMP}/${EXECUTABLE_NAME}-sdk.list" "${_content}\n") +foreach (FILE ${LIST_FILES}) + file(READ "${FILE}" CONTENT) + file(APPEND "${LINPHONE_SDK_TMP}/${EXECUTABLE_NAME}-sdk.list" "${CONTENT}\n") endforeach () + if (WIN32) find_program(7Z_PROGRAM 7z PATHS "$ENV{ProgramFiles}/7-Zip") if (7Z_PROGRAM) @@ -140,6 +150,10 @@ elseif (APPLE) ) endif () +# ============================================================================== +# Specific deployment. +# ============================================================================== + if (WIN32) execute_process( COMMAND windeployqt "${LINPHONE_OUTPUT_DIR}/bin/${EXECUTABLE_NAME}.exe" "--qmldir" "${LINPHONE_QML_DIR}" @@ -147,11 +161,11 @@ if (WIN32) file(GLOB SHARE_CONTENT RELATIVE "${LINPHONE_OUTPUT_DIR}" "${LINPHONE_OUTPUT_DIR}/share/*") list(REMOVE_ITEM SHARE_CONTENT "share/belr" "share/Belr" "share/images" "share/${EXECUTABLE_NAME}" "share/${APPLICATION_NAME}" "share/sounds") - foreach (item IN LISTS SHARE_CONTENT) - list(APPEND SHARE_CONTENT_EXCLUDE PATTERN "${item}" EXCLUDE) + foreach (ITEM IN LISTS SHARE_CONTENT) + list(APPEND SHARE_CONTENT_EXCLUDE PATTERN "${ITEM}" EXCLUDE) endforeach () - install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/" + install(DIRECTORY "${LINPHONE_OUTPUT_DIR}" DESTINATION "." PATTERN "bin/*_tester.exe" EXCLUDE PATTERN "bin/belcard*.exe" EXCLUDE @@ -177,12 +191,12 @@ if (WIN32) ) endif () elseif (APPLE) - configure_file("macos/Info.plist.in" "${APPLICATION_NAME}.app/Contents/Info.plist" @ONLY) - configure_file("macos/linphone.icns" "${APPLICATION_NAME}.app/Contents/Resources/${EXECUTABLE_NAME}.icns" COPYONLY) + 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") - foreach (_library ${SHARED_LIBRARIES}) - file(COPY "${_library}" DESTINATION "${APPLICATION_NAME}.app/Contents/Frameworks") + foreach (LIBRARY ${SHARED_LIBRARIES}) + file(COPY "${LIBRARY}" DESTINATION "${APPLICATION_NAME}.app/Contents/Frameworks") endforeach () find_program(DEPLOYQT_PROGRAM macdeployqt) @@ -206,22 +220,22 @@ elseif (APPLE) file(COPY "${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}") + 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}") endforeach () if (LINPHONE_BUILDER_SIGNING_IDENTITY) file(GLOB FRAMEWORKS_NAMES "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app/Contents/Frameworks/*") - foreach (_framework ${FRAMEWORKS_NAMES}) - execute_process(COMMAND "codesign" "--verbose" "-s" "${LINPHONE_BUILDER_SIGNING_IDENTITY}" "${_framework}") + foreach (FRAMEWORK ${FRAMEWORKS_NAMES}) + execute_process(COMMAND "codesign" "--verbose" "-s" "${LINPHONE_BUILDER_SIGNING_IDENTITY}" "${FRAMEWORK}") endforeach () file(GLOB PLUGINS_NAMES "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app/Contents/PlugIns/*") - foreach (_plugin ${PLUGINS_NAMES}) - file(GLOB PLUGINS_FILES "${_plugin}/*") - foreach (_pluginfile ${PLUGINS_FILES}) - execute_process(COMMAND "codesign" "--verbose" "-s" "${LINPHONE_BUILDER_SIGNING_IDENTITY}" "${_pluginfile}") + foreach (PLUGIN ${PLUGINS_NAMES}) + file(GLOB PLUGINS_FILES "${PLUGIN}/*") + foreach (PLUGIN_FILE ${PLUGINS_FILES}) + execute_process(COMMAND "codesign" "--verbose" "-s" "${LINPHONE_BUILDER_SIGNING_IDENTITY}" "${PLUGIN_FILE}") endforeach () endforeach () execute_process(COMMAND "codesign" "--verbose" "-s" "${LINPHONE_BUILDER_SIGNING_IDENTITY}" "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app") @@ -229,7 +243,7 @@ elseif (APPLE) install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app" DESTINATION "." USE_SOURCE_PERMISSIONS) - configure_file("macos/packaging.cmake.in" "packaging.cmake" @ONLY) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/packaging.cmake.in" "packaging.cmake" @ONLY) install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/packaging.cmake") endif () @@ -254,8 +268,12 @@ if (MSVC) endif () endif () +# ============================================================================== +# CPack. +# ============================================================================== + set(CPACK_PACKAGE_NAME "${APPLICATION_NAME}") -set(CPACK_PACKAGE_VENDOR "Belledonne communications") +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) @@ -274,28 +292,38 @@ if (APPLE) endif () if (WIN32) - # Use magic `NSIS.template.in` template from the current source directory to force uninstallation - # and ensure that linphone is not running before installation. - set(CPACK_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/windows") set(CPACK_GENERATOR "NSIS") set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\windows\\\\banner.bmp") set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${LINPHONE_GIT_REVISION}-win32") - set(CPACK_NSIS_MUI_ICON "${LINPHONE_DESKTOP_DIR}/assets/icon.ico") - set(CPACK_NSIS_MUI_UNIICON "${LINPHONE_DESKTOP_DIR}/assets/icon.ico") - set(CPACK_NSIS_DISPLAY_NAME "${APPLICATION_NAME}") - if (LINPHONE_MICRO_VERSION) - set(CPACK_NSIS_PACKAGE_NAME "${APPLICATION_NAME} ${LINPHONE_MAJOR_VERSION}.${LINPHONE_MINOR_VERSION}.${LINPHONE_MICRO_VERSION}") - else () - set(CPACK_NSIS_PACKAGE_NAME "${APPLICATION_NAME} ${LINPHONE_MAJOR_VERSION}.${LINPHONE_MINOR_VERSION}") - endif () - set(CPACK_NSIS_URL_INFO_ABOUT "http://www.linphone.org/") - file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}" DOS_STYLE_BINARY_DIR) - string(REPLACE "\\" "\\\\" ESCAPED_DOS_STYLE_BINARY_DIR "${DOS_STYLE_BINARY_DIR}") - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/windows/install.nsi.in" "${CMAKE_CURRENT_BINARY_DIR}/install.nsi" @ONLY) - set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "!include \\\"${ESCAPED_DOS_STYLE_BINARY_DIR}\\\\install.nsi\\\"") - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/windows/uninstall.nsi.in" "${CMAKE_CURRENT_BINARY_DIR}/uninstall.nsi" COPYONLY) - set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "!include \\\"${ESCAPED_DOS_STYLE_BINARY_DIR}\\\\uninstall.nsi\\\"") + string(COMPARE EQUAL ${CPACK_GENERATOR} "NSIS" IS_NSIS) + if (${IS_NSIS}) + set(PACKAGE_EXT "exe") + + # Use magic `NSIS.template.in` template from the current source directory to force uninstallation + # and ensure that linphone is not running before installation. + set(CPACK_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/windows") + + set(CPACK_NSIS_MUI_ICON "${LINPHONE_DESKTOP_DIR}/assets/icon.ico") + set(CPACK_NSIS_MUI_UNIICON "${LINPHONE_DESKTOP_DIR}/assets/icon.ico") + set(CPACK_NSIS_DISPLAY_NAME "${APPLICATION_NAME}") + if (LINPHONE_MICRO_VERSION) + set(CPACK_NSIS_PACKAGE_NAME "${APPLICATION_NAME} ${LINPHONE_MAJOR_VERSION}.${LINPHONE_MINOR_VERSION}.${LINPHONE_MICRO_VERSION}") + else () + set(CPACK_NSIS_PACKAGE_NAME "${APPLICATION_NAME} ${LINPHONE_MAJOR_VERSION}.${LINPHONE_MINOR_VERSION}") + endif () + set(CPACK_NSIS_URL_INFO_ABOUT ${APPLICATION_URL}) + + file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}" DOS_STYLE_BINARY_DIR) + string(REPLACE "\\" "\\\\" ESCAPED_DOS_STYLE_BINARY_DIR "${DOS_STYLE_BINARY_DIR}") + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/windows/install.nsi.in" "${CMAKE_CURRENT_BINARY_DIR}/install.nsi" @ONLY) + set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "!include \\\"${ESCAPED_DOS_STYLE_BINARY_DIR}\\\\install.nsi\\\"") + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/windows/uninstall.nsi.in" "${CMAKE_CURRENT_BINARY_DIR}/uninstall.nsi" COPYONLY) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "!include \\\"${ESCAPED_DOS_STYLE_BINARY_DIR}\\\\uninstall.nsi\\\"") + else () + set(PACKAGE_EXT "msi") + # TODO: Deal with msi packages. + endif () # Sign the installer. set(TIMESTAMP_URL "http://timestamp.verisign.com/scripts/timestamp.dll") diff --git a/cmake_builder/linphone_package/macos/Info.plist.in b/cmake_builder/linphone_package/macos/Info.plist.in index 5011cc30b..ee84b69f1 100644 --- a/cmake_builder/linphone_package/macos/Info.plist.in +++ b/cmake_builder/linphone_package/macos/Info.plist.in @@ -11,7 +11,7 @@ CFBundleExecutable @EXECUTABLE_NAME@ CFBundleGetInfoString - @PACKAGE_VERSION@, (C) 2011-2018 The linphone team http://www.linphone.org + @PACKAGE_VERSION@, (C) 2011-2018 @APPLICATION_NAME@ @APPLICATION_URL@ CFBundleIconFile linphone.icns CFBundleIdentifier @@ -27,7 +27,7 @@ CFBundleVersion @PACKAGE_VERSION@ NSHumanReadableCopyright - Copyright 2011-2018 Belledonne Communications + Copyright 2011-2018 @APPLICATION_VENDOR@ LSMinimumSystemVersion @CMAKE_OSX_DEPLOYMENT_TARGET@ NSAppSleepDisabled diff --git a/cmake_builder/linphone_package/windows/packaging.cmake.in b/cmake_builder/linphone_package/windows/packaging.cmake.in index b3ad94d90..db639153a 100644 --- a/cmake_builder/linphone_package/windows/packaging.cmake.in +++ b/cmake_builder/linphone_package/windows/packaging.cmake.in @@ -22,13 +22,13 @@ if (NOT "${CMAKE_INSTALL_PREFIX}" MATCHES .*/_CPack_Packages/.*) execute_process( - COMMAND ${CMAKE_CPACK_COMMAND} -G NSIS + COMMAND ${CMAKE_CPACK_COMMAND} -G ${CPACK_GENERATOR} RESULT_VARIABLE CPACK_COMMAND_SUCCESS ) if (@PERFORM_SIGNING@) execute_process( - COMMAND @SIGNTOOL_COMMAND@ @CMAKE_CURRENT_BINARY_DIR@/@CPACK_PACKAGE_FILE_NAME@.exe + COMMAND @SIGNTOOL_COMMAND@ @CMAKE_CURRENT_BINARY_DIR@/@CPACK_PACKAGE_FILE_NAME@.@PACKAGE_EXT@ ) endif () endif ()