diff options
Diffstat (limited to 'packaging/wix')
-rw-r--r-- | packaging/wix/CMakeLists.txt | 341 | ||||
-rw-r--r-- | packaging/wix/COPYING.rtf | 524 | ||||
-rw-r--r-- | packaging/wix/ComponentGroups.wxi | 913 | ||||
-rw-r--r-- | packaging/wix/DirectoryStructure.wxi | 53 | ||||
-rw-r--r-- | packaging/wix/Features.wxi | 121 | ||||
-rw-r--r-- | packaging/wix/InputPaths.wxi | 22 | ||||
-rw-r--r-- | packaging/wix/Plugins.wxi | 150 | ||||
-rw-r--r-- | packaging/wix/Prerequisites.wxi | 103 | ||||
-rw-r--r-- | packaging/wix/README.adoc | 47 | ||||
-rw-r--r-- | packaging/wix/StringOverrides.wxl | 4 | ||||
-rw-r--r-- | packaging/wix/UserInterface.wxi | 18 | ||||
-rw-r--r-- | packaging/wix/Wireshark.wxs | 58 | ||||
-rw-r--r-- | packaging/wix/WiresharkOptionsDlg.wxs | 66 | ||||
-rw-r--r-- | packaging/wix/WiresharkWixUI.wxs | 87 | ||||
-rw-r--r-- | packaging/wix/banner.bmp | bin | 0 -> 29846 bytes | |||
-rw-r--r-- | packaging/wix/banner.svg | 69 | ||||
-rw-r--r-- | packaging/wix/dialog.bmp | bin | 0 -> 158078 bytes | |||
-rw-r--r-- | packaging/wix/dialog.svg | 83 | ||||
-rw-r--r-- | packaging/wix/windeployqt-to-wix.ps1 | 165 |
19 files changed, 2824 insertions, 0 deletions
diff --git a/packaging/wix/CMakeLists.txt b/packaging/wix/CMakeLists.txt new file mode 100644 index 00000000..eb9079e7 --- /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 +) diff --git a/packaging/wix/COPYING.rtf b/packaging/wix/COPYING.rtf new file mode 100644 index 00000000..ec2bde5e --- /dev/null +++ b/packaging/wix/COPYING.rtf @@ -0,0 +1,524 @@ +{\rtf1\ansi\ansicpg1252\deff0\deflang1033\deflangfe1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\froman\fprq2\fcharset0 Times New Roman;}}
+{\colortbl ;\red0\green0\blue255;}
+{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\f0\fs20 This text consists of three parts:\par
+\par
+Part I: Some remarks regarding the license given in\par
+Part II: The actual license that covers Wireshark.\par
+Part III: Other applicable licenses.\par
+\par
+When in doubt: Part II/III is the legally binding part, Part I is just\par
+there to make it easier for people that are not familiar with the GPLv2.\par
+\par
+\par
+------------------------------------------------------------------------\par
+Part I:\par
+\par
+Wireshark is distributed under the GNU GPLv2. There are no restrictions\par
+on its use. There are restrictions on its distribution in source or\par
+binary form.\par
+\par
+Most parts of Wireshark are covered by a "GPL version 2 or later" license.\par
+Some files are covered by different licenses that are compatible with\par
+the GPLv2.\par
+\par
+As a notable exception, some utilities distributed with the Wireshark source are\par
+covered by other licenses that are not themselves directly compatible with the\par
+GPLv2. This is OK, as only the tools themselves are licensed this way, the\par
+output of the tools is not considered a derived work, and so can be safely\par
+licensed for Wireshark's use. An incomplete selection of these tools includes:\par
+ - the pidl utility (tools/pidl) is licensed under the GPLv3+.\par
+\par
+Parts of Wireshark can be built and distributed as libraries. These\par
+parts are still covered by the GPL, and NOT by the Lesser General Public\par
+License or any other license.\par
+\par
+If you integrate all or part of Wireshark into your own application, then\par
+that application must be released under a license compatible with the GPL.\par
+\par
+The full text of the GNU GPL and some of the other applicable licenses follows.\par
+\par
+------------------------------------------------------------------------\par
+Part II:\par
+\par
+ GNU GENERAL PUBLIC LICENSE\par
+ Version 2, June 1991\par
+\par
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\par
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par
+ Everyone is permitted to copy and distribute verbatim copies\par
+ of this license document, but changing it is not allowed.\par
+\par
+ Preamble\par
+\par
+ The licenses for most software are designed to take away your\par
+freedom to share and change it. By contrast, the GNU General Public\par
+License is intended to guarantee your freedom to share and change free\par
+software--to make sure the software is free for all its users. This\par
+General Public License applies to most of the Free Software\par
+Foundation's software and to any other program whose authors commit to\par
+using it. (Some other Free Software Foundation software is covered by\par
+the GNU Lesser General Public License instead.) You can apply it to\par
+your programs, too.\par
+\par
+ When we speak of free software, we are referring to freedom, not\par
+price. Our General Public Licenses are designed to make sure that you\par
+have the freedom to distribute copies of free software (and charge for\par
+this service if you wish), that you receive source code or can get it\par
+if you want it, that you can change the software or use pieces of it\par
+in new free programs; and that you know you can do these things.\par
+\par
+ To protect your rights, we need to make restrictions that forbid\par
+anyone to deny you these rights or to ask you to surrender the rights.\par
+These restrictions translate to certain responsibilities for you if you\par
+distribute copies of the software, or if you modify it.\par
+\par
+ For example, if you distribute copies of such a program, whether\par
+gratis or for a fee, you must give the recipients all the rights that\par
+you have. You must make sure that they, too, receive or can get the\par
+source code. And you must show them these terms so they know their\par
+rights.\par
+\par
+ We protect your rights with two steps: (1) copyright the software, and\par
+(2) offer you this license which gives you legal permission to copy,\par
+distribute and/or modify the software.\par
+\par
+ Also, for each author's protection and ours, we want to make certain\par
+that everyone understands that there is no warranty for this free\par
+software. If the software is modified by someone else and passed on, we\par
+want its recipients to know that what they have is not the original, so\par
+that any problems introduced by others will not reflect on the original\par
+authors' reputations.\par
+\par
+ Finally, any free program is threatened constantly by software\par
+patents. We wish to avoid the danger that redistributors of a free\par
+program will individually obtain patent licenses, in effect making the\par
+program proprietary. To prevent this, we have made it clear that any\par
+patent must be licensed for everyone's free use or not licensed at all.\par
+\par
+ The precise terms and conditions for copying, distribution and\par
+modification follow.\par
+\par
+ GNU GENERAL PUBLIC LICENSE\par
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par
+\par
+ 0. This License applies to any program or other work which contains\par
+a notice placed by the copyright holder saying it may be distributed\par
+under the terms of this General Public License. The "Program", below,\par
+refers to any such program or work, and a "work based on the Program"\par
+means either the Program or any derivative work under copyright law:\par
+that is to say, a work containing the Program or a portion of it,\par
+either verbatim or with modifications and/or translated into another\par
+language. (Hereinafter, translation is included without limitation in\par
+the term "modification".) Each licensee is addressed as "you".\par
+\par
+Activities other than copying, distribution and modification are not\par
+covered by this License; they are outside its scope. The act of\par
+running the Program is not restricted, and the output from the Program\par
+is covered only if its contents constitute a work based on the\par
+Program (independent of having been made by running the Program).\par
+Whether that is true depends on what the Program does.\par
+\par
+ 1. You may copy and distribute verbatim copies of the Program's\par
+source code as you receive it, in any medium, provided that you\par
+conspicuously and appropriately publish on each copy an appropriate\par
+copyright notice and disclaimer of warranty; keep intact all the\par
+notices that refer to this License and to the absence of any warranty;\par
+and give any other recipients of the Program a copy of this License\par
+along with the Program.\par
+\par
+You may charge a fee for the physical act of transferring a copy, and\par
+you may at your option offer warranty protection in exchange for a fee.\par
+\par
+ 2. You may modify your copy or copies of the Program or any portion\par
+of it, thus forming a work based on the Program, and copy and\par
+distribute such modifications or work under the terms of Section 1\par
+above, provided that you also meet all of these conditions:\par
+\par
+ a) You must cause the modified files to carry prominent notices\par
+ stating that you changed the files and the date of any change.\par
+\par
+ b) You must cause any work that you distribute or publish, that in\par
+ whole or in part contains or is derived from the Program or any\par
+ part thereof, to be licensed as a whole at no charge to all third\par
+ parties under the terms of this License.\par
+\par
+ c) If the modified program normally reads commands interactively\par
+ when run, you must cause it, when started running for such\par
+ interactive use in the most ordinary way, to print or display an\par
+ announcement including an appropriate copyright notice and a\par
+ notice that there is no warranty (or else, saying that you provide\par
+ a warranty) and that users may redistribute the program under\par
+ these conditions, and telling the user how to view a copy of this\par
+ License. (Exception: if the Program itself is interactive but\par
+ does not normally print such an announcement, your work based on\par
+ the Program is not required to print an announcement.)\par
+\par
+These requirements apply to the modified work as a whole. If\par
+identifiable sections of that work are not derived from the Program,\par
+and can be reasonably considered independent and separate works in\par
+themselves, then this License, and its terms, do not apply to those\par
+sections when you distribute them as separate works. But when you\par
+distribute the same sections as part of a whole which is a work based\par
+on the Program, the distribution of the whole must be on the terms of\par
+this License, whose permissions for other licensees extend to the\par
+entire whole, and thus to each and every part regardless of who wrote it.\par
+\par
+Thus, it is not the intent of this section to claim rights or contest\par
+your rights to work written entirely by you; rather, the intent is to\par
+exercise the right to control the distribution of derivative or\par
+collective works based on the Program.\par
+\par
+In addition, mere aggregation of another work not based on the Program\par
+with the Program (or with a work based on the Program) on a volume of\par
+a storage or distribution medium does not bring the other work under\par
+the scope of this License.\par
+\par
+ 3. You may copy and distribute the Program (or a work based on it,\par
+under Section 2) in object code or executable form under the terms of\par
+Sections 1 and 2 above provided that you also do one of the following:\par
+\par
+ a) Accompany it with the complete corresponding machine-readable\par
+ source code, which must be distributed under the terms of Sections\par
+ 1 and 2 above on a medium customarily used for software interchange; or,\par
+\par
+ b) Accompany it with a written offer, valid for at least three\par
+ years, to give any third party, for a charge no more than your\par
+ cost of physically performing source distribution, a complete\par
+ machine-readable copy of the corresponding source code, to be\par
+ distributed under the terms of Sections 1 and 2 above on a medium\par
+ customarily used for software interchange; or,\par
+\par
+ c) Accompany it with the information you received as to the offer\par
+ to distribute corresponding source code. (This alternative is\par
+ allowed only for noncommercial distribution and only if you\par
+ received the program in object code or executable form with such\par
+ an offer, in accord with Subsection b above.)\par
+\par
+The source code for a work means the preferred form of the work for\par
+making modifications to it. For an executable work, complete source\par
+code means all the source code for all modules it contains, plus any\par
+associated interface definition files, plus the scripts used to\par
+control compilation and installation of the executable. However, as a\par
+special exception, the source code distributed need not include\par
+anything that is normally distributed (in either source or binary\par
+form) with the major components (compiler, kernel, and so on) of the\par
+operating system on which the executable runs, unless that component\par
+itself accompanies the executable.\par
+\par
+If distribution of executable or object code is made by offering\par
+access to copy from a designated place, then offering equivalent\par
+access to copy the source code from the same place counts as\par
+distribution of the source code, even though third parties are not\par
+compelled to copy the source along with the object code.\par
+\par
+ 4. You may not copy, modify, sublicense, or distribute the Program\par
+except as expressly provided under this License. Any attempt\par
+otherwise to copy, modify, sublicense or distribute the Program is\par
+void, and will automatically terminate your rights under this License.\par
+However, parties who have received copies, or rights, from you under\par
+this License will not have their licenses terminated so long as such\par
+parties remain in full compliance.\par
+\par
+ 5. You are not required to accept this License, since you have not\par
+signed it. However, nothing else grants you permission to modify or\par
+distribute the Program or its derivative works. These actions are\par
+prohibited by law if you do not accept this License. Therefore, by\par
+modifying or distributing the Program (or any work based on the\par
+Program), you indicate your acceptance of this License to do so, and\par
+all its terms and conditions for copying, distributing or modifying\par
+the Program or works based on it.\par
+\par
+ 6. Each time you redistribute the Program (or any work based on the\par
+Program), the recipient automatically receives a license from the\par
+original licensor to copy, distribute or modify the Program subject to\par
+these terms and conditions. You may not impose any further\par
+restrictions on the recipients' exercise of the rights granted herein.\par
+You are not responsible for enforcing compliance by third parties to\par
+this License.\par
+\par
+ 7. If, as a consequence of a court judgment or allegation of patent\par
+infringement or for any other reason (not limited to patent issues),\par
+conditions are imposed on you (whether by court order, agreement or\par
+otherwise) that contradict the conditions of this License, they do not\par
+excuse you from the conditions of this License. If you cannot\par
+distribute so as to satisfy simultaneously your obligations under this\par
+License and any other pertinent obligations, then as a consequence you\par
+may not distribute the Program at all. For example, if a patent\par
+license would not permit royalty-free redistribution of the Program by\par
+all those who receive copies directly or indirectly through you, then\par
+the only way you could satisfy both it and this License would be to\par
+refrain entirely from distribution of the Program.\par
+\par
+If any portion of this section is held invalid or unenforceable under\par
+any particular circumstance, the balance of the section is intended to\par
+apply and the section as a whole is intended to apply in other\par
+circumstances.\par
+\par
+It is not the purpose of this section to induce you to infringe any\par
+patents or other property right claims or to contest validity of any\par
+such claims; this section has the sole purpose of protecting the\par
+integrity of the free software distribution system, which is\par
+implemented by public license practices. Many people have made\par
+generous contributions to the wide range of software distributed\par
+through that system in reliance on consistent application of that\par
+system; it is up to the author/donor to decide if he or she is willing\par
+to distribute software through any other system and a licensee cannot\par
+impose that choice.\par
+\par
+This section is intended to make thoroughly clear what is believed to\par
+be a consequence of the rest of this License.\par
+\par
+ 8. If the distribution and/or use of the Program is restricted in\par
+certain countries either by patents or by copyrighted interfaces, the\par
+original copyright holder who places the Program under this License\par
+may add an explicit geographical distribution limitation excluding\par
+those countries, so that distribution is permitted only in or among\par
+countries not thus excluded. In such case, this License incorporates\par
+the limitation as if written in the body of this License.\par
+\par
+ 9. The Free Software Foundation may publish revised and/or new versions\par
+of the General Public License from time to time. Such new versions will\par
+be similar in spirit to the present version, but may differ in detail to\par
+address new problems or concerns.\par
+\par
+Each version is given a distinguishing version number. If the Program\par
+specifies a version number of this License which applies to it and "any\par
+later version", you have the option of following the terms and conditions\par
+either of that version or of any later version published by the Free\par
+Software Foundation. If the Program does not specify a version number of\par
+this License, you may choose any version ever published by the Free Software\par
+Foundation.\par
+\par
+ 10. If you wish to incorporate parts of the Program into other free\par
+programs whose distribution conditions are different, write to the author\par
+to ask for permission. For software which is copyrighted by the Free\par
+Software Foundation, write to the Free Software Foundation; we sometimes\par
+make exceptions for this. Our decision will be guided by the two goals\par
+of preserving the free status of all derivatives of our free software and\par
+of promoting the sharing and reuse of software generally.\par
+\par
+ NO WARRANTY\par
+\par
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\par
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\par
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\par
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\par
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\par
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\par
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\par
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\par
+REPAIR OR CORRECTION.\par
+\par
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\par
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\par
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\par
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\par
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\par
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\par
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\par
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\par
+POSSIBILITY OF SUCH DAMAGES.\par
+\par
+ END OF TERMS AND CONDITIONS\par
+\par
+ How to Apply These Terms to Your New Programs\par
+\par
+ If you develop a new program, and you want it to be of the greatest\par
+possible use to the public, the best way to achieve this is to make it\par
+free software which everyone can redistribute and change under these terms.\par
+\par
+ To do so, attach the following notices to the program. It is safest\par
+to attach them to the start of each source file to most effectively\par
+convey the exclusion of warranty; and each file should have at least\par
+the "copyright" line and a pointer to where the full notice is found.\par
+\par
+ <one line to give the program's name and a brief idea of what it does.>\par
+ Copyright (C) <year> <name of author>\par
+\par
+ This program is free software; you can redistribute it and/or modify\par
+ it under the terms of the GNU General Public License as published by\par
+ the Free Software Foundation; either version 2 of the License, or \par
+ (at your option) any later version.\par
+\par
+ This program is distributed in the hope that it will be useful,\par
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\par
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par
+ GNU General Public License for more details.\par
+\par
+ You should have received a copy of the GNU General Public License along\par
+ with this program; if not, write to the Free Software Foundation, Inc.,\par
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\par
+\par
+Also add information on how to contact you by electronic and paper mail.\par
+\par
+If the program is interactive, make it output a short notice like this\par
+when it starts in an interactive mode:\par
+\par
+ Gnomovision version 69, Copyright (C) year name of author\par
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par
+ This is free software, and you are welcome to redistribute it\par
+ under certain conditions; type `show c' for details.\par
+\par
+The hypothetical commands `show w' and `show c' should show the appropriate\par
+parts of the General Public License. Of course, the commands you use may\par
+be called something other than `show w' and `show c'; they could even be\par
+mouse-clicks or menu items--whatever suits your program.\par
+\par
+You should also get your employer (if you work as a programmer) or your\par
+school, if any, to sign a "copyright disclaimer" for the program, if\par
+necessary. Here is a sample; alter the names:\par
+\par
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program\par
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.\par
+\par
+ <signature of Ty Coon>, 1 April 1989\par
+ Ty Coon, President of Vice\par
+\par
+This General Public License does not permit incorporating your program into\par
+proprietary programs. If your program is a subroutine library, you may\par
+consider it more useful to permit linking proprietary applications with the\par
+library. If this is what you want to do, use the GNU Lesser General\par
+Public License instead of this License.\par
+\par
+------------------------------------------------------------------------\par
+Part III:\par
+\par
+Parts of this software are licensed as follows\par
+\par
+ Copyright (c) 1988, 1992, 1993\par
+ The Regents of the University of California. All rights reserved.\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions\par
+ are met:\par
+ 1. Redistributions of source code must retain the above copyright\par
+ notice, this list of conditions and the following disclaimer.\par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ 3. Neither the name of the University nor the names of its contributors\par
+ may be used to endorse or promote products derived from this software\par
+ without specific prior written permission.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\par
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\par
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\par
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\par
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\par
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\par
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\par
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\par
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\par
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\par
+ SUCH DAMAGE.\par
+\par
+\par
+ Copyright (c) 2003 Markus Friedl. All rights reserved.\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions\par
+ are met:\par
+ 1. Redistributions of source code must retain the above copyright\par
+ notice, this list of conditions and the following disclaimer.\par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\par
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\par
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\par
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\par
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\par
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\par
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\par
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\par
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\par
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par
+\par
+\par
+ Copyright (c) 2003 Endace Technology Ltd, Hamilton, New Zealand.\par
+ All rights reserved.\par
+ \par
+ This software and documentation has been developed by Endace Technology Ltd.\par
+ along with the DAG PCI network capture cards. For further information please\par
+ visit {\field{\*\fldinst{HYPERLINK "http://www.endace.com/"}}{\fldrslt{\ul\cf1 http://www.endace.com/}}}\f0\fs20 .\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions are met:\par
+ \par
+ 1. Redistributions of source code must retain the above copyright notice,\par
+ this list of conditions and the following disclaimer.\par
+ \par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ \par
+ 3. The name of Endace Technology Ltd may not be used to endorse or promote\par
+ products derived from this software without specific prior written\par
+ permission.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY ENDACE TECHNOLOGY LTD ``AS IS'' AND ANY EXPRESS\par
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\par
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\par
+ EVENT SHALL ENDACE TECHNOLOGY LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\par
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\par
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\par
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER\par
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\par
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\par
+ POSSIBILITY OF SUCH DAMAGE.\par
+\par
+\par
+ Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.\par
+ All rights reserved.\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions\par
+ are met:\par
+ 1. Redistributions of source code must retain the above copyright\par
+ notice, this list of conditions and the following disclaimer.\par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ 3. Neither the name of the project nor the names of its contributors\par
+ may be used to endorse or promote products derived from this software\par
+ without specific prior written permission.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND\par
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\par
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\par
+ ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE\par
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\par
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\par
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\par
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\par
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\par
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\par
+ SUCH DAMAGE.\par
+\par
+\par
+ Copyright (c) 1997, 1999 Hellmuth Michaelis. All rights reserved.\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions\par
+ are met:\par
+ 1. Redistributions of source code must retain the above copyright\par
+ notice, this list of conditions and the following disclaimer.\par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\par
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\par
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\par
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\par
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\par
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\par
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\par
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\par
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\par
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\par
+ SUCH DAMAGE.\par
+\f1\par
+}
+ diff --git a/packaging/wix/ComponentGroups.wxi b/packaging/wix/ComponentGroups.wxi new file mode 100644 index 00000000..8a649732 --- /dev/null +++ b/packaging/wix/ComponentGroups.wxi @@ -0,0 +1,913 @@ +<?xml version="1.0" encoding="utf-8"?> +<Include> + + <!-- Wireshark --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpWireshark_exe" Guid="*"> + <File Id="filWireshark_exe" KeyPath="yes" Source="$(var.WiresharkQt.Dir)\Wireshark.exe" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Wireshark"> + <ComponentRef Id="cmpWireshark_exe" /> + </ComponentGroup> + </Fragment> + + <!-- Install for every user --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpWiretap_dll" Guid="*"> + <File Id="filWiretap_dll" KeyPath="yes" Source="$(var.Staging.Dir)\libwiretap.dll" /> + </Component> + <Component Id="cmpLibwireshark_dll" Guid="*"> + <File Id="filLibwireshark_dll" KeyPath="yes" Source="$(var.Staging.Dir)\libwireshark.dll" /> + </Component> + <Component Id="cmpLibwsutil_dll" Guid="*"> + <File Id="filLibwsutil_dll" KeyPath="yes" Source="$(var.Staging.Dir)\libwsutil.dll" /> + </Component> + <Component Id="cmpCOPYING_txt" Guid="*"> + <File Id="filCOPYING_txt" KeyPath="yes" Source="$(var.Staging.Dir)\COPYING.txt" /> + </Component> + <Component Id="cmpNEWS_txt" Guid="*"> + <File Id="filNEWS_txt" KeyPath="yes" Source="$(var.Staging.Dir)\NEWS.txt" /> + </Component> + <Component Id="cmpREADME_txt" Guid="*"> + <File Id="filREADME_txt" KeyPath="yes" Source="$(var.Staging.Dir)\README.txt" /> + </Component> + <Component Id="cmpREADME_windows_txt" Guid="*"> + <File Id="filREADME_windows_txt" KeyPath="yes" Source="$(var.Staging.Dir)\README.windows.txt" /> + </Component> + <Component Id="cmpWka" Guid="*"> + <File Id="filWka" KeyPath="yes" Source="$(var.Staging.Dir)\wka" /> + </Component> + <Component Id="cmpPdml2html_xsl" Guid="*"> + <File Id="filPdml2html_xsl" KeyPath="yes" Source="$(var.Staging.Dir)\pdml2html.xsl" /> + </Component> + <Component Id="cmpWs_css" Guid="*"> + <File Id="filWs_css" KeyPath="yes" Source="$(var.Staging.Dir)\ws.css" /> + </Component> + <Component Id="cmpWireshark_html" Guid="*"> + <File Id="filWireshark_html" KeyPath="yes" Source="$(var.Staging.Dir)\wireshark.html" /> + </Component> + <Component Id="cmpWireshark_filter_html" Guid="*"> + <File Id="filWireshark_filter_html" KeyPath="yes" Source="$(var.Staging.Dir)\wireshark-filter.html" /> + </Component> + <Component Id="cmpDumpcap_exe" Guid="*"> + <File Id="filDumpcap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\dumpcap.exe" /> + </Component> + <Component Id="cmpDumpcap_html" Guid="*"> + <File Id="filDumpcap_html" KeyPath="yes" Source="$(var.Staging.Dir)\dumpcap.html" /> + </Component> + <Component Id="cmpExtcap_html" Guid="*"> + <File Id="filExtcap_html" KeyPath="yes" Source="$(var.Staging.Dir)\extcap.html" /> + </Component> + <Component Id="cmpIpmap_html" Guid="*"> + <File Id="filIpmap_html" KeyPath="yes" Source="$(var.Staging.Dir)\ipmap.html" /> + </Component> + <Component Id="cmpReleaseNotes_html" Guid="*"> + <File Id="filReleaseNotes_html" KeyPath="yes" Source="$(var.Staging.Dir)\release-notes.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.WiresharkRequired"> + <ComponentRef Id="cmpWiretap_dll" /> + <ComponentRef Id="cmpLibwireshark_dll" /> + <ComponentRef Id="cmpLibwsutil_dll" /> + <ComponentRef Id="cmpCOPYING_txt" /> + <ComponentRef Id="cmpNEWS_txt" /> + <ComponentRef Id="cmpREADME_txt" /> + <ComponentRef Id="cmpREADME_windows_txt" /> + <ComponentRef Id="cmpWka" /> + <ComponentRef Id="cmpPdml2html_xsl" /> + <ComponentRef Id="cmpWs_css" /> + <ComponentRef Id="cmpWireshark_html" /> + <ComponentRef Id="cmpWireshark_filter_html" /> + <ComponentRef Id="cmpDumpcap_exe" /> + <ComponentRef Id="cmpDumpcap_html" /> + <ComponentRef Id="cmpExtcap_html" /> + <ComponentRef Id="cmpIpmap_html" /> + <ComponentRef Id="cmpReleaseNotes_html" /> + </ComponentGroup> + </Fragment> + + <!-- global config files By design these shouldn't be overwritten if they already exist --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpCfilters" Guid="*"> + <File Id="filCfilters" KeyPath="yes" Source="$(var.Staging.Dir)\cfilters" /> + </Component> + <Component Id="cmpColorfilters" Guid="*"> + <File Id="filColorfilters" KeyPath="yes" Source="$(var.Staging.Dir)\colorfilters" /> + </Component> + <Component Id="cmpDfilters" Guid="*"> + <File Id="filDfilters" KeyPath="yes" Source="$(var.Staging.Dir)\dfilters" /> + </Component> + <Component Id="cmpSmi_modules" Guid="*"> + <File Id="filSmi_modules" KeyPath="yes" Source="$(var.Staging.Dir)\smi_modules" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.ColorFilters"> + <ComponentRef Id="cmpCfilters" /> + <ComponentRef Id="cmpColorfilters" /> + <ComponentRef Id="cmpDfilters" /> + <ComponentRef Id="cmpSmi_modules" /> + </ComponentGroup> + </Fragment> + + <!-- dtds --> + <Fragment> + <DirectoryRef Id="dirDtds"> + <Component Id="cmpDc_dtd" Guid="*"> + <File Id="filDc_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\dc.dtd" /> + </Component> + <Component Id="cmpItunes_dtd" Guid="*"> + <File Id="filItunes_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\itunes.dtd" /> + </Component> + <Component Id="cmpMscml_dtd" Guid="*"> + <File Id="filMscml_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\mscml.dtd" /> + </Component> + <Component Id="cmpPocsettings_dtd" Guid="*"> + <File Id="filPocsettings_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\pocsettings.dtd" /> + </Component> + <Component Id="cmpPresence_dtd" Guid="*"> + <File Id="filPresence_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\presence.dtd" /> + </Component> + <Component Id="cmpReginfo_dtd" Guid="*"> + <File Id="filReginfo_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\reginfo.dtd" /> + </Component> + <Component Id="cmpRlmi_dtd" Guid="*"> + <File Id="filRlmi_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\rlmi.dtd" /> + </Component> + <Component Id="cmpRss_dtd" Guid="*"> + <File Id="filRss_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\rss.dtd" /> + </Component> + <Component Id="cmpSmil_dtd" Guid="*"> + <File Id="filSmil_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\smil.dtd" /> + </Component> + <Component Id="cmpXcap_caps_dtd" Guid="*"> + <File Id="filXcap_caps_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\xcap-caps.dtd" /> + </Component> + <Component Id="cmpXcap_error_dtd" Guid="*"> + <File Id="filXcap_error_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\xcap-error.dtd" /> + </Component> + <Component Id="cmpWatcherinfo_dtd" Guid="*"> + <File Id="filWatcherinfo_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\watcherinfo.dtd" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Dtds"> + <ComponentRef Id="cmpDc_dtd" /> + <ComponentRef Id="cmpItunes_dtd" /> + <ComponentRef Id="cmpMscml_dtd" /> + <ComponentRef Id="cmpPocsettings_dtd" /> + <ComponentRef Id="cmpPresence_dtd" /> + <ComponentRef Id="cmpReginfo_dtd" /> + <ComponentRef Id="cmpRlmi_dtd" /> + <ComponentRef Id="cmpRss_dtd" /> + <ComponentRef Id="cmpSmil_dtd" /> + <ComponentRef Id="cmpXcap_caps_dtd" /> + <ComponentRef Id="cmpXcap_error_dtd" /> + <ComponentRef Id="cmpWatcherinfo_dtd" /> + </ComponentGroup> + </Fragment> + + <!-- TPNCP DAT file --> + <Fragment> + <DirectoryRef Id="dirTpncp"> + <Component Id="cmpTpncp_dat" Guid="*"> + <File Id="filTpncp_dat" KeyPath="yes" Source="$(var.Tpncp.Dir)\tpncp.dat" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tpncp"> + <ComponentRef Id="cmpTpncp_dat" /> + </ComponentGroup> + </Fragment> + + <!-- wimaxasncp TLV definitions --> + <Fragment> + <DirectoryRef Id="dirWimaxasncp"> + <Component Id="cmpWimaxasncp_dictionary_xml" Guid="*"> + <File Id="filWimaxasncp_dictionary_xml" KeyPath="yes" Source="$(var.Wimaxasncp.Dir)\dictionary.xml" /> + </Component> + <Component Id="cmpWimaxasncp_dictionary_dtd" Guid="*"> + <File Id="filWimaxasncp_dictionary_dtd" KeyPath="yes" Source="$(var.Wimaxasncp.Dir)\dictionary.dtd" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Wimaxasncp"> + <ComponentRef Id="cmpWimaxasncp_dictionary_xml" /> + <ComponentRef Id="cmpWimaxasncp_dictionary_dtd" /> + </ComponentGroup> + </Fragment> + + <!-- protobuf TLV definitions --> + <Fragment> + <DirectoryRef Id="dirProtobuf"> + <Component Id="cmpProtobuf_sparkplug_b_proto" Guid="*"> + <File Id="filProtobuf_sparkplug_b_proto" KeyPath="yes" Source="$(var.Protobuf.Dir)\sparkplug_b.proto" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Protobuf"> + <ComponentRef Id="cmpProtobuf_sparkplug_b_proto" /> + </ComponentGroup> + </Fragment> + + <!-- TShark --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpTShark_exe" Guid="*"> + <File Id="filTShark_exe" KeyPath="yes" Source="$(var.Staging.Dir)\tshark.exe" /> + </Component> + <Component Id="cmpTShark_html" Guid="*"> + <File Id="filTShark_html" KeyPath="yes" Source="$(var.Staging.Dir)\tshark.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.TShark"> + <ComponentRef Id="cmpTShark_exe" /> + <ComponentRef Id="cmpTShark_html" /> + </ComponentGroup> + </Fragment> + + <!-- Configuration Profiles --> + <Fragment> + <DirectoryRef Id="dirProfiles"> + <Directory Id="dirBluetooth" Name="Bluetooth"> + <Component Id="cmpBluetooth_colorfilters" Guid="*"> + <File Id="filBluetooth_colorfilters" KeyPath="yes" Source="$(var.Profiles.Dir)\Bluetooth\colorfilters" /> + </Component> + <Component Id="cmpBluetooth_preferences" Guid="*"> + <File Id="filBluetooth_preferences" KeyPath="yes" Source="$(var.Profiles.Dir)\Bluetooth\preferences" /> + </Component> + </Directory> + <Directory Id="dirClassic" Name="Classic"> + <Component Id="cmpClassic_colorfilters" Guid="*"> + <File Id="filClassic_colorfilters" KeyPath="yes" Source="$(var.Profiles.Dir)\Classic\colorfilters" /> + </Component> + </Directory> + <Directory Id="dirNoReassembly" Name="No Reassembly"> + <Component Id="cmpNoReassembly_preferences" Guid="*"> + <File Id="filNoReassembly_preferences" KeyPath="yes" Source="$(var.Profiles.Dir)\No Reassembly\preferences" /> + </Component> + </Directory> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Plugins.ConfigurationProfiles"> + <ComponentRef Id="cmpBluetooth_colorfilters" /> + <ComponentRef Id="cmpBluetooth_preferences" /> + <ComponentRef Id="cmpClassic_colorfilters" /> + <ComponentRef Id="cmpNoReassembly_preferences" /> + </ComponentGroup> + </Fragment> + + <!-- Editcap --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpEditcap_exe" Guid="*"> + <File Id="filEditcap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\editcap.exe" /> + </Component> + <Component Id="cmpEditcap_html" Guid="*"> + <File Id="filEditcap_html" KeyPath="yes" Source="$(var.Staging.Dir)\editcap.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Editcap"> + <ComponentRef Id="cmpEditcap_exe" /> + <ComponentRef Id="cmpEditcap_html" /> + </ComponentGroup> + </Fragment> + + <!-- Text2Pcap --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpText2pcap_exe" Guid="*"> + <File Id="filText2pcap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\text2pcap.exe" /> + </Component> + <Component Id="cmpText2pcap_html" Guid="*"> + <File Id="filText2pcap_html" KeyPath="yes" Source="$(var.Staging.Dir)\text2pcap.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Text2Pcap"> + <ComponentRef Id="cmpText2pcap_exe" /> + <ComponentRef Id="cmpText2pcap_html" /> + </ComponentGroup> + </Fragment> + + <!-- Mergecap --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpMergecap_exe" Guid="*"> + <File Id="filMergecap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\mergecap.exe" /> + </Component> + <Component Id="cmpMergecap_html" Guid="*"> + <File Id="filMergecap_html" KeyPath="yes" Source="$(var.Staging.Dir)\mergecap.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Mergecap"> + <ComponentRef Id="cmpMergecap_exe" /> + <ComponentRef Id="cmpMergecap_html" /> + </ComponentGroup> + </Fragment> + + <!-- Reordercap --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpReordercap_exe" Guid="*"> + <File Id="filReordercap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\reordercap.exe" /> + </Component> + <Component Id="cmpReordercap_html" Guid="*"> + <File Id="filReordercap_html" KeyPath="yes" Source="$(var.Staging.Dir)\reordercap.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Reordercap"> + <ComponentRef Id="cmpReordercap_exe" /> + <ComponentRef Id="cmpReordercap_html" /> + </ComponentGroup> + </Fragment> + + <!-- Capinfos --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpCapinfos_exe" Guid="*"> + <File Id="filCapinfos_exe" KeyPath="yes" Source="$(var.Staging.Dir)\capinfos.exe" /> + </Component> + <Component Id="cmpCapinfos_html" Guid="*"> + <File Id="filCapinfos_html" KeyPath="yes" Source="$(var.Staging.Dir)\capinfos.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Capinfos"> + <ComponentRef Id="cmpCapinfos_exe" /> + <ComponentRef Id="cmpCapinfos_html" /> + </ComponentGroup> + </Fragment> + + <!-- Captype --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpCaptype_exe" Guid="*"> + <File Id="filCaptype_exe" KeyPath="yes" Source="$(var.Staging.Dir)\captype.exe" /> + </Component> + <Component Id="cmpCaptype_html" Guid="*"> + <File Id="filCaptype_html" KeyPath="yes" Source="$(var.Staging.Dir)\captype.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Captype"> + <ComponentRef Id="cmpCaptype_exe" /> + <ComponentRef Id="cmpCaptype_html" /> + </ComponentGroup> + </Fragment> + + <!-- Rawshark --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpRawshark_exe" Guid="*"> + <File Id="filRawshark_exe" KeyPath="yes" Source="$(var.Staging.Dir)\rawshark.exe" /> + </Component> + <Component Id="cmpRawshark_html" Guid="*"> + <File Id="filRawshark_html" KeyPath="yes" Source="$(var.Staging.Dir)\rawshark.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Rawshark"> + <ComponentRef Id="cmpRawshark_exe" /> + <ComponentRef Id="cmpRawshark_html" /> + </ComponentGroup> + </Fragment> + + <!-- Randpkt --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpRandpkt_exe" Guid="*"> + <File Id="filRandpkt_exe" KeyPath="yes" Source="$(var.Staging.Dir)\randpkt.exe" /> + </Component> + <Component Id="cmpRandpkt_html" Guid="*"> + <File Id="filRandpkt_html" KeyPath="yes" Source="$(var.Staging.Dir)\randpkt.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Randpkt"> + <ComponentRef Id="cmpRandpkt_exe" /> + <ComponentRef Id="cmpRandpkt_html" /> + </ComponentGroup> + </Fragment> + + <!-- Sharkd --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpSharkd_exe" Guid="*"> + <File Id="filSharkd_exe" KeyPath="yes" Source="$(var.Staging.Dir)\sharkd.exe" /> + </Component> + <!-- + <Component Id="cmpSharkd_html" Guid="*"> + <File Id="filSharkd_html" KeyPath="yes" Source="$(var.Staging.Dir)\sharkd.html" /> + </Component> + --> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Sharkd"> + <ComponentRef Id="cmpSharkd_exe" /> + <!-- + <ComponentRef Id="cmpSharkd_html" /> + --> + </ComponentGroup> + </Fragment> + + <!-- MMDBResolve --> + <?ifdef MMDBRESOLVE_EXE?> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpMmdbresolve_exe" Guid="*"> + <File Id="filMmdbresolve_exe" KeyPath="yes" Source="$(var.Staging.Dir)\mmdbresolve.exe" /> + </Component> + <Component Id="cmpMmdbresolve_html" Guid="*"> + <File Id="filMmdbresolve_html" KeyPath="yes" Source="$(var.Staging.Dir)\mmdbresolve.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.MMDBResolve"> + <ComponentRef Id="cmpMmdbresolve_exe" /> + <ComponentRef Id="cmpMmdbresolve_html" /> + </ComponentGroup> + </Fragment> + <?endif?> + + <!-- Androiddump --> + <Fragment> + <DirectoryRef Id="dirExtcap"> + <Component Id="cmpAndroiddump_exe" Guid="*"> + <File Id="filAndroiddump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\androiddump.exe" /> + </Component> + </DirectoryRef> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpAndroiddump_html" Guid="*"> + <File Id="filAndroiddump_html" KeyPath="yes" Source="$(var.Staging.Dir)\androiddump.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Androiddump"> + <ComponentRef Id="cmpAndroiddump_exe" /> + <ComponentRef Id="cmpAndroiddump_html" /> + </ComponentGroup> + </Fragment> + + <!-- Randpktdump --> + <Fragment> + <DirectoryRef Id="dirExtcap"> + <Component Id="cmpRandpktdump_exe" Guid="*"> + <File Id="filRandpktdump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\randpktdump.exe" /> + </Component> + </DirectoryRef> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpRandpktdump_html" Guid="*"> + <File Id="filRandpktdump_html" KeyPath="yes" Source="$(var.Staging.Dir)\randpktdump.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Randpktdump"> + <ComponentRef Id="cmpRandpktdump_exe" /> + <ComponentRef Id="cmpRandpktdump_html" /> + </ComponentGroup> + </Fragment> + + <!-- Etwdump --> + <Fragment> + <DirectoryRef Id="dirExtcap"> + <Component Id="cmpEtwdump_exe" Guid="*"> + <File Id="filEtwdump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\etwdump.exe" /> + </Component> + </DirectoryRef> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpEtwdump_html" Guid="*"> + <File Id="filEtwdump_html" KeyPath="yes" Source="$(var.Staging.Dir)\etwdump.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Etwdump"> + <ComponentRef Id="cmpEtwdump_exe" /> + <ComponentRef Id="cmpEtwdump_html" /> + </ComponentGroup> + </Fragment> + + <!-- Sshdump --> + <Fragment> + <DirectoryRef Id="dirExtcap"> + <Component Id="cmpSshdump_exe" Guid="*"> + <File Id="filSshdump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\sshdump.exe" /> + </Component> + </DirectoryRef> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpSshdump_html" Guid="*"> + <File Id="filSshdump_html" KeyPath="yes" Source="$(var.Staging.Dir)\sshdump.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Sshdump"> + <ComponentRef Id="cmpSshdump_exe" /> + <ComponentRef Id="cmpSshdump_html" /> + </ComponentGroup> + </Fragment> + + <!-- Ciscodump --> + <Fragment> + <DirectoryRef Id="dirExtcap"> + <Component Id="cmpCiscodump_exe" Guid="*"> + <File Id="filCiscodump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\Ciscodump.exe" /> + </Component> + </DirectoryRef> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpCiscodump_html" Guid="*"> + <File Id="filCiscodump_html" KeyPath="yes" Source="$(var.Staging.Dir)\Ciscodump.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Ciscodump"> + <ComponentRef Id="cmpCiscodump_exe" /> + <ComponentRef Id="cmpCiscodump_html" /> + </ComponentGroup> + </Fragment> + + <!-- Wifidump --> + <Fragment> + <DirectoryRef Id="dirExtcap"> + <Component Id="cmpWifidump_exe" Guid="*"> + <File Id="filWifidump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\wifidump.exe" /> + </Component> + </DirectoryRef> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpWifidump_html" Guid="*"> + <File Id="filWifidump_html" KeyPath="yes" Source="$(var.Staging.Dir)\wifidump.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Wifidump"> + <ComponentRef Id="cmpWifidump_exe" /> + <ComponentRef Id="cmpWifidump_html" /> + </ComponentGroup> + </Fragment> + + <!-- Udpdump --> + <Fragment> + <DirectoryRef Id="dirExtcap"> + <Component Id="cmpUdpdump_exe" Guid="*"> + <File Id="filUdpdump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\Udpdump.exe" /> + </Component> + </DirectoryRef> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpUdpdump_html" Guid="*"> + <File Id="filUdpdump_html" KeyPath="yes" Source="$(var.Staging.Dir)\Udpdump.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Tools.Udpdump"> + <ComponentRef Id="cmpUdpdump_exe" /> + <ComponentRef Id="cmpUdpdump_html" /> + </ComponentGroup> + </Fragment> + + <?ifdef DOCBOOK_DIR?> + <!-- User Guide is created by heat --> + <!-- FAQ --> + <Fragment> + <DirectoryRef Id="INSTALLFOLDER"> + <Component Id="cmpFAQ_html" Guid="*"> + <File Id="filFAQ_html" KeyPath="yes" Source="$(var.DOCBOOK_DIR)\faq.html" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Documentation"> + <ComponentRef Id="cmpFAQ_html" /> + </ComponentGroup> + </Fragment> + <?endif?> + + <!-- Shortcuts --> + <Fragment> + <ComponentGroup Id="CG.WiresharkStartMenu" Directory="ProgramMenuFolder"> + <Component Id="cmpWiresharkShortcut"> + <Shortcut Id="scWireshark" Name="$(var.WiresharkName)" Description="The $(var.WiresharkName) Network Protocol Analyzer" Target="[#filWireshark_exe]" WorkingDirectory="INSTALLFOLDER" /> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="StartMenuShortcut" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_START_MENU = "1"</Condition> + </Component> + </ComponentGroup> + <ComponentGroup Id="CG.WiresharkDesktopIcon" Directory="DesktopFolder"> + <Component Id="cmpWiresharkDesktopIcon"> + <Shortcut Id="scWiresharkDesktop" Name="$(var.WiresharkName)" Description="The $(var.WiresharkName) Network Protocol Analyzer" Target="[#filWireshark_exe]" WorkingDirectory="INSTALLFOLDER" /> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="DesktopIcon" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_DESKTOP_ICON = "1"</Condition> + </Component> + </ComponentGroup> + <ComponentGroup Id="CG.WiresharkQuickLaunchIcon" Directory="QuickLaunchFolder"> + <Component Id="cmpWiresharkQuickLaunchIcon"> + <Shortcut Id="scWiresharkQuickLaunch" Name="$(var.WiresharkName)" Description="The $(var.WiresharkName) Network Protocol Analyzer" Target="[#filWireshark_exe]" WorkingDirectory="INSTALLFOLDER" /> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="QuickLaunchIcon" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_QUICK_LAUNCH_ICON = "1"</Condition> + <!-- Done to keep ICE64 happy --> + <RemoveFolder Id="RemoveMicrosoftFolder" Directory="MicrosoftFolder" On="uninstall" /> + <RemoveFolder Id="RemoveInternetExplorerFolder" Directory="InternetExplorerFolder" On="uninstall" /> + <RemoveFolder Id="RemoveQuickLaunchFolder" Directory="QuickLaunchFolder" On="uninstall" /> + </Component> + </ComponentGroup> + </Fragment> + + <!-- File Associations --> + <Fragment> + <ComponentGroup Id="CG.WiresharkFileAssociations" Directory="INSTALLFOLDER"> + <Component Id="cmpFA5vw"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="5vw"> + <Extension Id="5vw"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="5vw" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAacp"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="acp"> + <Extension Id="acp"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="acp" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAapc"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="apc"> + <Extension Id="apc"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="apc" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAatc"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="atc"> + <Extension Id="atc"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="atc" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAbfr"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="bfr"> + <Extension Id="bfr"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="bfr" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAcap"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="cap"> + <Extension Id="cap"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="cap" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAenc"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="enc"> + <Extension Id="enc"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="enc" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAerf"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="erf"> + <Extension Id="erf"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="erf" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAfdc"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="fdc"> + <Extension Id="fdc"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="fdc" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAipfix"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="ipfix"> + <Extension Id="ipfix"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="ipfix" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAlcap"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="lcap"> + <Extension Id="lcap"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="lcap" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAmplog"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="mplog"> + <Extension Id="mplog"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="mplog" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAntar"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="ntar"> + <Extension Id="ntar"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="ntar" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAout"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="out"> + <Extension Id="out"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="out" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFApcap"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="pcap"> + <Extension Id="pcap"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="pcap" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFApcapng"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="pcapng"> + <Extension Id="pcapng"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="pcapng" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFApklg"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="pklg"> + <Extension Id="pklg"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="pklg" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFApkt"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="pkt"> + <Extension Id="pkt"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="pkt" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFArf5"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="rf5"> + <Extension Id="rf5"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="rf5" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAsnoop"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="snoop"> + <Extension Id="snoop"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="snoop" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAsyc"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="syc"> + <Extension Id="syc"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="syc" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAtpc"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="tpc"> + <Extension Id="tpc"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="tpc" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAtr1"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="tr1"> + <Extension Id="tr1"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="tr1" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAtrace"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="trace"> + <Extension Id="trace"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="trace" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAtrc"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="trc"> + <Extension Id="trc"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="trc" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAvwr"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="vwr"> + <Extension Id="vwr"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="vwr" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAwpc"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="wpc"> + <Extension Id="wpc"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="wpc" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + <Component Id="cmpFAwpz"> + <ProgId Id="$(var.WiresharkFileAssociation)" Description="wpz"> + <Extension Id="wpz"> + <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument=""%1""/> + </Extension> + </ProgId> + <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="wpz" Type="integer" Value="1" KeyPath="yes"/> + <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition> + </Component> + </ComponentGroup> + </Fragment> + + <!-- C-runtime redistributable --> + <Fragment> + <DirectoryRef Id="TARGETDIR"> + <Merge Id="VCRedist" SourceFile="$(var.VCRedistDir)\Microsoft_$(var.VCRedistVersion)_CRT_$(var.Platform).msm" DiskId="1" Language="0"/> + </DirectoryRef> + </Fragment> + +</Include> diff --git a/packaging/wix/DirectoryStructure.wxi b/packaging/wix/DirectoryStructure.wxi new file mode 100644 index 00000000..f06297ed --- /dev/null +++ b/packaging/wix/DirectoryStructure.wxi @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<Include> + + <!-- Basic directory structure --> + <Fragment> + <!-- "Special" directory, required for the root drive --> + <Directory Id="TARGETDIR" Name="SourceDir"> + <!-- "Special" directory for desktop --> + <Directory Id="DesktopFolder" Name="Desktop"/> + <!-- "Special" directory, required for the Program Files folder --> + <Directory Id="$(var.PlatformProgramFilesFolder)"> + <!-- These directories follow the typical hierarchical structure --> + <Directory Id="INSTALLFOLDER" Name="$(var.WiresharkName)"> + <Directory Id="dirDtds" Name="dtds"/> + <Directory Id="dirDiameter" Name="diameter"/> + <Directory Id="dirExtcap" Name="extcap"/> + <Directory Id="dirHelp" Name="help"/> + <Directory Id="dirRadius" Name="radius"/> + <Directory Id="dirPlugins" Name="plugins"> + <Directory Id="dirPluginsVersion" Name="$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)"> + <Directory Id="dirPluginsVersionEpan" Name="epan"/> + <Directory Id="dirPluginsVersionWtap" Name="wiretap"/> + <Directory Id="dirPluginsVersionCodecs" Name="codecs"/> + </Directory> + </Directory> + <Directory Id="dirUsersGuide" Name="Wireshark User's Guide"/> + <Directory Id="dirProfiles" Name="profiles"/> + <Directory Id="dirSnmp" Name="snmp"> + <Directory Id="dirSnmpMibs" Name="mibs"/> + </Directory> + <Directory Id="dirTpncp" Name="tpncp"/> + <Directory Id="dirTranslations" Name="translations"/> + <Directory Id="dirWimaxasncp" Name="wimaxasncp"/> + <Directory Id="dirProtobuf" Name="protobuf"/> + </Directory> + </Directory> + + <!-- "Special" directory for the Start Menu --> + <Directory Id="ProgramMenuFolder"> + <!-- Shortcuts directly in menu --> + </Directory> + <!-- "Special" directory for Quick Launch --> + <Directory Id="AppDataFolder"> + <Directory Id="MicrosoftFolder" Name="Microsoft"> + <Directory Id="InternetExplorerFolder" Name="Internet Explorer"> + <Directory Id="QuickLaunchFolder" Name="Quick Launch" /> + </Directory> + </Directory> + </Directory> + </Directory> + + </Fragment> +</Include> diff --git a/packaging/wix/Features.wxi b/packaging/wix/Features.wxi new file mode 100644 index 00000000..ffaa4d60 --- /dev/null +++ b/packaging/wix/Features.wxi @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="utf-8"?> +<Include> + + <!-- User-selectable features --> + <Fragment> + <Feature Id="Fe.Wireshark" Title="$(var.WiresharkName)" Level="1" AllowAdvertise="yes" Display="expand" Description="The main network protocol analyzer application."> + <ComponentGroupRef Id="CG.Wireshark" /> + <ComponentGroupRef Id="CG.QtDependencies" /> + <ComponentGroupRef Id="CG.QtTranslations" /> + <ComponentGroupRef Id="CG.WiresharkStartMenu" /> + <ComponentGroupRef Id="CG.WiresharkDesktopIcon" /> + <ComponentGroupRef Id="CG.WiresharkQuickLaunchIcon" /> + <ComponentGroupRef Id="CG.WiresharkFileAssociations" /> + </Feature> + <Feature Id="Fe.WiresharkRequired" Title="Required" Level="1" AllowAdvertise="yes" Display="hidden" Description="Install for every user"> + <ComponentGroupRef Id="CG.WiresharkRequired" /> + <ComponentGroupRef Id="CG.ColorFilters" /> + <ComponentGroupRef Id="CG.Diameter" /> + <ComponentGroupRef Id="CG.RadiusDict" /> + <ComponentGroupRef Id="CG.Dtds" /> + <ComponentGroupRef Id="CG.Tpncp" /> + <ComponentGroupRef Id="CG.Wimaxasncp" /> + <ComponentGroupRef Id="CG.Protobuf" /> + <ComponentGroupRef Id="CG.RequiredDependencies" /> + + </Feature> + <Feature Id="Fe.TShark" Title="TShark" Level="1" AllowAdvertise="yes" Display="expand" Description="Text based network protocol analyzer."> + <ComponentGroupRef Id="CG.TShark" /> + </Feature> + <Feature Id="Fe.Plugins" Title="Plugins & Extensions" Level="1" AllowAdvertise="yes" Display="expand" Description="Plugins and extensions for both $(var.WiresharkName) and TShark."> + <!-- XXX - Cleanup plugins directory on uninstall --> + <Feature Id="Fe.Plugins.Dissector" Title="Dissector Plugins" Level="1" AllowAdvertise="yes" Display="expand" Description="Additional protocol dissectors."> + <ComponentGroupRef Id="CG.Plugins.Dissector" /> + </Feature> + <Feature Id="Fe.Plugins.TreeStat" Title="Tree Statistics Plugin" Level="1" AllowAdvertise="yes" Display="expand" Description="Extended statistics."> + <ComponentGroupRef Id="CG.Plugins.TreeStat" /> + </Feature> + <Feature Id="Fe.Plugins.Mate" Title="Mate - Meta Analysis and Tracing Engine" Level="1" AllowAdvertise="yes" Display="expand" Description="Plugin - Meta Analysis and Tracing Engine (Experimental)."> + <ComponentGroupRef Id="CG.Plugins.Mate" /> + </Feature> + <Feature Id="Fe.Plugins.Transum" Title="TRANSUM - Network and application performance analysis" Level="1" AllowAdvertise="yes" Display="expand" Description="Plugin - Network and application performance analysis (Experimental)."> + <ComponentGroupRef Id="CG.Plugins.Transum" /> + </Feature> + <Feature Id="Fe.Plugins.Wiretap" Title="Wiretap Plugins" Level="1" AllowAdvertise="yes" Display="expand" Description="Additional file formats support."> + <ComponentGroupRef Id="CG.Plugins.Wiretap" /> + </Feature> + <Feature Id="Fe.Plugins.Codecs" Title="Codec Plugins" Level="1" AllowAdvertise="yes" Display="expand" Description="Codecs playback support."> + <ComponentGroupRef Id="CG.Plugins.Codecs" /> + </Feature> + <Feature Id="Fe.Plugins.ConfigurationProfiles" Title="Configuration Profiles" Level="1" AllowAdvertise="yes" Display="expand" Description="Configuration Profiles"> + <!-- XXX - Cleanup configuration profiles directory on uninstall --> + <ComponentGroupRef Id="CG.Plugins.ConfigurationProfiles" /> + </Feature> + <?ifdef SMI_DIR?> + <Feature Id="Fe.Plugins.SNMP" Title="SNMP MIBs" Level="1" AllowAdvertise="yes" Display="expand" Description="SNMP MIBs for better SNMP dissection."> + <ComponentGroupRef Id="CG.Plugins.SNMP" /> + </Feature> + <?endif?> + </Feature> + <Feature Id="Fe.Tools" Title="Tools" Level="1" AllowAdvertise="yes" Display="expand" Description="Additional command line based tools."> + <Feature Id="Fe.Tools.Editcap" Title="Editcap" Level="1" AllowAdvertise="yes" Display="expand" Description="Copy packets to a new file, optionally trimmming packets, omitting them, or saving to a different format."> + <ComponentGroupRef Id="CG.Tools.Editcap" /> + </Feature> + <Feature Id="Fe.Tools.Text2Pcap" Title="Text2Pcap" Level="1" AllowAdvertise="yes" Display="expand" Description="Read an ASCII hex dump and write the data into a libpcap-style capture file."> + <ComponentGroupRef Id="CG.Tools.Text2Pcap" /> + </Feature> + <Feature Id="Fe.Tools.Mergecap" Title="Mergecap" Level="1" AllowAdvertise="yes" Display="expand" Description="Combine multiple saved capture files into a single output file."> + <ComponentGroupRef Id="CG.Tools.Mergecap" /> + </Feature> + <Feature Id="Fe.Tools.Reordercap" Title="Reordercap" Level="1" AllowAdvertise="yes" Display="expand" Description="Copy packets to a new file, sorted by time."> + <ComponentGroupRef Id="CG.Tools.Reordercap" /> + </Feature> + <Feature Id="Fe.Tools.Capinfos" Title="Capinfos" Level="1" AllowAdvertise="yes" Display="expand" Description="Print information about capture files."> + <ComponentGroupRef Id="CG.Tools.Capinfos" /> + </Feature> + <Feature Id="Fe.Tools.Captype" Title="Captype" Level="1" AllowAdvertise="yes" Display="expand" Description="Print the types of capture files."> + <ComponentGroupRef Id="CG.Tools.Captype" /> + </Feature> + <Feature Id="Fe.Tools.Rawshark" Title="Rawshark" Level="1" AllowAdvertise="yes" Display="expand" Description="Raw packet filter."> + <ComponentGroupRef Id="CG.Tools.Rawshark" /> + </Feature> + <Feature Id="Fe.Tools.Sharkd" Title="Sharkd" Level="1" AllowAdvertise="yes" Display="expand" Description="Packet dissection daemon."> + <ComponentGroupRef Id="CG.Tools.Sharkd" /> + </Feature> + <?ifdef MMDBRESOLVE_EXE?> + <Feature Id="Fe.Tools.MMDBResolve" Title="MMDBResolve" Level="1" AllowAdvertise="yes" Display="expand" Description="IP geolocation database resolution."> + <ComponentGroupRef Id="CG.Tools.MMDBResolve" /> + </Feature> + <?endif?> + <Feature Id="Fe.Tools.Androiddump" Title="Androiddump" Level="2" AllowAdvertise="yes" Display="expand" Description="Provide capture interfaces from Android devices."> + <ComponentGroupRef Id="CG.Tools.Androiddump" /> + </Feature> + <Feature Id="Fe.Tools.Randpktdump" Title="Randpktdump" Level="2" AllowAdvertise="yes" Display="expand" Description="Provide random packet generator."> + <ComponentGroupRef Id="CG.Tools.Randpktdump" /> + </Feature> + <Feature Id="Fe.Tools.Etwdump" Title="Etwdump" Level="2" AllowAdvertise="yes" Display="expand" Description="Provide ETW reader."> + <ComponentGroupRef Id="CG.Tools.Etwdump" /> + </Feature> + <Feature Id="Fe.Tools.Sshdump" Title="Sshdump" Level="1" AllowAdvertise="yes" Display="expand" Description="Provide remote capture through SSH."> + <ComponentGroupRef Id="CG.Tools.Sshdump" /> + </Feature> + <Feature Id="Fe.Tools.Ciscodump" Title="Ciscodump" Level="1" AllowAdvertise="yes" Display="expand" Description="Provide capture interface from a remote Cisco router through SSH."> + <ComponentGroupRef Id="CG.Tools.Ciscodump" /> + </Feature> + <Feature Id="Fe.Tools.Udpdump" Title="Udpdump" Level="1" AllowAdvertise="yes" Display="expand" Description="Provide capture interface that gets UDP packets from network devices."> + <ComponentGroupRef Id="CG.Tools.Udpdump" /> + </Feature> + <Feature Id="Fe.Tools.Wifidump" Title="Wifidump" Level="1" AllowAdvertise="yes" Display="expand" Description="Provide remote capture of Wi-Fi frames through SSH."> + <ComponentGroupRef Id="CG.Tools.Wifidump" /> + </Feature> + </Feature> + <?ifdef DOCBOOK_DIR?> + <Feature Id="Fe.Documentation" Title="Documentation" Level="1" AllowAdvertise="yes" Display="expand" Description="Install an offline copy of the User's Guide and FAQ."> + <ComponentGroupRef Id="CG.Documentation" /> + </Feature> + <?endif?> + <Feature Id="VCRedist" Title="Visual C++ Runtime" AllowAdvertise="no" Display="hidden" Level="1"> + <MergeRef Id="VCRedist"/> + </Feature> + </Fragment> +</Include> diff --git a/packaging/wix/InputPaths.wxi b/packaging/wix/InputPaths.wxi new file mode 100644 index 00000000..5ff62355 --- /dev/null +++ b/packaging/wix/InputPaths.wxi @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<Include> + + <?if $(var.Platform) = x64 ?> + <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?> + <?else?> + <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?> + <?endif?> + + <?define Staging.Dir ="$(var.BuildOutputDir)" ?> + <?define Plugins.Dir ="$(var.Staging.Dir)\plugins" ?> + <?define Profiles.Dir ="$(var.Staging.Dir)\profiles" ?> + <?define Extcap.Dir ="$(var.Staging.Dir)\extcap" ?> + <?define WiresharkQt.Dir ="$(var.Staging.Dir)" ?> + <?define Dtds.Dir ="$(var.Staging.Dir)\dtds" ?> + <?define Tpncp.Dir ="$(var.Staging.Dir)\tpncp" ?> + <?define Wimaxasncp.Dir ="$(var.Staging.Dir)\wimaxasncp" ?> + <?define Protobuf.Dir ="$(var.Staging.Dir)\protobuf" ?> + <?define Help.Dir ="$(var.Staging.Dir)\help" ?> + <?define Epan.Lua.Dir ="..\..\epan\wslua" ?> + +</Include> diff --git a/packaging/wix/Plugins.wxi b/packaging/wix/Plugins.wxi new file mode 100644 index 00000000..0b53cf48 --- /dev/null +++ b/packaging/wix/Plugins.wxi @@ -0,0 +1,150 @@ +<?xml version="1.0" encoding="utf-8"?> +<Include> + + <!-- Plugins --> + <Fragment> + <DirectoryRef Id="dirPluginsVersionEpan"> + <Component Id="cmpEthercat_dll" Guid="*"> + <File Id="filEthercat_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\ethercat.dll" /> + </Component> + <Component Id="cmpGryphon_dll" Guid="*"> + <File Id="filGryphon_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\gryphon.dll" /> + </Component> + <Component Id="cmpIrda_dll" Guid="*"> + <File Id="filIrda_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\irda.dll" /> + </Component> + <Component Id="cmpOpcua_dll" Guid="*"> + <File Id="filOpcua_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\opcua.dll" /> + </Component> + <Component Id="cmpProfinet_dll" Guid="*"> + <File Id="filProfinet_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\profinet.dll" /> + </Component> + <Component Id="cmpUnistim_dll" Guid="*"> + <File Id="filUnistim_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\unistim.dll" /> + </Component> + <Component Id="cmpWimax_dll" Guid="*"> + <File Id="filWimax_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\wimax.dll" /> + </Component> + <Component Id="cmpWimaxasmcp_dll" Guid="*"> + <File Id="filWimaxasmcp_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\wimaxasncp.dll" /> + </Component> + <Component Id="cmpWimaxmacphy_dll" Guid="*"> + <File Id="filWimaxmacphy_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\wimaxmacphy.dll" /> + </Component> + <!-- Add custom plugin Components here --> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Plugins.Dissector"> + <ComponentRef Id="cmpEthercat_dll" /> + <ComponentRef Id="cmpGryphon_dll" /> + <ComponentRef Id="cmpIrda_dll" /> + <ComponentRef Id="cmpOpcua_dll" /> + <ComponentRef Id="cmpProfinet_dll" /> + <ComponentRef Id="cmpUnistim_dll" /> + <ComponentRef Id="cmpWimax_dll" /> + <ComponentRef Id="cmpWimaxasmcp_dll" /> + <ComponentRef Id="cmpWimaxmacphy_dll" /> + <!-- Add custom plugin ComponentRefs here --> + </ComponentGroup> + </Fragment> + + <!-- Stats Tree --> + <Fragment> + <DirectoryRef Id="dirPluginsVersionEpan"> + <Component Id="cmpStatsTree_dll" Guid="*"> + <File Id="filStatsTree_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\stats_tree.dll" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Plugins.TreeStat"> + <ComponentRef Id="cmpStatsTree_dll" /> + </ComponentGroup> + </Fragment> + + <!-- MATE --> + <Fragment> + <DirectoryRef Id="dirPluginsVersionEpan"> + <Component Id="cmpMate_dll" Guid="*"> + <File Id="filMate_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\mate.dll" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Plugins.Mate"> + <ComponentRef Id="cmpMate_dll" /> + </ComponentGroup> + </Fragment> + + <!-- TRANSUM --> + <Fragment> + <DirectoryRef Id="dirPluginsVersionEpan"> + <Component Id="cmpTransum_dll" Guid="*"> + <File Id="filTransum_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\transum.dll" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Plugins.Transum"> + <ComponentRef Id="cmpTransum_dll" /> + </ComponentGroup> + </Fragment> + + <!-- wiretap --> + <Fragment> + <DirectoryRef Id="dirPluginsVersionWtap"> + <Component Id="cmpUsbdump_dll" Guid="*"> + <File Id="filUsbdump_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\wiretap\usbdump.dll" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Plugins.Wiretap"> + <ComponentRef Id="cmpUsbdump_dll" /> + </ComponentGroup> + </Fragment> + + <!-- codecs --> + <Fragment> + <DirectoryRef Id="dirPluginsVersionCodecs"> + <Component Id="cmpG711_dll" Guid="*"> + <File Id="filG711_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g711.dll" /> + </Component> + <Component Id="cmpG722_dll" Guid="*"> + <File Id="filG722_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g722.dll" /> + </Component> + <Component Id="cmpG726_dll" Guid="*"> + <File Id="filG726_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g726.dll" /> + </Component> + <Component Id="cmpG729_dll" Guid="*"> + <File Id="filG729_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g729.dll" /> + </Component> + <Component Id="cmpL16mono_dll" Guid="*"> + <File Id="filL16mono_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\l16mono.dll" /> + </Component> + <Component Id="cmpSBC_dll" Guid="*"> + <File Id="filSBC_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\sbc.dll" /> + </Component> + <Component Id="cmpILBC_dll" Guid="*"> + <File Id="filILBC_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\ilbc.dll" /> + </Component> + <Component Id="cmpOPUS_dll" Guid="*"> + <File Id="filOPUS_dec_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\opus_dec.dll" /> + </Component> + </DirectoryRef> + </Fragment> + <Fragment> + <ComponentGroup Id="CG.Plugins.Codecs"> + <ComponentRef Id="cmpG711_dll" /> + <ComponentRef Id="cmpG722_dll" /> + <ComponentRef Id="cmpG726_dll" /> + <ComponentRef Id="cmpG729_dll" /> + <ComponentRef Id="cmpL16mono_dll" /> + <ComponentRef Id="cmpSBC_dll" /> + <ComponentRef Id="cmpILBC_dll" /> + <ComponentRef Id="cmpOPUS_dll" /> + </ComponentGroup> + </Fragment> + +</Include> diff --git a/packaging/wix/Prerequisites.wxi b/packaging/wix/Prerequisites.wxi new file mode 100644 index 00000000..54e8416a --- /dev/null +++ b/packaging/wix/Prerequisites.wxi @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="utf-8"?> +<Include xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"> + + <!-- Check for required dependencies here --> + <!-- + You can debug the logic below (and lots of other things) by running + msiexec /i packaging\wix\Wireshark-xxx.msi /l*v msilog.txt + --> + <Fragment> + + <!-- Do not remove: The contents of this "fragment" will not be included in the project, + unless we reference at least one item defined within it. + This "IncludePrerequisites" property is referenced in the "Product" element, + to ensure the entire fragment is included. --> + <Property Id="IncludePrerequisites">1</Property> + + <!-- This should match the following: + - The NTDDI_VERSION and _WIN32_WINNT parts of cmakeconfig.h.in + - The <compatibility><application> section in image\wireshark.exe.manifest.in + - The GetWindowsVersion parts of packaging\nsis\wireshark.nsi + --> + <Condition Message="Windows 2000 is no longer supported. Please install $(var.WiresharkName) 1.2 or 1.0 instead."> + <![CDATA[Installed OR (VersionNT < 500) OR (VersionNT > 500)]]> + </Condition> + + <Condition Message="WindowsXP is no longer supported. Please install $(var.WiresharkName) 1.12 or 1.10 instead."> + <![CDATA[Installed OR (VersionNT < 501) OR (VersionNT > 501)]]> + </Condition> + + <Condition Message="Windows Server 2003 is no longer supported. Please install $(var.WiresharkName) 1.12 or 1.10 instead."> + <![CDATA[Installed OR (VersionNT < 502) OR (VersionNT > 502)]]> + </Condition> + + <Condition Message="Windows Vista and Server 2008 are no longer supported. Please install $(var.WiresharkName) 2.2 instead."> + <![CDATA[Installed OR (VersionNT < 600) OR (VersionNT > 600)]]> + </Condition> + + <Condition Message="$(var.WiresharkName)$(var.WiresharkVersion) is only supported on Windows 7, Windows Server 2008R2, or higher."> + <![CDATA[Installed OR (VersionNT >= 601)]]> + </Condition> + +<!-- + NSIS package uninstallation. The NSIS installer writes a bunch of keys to + 'HKEY_LOCAL_MACHINE\SOFTWARE\{Wow6432Node\,}Microsoft\Windows\CurrentVersion\Uninstall\Wireshark'. + See the 'WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}"' statements + starting at around line 780 in nsis\wireshark.nsi for a complete list. + + For now look for 'InstallLocation' and cancel the installation if + it's defined and exists. Next steps: + - look for 'QuietUninstallString' and offer to run it. + - Show properties in condition messages as described below. +--> + + <Property Id="NSIS_INSTALL_LOCATION_32" Secure="yes"> + <RegistrySearch Id='NsisInstallRegistrySearch32' + Type='raw' + Root='HKLM' + Key='SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark' + Name='InstallLocation' + Win64='no'> + <DirectorySearch Id='NsisInstallDirectorySearch32' AssignToProperty='yes'/> + </RegistrySearch> + </Property> + + <Property Id="NSIS_DISPLAY_NAME_32" Value="Wireshark" Secure="yes"> + <RegistrySearch Id='NsisDisplayNameRegistrySearch32' + Type='raw' + Root='HKLM' + Key='SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark' + Name='DisplayName' + Win64='no'/> + </Property> + + <Condition Message="[NSIS_DISPLAY_NAME_32] was installed in [NSIS_INSTALL_LOCATION_32] using the .exe installer. Please uninstall it using Programs and Features."> + <![CDATA[Installed OR NOT NSIS_INSTALL_LOCATION_32]]> + </Condition> + + <Property Id="NSIS_INSTALL_LOCATION_64" Secure="yes"> + <RegistrySearch Id='NsisInstallRegistrySearch64' + Type='raw' + Root='HKLM' + Key='SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark' + Name='InstallLocation' + Win64='yes'> + <DirectorySearch Id='NsisInstallDirectorySearch64' AssignToProperty='yes'/> + </RegistrySearch> + </Property> + + <Property Id="NSIS_DISPLAY_NAME_64" Value="Wireshark" Secure="yes"> + <RegistrySearch Id='NsisDisplayNameRegistrySearch64' + Type='raw' + Root='HKLM' + Key='SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark' + Name='DisplayName' + Win64='yes'/> + </Property> + + <Condition Message="[NSIS_DISPLAY_NAME_64] was installed in [NSIS_INSTALL_LOCATION_64] using the .exe installer. Please uninstall it using Programs and Features."> + <![CDATA[Installed OR NOT NSIS_INSTALL_LOCATION_64]]> + </Condition> + + </Fragment> +</Include> diff --git a/packaging/wix/README.adoc b/packaging/wix/README.adoc new file mode 100644 index 00000000..78af64c1 --- /dev/null +++ b/packaging/wix/README.adoc @@ -0,0 +1,47 @@ += WiX (.msi) Installer For Wireshark + +This is an experimental feature to provide Wireshark with an .msi installer as requested in https://gitlab.com/wireshark/wireshark/-/issues/8814[issue 8814]. +It might one day replace the NSIS installer, but needs to be a little more complete before doing so. + +== Differences/Notes Compared To The NSIS Installer + +. You need the https://wixtoolset.org/[WiX toolset] to build the .msi installer. +Version 3.10 or later is recommended. + +. The User's Guide, SNMP, Radius, Diameter, and Qt translations files are harvested to +be included in the installer. Any custom/additional files just need to be written to the +appropriate build output directory and the installer will pick them up. NSIS required +modifying a file (custom_mibs.txt, etc) for inclusion + +. Plugin DLLs are not automatically harvested. To include your DLL, modify Plugins.wxi. + +. To build the WiX installer run: +---- +> msbuild /m /p:Configuration=RelWithDebInfo wireshark_wix_prep.vcxproj +> msbuild /m /p:Configuration=RelWithDebInfo wireshark_wix.vcxproj +---- + +== Known Issues + +. The .msi installer does not include and install Npcap or USBPcap like the NSIS installer does. +These currently come as NSIS-generated .exe installers. +We might be able to bundle them as https://wixtoolset.org/documentation/manual/v3/xsd/wix/exepackage.html[ExePackage elements]. + +// This appears to be fixed in the MERGE_MODULE_DIR code in CMakeLists.txt? +// . Needs more flexible handling of VC CRT Merge module (need build script to provide appropriate macros). +// Something like (or modifying existing) FindMSVC_REDIST.cmake. +// Currently only VS2013 / CRT120 and VS 2015 / CRT140 are supported. + +. Transitioning, upgrading, downgrading, and reinstalling is more tricky. +The NSIS-based installer handles previously-installed versions by running any existing uninstaller prior to installation, which empties the installation directory and removes registry entries. +These are subsequently filled back in by the installer. +The Windows Installer architecture keeps track of installed items in a https://docs.microsoft.com/en-us/windows/win32/msi/installer-database[database] and uses the https://docs.microsoft.com/en-us/windows/win32/msi/upgradecode[UpgradeCode property] to identify installed products and the https://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html[MajorUpgrade property] to control upgrade behavior. +As a result, + * We can't easily upgrade from an NSIS-based installation to a .msi installation, and vice versa. + * We have to be careful about setting things like UpgradeCode, MajorUpgrade, and REINSTALLMODE in our WiX configuration. + +. The lax behavior of the NSIS-based installer lets you install more than one copy of Wireshark if you specify different installation directories. +(The most recently installed version "wins" as far as registry entries and file associations go). +The .msi installer doesn't allow this. + +Patches welcome to address any of the issues above or improvements you think can be made. diff --git a/packaging/wix/StringOverrides.wxl b/packaging/wix/StringOverrides.wxl new file mode 100644 index 00000000..d0930c84 --- /dev/null +++ b/packaging/wix/StringOverrides.wxl @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<WixLocalization Culture="en-US" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization"> + <String Id="WelcomeDlgDescription" Overridable="yes">This will install [ProductName] [ProductVersion] on your computer. If you installed [ProductName] using the .exe installer please uninstall it first.</String> +</WixLocalization> diff --git a/packaging/wix/UserInterface.wxi b/packaging/wix/UserInterface.wxi new file mode 100644 index 00000000..e5726664 --- /dev/null +++ b/packaging/wix/UserInterface.wxi @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<Include> + <!-- Define the appearance, sequence, and available options in the user interface --> + <Fragment> + <WixVariable Id="WixUILicenseRtf" Value="$(var.EulaPath)" /> + <WixVariable Id="WixUIBannerBmp" Value="$(var.BannerImagePath)" /> + <WixVariable Id="WixUIDialogBmp" Value="$(var.DialogImagePath)" /> + <Icon Id="ProgramsFeaturesIcon" SourceFile="$(var.ProgramsFeaturesIconPath)"/> + <Property Id="ARPPRODUCTICON" Value="ProgramsFeaturesIcon" /> + + <!-- This UI identifier will be used in the product definition--> + <UI Id="UI.Wireshark"> + + <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" ></Property> + <UIRef Id="WiresharkWixUI" /> + </UI> + </Fragment> +</Include> diff --git a/packaging/wix/Wireshark.wxs b/packaging/wix/Wireshark.wxs new file mode 100644 index 00000000..8421bf0d --- /dev/null +++ b/packaging/wix/Wireshark.wxs @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> + + <?define WiresharkFileAssociation = "wireshark-capture-file" ?> + + <!-- The path to the installer's End-User License Agreement, displayed during installation --> + <?define EulaPath="$(var.AssetDir)\COPYING.rtf"?> + <!-- Windows 8 and later supports PNG. Until then we use cave paintings^W^W BMP. --> + <?define BannerImagePath="$(var.AssetDir)\banner.bmp"?> + <?define DialogImagePath="$(var.AssetDir)\dialog.bmp"?> + <!-- Use the application icon in "Programs and Features" + This is apparently stored uncompressed, i.e. we should use a dedicated + .ico file instead of pointing to wireshark.exe. + --> + <?define ProgramsFeaturesIconPath="$(var.IconDir)\wireshark.ico"?> + <Product Id="*" Name="$(var.WiresharkName)" Language="1033" Version="$(var.WiresharkVersion)" Manufacturer="The Wireshark developer community, https://www.wireshark.org/" UpgradeCode="0d67aace-269a-4264-81a3-da8055c1c79c"> + <Package InstallerVersion="500" Compressed="yes" InstallScope="perMachine" /> + <!-- Values for Additional Tasks --> + <Property Id="WIRESHARK_START_MENU" Value="1" Secure="yes"/> + <Property Id="WIRESHARK_DESKTOP_ICON" Secure="yes"/> + <Property Id="WIRESHARK_QUICK_LAUNCH_ICON" Value="1" Secure="yes" /> + <Property Id="WIRESHARK_LEGACY_START_MENU" Value="1" Secure="yes" /> + <Property Id="WIRESHARK_LEGACY_DESKTOP_ICON" Secure="yes"/> + <Property Id="WIRESHARK_LEGACY_QUICK_LAUNCH_ICON" Value="1" Secure="yes" /> + <Property Id="WIRESHARK_FILE_EXTENSIONS" Value="1"/> + + <!-- We set AllowSameVersionUpgrade so that automated builds (which + only differ by micro version numbers) won't get installed side + by side. The WiX documentation seems to warn against this, so we + might want to find a better fix, e.g. REINSTALLMODE + AllowDowngrades: + https://stackoverflow.com/questions/1544990/wix-major-upgrade-doesnt-completely-install-app-on-downgrade + --> + <MajorUpgrade + DowngradeErrorMessage="A newer version of $(var.WiresharkName) is already installed." + AllowSameVersionUpgrades="yes" + /> + + + <MediaTemplate EmbedCab="yes" CompressionLevel="high" /> + + <!-- Include the prerequisites, by referencing the placeholder property --> + <PropertyRef Id="IncludePrerequisites" /> + + <!-- Include the top-most parent feature --> + <FeatureRef Id="Fe.Wireshark" /> + + <!-- Include the installer UI definition --> + <UIRef Id="UI.Wireshark"/> + </Product> + + <?include InputPaths.wxi ?> + <?include DirectoryStructure.wxi ?> + <?include Prerequisites.wxi ?> + <?include ComponentGroups.wxi ?> + <?include Plugins.wxi ?> + <?include Features.wxi ?> + <?include UserInterface.wxi ?> +</Wix> diff --git a/packaging/wix/WiresharkOptionsDlg.wxs b/packaging/wix/WiresharkOptionsDlg.wxs new file mode 100644 index 00000000..0790ccd2 --- /dev/null +++ b/packaging/wix/WiresharkOptionsDlg.wxs @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> + <Fragment> + <UI> + <!-- + Recommended control sizing and spacing: + https://docs.microsoft.com/en-us/windows/win32/uxguide/vis-layout#control-sizing + https://docs.microsoft.com/en-us/windows/win32/uxguide/vis-layout#spacing + The recommended spacing between unrelated controls is 7, but 10 looks better. + --> + <Dialog Id="WiresharkOptionsDlg" Width="370" Height="270" Title="!(loc.LicenseAgreementDlg_Title)"> + <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.LicenseAgreementDlgBannerBitmap)"/> + <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0"/> + <Control Id="Title" Type="Text" X="14" Y="7" Width="350" Height="15" Transparent="yes" NoPrefix="yes" Text="Packet capture, shortcuts, and file extensions"/> + <Control Id="Description" Type="Text" X="20" Y="26" Width="350" Height="15" Transparent="yes" NoPrefix="yes" Text="You must install Npcap or WinPcap in order to capture packets."/> + + <!-- BannerLine y = 44, 44 + 7 = 51 --> + <Control Id="NetworkCapture" Type="Text" X="14" Y="51" Width="350" Height="12" Text="{\WixUI_Font_Bold}Wireshark requires Npcap or WinPcap to capture network packets"/> + <Control Id="NetworkCaptureNpcap" Type="Hyperlink" X="20" Y="63" Width="350" Height="11"> + <Text><![CDATA[<a href="https://npcap.org">Download Npcap</a> (recommended)]]></Text> + </Control> + <!-- It looks Hyperlink controls only support one hyperlink, per control. --> + <Control Id="NetworkCaptureWinPcap" Type="Hyperlink" X="20" Y="74" Width="350" Height="11"> + <Text><![CDATA[…or <a href="https://www.winpcap.org">download WinPcap</a>]]></Text> + </Control> + + <!-- NetworkCaptureWinPcap y = 74, 74 + 8 + 10 = 92 --> + <Control Id="UsbCapture" Type="Text" X="14" Y="92" Width="350" Height="12" Text="{\WixUI_Font_Bold}Wireshark requires USBPcap to capture USB Packets"/> + <Control Id="UsbCaptureUsbPcap" Type="Hyperlink" X="20" Y="104" Width="350" Height="11"> + <Text><![CDATA[<a href="https://desowin.org/usbpcap/">Download USBPcap</a> (experimental)]]></Text> + </Control> + + <!-- UsbCaptureUsbPcap y = 104, 104 + 8 + 10 = 122 --> + <Control Id="Shortcuts" Type="Text" X="14" Y="122" Width="350" Height="11" Text="{\WixUI_Font_Bold}Create Shortcuts"/><!-- h = static text + label spacing = 8 + 3 --> + <Control Id="WiresharkStartMenuCB" Type="CheckBox" X="20" Y="133" Width="350" Height="14" CheckBoxValue="1" Property="WIRESHARK_START_MENU" Text="Wireshark Start Menu Item"><!-- h = 10 + 4 --> + <Condition Action="enable"><![CDATA[&Fe.Wireshark = 3]]></Condition> + <Condition Action="disable"><![CDATA[&Fe.Wireshark <> 3]]></Condition> + </Control> + <Control Id="WiresharkDesktopIconCB" Type="CheckBox" X="20" Y="147" Width="350" Height="14" CheckBoxValue="1" Property="WIRESHARK_DESKTOP_ICON" Text="Wireshark Desktop Icon"> + <Condition Action="enable"><![CDATA[&Fe.Wireshark = 3]]></Condition> + <Condition Action="disable"><![CDATA[&Fe.Wireshark <> 3]]></Condition> + </Control> + <Control Id="WiresharkQuickLaunchIconCB" Type="CheckBox" X="20" Y="161" Width="350" Height="14" CheckBoxValue="1" Property="WIRESHARK_QUICK_LAUNCH_ICON" Text="Wireshark Quick Launch Icon"> + <Condition Action="enable"><![CDATA[&Fe.Wireshark = 3]]></Condition> + <Condition Action="disable"><![CDATA[&Fe.Wireshark <> 3]]></Condition> + </Control> + + <!-- WiresharkQuickLaunchIconCB y = 161, 161 + 10 + 10 = 181 --> + <Control Id="FileExtensions" Type="Text" X="14" Y="181" Width="350" Height="11" Text="{\WixUI_Font_Bold}Associate File Extensions"/><!-- h = static text + label spacing = 8 + 3 --> + <Control Id="FileExtensionsCB" Type="CheckBox" X="20" Y="192" Width="350" Height="14" CheckBoxValue="1" Property="WIRESHARK_FILE_EXTENSIONS" Text="Associate trace file extensions with Wireshark"> + <Condition Action="enable"><![CDATA[&Fe.Wireshark = 3]]></Condition> + <Condition Action="disable"><![CDATA[&Fe.Wireshark <> 3]]></Condition> + </Control> + <Control Id="FileExtensionsText1" Type="Text" X="20" Y="206" Width="350" Height="11" Transparent="yes" NoPrefix="yes" Text="Extensions include 5vw, acp, apc, atc, bfr, cap, enc, erf, fdc, lcap, mplog, ntar, out,"/> + <Control Id="FileExtensionsText2" Type="Text" X="20" Y="217" Width="350" Height="11" Transparent="yes" NoPrefix="yes" Text="pcap, pcapng, pkt, rf5, snoop, syc, tpc, tr1, trace, trc, vwr, wpc, and wpz."/> + + <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0"/> + <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)"/> + <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)"/> + <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)"> + <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish> + </Control> + </Dialog> + </UI> + </Fragment> +</Wix> diff --git a/packaging/wix/WiresharkWixUI.wxs b/packaging/wix/WiresharkWixUI.wxs new file mode 100644 index 00000000..e066d198 --- /dev/null +++ b/packaging/wix/WiresharkWixUI.wxs @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + <copyright file="WixUI_FeatureTree.wxs" company="Outercurve Foundation"> + Copyright (c) 2004, Outercurve Foundation. + This software is released under Microsoft Reciprocal License (MS-RL). + The license and further copyright text can be found in the file + LICENSE.TXT at the root directory of the distribution. + </copyright> +--> + +<!-- +First-time install dialog sequence: + - WixUI_WelcomeDlg + - WixUI_LicenseAgreementDlg + - WixUI_CustomizeDlg + - WixUI_VerifyReadyDlg + - WixUI_DiskCostDlg + +Maintenance dialog sequence: + - WixUI_MaintenanceWelcomeDlg + - WixUI_MaintenanceTypeDlg + - WixUI_CustomizeDlg + - WixUI_VerifyReadyDlg + +Patch dialog sequence: + - WixUI_WelcomeDlg + - WixUI_VerifyReadyDlg +--> + +<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> + <Fragment> + <UI Id="WiresharkWixUI"> + <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" /> + <TextStyle Id="WixUI_Font_Bold" FaceName="Tahoma" Size="8" Bold="yes"/> + <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" /> + <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" /> + + <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" /> + <Property Id="WixUI_Mode" Value="FeatureTree" /> + + <DialogRef Id="ErrorDlg" /> + <DialogRef Id="FatalError" /> + <DialogRef Id="FilesInUse" /> + <DialogRef Id="MsiRMFilesInUse" /> + <DialogRef Id="PrepareDlg" /> + <DialogRef Id="ProgressDlg" /> + <DialogRef Id="ResumeDlg" /> + <DialogRef Id="UserExit" /> + + <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish> + + <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish> + <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish> + + <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish> + <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg">LicenseAccepted = "1"</Publish> + + <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">Installed</Publish> + <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg" Order="2">NOT Installed</Publish> + <Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="WiresharkOptionsDlg">1</Publish> + + <Publish Dialog="WiresharkOptionsDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg">1</Publish> + <Publish Dialog="WiresharkOptionsDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">1</Publish> + + <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WiresharkOptionsDlg">1</Publish> + <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish> + <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish> + <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish> + <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish> + <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish> + <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish> + + <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">NOT Installed OR WixUI_InstallMode = "Change"</Publish> + <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish> + <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3">Installed AND PATCH</Publish> + + <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish> + + <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="CustomizeDlg">1</Publish> + <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> + <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> + <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish> + </UI> + + <UIRef Id="WixUI_Common" /> + </Fragment> +</Wix> diff --git a/packaging/wix/banner.bmp b/packaging/wix/banner.bmp Binary files differnew file mode 100644 index 00000000..10ab9e60 --- /dev/null +++ b/packaging/wix/banner.bmp diff --git a/packaging/wix/banner.svg b/packaging/wix/banner.svg new file mode 100644 index 00000000..4bacfe5a --- /dev/null +++ b/packaging/wix/banner.svg @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="493" + height="58" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="banner.svg" + viewBox="0 0 493 58" + inkscape:export-filename="/tmp/banner.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="1" + inkscape:pageshadow="2" + inkscape:zoom="0.8356998" + inkscape:cx="246.5" + inkscape:cy="29" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="931" + inkscape:window-height="683" + inkscape:window-x="398" + inkscape:window-y="899" + inkscape:window-maximized="0" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-994.36218)"> + <image + xlink:href="../../image/wsiconinst48.png" + width="48" + height="48" + preserveAspectRatio="none" + id="image4971" + x="440" + y="999.36218" /> + </g> +</svg> diff --git a/packaging/wix/dialog.bmp b/packaging/wix/dialog.bmp Binary files differnew file mode 100644 index 00000000..f6a704a3 --- /dev/null +++ b/packaging/wix/dialog.bmp diff --git a/packaging/wix/dialog.svg b/packaging/wix/dialog.svg new file mode 100644 index 00000000..1754c805 --- /dev/null +++ b/packaging/wix/dialog.svg @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="500" + height="314" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="dialog.svg" + viewBox="0 0 500 314" + inkscape:export-filename="/tmp/dialog.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="1" + inkscape:pageshadow="2" + inkscape:zoom="0.824" + inkscape:cx="248.78641" + inkscape:cy="157" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="931" + inkscape:window-height="683" + inkscape:window-x="251" + inkscape:window-y="882" + inkscape:window-maximized="0" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-738.36218)"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect4907" + width="163" + height="313" + x="0.5" + y="738.86218" /> + <image + xlink:href="../../image/wsiconinst128.png" + width="128" + height="128" + preserveAspectRatio="none" + id="image4904" + x="18" + y="756.36218" /> + <rect + y="738.86218" + x="0.5" + height="313" + width="163" + id="rect4690" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#babdb6;fill-opacity:0.49723756;fill-rule:nonzero;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + </g> +</svg> diff --git a/packaging/wix/windeployqt-to-wix.ps1 b/packaging/wix/windeployqt-to-wix.ps1 new file mode 100644 index 00000000..a1696434 --- /dev/null +++ b/packaging/wix/windeployqt-to-wix.ps1 @@ -0,0 +1,165 @@ +# windeployqt-to-wix +# +# Windeployqt-to-wix - Convert the output of windeployqt to an equivalent set of +# Wix file and component statements. +# +# Copyright 2016 Michael Mann +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later + +#requires -version 2 + +<# +.SYNOPSIS +Creates Wix components required for Qt packaging. + +.DESCRIPTION +This script creates n Wix-compatible include file based on the output of +windeployqt. If Qt is present, version 5.3 or later is required. +Otherwise a dummy file will be created. + +If building with Qt, QMake must be in your PATH. + +.PARAMETER Executable +The path to a Qt application. It will be examined for dependent DLLs. + +.PARAMETER FilePath +Output filename. + +.INPUTS +-Executable Path to the Qt application. +-FilePath Output Wix include file. + +.OUTPUTS +Wix file required to package supporting DLLs. + +.EXAMPLE +C:\PS> .\windeployqt-to-wix.ps1 windeployqt.exe ..\..\staging\wireshark.exe qt-dll-manifest.wxs +#> + +Param( + [Parameter(Mandatory=$true, Position=0)] + [String] $Executable, + + [Parameter(Position=1)] + [String] $FilePath = "qt-dll-manifest.wxs" +) + + +try { + $qtVersion = [version](qmake -query QT_VERSION) + $wixComponents = "<Wix xmlns=`"http://schemas.microsoft.com/wix/2006/wi`"> +<?include InputPaths.wxi ?> +" + $wixComponents += @("<!-- Qt version " + $qtVersion ; "--> +") + + if ($qtVersion -lt "5.3") { + Throw "Qt " + $qtVersion + " found. 5.3 or later is required." + } + + # windeployqt lists translation files that it don't exist (e.g. + # qtbase_ar.qm), so we handle those by hand. + # https://bugreports.qt.io/browse/QTBUG-65974 + $wdqtList = windeployqt ` + --release ` + --no-compiler-runtime ` + --no-translations ` + --list relative ` + $Executable + + $dllPath = Split-Path -Parent $Executable + + $dllList = " <Fragment> + <DirectoryRef Id=`"INSTALLFOLDER`"> +" + $dirList = "" + $currentDir = "" + $startDirList = " <Fragment> + <DirectoryRef Id=`"INSTALLFOLDER`"> +" + $endDirList = " </Directory> + </DirectoryRef> + </Fragment> +" + $currentDirList = $startDirList + + $componentGroup = " <Fragment> + <ComponentGroup Id=`"CG.QtDependencies`"> +" + foreach ($entry in $wdqtList) { + $dir = Split-Path -Parent $entry + if ($dir) { + if ($dir -ne $currentDir) { + if ($currentDir -ne "") { # for everything but first directory found + $currentDirList += $endDirList + + # Previous directory complete, add to list + $dirList += $currentDirList + } + + $currentDirList = $startDirList + " <Directory Id=`"dir$dir`" Name=`"$dir`"> + " + + $currentDir = $dir + } + + $wix_name = $entry -replace "[\\|\.]", "_" + $currentDirList += " <Component Id=`"cmp$wix_name`" Guid=`"*`"> + <File Id=`"fil$wix_name`" KeyPath=`"yes`" Source=`"`$(var.Staging.Dir)\$entry`" /> + </Component> +" + $componentGroup += " <ComponentRef Id=`"cmp$wix_name`" /> +" + } else { + + $dllList += " <Component Id=`"cmp$entry`" Guid=`"*`"> + <File Id=`"fil$entry`" KeyPath=`"yes`" Source=`"`$(var.Staging.Dir)\$entry`" /> + </Component> +" + $componentGroup += " <ComponentRef Id=`"cmp$entry`" /> +" + } + } + + #finish up the last directory + $currentDirList += $endDirList + $dirList += $currentDirList + + $dllList += " </DirectoryRef> + </Fragment> +" + $componentGroup += " </ComponentGroup> + </Fragment> +" + + $wixComponents += $dllList + $dirList + $componentGroup + + $wixComponents += @" +</Wix> +"@ + +} + +catch { + + $wixComponents = "<?xml version=`"1.0`" encoding=`"utf-8`"?> +<Include> +<!--- Qt not configured --> +</Include> +" + +} + +Set-Content $FilePath @" +<?xml version=`"1.0`" encoding=`"utf-8`"?> +<!-- + Automatically generated by $($MyInvocation.MyCommand.Name) +--> +"@ + +Add-Content $FilePath $wixComponents |