diff --git a/cmake_builder/additional_steps.cmake b/cmake_builder/additional_steps.cmake index 4db83c31d..c85fa0167 100644 --- a/cmake_builder/additional_steps.cmake +++ b/cmake_builder/additional_steps.cmake @@ -29,3 +29,30 @@ if(LINPHONE_BUILDER_TARGET STREQUAL linphoneqt AND WIN32) add_custom_command(OUTPUT "${SHORTCUT_PATH}" COMMAND "cscript" "${CMAKE_CURRENT_BINARY_DIR}/winshortcut.vbs") add_custom_target(linphoneqt_winshortcut ALL DEPENDS "${SHORTCUT_PATH}" TARGET_linphone_builder) endif() + +# Packaging +if(ENABLE_PACKAGING) + get_cmake_property(_varnames VARIABLES) + set(ENABLE_VARIABLES ) + foreach(_varname ${_varnames}) + if(_varname MATCHES "^ENABLE_.*") + list(APPEND ENABLE_VARIABLES -D${_varname}=${${_varname}}) + endif() + endforeach() + + if(LINPHONE_BUILDER_TARGET STREQUAL linphoneqt) + # Linphone and linphone SDK packages + linphone_builder_apply_flags() + linphone_builder_set_ep_directories(linphone_package) + linphone_builder_expand_external_project_vars() + ExternalProject_Add(TARGET_linphone_package + DEPENDS TARGET_linphone_builder + TMP_DIR ${ep_tmp} + BINARY_DIR ${ep_build} + SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/linphone_package" + DOWNLOAD_COMMAND "" + CMAKE_GENERATOR ${CMAKE_GENERATOR} + CMAKE_ARGS ${LINPHONE_BUILDER_EP_ARGS} -DCMAKE_INSTALL_PREFIX=${LINPHONE_BUILDER_WORK_DIR}/PACKAGE -DTOOLS_DIR=${CMAKE_BINARY_DIR}/programs -DLINPHONE_OUTPUT_DIR=${CMAKE_INSTALL_PREFIX} -DLINPHONE_DESKTOP_DIR=${CMAKE_CURRENT_LIST_DIR}/../linphone-desktop -DLINPHONE_SOURCE_DIR=${EP_linphone_SOURCE_DIR} ${ENABLE_VARIABLES} -DOPENH264_VERSION=${OPENH264_VERSION} + ) + endif() +endif() diff --git a/cmake_builder/linphone_package/CMakeLists.txt b/cmake_builder/linphone_package/CMakeLists.txt new file mode 100644 index 000000000..170578ac0 --- /dev/null +++ b/cmake_builder/linphone_package/CMakeLists.txt @@ -0,0 +1,339 @@ +############################################################################ +# CMakeLists.txt +# 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. +# +############################################################################ + +cmake_minimum_required(VERSION 3.0) +project(LINPHONE_PACKAGE) # Dummy project + +find_package(Linphone REQUIRED) +find_package(Git) + +set(LINPHONE_QML_DIR "${LINPHONE_DESKTOP_DIR}/ui") + +if(WIN32) + set(WINDEPLOYQT_PROGRAM windeployqt) +endif() + +if(GIT_EXECUTABLE) + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --always + OUTPUT_VARIABLE LINPHONE_GIT_REVISION + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${LINPHONE_SOURCE_DIR} + ) +else() + set(LINPHONE_GIT_REVISION "0.0.0") +endif() +string(REGEX REPLACE "([0-9.]+)-?.*" "\\1" LINPHONE_VERSION "${LINPHONE_GIT_REVISION}") +string(REPLACE "." ";" SPLITTED_LINPHONE_VERSION ${LINPHONE_VERSION}) +list(GET SPLITTED_LINPHONE_VERSION 0 LINPHONE_MAJOR_VERSION) +list(GET SPLITTED_LINPHONE_VERSION 1 LINPHONE_MINOR_VERSION) +list(GET SPLITTED_LINPHONE_VERSION 2 LINPHONE_MICRO_VERSION) +set(PACKAGE_VERSION "${LINPHONE_VERSION}") + +# Preparing the Linphone SDK bundle +set(LINPHONE_SDK_TMP "${CMAKE_CURRENT_BINARY_DIR}/linphone-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}") +if(APPLE) + set(RPATH_CHANGE_CMDS + -change /opt/local/lib/libintl.8.dylib @rpath/libintl.8.dylib + -change /opt/local/lib/libiconv.2.dylib @rpath/libiconv.2.dylib + ) + file(COPY + /opt/local/lib/libintl.8.dylib + /opt/local/lib/libintl.dylib + /opt/local/lib/libiconv.dylib + /opt/local/lib/libiconv.2.dylib + DESTINATION ${LINPHONE_SDK_TMP}/lib + ) + execute_process(COMMAND install_name_tool + -id @rpath/libintl.8.dylib + -change /opt/local/lib/libiconv.2.dylib @rpath/libiconv.2.dylib + ${LINPHONE_SDK_TMP}/lib/libintl.8.dylib + ) + execute_process(COMMAND install_name_tool + -id @rpath/libiconv.2.dylib + ${LINPHONE_SDK_TMP}/lib/libiconv.2.dylib + ) + execute_process(COMMAND install_name_tool + -change /opt/local/lib/libintl.8.dylib @rpath/libintl.8.dylib + -change /opt/local/lib/libiconv.2.dylib @rpath/libiconv.2.dylib + ${LINPHONE_SDK_TMP}/lib/liblinphone.dylib + ) +endif() + +# Generates a zip archive containing the development files of liblinphone +macro(add_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 "") + set(LIBEXT "dll") + set(PLUGINEXT "dll") +elseif(APPLE) + set(LIBDIR "lib") + set(LIBPREFIX "lib") + set(LIBEXT "dylib") + set(PLUGINEXT "so") +endif() +set(LIST_FILES ) +add_list_file(bctoolbox) +add_list_file(antlr3c) +add_list_file(bellesip) +add_list_file(ortp) +add_list_file(ms2) +add_list_file(ms2plugins) +add_list_file(linphone) +if(WIN32) + add_list_file(sqlite3) + add_list_file(xml2) + add_list_file(zlib) +endif() +if(ENABLE_UNIT_TESTS) + add_list_file(bcunit) +endif() +if(ENABLE_VCARD) + add_list_file(vcard) +endif() +if(ENABLE_BV16) + add_list_file(bv16) +endif() +if(ENABLE_GSM) + add_list_file(gsm) +endif() +if(ENABLE_OPUS) + add_list_file(opus) +endif() +if(ENABLE_SPEEX) + add_list_file(speex) +endif() +if(ENABLE_MBEDTLS) + add_list_file(mbedtls) +endif() +if(ENABLE_POLARSSL) + add_list_file(polarssl) +endif() +if(ENABLE_SRTP) + add_list_file(srtp) +endif() +if(ENABLE_ZRTP) + add_list_file(bzrtp) +endif() +if(ENABLE_FFMPEG) + add_list_file(ffmpeg) +endif() +if(ENABLE_OPENH264) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/README.openh264.txt.in" "${LINPHONE_SDK_TMP}/README.openh264.txt" @ONLY) + add_list_file(openh264) +endif() +file(WRITE "${LINPHONE_SDK_TMP}/linphone-sdk.list" "") +foreach(_file ${LIST_FILES}) + file(READ "${_file}" _content) + file(APPEND "${LINPHONE_SDK_TMP}/linphone-sdk.list" "${_content}\n") +endforeach() +if(WIN32) + find_program(7Z_PROGRAM 7z.exe) + if(7Z_PROGRAM) + execute_process( + COMMAND ${7Z_PROGRAM} a -tzip ${CMAKE_BINARY_DIR}/linphone-sdk-${LINPHONE_GIT_REVISION}-win32.zip @linphone-sdk.list + WORKING_DIRECTORY ${LINPHONE_SDK_TMP} + ) + else() + message(WARNING "7z has not been found, cannot generate the SDK!") + endif() +elseif(APPLE) + execute_process( + COMMAND rm -rf "${CMAKE_BINARY_DIR}/linphone-sdk-${LINPHONE_GIT_REVISION}-mac.zip" + COMMAND zip -ry "${CMAKE_BINARY_DIR}/linphone-sdk-${LINPHONE_GIT_REVISION}-mac.zip" . -i "@linphone-sdk.list" + WORKING_DIRECTORY ${LINPHONE_SDK_TMP} + ) +endif() + +if(WIN32) + execute_process( + COMMAND ${WINDEPLOYQT_PROGRAM} "${LINPHONE_OUTPUT_DIR}/bin/linphone.exe" "--qmldir" "${LINPHONE_QML_DIR}" + ) + + install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/" + DESTINATION "." + COMPONENT "linphone_base" + PATTERN "doc" EXCLUDE + PATTERN "etc" EXCLUDE + PATTERN "include" EXCLUDE + PATTERN "lib/cmake" EXCLUDE + PATTERN "lib/mediastreamer" EXCLUDE + PATTERN "lib/pkgconfig" EXCLUDE + PATTERN "lib/*.a" EXCLUDE + PATTERN "lib/*.def" EXCLUDE + PATTERN "lib/*.exp" EXCLUDE + PATTERN "lib/*.la" EXCLUDE + PATTERN "lib/*.lib" EXCLUDE + PATTERN "man" EXCLUDE + PATTERN "manifest" EXCLUDE + PATTERN "share/aclocal" EXCLUDE + PATTERN "share/BCUnit" EXCLUDE + PATTERN "share/java" EXCLUDE + PATTERN "src" EXCLUDE + PATTERN "linphone.lnk" EXCLUDE + PATTERN "bin/openh264.dll" EXCLUDE + PATTERN "share/*/cmake" EXCLUDE + ) + + if(ENABLE_OPENH264) + # Include bunzip2.exe and bzip2.dll to be able to extract the openh264 file downloaded from Cisco + install(DIRECTORY "${TOOLS_DIR}/" + DESTINATION "bin" + COMPONENT "msopenh264" + FILES_MATCHING PATTERN "b*zip2.*" + ) + install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/lib/mediastreamer/plugins/" + DESTINATION "lib/mediastreamer/plugins" + COMPONENT "msopenh264" + FILES_MATCHING PATTERN "libmsopenh264.*" + ) + endif() + + install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/lib/mediastreamer/plugins/" + DESTINATION "lib/mediastreamer/plugins" + FILES_MATCHING PATTERN "libmssilk.*" + ) +elseif(APPLE) + find_program(MAC_BUNDLER gtk-mac-bundler) + if(NOT MAC_BUNDLER) + message(FATAL_ERROR "Could not find gtk-mac-bundler executable!") + endif() + find_program(PATCH_PROGRAM patch) + if(NOT PATCH_PROGRAM) + message(FATAL_ERROR "Could not find patch executable!") + endif() + configure_file("${LINPHONE_SOURCE_DIR}/build/macos/Info-linphone.plist.in" "mac-bundler/Info-linphone.plist" @ONLY) + configure_file("${LINPHONE_SOURCE_DIR}/build/macos/environment.sh" "mac-bundler/environment.sh" COPYONLY) + configure_file("${LINPHONE_SOURCE_DIR}/gtk/gtkrc.mac" "mac-bundler/gtkrc" COPYONLY) + configure_file("${LINPHONE_SOURCE_DIR}/pixmaps/linphone.icns" "mac-bundler/linphone.icns" COPYONLY) + configure_file("mac-bundler/linphone.bundle" "mac-bundler/linphone.bundle" COPYONLY) # This file has to be different than the one in the linphone source code because of different file access paths + configure_file("mac-bundler/pkg-scripts/postinstall.in" "mac-bundler/pkg-scripts/postinstall" @ONLY) + configure_file("mac-bundler/call-bundler.cmake.in" "mac-bundler/call-bundler.cmake") + install(SCRIPT "${CMAKE_BINARY_DIR}/mac-bundler/call-bundler.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") + # Starting with Visual Studio 2015 (MSVC_VERSION==14) the msvcr dll has been renamed to vcruntime + find_file(VCRUNTIME_LIB "vcruntime${MSVC_VERSION}0.dll" PATHS "C:/Windows/System32") + if(NOT VCRUNTIME_LIB) + find_file(VCRUNTIME_LIB "msvcr${MSVC_VERSION}0.dll" PATHS "C:/Windows/System32") + endif() + install(FILES ${MSVCP_LIB} ${UCRTBASE_LIB} ${VCRUNTIME_LIB} DESTINATION "bin") + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + find_file(MSVCPD_LIB "msvcp${MSVC_VERSION}0d.dll" PATHS "C:/Windows/System32") + find_file(UCRTBASED_LIB "ucrtbased.dll" PATHS "C:/Windows/System32") + find_file(VCRUNTIMED_LIB "vcruntime${MSVC_VERSION}0d.dll" PATHS "C:/Windows/System32") + if(NOT VCRUNTIMED_LIB) + find_file(VCRUNTIMED_LIB "msvcr${MSVC_VERSION}0d.dll" PATHS "C:/Windows/System32") + endif() + install(FILES ${MSVCPD_LIB} ${UCRTBASED_LIB} ${VCRUNTIMED_LIB} DESTINATION "bin") + endif() +endif() + +set(CPACK_PACKAGE_NAME "Linphone") +set(CPACK_PACKAGE_VENDOR "Belledonne communications") +set(CPACK_PACKAGE_VERSION_MAJOR ${LINPHONE_MAJOR_VERSION}) +set(CPACK_PACKAGE_VERSION_MINOR ${LINPHONE_MINOR_VERSION}) +set(CPACK_PACKAGE_VERSION_PATCH ${LINPHONE_MICRO_VERSION}) +set(CPACK_PACKAGE_EXECUTABLES "linphone;Linphone") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "Linphone") +set(CPACK_RESOURCE_FILE_LICENSE "${LINPHONE_SOURCE_DIR}/COPYING") + +if(WIN32) + set(CPACK_COMPONENT_LINPHONE_BASE_DISPLAY_NAME "Linphone") + set(CPACK_COMPONENT_LINPHONE_BASE_DESCRIPTION "Minimal installation of Linphone") + set(CPACK_COMPONENT_LINPHONE_BASE_REQUIRED True) + if(ENABLE_OPENH264) + set(CPACK_COMPONENT_MSOPENH264_DISPLAY_NAME "Cisco's OpenH264 codec") + set(CPACK_COMPONENT_MSOPENH264_DESCRIPTION "Download OpenH264 Video Codec provided by Cisco Systems, Inc.") + set(CPACK_COMPONENT_MSOPENH264_DISABLED True) + endif() +endif() + +if(WIN32) + # Use 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}") + set(CPACK_GENERATOR "NSIS") + set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\linphone-banner.bmp") + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${LINPHONE_GIT_REVISION}-win32") + set(CPACK_NSIS_MUI_ICON "${LINPHONE_DESKTOP_DIR}/linphone.ico") + set(CPACK_NSIS_MUI_UNIICON "${LINPHONE_DESKTOP_DIR}/linphone.ico") + set(CPACK_NSIS_DISPLAY_NAME "Linphone") + set(CPACK_NSIS_PACKAGE_NAME "Linphone ${LINPHONE_MAJOR_VERSION}.${LINPHONE_MINOR_VERSION}.${LINPHONE_MICRO_VERSION}") + set(CPACK_NSIS_URL_INFO_ABOUT "http://www.linphone.org/") + + file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" DOS_STYLE_SOURCE_DIR) + string(REPLACE "\\" "\\\\" ESCAPED_DOS_STYLE_SOURCE_DIR "${DOS_STYLE_SOURCE_DIR}") + 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}/uninstall.nsi" "${CMAKE_CURRENT_BINARY_DIR}/uninstall.nsi" COPYONLY) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "!include \\\"${ESCAPED_DOS_STYLE_BINARY_DIR}\\\\uninstall.nsi\\\"") + if(ENABLE_OPENH264) + # Add NSI instructions to download the openh264 codec from Cisco's servers whether msopenh264 has been installed + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/openh264-install.nsi.in" "${CMAKE_CURRENT_BINARY_DIR}/openh264-install.nsi" @ONLY) + set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "!include \\\"${ESCAPED_DOS_STYLE_BINARY_DIR}\\\\openh264-install.nsi\\\"") + + # Add NSI instructions to delete the openh264 codecs while uninstalling Linphone + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}\n!include \\\"${ESCAPED_DOS_STYLE_SOURCE_DIR}\\\\openh264-uninstall.nsi\\\"") + endif() + + # Sign the installer + set(TIMESTAMP_URL "http://timestamp.verisign.com/scripts/timestamp.dll") + set(PFX_FILE "${CMAKE_CURRENT_SOURCE_DIR}/sign/linphone.pfx") + set(PASSPHRASE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/sign/passphrase.txt") + get_filename_component(WINSDK_DIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]" REALPATH CACHE) + find_package(PythonInterp) + find_program(SIGNTOOL signtool PATHS ${WINSDK_DIR}/bin) + set(SIGNTOOL_COMMAND "${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/signtool.py") + set(PERFORM_SIGNING 0) + if(EXISTS ${PFX_FILE}) + if(SIGNTOOL) + set(SIGNTOOL_COMMAND "${SIGNTOOL_COMMAND} signtool sign /f ${PFX_FILE}") + set(SIGNTOOL_COMMAND "${SIGNTOOL_COMMAND} /p ${PASSPHRASE_FILE}") + set(SIGNTOOL_COMMAND "${SIGNTOOL_COMMAND} /t ${TIMESTAMP_URL}") + message("Found signtool and certificate ${PFX_FILE}") + set(PERFORM_SIGNING 1) + else() + message(STATUS "Could not find signtool! Code signing disabled (${SIGNTOOL})") + endif() + else() + message(STATUS "No signtool certificate found; assuming development machine (${PFX_FILE})") + endif() + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/WindowsPackaging.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/WindowsPackaging.cmake" @ONLY) + install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/WindowsPackaging.cmake") +endif() +include(CPack) diff --git a/cmake_builder/linphone_package/NSIS.template.in b/cmake_builder/linphone_package/NSIS.template.in new file mode 100644 index 000000000..138acd94c --- /dev/null +++ b/cmake_builder/linphone_package/NSIS.template.in @@ -0,0 +1,982 @@ +; CPack install script designed for a nmake build + +;-------------------------------- +; You must define these values + + !define VERSION "@CPACK_PACKAGE_VERSION@" + !define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" + !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" + +;-------------------------------- +;Variables + + Var MUI_TEMP + Var STARTMENU_FOLDER + Var SV_ALLUSERS + Var START_MENU + Var DO_NOT_ADD_TO_PATH + Var ADD_TO_PATH_ALL_USERS + Var ADD_TO_PATH_CURRENT_USER + Var INSTALL_DESKTOP + Var IS_DEFAULT_INSTALLDIR +;-------------------------------- +;Include Modern UI + + !include "MUI.nsh" + + ;Default installation folder + InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + +;-------------------------------- +;General + + ;Name and file + Name "@CPACK_NSIS_PACKAGE_NAME@" + OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" + + ;Set compression + SetCompressor @CPACK_NSIS_COMPRESSOR@ + + ;Require administrator access + RequestExecutionLevel admin + +@CPACK_NSIS_DEFINES@ + + !include Sections.nsh + +;--- Component support macros: --- +; The code for the add/remove functionality is from: +; http://nsis.sourceforge.net/Add/Remove_Functionality +; It has been modified slightly and extended to provide +; inter-component dependencies. +Var AR_SecFlags +Var AR_RegFlags +@CPACK_NSIS_SECTION_SELECTED_VARS@ + +; Loads the "selected" flag for the section named SecName into the +; variable VarName. +!macro LoadSectionSelectedIntoVar SecName VarName + SectionGetFlags ${${SecName}} $${VarName} + IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits +!macroend + +; Loads the value of a variable... can we get around this? +!macro LoadVar VarName + IntOp $R0 0 + $${VarName} +!macroend + +; Sets the value of a variable +!macro StoreVar VarName IntValue + IntOp $${VarName} 0 + ${IntValue} +!macroend + +!macro InitSection SecName + ; This macro reads component installed flag from the registry and + ;changes checked state of the section on the components page. + ;Input: section index constant name specified in Section command. + + ClearErrors + ;Reading component status from registry + ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" + IfErrors "default_${SecName}" + ;Status will stay default if registry value not found + ;(component was never installed) + IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags + IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off + IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit + + ; Note whether this component was installed before + !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags + IntOp $R0 $AR_RegFlags & $AR_RegFlags + + ;Writing modified flags + SectionSetFlags ${${SecName}} $AR_SecFlags + + "default_${SecName}:" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected +!macroend + +!macro FinishSection SecName + ; This macro reads section flag set by user and removes the section + ;if it is not selected. + ;Then it writes component installed flag to registry + ;Input: section index constant name specified in Section command. + + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags + ;Checking lowest bit: + IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} + IntCmp $AR_SecFlags 1 "leave_${SecName}" + ;Section is not selected: + ;Calling Section uninstall macro and writing zero installed flag + !insertmacro "Remove_${${SecName}}" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 0 + Goto "exit_${SecName}" + + "leave_${SecName}:" + ;Section is selected: + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 1 + + "exit_${SecName}:" +!macroend + +!macro RemoveSection_CPack SecName + ; This macro is used to call section's Remove_... macro + ;from the uninstaller. + ;Input: section index constant name specified in Section command. + + !insertmacro "Remove_${${SecName}}" +!macroend + +; Determine whether the selection of SecName changed +!macro MaybeSelectionChanged SecName + !insertmacro LoadVar ${SecName}_selected + SectionGetFlags ${${SecName}} $R1 + IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits + + ; See if the status has changed: + IntCmp $R0 $R1 "${SecName}_unchanged" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected + + IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" + !insertmacro "Deselect_required_by_${SecName}" + goto "${SecName}_unchanged" + + "${SecName}_was_selected:" + !insertmacro "Select_${SecName}_depends" + + "${SecName}_unchanged:" +!macroend +;--- End of Add/Remove macros --- + +;-------------------------------- +;Interface Settings + + !define MUI_HEADERIMAGE + !define MUI_ABORTWARNING + +;-------------------------------- +; path functions + +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 + +;---------------------------------------- +; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" +;---------------------------------------- +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 +;==================================================== +; get_NT_environment +; Returns: the selected environment +; Output : head of the stack +;==================================================== +!macro select_NT_profile UN +Function ${UN}select_NT_profile + StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single + DetailPrint "Selected environment for all users" + Push "all" + Return + environment_single: + DetailPrint "Selected environment for current user only." + Push "current" + Return +FunctionEnd +!macroend +!insertmacro select_NT_profile "" +!insertmacro select_NT_profile "un." +;---------------------------------------------------- +!define NT_current_env 'HKCU "Environment"' +!define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + +!ifndef WriteEnvStr_RegKey + !ifdef ALL_USERS + !define WriteEnvStr_RegKey \ + 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + !else + !define WriteEnvStr_RegKey 'HKCU "Environment"' + !endif +!endif + +; AddToPath - Adds the given dir to the search path. +; Input - head of the stack +; Note - Win9x systems requires reboot + +Function AddToPath + Exch $0 + Push $1 + Push $2 + Push $3 + + # don't add if the path doesn't exist + IfFileExists "$0\*.*" "" AddToPath_done + + ReadEnvStr $1 PATH + ; if the path is too long for a NSIS variable NSIS will return a 0 + ; length string. If we find that, then warn and skip any path + ; modification as it will trash the existing path. + StrLen $2 $1 + IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done + CheckPathLength_ShowPathWarning: + Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!" + Goto AddToPath_done + CheckPathLength_Done: + Push "$1;" + Push "$0;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$0\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + GetFullPathName /SHORT $3 $0 + Push "$1;" + Push "$3;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$3\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + + Call IsNT + Pop $1 + StrCmp $1 1 AddToPath_NT + ; Not on NT + StrCpy $1 $WINDIR 2 + FileOpen $1 "$1\autoexec.bat" a + FileSeek $1 -1 END + FileReadByte $1 $2 + IntCmp $2 26 0 +2 +2 # DOS EOF + FileSeek $1 -1 END # write over EOF + FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n" + FileClose $1 + SetRebootFlag true + Goto AddToPath_done + + AddToPath_NT: + StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey + ReadRegStr $1 ${NT_current_env} "PATH" + Goto DoTrim + ReadAllKey: + ReadRegStr $1 ${NT_all_env} "PATH" + DoTrim: + StrCmp $1 "" AddToPath_NTdoIt + Push $1 + Call Trim + Pop $1 + StrCpy $0 "$1;$0" + AddToPath_NTdoIt: + StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey + WriteRegExpandStr ${NT_current_env} "PATH" $0 + Goto DoSend + WriteAllKey: + WriteRegExpandStr ${NT_all_env} "PATH" $0 + DoSend: + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + AddToPath_done: + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + + +; RemoveFromPath - Remove a given dir from the path +; Input: head of the stack + +Function un.RemoveFromPath + Exch $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + + IntFmt $6 "%c" 26 # DOS EOF + + Call un.IsNT + Pop $1 + StrCmp $1 1 unRemoveFromPath_NT + ; Not on NT + StrCpy $1 $WINDIR 2 + FileOpen $1 "$1\autoexec.bat" r + GetTempFileName $4 + FileOpen $2 $4 w + GetFullPathName /SHORT $0 $0 + StrCpy $0 "SET PATH=%PATH%;$0" + Goto unRemoveFromPath_dosLoop + + unRemoveFromPath_dosLoop: + FileRead $1 $3 + StrCpy $5 $3 1 -1 # read last char + StrCmp $5 $6 0 +2 # if DOS EOF + StrCpy $3 $3 -1 # remove DOS EOF so we can compare + StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "" unRemoveFromPath_dosLoopEnd + FileWrite $2 $3 + Goto unRemoveFromPath_dosLoop + unRemoveFromPath_dosLoopRemoveLine: + SetRebootFlag true + Goto unRemoveFromPath_dosLoop + + unRemoveFromPath_dosLoopEnd: + FileClose $2 + FileClose $1 + StrCpy $1 $WINDIR 2 + Delete "$1\autoexec.bat" + CopyFiles /SILENT $4 "$1\autoexec.bat" + Delete $4 + Goto unRemoveFromPath_done + + unRemoveFromPath_NT: + StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey + ReadRegStr $1 ${NT_current_env} "PATH" + Goto unDoTrim + unReadAllKey: + ReadRegStr $1 ${NT_all_env} "PATH" + unDoTrim: + StrCpy $5 $1 1 -1 # copy last char + StrCmp $5 ";" +2 # if last char != ; + StrCpy $1 "$1;" # append ; + Push $1 + Push "$0;" + Call un.StrStr ; Find `$0;` in $1 + Pop $2 ; pos of our dir + StrCmp $2 "" unRemoveFromPath_done + ; else, it is in path + # $0 - path to add + # $1 - path var + StrLen $3 "$0;" + StrLen $4 $2 + StrCpy $5 $1 -$4 # $5 is now the part before the path to remove + StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove + StrCpy $3 $5$6 + + StrCpy $5 $3 1 -1 # copy last char + StrCmp $5 ";" 0 +2 # if last char == ; + StrCpy $3 $3 -1 # remove last char + + StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey + WriteRegExpandStr ${NT_current_env} "PATH" $3 + Goto unDoSend + unWriteAllKey: + WriteRegExpandStr ${NT_all_env} "PATH" $3 + unDoSend: + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + unRemoveFromPath_done: + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Uninstall sutff +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +########################################### +# Utility Functions # +########################################### + +;==================================================== +; IsNT - Returns 1 if the current system is NT, 0 +; otherwise. +; Output: head of the stack +;==================================================== +; IsNT +; no input +; output, top of the stack = 1 if NT or 0 if not +; +; Usage: +; Call IsNT +; Pop $R0 +; ($R0 at this point is 1 or 0) + +!macro IsNT un +Function ${un}IsNT + Push $0 + ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion + StrCmp $0 "" 0 IsNT_yes + ; we are not NT. + Pop $0 + Push 0 + Return + + IsNT_yes: + ; NT!!! + Pop $0 + Push 1 +FunctionEnd +!macroend +!insertmacro IsNT "" +!insertmacro IsNT "un." + +; StrStr +; input, top of stack = string to search for +; top of stack-1 = string to search in +; output, top of stack (replaces with the portion of the string remaining) +; modifies no other variables. +; +; Usage: +; Push "this is a long ass string" +; Push "ass" +; Call StrStr +; Pop $R0 +; ($R0 at this point is "ass string") + +!macro StrStr un +Function ${un}StrStr +Exch $R1 ; st=haystack,old$R1, $R1=needle + Exch ; st=old$R1,haystack + Exch $R2 ; st=old$R1,old$R2, $R2=haystack + Push $R3 + Push $R4 + Push $R5 + StrLen $R3 $R1 + StrCpy $R4 0 + ; $R1=needle + ; $R2=haystack + ; $R3=len(needle) + ; $R4=cnt + ; $R5=tmp + loop: + StrCpy $R5 $R2 $R3 $R4 + StrCmp $R5 $R1 done + StrCmp $R5 "" done + IntOp $R4 $R4 + 1 + Goto loop +done: + StrCpy $R1 $R2 "" $R4 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch $R1 +FunctionEnd +!macroend +!insertmacro StrStr "" +!insertmacro StrStr "un." + +Function Trim ; Added by Pelaca + Exch $R1 + Push $R2 +Loop: + StrCpy $R2 "$R1" 1 -1 + StrCmp "$R2" " " RTrim + StrCmp "$R2" "$\n" RTrim + StrCmp "$R2" "$\r" RTrim + StrCmp "$R2" ";" RTrim + GoTo Done +RTrim: + StrCpy $R1 "$R1" -1 + Goto Loop +Done: + Pop $R2 + Exch $R1 +FunctionEnd + +Function ConditionalAddToRegisty + Pop $0 + Pop $1 + StrCmp "$0" "" ConditionalAddToRegisty_EmptyString + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ + "$1" "$0" + ;MessageBox MB_OK "Set Registry: '$1' to '$0'" + DetailPrint "Set install registry entry: '$1' to '$0'" + ConditionalAddToRegisty_EmptyString: +FunctionEnd + +;-------------------------------- + +!ifdef CPACK_USES_DOWNLOAD +Function DownloadFile + IfFileExists $INSTDIR\* +2 + CreateDirectory $INSTDIR + Pop $0 + + ; Skip if already downloaded + IfFileExists $INSTDIR\$0 0 +2 + Return + + StrCpy $1 "@CPACK_DOWNLOAD_SITE@" + + try_again: + NSISdl::download "$1/$0" "$INSTDIR\$0" + + Pop $1 + StrCmp $1 "success" success + StrCmp $1 "Cancelled" cancel + MessageBox MB_OK "Download failed: $1" + cancel: + Return + success: +FunctionEnd +!endif + +;-------------------------------- +; Installation types +@CPACK_NSIS_INSTALLATION_TYPES@ + +;-------------------------------- +; Component sections +@CPACK_NSIS_COMPONENT_SECTIONS@ + +;-------------------------------- +; Define some macro setting for the gui +@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ +@CPACK_NSIS_INSTALLER_ICON_CODE@ +@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ +@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ + +;-------------------------------- +;Pages + !insertmacro MUI_PAGE_WELCOME + + !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" + Page custom InstallOptionsPage + !insertmacro MUI_PAGE_DIRECTORY + + ;Start Menu Folder Page Configuration + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER + + @CPACK_NSIS_PAGE_COMPONENTS@ + + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" ;first language is the default language + !insertmacro MUI_LANGUAGE "Albanian" + !insertmacro MUI_LANGUAGE "Arabic" + !insertmacro MUI_LANGUAGE "Basque" + !insertmacro MUI_LANGUAGE "Belarusian" + !insertmacro MUI_LANGUAGE "Bosnian" + !insertmacro MUI_LANGUAGE "Breton" + !insertmacro MUI_LANGUAGE "Bulgarian" + !insertmacro MUI_LANGUAGE "Croatian" + !insertmacro MUI_LANGUAGE "Czech" + !insertmacro MUI_LANGUAGE "Danish" + !insertmacro MUI_LANGUAGE "Dutch" + !insertmacro MUI_LANGUAGE "Estonian" + !insertmacro MUI_LANGUAGE "Farsi" + !insertmacro MUI_LANGUAGE "Finnish" + !insertmacro MUI_LANGUAGE "French" + !insertmacro MUI_LANGUAGE "German" + !insertmacro MUI_LANGUAGE "Greek" + !insertmacro MUI_LANGUAGE "Hebrew" + !insertmacro MUI_LANGUAGE "Hungarian" + !insertmacro MUI_LANGUAGE "Icelandic" + !insertmacro MUI_LANGUAGE "Indonesian" + !insertmacro MUI_LANGUAGE "Irish" + !insertmacro MUI_LANGUAGE "Italian" + !insertmacro MUI_LANGUAGE "Japanese" + !insertmacro MUI_LANGUAGE "Korean" + !insertmacro MUI_LANGUAGE "Kurdish" + !insertmacro MUI_LANGUAGE "Latvian" + !insertmacro MUI_LANGUAGE "Lithuanian" + !insertmacro MUI_LANGUAGE "Luxembourgish" + !insertmacro MUI_LANGUAGE "Macedonian" + !insertmacro MUI_LANGUAGE "Malay" + !insertmacro MUI_LANGUAGE "Mongolian" + !insertmacro MUI_LANGUAGE "Norwegian" + !insertmacro MUI_LANGUAGE "Polish" + !insertmacro MUI_LANGUAGE "Portuguese" + !insertmacro MUI_LANGUAGE "PortugueseBR" + !insertmacro MUI_LANGUAGE "Romanian" + !insertmacro MUI_LANGUAGE "Russian" + !insertmacro MUI_LANGUAGE "Serbian" + !insertmacro MUI_LANGUAGE "SerbianLatin" + !insertmacro MUI_LANGUAGE "SimpChinese" + !insertmacro MUI_LANGUAGE "Slovak" + !insertmacro MUI_LANGUAGE "Slovenian" + !insertmacro MUI_LANGUAGE "Spanish" + !insertmacro MUI_LANGUAGE "Swedish" + !insertmacro MUI_LANGUAGE "Thai" + !insertmacro MUI_LANGUAGE "TradChinese" + !insertmacro MUI_LANGUAGE "Turkish" + !insertmacro MUI_LANGUAGE "Ukrainian" + !insertmacro MUI_LANGUAGE "Welsh" + + +;-------------------------------- +;Reserve Files + + ;These files should be inserted before other files in the data block + ;Keep these lines before any File command + ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) + + ReserveFile "NSIS.InstallOptions.ini" + !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +;-------------------------------- +;Installer Sections + +Section "-Core installation" + ;Use the entire tree produced by the INSTALL target. Keep the + ;list of directories here in sync with the RMDir commands below. + SetOutPath "$INSTDIR" + @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@ + @CPACK_NSIS_FULL_INSTALL@ + + ;Store installation folder + WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + Push "DisplayName" + Push "@CPACK_NSIS_DISPLAY_NAME@" + Call ConditionalAddToRegisty + Push "DisplayVersion" + Push "@CPACK_PACKAGE_VERSION@" + Call ConditionalAddToRegisty + Push "Publisher" + Push "@CPACK_PACKAGE_VENDOR@" + Call ConditionalAddToRegisty + Push "UninstallString" + Push "$INSTDIR\Uninstall.exe" + Call ConditionalAddToRegisty + Push "NoRepair" + Push "1" + Call ConditionalAddToRegisty + + !ifdef CPACK_NSIS_ADD_REMOVE + ;Create add/remove functionality + Push "ModifyPath" + Push "$INSTDIR\AddRemove.exe" + Call ConditionalAddToRegisty + !else + Push "NoModify" + Push "1" + Call ConditionalAddToRegisty + !endif + + ; Optional registration + Push "DisplayIcon" + Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" + Call ConditionalAddToRegisty + Push "HelpLink" + Push "@CPACK_NSIS_HELP_LINK@" + Call ConditionalAddToRegisty + Push "URLInfoAbout" + Push "@CPACK_NSIS_URL_INFO_ABOUT@" + Call ConditionalAddToRegisty + Push "Contact" + Push "@CPACK_NSIS_CONTACT@" + Call ConditionalAddToRegisty + !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State" + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" +@CPACK_NSIS_CREATE_ICONS@ +@CPACK_NSIS_CREATE_ICONS_EXTRA@ + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + + ;Read a value from an InstallOptions INI file + !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" + !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" + !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" + + ; Write special uninstall registry entries + Push "StartMenu" + Push "$STARTMENU_FOLDER" + Call ConditionalAddToRegisty + Push "DoNotAddToPath" + Push "$DO_NOT_ADD_TO_PATH" + Call ConditionalAddToRegisty + Push "AddToPathAllUsers" + Push "$ADD_TO_PATH_ALL_USERS" + Call ConditionalAddToRegisty + Push "AddToPathCurrentUser" + Push "$ADD_TO_PATH_CURRENT_USER" + Call ConditionalAddToRegisty + Push "InstallToDesktop" + Push "$INSTALL_DESKTOP" + Call ConditionalAddToRegisty + + !insertmacro MUI_STARTMENU_WRITE_END + +@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ + +SectionEnd + +Section "-Add to path" + Push $INSTDIR\bin + StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath + StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0 + Call AddToPath + doNotAddToPath: +SectionEnd + +;-------------------------------- +; Create custom pages +Function InstallOptionsPage + !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@" + !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" + +FunctionEnd + +;-------------------------------- +; determine admin versus local install +Function un.onInit + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + Goto done + StrCmp $1 "Power" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + Goto done + + noLM: + ;Get installation folder from registry if available + + done: + +FunctionEnd + +;--- Add/Remove callback functions: --- +!macro SectionList MacroName + ;This macro used to perform operation on multiple sections. + ;List all of your components in following manner here. +@CPACK_NSIS_COMPONENT_SECTION_LIST@ +!macroend + +Section -FinishComponents + ;Removes unselected components and writes component status to registry + !insertmacro SectionList "FinishSection" + +!ifdef CPACK_NSIS_ADD_REMOVE + ; Get the name of the installer executable + System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' + StrCpy $R3 $R0 + + ; Strip off the last 13 characters, to see if we have AddRemove.exe + StrLen $R1 $R0 + IntOp $R1 $R0 - 13 + StrCpy $R2 $R0 13 $R1 + StrCmp $R2 "AddRemove.exe" addremove_installed + + ; We're not running AddRemove.exe, so install it + CopyFiles $R3 $INSTDIR\AddRemove.exe + + addremove_installed: +!endif +SectionEnd +;--- End of Add/Remove callback functions --- + +;-------------------------------- +; Component dependencies +Function .onSelChange + !insertmacro SectionList MaybeSelectionChanged +FunctionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + ReadRegStr $START_MENU SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" + ;MessageBox MB_OK "Start menu is in: $START_MENU" + ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath" + ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers" + ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser" + ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" + ReadRegStr $INSTALL_DESKTOP SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" + ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " + +@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ + + ;Remove files we installed. + ;Keep the list of directories here in sync with the File commands above. +@CPACK_NSIS_DELETE_FILES@ +@CPACK_NSIS_DELETE_DIRECTORIES@ + +!ifdef CPACK_NSIS_ADD_REMOVE + ;Remove the add/remove program + Delete "$INSTDIR\AddRemove.exe" +!endif + + ;Remove the uninstaller itself. + Delete "$INSTDIR\Uninstall.exe" + DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ;Remove the installation directory if it is empty. + RMDir "$INSTDIR" + + ; Remove the registry entries. + DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ; Removes all optional components + !insertmacro SectionList "RemoveSection_CPack" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP + + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS@ +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + startMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors startMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop + startMenuDeleteLoopDone: + + ; If the user changed the shortcut, then untinstall may not work. This should + ; try to fix it. + StrCpy $MUI_TEMP "$START_MENU" + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + secondStartMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors secondStartMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop + secondStartMenuDeleteLoopDone: + + DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + Push $INSTDIR\bin + StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 + Call un.RemoveFromPath + doNotRemoveFromPath: +SectionEnd + +;-------------------------------- +; determine admin versus local install +; Is install for "AllUsers" or "JustMe"? +; Default to "JustMe" - set to "AllUsers" if admin or on Win9x +; This function is used for the very first "custom page" of the installer. +; This custom page does not show up visibly, but it executes prior to the +; first visible page and sets up $INSTDIR properly... +; Choose different default installation folder based on SV_ALLUSERS... +; "Program Files" for AllUsers, "My Documents" for JustMe... + +Function .onInit + FindWindow $0 "gdkWindowToplevel" "Linphone" + StrCmp $0 0 notRunning + MessageBox MB_OK|MB_ICONEXCLAMATION "Linphone is running. Please close it first and restart the installation." /SD IDOK + Abort + +notRunning: + + ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString" + StrCmp $0 "" inst + + MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \ + "Linphone is already installed. $\n$\nDo you want to continue and uninstall the old version before installing the new one?" \ + IDOK uninst + Abort + +;Run the uninstaller +uninst: + ClearErrors + StrLen $2 "\Uninstall.exe" + StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path + ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file + + IfErrors uninst_failed inst +uninst_failed: + MessageBox MB_OK|MB_ICONSTOP "Uninstall failed." + Abort + + +inst: + ; Reads components status for registry + !insertmacro SectionList "InitSection" + + ; check to see if /D has been used to change + ; the install directory by comparing it to the + ; install directory that is expected to be the + ; default + StrCpy $IS_DEFAULT_INSTALLDIR 0 + StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 + StrCpy $IS_DEFAULT_INSTALLDIR 1 + + StrCpy $SV_ALLUSERS "JustMe" + ; if default install dir then change the default + ; if it is installed for JustMe + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + StrCmp $1 "Power" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + + noLM: + StrCpy $SV_ALLUSERS "AllUsers" + ;Get installation folder from registry if available + + done: + StrCmp $SV_ALLUSERS "AllUsers" 0 +3 + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" + + noOptionsPage: +FunctionEnd diff --git a/cmake_builder/linphone_package/README.openh264.txt.in b/cmake_builder/linphone_package/README.openh264.txt.in new file mode 100644 index 000000000..4f88bbedf --- /dev/null +++ b/cmake_builder/linphone_package/README.openh264.txt.in @@ -0,0 +1,20 @@ +H264 codec +---------- +Mediastreamer 2 uses Cisco's OpenH264 library as H264 codec. OpenH264 is an +open source library but H264 is a coding format protected by a patent from +MPEG-LA. That's why that bundle does not embed any OpenH264 library and so you +will not able to use H264 out-the-box. + +Fortunatly, Cisco Systems Inc. distribute OpenH264 in its binary form that you +can use in Mediastreamer without paying much royalties to MPEG-LA. However, +that binary file as a restrictive licence. See http://www.openh264.org/BINARY_LICENSE.txt form more information. + + +Installation procedure +---------------------- +The Cisco's provided OpenH264 library is available at this address: +http://ciscobinary.openh264.org/libopenh264-@OPENH264_VERSION@-osx64.dylib.bz2 for MacOS +http://ciscobinary.openh264.org/openh264-@OPENH264_VERSION@-win32msvc.dll.bz2 for Windows (32 bit) + +Once you get the library, uncompress it into /lib/libopenh264.1.dylib +On Windows, the library must be installed into \bin\openh264.dll diff --git a/cmake_builder/linphone_package/WindowsPackaging.cmake.in b/cmake_builder/linphone_package/WindowsPackaging.cmake.in new file mode 100644 index 000000000..5abcf7495 --- /dev/null +++ b/cmake_builder/linphone_package/WindowsPackaging.cmake.in @@ -0,0 +1,34 @@ +############################################################################ +# WindowsPackaging.cmake +# Copyright (C) 2014 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. +# +############################################################################ + +if(NOT "${CMAKE_INSTALL_PREFIX}" MATCHES .*/_CPack_Packages/.*) + execute_process( + COMMAND ${CMAKE_CPACK_COMMAND} -G NSIS + RESULT_VARIABLE CPACK_COMMAND_SUCCESS + ) + + if(@PERFORM_SIGNING@) + execute_process( + COMMAND @SIGNTOOL_COMMAND@ @CMAKE_CURRENT_BINARY_DIR@/@CPACK_PACKAGE_FILE_NAME@.exe + ) + endif() +endif() diff --git a/cmake_builder/linphone_package/linphone-banner.bmp b/cmake_builder/linphone_package/linphone-banner.bmp new file mode 100644 index 000000000..fffb5660c Binary files /dev/null and b/cmake_builder/linphone_package/linphone-banner.bmp differ diff --git a/cmake_builder/linphone_package/openh264-install.nsi.in b/cmake_builder/linphone_package/openh264-install.nsi.in new file mode 100644 index 000000000..0ef94525b --- /dev/null +++ b/cmake_builder/linphone_package/openh264-install.nsi.in @@ -0,0 +1,7 @@ +SectionGetFlags ${msopenh264} $0 +IntOp $0 $0 & ${SF_SELECTED} +IntCmpU $0 0 done done download +download: +NSISdl::download http://ciscobinary.openh264.org/openh264-@OPENH264_VERSION@-win32msvc.dll.bz2 $INSTDIR\lib\mediastreamer\plugins\openh264.dll.bz2 +ExecWait '"$INSTDIR\bin\bunzip2.exe" "$INSTDIR\lib\mediastreamer\plugins\openh264.dll.bz2"' +done: \ No newline at end of file diff --git a/cmake_builder/linphone_package/openh264-uninstall.nsi b/cmake_builder/linphone_package/openh264-uninstall.nsi new file mode 100644 index 000000000..967bfb1b4 --- /dev/null +++ b/cmake_builder/linphone_package/openh264-uninstall.nsi @@ -0,0 +1 @@ +Delete $INSTDIR\lib\mediastreamer\plugins\openh264.dll \ No newline at end of file diff --git a/cmake_builder/linphone_package/sdk_content/antlr3c.list.in b/cmake_builder/linphone_package/sdk_content/antlr3c.list.in new file mode 100644 index 000000000..bca5a5d41 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/antlr3c.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@antlr3c*.@LIBEXT@ diff --git a/cmake_builder/linphone_package/sdk_content/bctoolbox.list.in b/cmake_builder/linphone_package/sdk_content/bctoolbox.list.in new file mode 100644 index 000000000..835945cf9 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/bctoolbox.list.in @@ -0,0 +1,5 @@ +@LIBDIR@/@LIBPREFIX@bctoolbox*.@LIBEXT@ +include/bctoolbox/* +lib/bctoolbox*.lib +lib/pkgconfig/bctoolbox*.pc +share/bctoolbox/cmake/* diff --git a/cmake_builder/linphone_package/sdk_content/bcunit.list.in b/cmake_builder/linphone_package/sdk_content/bcunit.list.in new file mode 100644 index 000000000..b856b2a4b --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/bcunit.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@bcunit*.@LIBEXT@ \ No newline at end of file diff --git a/cmake_builder/linphone_package/sdk_content/bellesip.list.in b/cmake_builder/linphone_package/sdk_content/bellesip.list.in new file mode 100644 index 000000000..f4f973c3e --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/bellesip.list.in @@ -0,0 +1,5 @@ +@LIBDIR@/@LIBPREFIX@bellesip*.@LIBEXT@ +include/belle-sip/* +lib/bellesip*.lib +lib/pkgconfig/belle-sip.pc +share/BelleSIP/cmake/* diff --git a/cmake_builder/linphone_package/sdk_content/bv16.list.in b/cmake_builder/linphone_package/sdk_content/bv16.list.in new file mode 100644 index 000000000..b584cabf6 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/bv16.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@bv16*.@LIBEXT@ \ No newline at end of file diff --git a/cmake_builder/linphone_package/sdk_content/bzrtp.list.in b/cmake_builder/linphone_package/sdk_content/bzrtp.list.in new file mode 100644 index 000000000..fb8d9e2a1 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/bzrtp.list.in @@ -0,0 +1,2 @@ +@LIBDIR@/@LIBPREFIX@bzrtp*.@LIBEXT@ +share/bzrtp/cmake diff --git a/cmake_builder/linphone_package/sdk_content/ffmpeg.list.in b/cmake_builder/linphone_package/sdk_content/ffmpeg.list.in new file mode 100644 index 000000000..f8fdd74d3 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/ffmpeg.list.in @@ -0,0 +1,4 @@ +@LIBDIR@/@LIBPREFIX@avcodec*.@LIBEXT@ +@LIBDIR@/@LIBPREFIX@avutil*.@LIBEXT@ +@LIBDIR@/@LIBPREFIX@swscale*.@LIBEXT@ +@LIBDIR@/@LIBPREFIX@swresample*.@LIBEXT@ diff --git a/cmake_builder/linphone_package/sdk_content/gsm.list.in b/cmake_builder/linphone_package/sdk_content/gsm.list.in new file mode 100644 index 000000000..9bf3b498a --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/gsm.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@gsm*.@LIBEXT@ \ No newline at end of file diff --git a/cmake_builder/linphone_package/sdk_content/linphone.list.in b/cmake_builder/linphone_package/sdk_content/linphone.list.in new file mode 100644 index 000000000..cd26b05c2 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/linphone.list.in @@ -0,0 +1,9 @@ +@LIBDIR@/@LIBPREFIX@linphone*.@LIBEXT@ +@LIBDIR@/@LIBPREFIX@iconv*.@LIBEXT@ +@LIBDIR@/@LIBPREFIX@intl*.@LIBEXT@ +include/linphone/* +lib/linphone*.lib +share/doc/linphone-* +share/Linphone/cmake/* +share/sounds/linphone/* +share/locale/*/LC_MESSAGES/linphone.mo diff --git a/cmake_builder/linphone_package/sdk_content/mbedtls.list.in b/cmake_builder/linphone_package/sdk_content/mbedtls.list.in new file mode 100644 index 000000000..20035b39c --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/mbedtls.list.in @@ -0,0 +1,3 @@ +@LIBDIR@/@LIBPREFIX@mbedcrypto*.@LIBEXT@ +@LIBDIR@/@LIBPREFIX@mbedx509*.@LIBEXT@ +@LIBDIR@/@LIBPREFIX@mbedtls*.@LIBEXT@ diff --git a/cmake_builder/linphone_package/sdk_content/ms2.list.in b/cmake_builder/linphone_package/sdk_content/ms2.list.in new file mode 100644 index 000000000..a60668ba1 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/ms2.list.in @@ -0,0 +1,8 @@ +@LIBDIR@/@LIBPREFIX@mediastreamer_base*.@LIBEXT@ +@LIBDIR@/@LIBPREFIX@mediastreamer_voip*.@LIBEXT@ +include/mediastreamer2/* +lib/mediastreamer_base*.lib +lib/mediastreamer_voip*.lib +share/doc/mediastreamer2-* +share/images/nowebcamCIF.jpg +share/Mediastreamer2/cmake/* diff --git a/cmake_builder/linphone_package/sdk_content/ms2plugins.list.in b/cmake_builder/linphone_package/sdk_content/ms2plugins.list.in new file mode 100644 index 000000000..7930ba1fe --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/ms2plugins.list.in @@ -0,0 +1 @@ +lib/mediastreamer/plugins/*.@PLUGINEXT@ diff --git a/cmake_builder/linphone_package/sdk_content/openh264.list.in b/cmake_builder/linphone_package/sdk_content/openh264.list.in new file mode 100644 index 000000000..dd4d20df8 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/openh264.list.in @@ -0,0 +1 @@ +README.openh264.txt diff --git a/cmake_builder/linphone_package/sdk_content/opus.list.in b/cmake_builder/linphone_package/sdk_content/opus.list.in new file mode 100644 index 000000000..e118b5e7c --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/opus.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@opus*.@LIBEXT@ \ No newline at end of file diff --git a/cmake_builder/linphone_package/sdk_content/ortp.list.in b/cmake_builder/linphone_package/sdk_content/ortp.list.in new file mode 100644 index 000000000..9e599cfd3 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/ortp.list.in @@ -0,0 +1,6 @@ +@LIBDIR@/@LIBPREFIX@ortp*.@LIBEXT@ +include/ortp/* +lib/ortp*.lib +lib/pkgconfig/ortp.pc +share/doc/oRTP-* +share/oRTP/cmake/* diff --git a/cmake_builder/linphone_package/sdk_content/polarssl.list.in b/cmake_builder/linphone_package/sdk_content/polarssl.list.in new file mode 100644 index 000000000..02d6d1712 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/polarssl.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@polarssl*.@LIBEXT@ diff --git a/cmake_builder/linphone_package/sdk_content/speex.list.in b/cmake_builder/linphone_package/sdk_content/speex.list.in new file mode 100644 index 000000000..55f72ed13 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/speex.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@speex*.@LIBEXT@ \ No newline at end of file diff --git a/cmake_builder/linphone_package/sdk_content/sqlite3.list.in b/cmake_builder/linphone_package/sdk_content/sqlite3.list.in new file mode 100644 index 000000000..d72243c40 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/sqlite3.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@sqlite3*.@LIBEXT@ diff --git a/cmake_builder/linphone_package/sdk_content/srtp.list.in b/cmake_builder/linphone_package/sdk_content/srtp.list.in new file mode 100644 index 000000000..c3b868eb8 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/srtp.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@srtp*.@LIBEXT@ \ No newline at end of file diff --git a/cmake_builder/linphone_package/sdk_content/vcard.list.in b/cmake_builder/linphone_package/sdk_content/vcard.list.in new file mode 100644 index 000000000..ff4f5473c --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/vcard.list.in @@ -0,0 +1,6 @@ +@LIBDIR@/@LIBPREFIX@belr*.@LIBEXT@ +@LIBDIR@/@LIBPREFIX@belcard*.@LIBEXT@ +lib/belr*.lib +lib/belcard*.lib +share/Belr/cmake +share/Belcard/cmake diff --git a/cmake_builder/linphone_package/sdk_content/xml2.list.in b/cmake_builder/linphone_package/sdk_content/xml2.list.in new file mode 100644 index 000000000..ffe5f8c12 --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/xml2.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@xml2*.@LIBEXT@ \ No newline at end of file diff --git a/cmake_builder/linphone_package/sdk_content/zlib.list.in b/cmake_builder/linphone_package/sdk_content/zlib.list.in new file mode 100644 index 000000000..123d38a8a --- /dev/null +++ b/cmake_builder/linphone_package/sdk_content/zlib.list.in @@ -0,0 +1 @@ +@LIBDIR@/@LIBPREFIX@zlib*.@LIBEXT@ \ No newline at end of file diff --git a/cmake_builder/linphone_package/signtool.py b/cmake_builder/linphone_package/signtool.py new file mode 100644 index 000000000..b7ef4fc1e --- /dev/null +++ b/cmake_builder/linphone_package/signtool.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +import os, sys +import subprocess +class PassFile: + def __init__(self, file): + self.file = file + def password(self, v): + file = open(self.file, "r"); + line = file.readline().strip() + file.close() + return line + +if __name__ == '__main__': + if len(sys.argv) <= 2: + sys.exit(0) + for i,arg in enumerate(sys.argv): + if arg == "/p": + if (i + 1) == len(sys.argv): + print "Missing password argument" + sys.exit(3) + try: + sys.argv[i+1] = PassFile(sys.argv[i+1]).password(None) + except IOError: + print "Password file not found" + sys.exit(3) + actual_args = sys.argv[1:] + ret = subprocess.call(actual_args) + sys.exit(ret) diff --git a/cmake_builder/linphone_package/uninstall.nsi b/cmake_builder/linphone_package/uninstall.nsi new file mode 100644 index 000000000..0645bb0d8 --- /dev/null +++ b/cmake_builder/linphone_package/uninstall.nsi @@ -0,0 +1,7 @@ +FindWindow $0 "gdkWindowToplevel" "Linphone" +StrCmp $0 0 notRunningInUninstall +MessageBox MB_OK|MB_ICONEXCLAMATION "Linphone is running. Please close it first and restart the uninstall program." /SD IDOK +Abort + +notRunningInUninstall: + diff --git a/linphone-desktop/CMakeLists.txt b/linphone-desktop/CMakeLists.txt index ec06c4384..f23a33fff 100644 --- a/linphone-desktop/CMakeLists.txt +++ b/linphone-desktop/CMakeLists.txt @@ -207,7 +207,7 @@ qt5_add_resources(RESOURCES ${QRC_RESOURCES}) # Build. # Note: `update_translations` is provided by `languages/CMakeLists.txt`. if(WIN32) - add_executable(${TARGET_NAME} WIN32 ${SOURCES} ${HEADERS} ${RESOURCES}) + add_executable(${TARGET_NAME} WIN32 ${SOURCES} ${HEADERS} ${RESOURCES} linphone.rc) else() add_executable(${TARGET_NAME} ${SOURCES} ${HEADERS} ${RESOURCES}) endif() diff --git a/linphone-desktop/linphone.ico b/linphone-desktop/linphone.ico new file mode 100644 index 000000000..c955b0a6e Binary files /dev/null and b/linphone-desktop/linphone.ico differ diff --git a/linphone-desktop/linphone.rc b/linphone-desktop/linphone.rc new file mode 100644 index 000000000..6d0928ebf --- /dev/null +++ b/linphone-desktop/linphone.rc @@ -0,0 +1,2 @@ +A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "linphone.ico" +