summaryrefslogtreecommitdiffstats
path: root/packaging/wix/CMakeLists.txt
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /packaging/wix/CMakeLists.txt
parentInitial commit. (diff)
downloadwireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz
wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'packaging/wix/CMakeLists.txt')
-rw-r--r--packaging/wix/CMakeLists.txt341
1 files changed, 341 insertions, 0 deletions
diff --git a/packaging/wix/CMakeLists.txt b/packaging/wix/CMakeLists.txt
new file mode 100644
index 0000000..eb9079e
--- /dev/null
+++ b/packaging/wix/CMakeLists.txt
@@ -0,0 +1,341 @@
+# CMakeLists.txt
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+
+# We should use CPack to help generate a .msi using WIX.
+
+set(WIX_GENERATED_FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/DependentComponents.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/Diameter.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/QtDependentComponents.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/QtTranslation.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/RadiusDict.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/SNMPMibs.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/UsersGuide.wxs
+)
+set(WIX_GENERATED_FILES ${WIX_GENERATED_FILES} PARENT_SCOPE)
+
+set(WIX_SOURCE_FILES
+ ${CMAKE_SOURCE_DIR}/packaging/wix/Wireshark.wxs
+ ${CMAKE_SOURCE_DIR}/packaging/wix/WiresharkOptionsDlg.wxs
+ ${CMAKE_SOURCE_DIR}/packaging/wix/WiresharkWixUI.wxs
+ ${WIX_GENERATED_FILES}
+)
+set(WIX_SOURCE_FILES ${WIX_SOURCE_FILES} PARENT_SCOPE)
+
+set(WIX_FILES
+ ComponentGroups.wxi
+ COPYING.rtf
+ DirectoryStructure.wxi
+ Features.wxi
+ InputPaths.wxi
+ Plugins.wxi
+ Prerequisites.wxi
+ UserInterface.wxi
+ ${WIX_SOURCE_FILES}
+ PARENT_SCOPE
+)
+
+set(WIX_OUT_FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/DependentComponents.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/Diameter.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/QtDependentComponents.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/QtTranslation.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/RadiusDict.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/SNMPMibs.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/UsersGuide.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/Wireshark.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/WiresharkOptionsDlg.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/WiresharkWixUI.wixobj
+)
+set(WIX_OUT_FILES ${WIX_OUT_FILES} PARENT_SCOPE)
+
+# Variables required for Wireshark.wxs
+set(PROGRAM_NAME ${CMAKE_PROJECT_NAME})
+file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" TOP_SRC_DIR)
+# STAGING_DIR depends on the build configuration so we pass it
+# on the command line below.
+file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/docbook" DOCBOOK_DIR)
+
+# To do:
+# - Sync the various version names between CMake and Wix.
+# - Set CMakeLists.txt version strings in tools/make-version.py
+# - Add a VERSION_EXTRA cmake option
+set (VERSION "${PROJECT_VERSION}")
+set(PRODUCT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION}.${PROJECT_BUILD_VERSION})
+
+# Use the merge module that comes with our version of Visual Studio
+if(MSVC_VERSION GREATER_EQUAL 1930)
+ set (MSVC_CRT_VERSION "VC143")
+elseif(MSVC_VERSION GREATER_EQUAL 1920)
+ set (MSVC_CRT_VERSION "VC142")
+elseif(MSVC_VERSION GREATER_EQUAL 1910)
+ set (MSVC_CRT_VERSION "VC141")
+elseif(MSVC_VERSION GREATER_EQUAL 1900)
+ set (MSVC_CRT_VERSION "VC140")
+endif()
+
+# Starting with Visual Studio 2019 merge modules are deprecated but
+# are available as an individual component.
+# https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes#-deprecations
+set(MERGE_MODULE "Microsoft_${MSVC_CRT_VERSION}_CRT_${WIRESHARK_TARGET_PLATFORM}.msm")
+set (PF86_ENV "ProgramFiles(x86)")
+
+set(VC_TOOLS_MERGE_MODULES_DIR)
+if (DEFINED ENV{VCToolsRedistDir})
+ set(VC_TOOLS_MERGE_MODULES_DIR "$ENV{VCToolsRedistDir}/MergeModules")
+endif()
+
+find_path(MERGE_MODULE_DIR ${MERGE_MODULE}
+ PATHS
+ #"$ENV{VCINSTALLDIR}/VC/Redist/MSVC/how-do-we-get-this-version/Merge Modules"
+ ${VC_TOOLS_MERGE_MODULES_DIR}
+ "$ENV{${PF86_ENV}}/Common Files/Merge Modules"
+ "$ENV{PROGRAMFILES}/Common Files/Merge Modules"
+ NO_DEFAULT_PATH
+)
+file(TO_NATIVE_PATH "${MERGE_MODULE_DIR}/Microsoft_${MSVC_CRT_VERSION}_CRT_${WIRESHARK_TARGET_PLATFORM}.msm" MSM_NATIVE_PATH)
+message(STATUS "Using ${MSM_NATIVE_PATH} for the WiX installer")
+
+# DependentComponents.wxi. Can be created at configure time.
+set(_all_manifest_wix "${CMAKE_CURRENT_BINARY_DIR}/DependentComponents.wxs")
+file(WRITE "${_all_manifest_wix}" "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
+file(APPEND "${_all_manifest_wix}" "<Wix xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n\n")
+file(APPEND "${_all_manifest_wix}" " <!-- Files required for all sections. Generated by CMake. -->\n")
+file(APPEND "${_all_manifest_wix}" "<?include InputPaths.wxi ?>\n")
+file(APPEND "${_all_manifest_wix}" " <Fragment>\n")
+file(APPEND "${_all_manifest_wix}" " <DirectoryRef Id=\"INSTALLFOLDER\">\n")
+file(APPEND "${_all_manifest_wix}" " <?ifdef BUNDLE_DEBUG_DLLS ?>\n")
+foreach(_dll ${GLIB2_DLLS_DEBUG})
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <Component Id=\"cmp${_wix_name}\" Guid=\"*\">\n")
+ file(APPEND "${_all_manifest_wix}" " <File Id=\"fil${_wix_name}\" KeyPath=\"yes\" Source=\"$(var.Staging.Dir)\\${_dll}\"/>\n")
+ file(APPEND "${_all_manifest_wix}" " </Component>\n")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " <?else?>\n")
+foreach(_dll ${GLIB2_DLLS_RELEASE})
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <Component Id=\"cmp${_wix_name}\" Guid=\"*\">\n")
+ file(APPEND "${_all_manifest_wix}" " <File Id=\"fil${_wix_name}\" KeyPath=\"yes\" Source=\"$(var.Staging.Dir)\\${_dll}\"/>\n")
+ file(APPEND "${_all_manifest_wix}" " </Component>\n")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " <?endif?>\n")
+SET(unique_component "")
+set (_dll_list ${CARES_DLL} ${PCRE2_RELEASE_DLL} ${GCRYPT_DLLS}
+ ${GNUTLS_DLLS} ${KERBEROS_DLLS} ${LIBSSH_DLLS} ${LUA_DLL}
+ ${LZ4_DLL} ${MINIZIP_DLL} ${NGHTTP2_DLL} ${NGHTTP3_DLL} ${SBC_DLL} ${SMI_DLL}
+ ${SNAPPY_DLL} ${SPANDSP_DLL} ${BCG729_DLL} ${LIBXML2_DLLS} ${WINSPARKLE_DLL}
+ ${ZLIB_DLL} ${BROTLI_DLLS} ${ZSTD_DLL} ${ILBC_DLL} ${OPUS_DLL}
+ ${SPEEXDSP_DLL}
+ # Required for mmdbresolve
+ ${MAXMINDDB_DLL}
+ )
+foreach(_dll ${_dll_list})
+ #ensure uniqueness of files
+ IF(NOT "${unique_component}" MATCHES "(^|;)${_dll}(;|$)")
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <Component Id=\"cmp${_wix_name}\" Guid=\"*\">\n")
+ file(APPEND "${_all_manifest_wix}" " <File Id=\"fil${_wix_name}\" KeyPath=\"yes\" Source=\"$(var.Staging.Dir)\\${_dll}\"/>\n")
+ file(APPEND "${_all_manifest_wix}" " </Component>\n")
+ SET(unique_component ${unique_component} ${_dll})
+ ENDIF(NOT "${unique_component}" MATCHES "(^|;)${_dll}(;|$)")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " </DirectoryRef>\n")
+file(APPEND "${_all_manifest_wix}" " </Fragment>\n")
+file(APPEND "${_all_manifest_wix}" " <Fragment>\n")
+file(APPEND "${_all_manifest_wix}" " <ComponentGroup Id=\"CG.RequiredDependencies\">\n")
+file(APPEND "${_all_manifest_wix}" " <?ifdef BUNDLE_DEBUG_DLLS ?>\n")
+foreach(_dll ${GLIB2_DLLS_DEBUG})
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <ComponentRef Id=\"cmp${_wix_name}\" />\n")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " <?else?>\n")
+foreach(_dll ${GLIB2_DLLS_RELEASE})
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <ComponentRef Id=\"cmp${_wix_name}\" />\n")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " <?endif?>\n")
+SET(unique_file "")
+foreach(_dll ${_dll_list})
+ #ensure uniqueness of files
+ IF(NOT "${unique_file}" MATCHES "(^|;)${_dll}(;|$)")
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <ComponentRef Id=\"cmp${_wix_name}\" />\n")
+ SET(unique_file ${unique_file} ${_dll})
+ ENDIF(NOT "${unique_file}" MATCHES "(^|;)${_dll}(;|$)")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " </ComponentGroup>\n")
+file(APPEND "${_all_manifest_wix}" " </Fragment>\n")
+file(APPEND "${_all_manifest_wix}" "\n</Wix>\n")
+
+if(SMI_DIR)
+ set(d_smi_dir "-dSMI_DIR")
+endif()
+
+if (MAXMINDDB_FOUND)
+ set(d_mmdbresolve_exe "-dMMDBRESOLVE_EXE")
+endif()
+
+set(WIX_CANDLE_DEFINES
+ -v
+ -sw1076
+ -dPlatform=${WIRESHARK_TARGET_PLATFORM}
+ -dWiresharkName=${CMAKE_PROJECT_NAME}
+ -dWiresharkVersion=${PRODUCT_VERSION}
+ -dWiresharkMajorVersion=${PROJECT_MAJOR_VERSION}
+ -dWiresharkMinorVersion=${PROJECT_MINOR_VERSION}
+ -dAssetDir=${CMAKE_SOURCE_DIR}/packaging/wix
+ -dBuildOutputDir=${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}
+ -dDiameterDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/diameter
+ -dIconDir=${CMAKE_SOURCE_DIR}/resources/icons
+ -dQtTranslationDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/translations
+ -dRadiusDictDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/radius
+ -dSnmpMibDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/snmp/mibs
+ -dUsersGuideDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/docbook/wsug_html_chunked
+ -dVCRedistVersion=${MSVC_CRT_VERSION}
+ -dVCRedistDir=${MERGE_MODULE_DIR}
+ ${d_smi_dir}
+ ${d_mmdbresolve_exe}
+ -arch ${WIRESHARK_TARGET_PLATFORM}
+ -ext WixUIExtension
+ -I${CMAKE_SOURCE_DIR}/packaging/wix
+ -out ${CMAKE_CURRENT_BINARY_DIR}/
+ PARENT_SCOPE
+)
+
+# The NSIS CMakeFile sets the program name + version slightly differently.
+set(WIX_LIGHT_DEFINES
+ -v
+ -out ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}-${WIRESHARK_TARGET_PLATFORM}.msi
+ -sw1076
+ -ext WixUIExtension
+ -loc ${CMAKE_CURRENT_SOURCE_DIR}/StringOverrides.wxl
+ PARENT_SCOPE
+)
+
+set(WIX_HEAT_FLAGS
+ -v
+ -ag
+ -nologo
+ -srd
+ -sreg
+ PARENT_SCOPE
+)
+
+macro( ADD_WIX_PACKAGE_TARGET )
+ #
+ # XXX - if we're not building Wireshark, we can't build
+ # QtDependentComponents.wxs.. On the other hand, if we're
+ # not building Wireshark, we have no need to include Qt
+ # in the installer, so it's not clear we need that file.
+ #
+ # This should probably be fixed, so that people can produce
+ # command-line-only installer packages.
+ if(BUILD_wireshark)
+ set (_wix_source_dir ${CMAKE_SOURCE_DIR}/packaging/wix )
+ set (_wix_binary_dir ${CMAKE_BINARY_DIR}/packaging/wix )
+
+ # QtDependentComponents.wxs. Created using Wireshark.exe.
+ add_custom_command(OUTPUT ${_wix_binary_dir}/QtDependentComponents.wxs
+ COMMAND set "PATH=${QT_BIN_PATH};%PATH%"
+ COMMAND ${POWERSHELL_COMMAND} "${_wix_source_dir}/windeployqt-to-wix.ps1"
+ -Executable $<TARGET_FILE:wireshark>
+ -FilePath ${_wix_binary_dir}/QtDependentComponents.wxs
+ DEPENDS "${_wix_source_dir}/windeployqt-to-wix.ps1"
+ )
+
+ # UsersGuide.wxs. Collects the contents of wsug_html_chunked.
+ # Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/UsersGuide.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${CMAKE_BINARY_DIR}/docbook/wsug_html_chunked
+ ${WIX_HEAT_FLAGS} -cg CG.Documentation -dr dirUsersGuide -var var.UsersGuideDir
+ -out ${_wix_binary_dir}/UsersGuide.wxs
+ )
+
+ # SNMPMibs.wxs. Collects all MIBs in "output" snmp/mibs
+ # directory. Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/SNMPMibs.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/snmp/mibs
+ ${WIX_HEAT_FLAGS} -cg CG.Plugins.SNMP -dr dirSnmpMibs -var var.SnmpMibDir
+ -out ${_wix_binary_dir}/SNMPMibs.wxs
+ )
+
+ # RadiusDict.wxs. Collects all Radius dictionary files in
+ # "output" radius directory. Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/RadiusDict.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/radius
+ ${WIX_HEAT_FLAGS} -cg CG.RadiusDict -dr dirRadius -var var.RadiusDictDir
+ -out ${_wix_binary_dir}/RadiusDict.wxs
+ )
+
+ # Diameter.wxs. Collects all Diameter XML dictionary files
+ # in "output" diameter directory. Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/Diameter.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/diameter
+ ${WIX_HEAT_FLAGS} -cg CG.Diameter -dr dirDiameter -var var.DiameterDir
+ -out ${_wix_binary_dir}/Diameter.wxs
+ )
+
+ # QtTranslation.wxs. Collects all Qt translation files in
+ # "output" translations directory. Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/QtTranslation.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/translations
+ ${WIX_HEAT_FLAGS} -cg CG.QtTranslations -dr dirTranslations -var var.QtTranslationDir
+ -out ${_wix_binary_dir}/QtTranslation.wxs
+ )
+
+ # Build WiX package dependencies. We build the package in
+ # two stages so that wireshark_wix below doesn't trigger any
+ # dependencies that might clobber any signed executables.
+ # XXX Rename this to wireshark_wix_prep
+ add_custom_target(wireshark_wix_prep
+ DEPENDS
+ ${WIX_FILES}
+ copy_data_files
+ user_guide_html
+ faq_html
+ )
+ set_target_properties(wireshark_wix_prep PROPERTIES
+ FOLDER "Packaging"
+ EXCLUDE_FROM_DEFAULT_BUILD True
+ )
+
+ # Dump the installer into
+ # ${CMAKE_CURRENT_SOURCE_DIR}/packaging/wix
+ # Note that executables and DLLs *must* be built separately
+ # XXX Rename this to wireshark_wix
+ add_custom_target(wireshark_wix
+ COMMAND ${WIX_CANDLE_EXECUTABLE} ${WIX_CANDLE_DEFINES}
+ $<$<CONFIG:Debug>:-dBUNDLE_DEBUG_DLLS>
+ ${WIX_SOURCE_FILES}
+ WORKING_DIRECTORY ${_wix_source_dir}
+
+ COMMAND ${WIX_LIGHT_EXECUTABLE} ${WIX_LIGHT_DEFINES} ${WIX_OUT_FILES}
+ WORKING_DIRECTORY ${_wix_binary_dir}
+ )
+ set_target_properties(wireshark_wix PROPERTIES
+ FOLDER "Packaging"
+ EXCLUDE_FROM_DEFAULT_BUILD True
+ )
+ else()
+ message(WARNING "The WiX installer cannot be built if the Wireshark program isn't built.")
+ endif()
+endmacro( ADD_WIX_PACKAGE_TARGET )
+
+set(CLEAN_FILES
+ DependentComponents.wxs
+ QtDependentComponents.wxs
+ UsersGuide.wxs
+ SNMPMibs.wxs
+ RadiusDict.wxs
+ Diameter.wxs
+ QtTranslation.wxs
+ #NEWS.txt
+ #user-guide.chm
+ wireshark-${VERSION}-${WIRESHARK_TARGET_PLATFORM}.msi
+)