endif()
set(EXTCAP_INSTALL_FULL_LIBDIR "${CMAKE_INSTALL_PREFIX}/${EXTCAP_INSTALL_LIBDIR}")
-if(APPLE)
- #
- # As https://developer.apple.com/library/archive/technotes/tn2206/_index.html
- # says,
- #
- # "Note that a location where code is expected to reside cannot generally
- # contain directories full of nested code, because those directories tend
- # to be interpreted as bundles. So this occasional practice is not
- # recommended and not officially supported. If you do do this, do not use
- # periods in the directory names. The code signing machinery interprets
- # directories with periods in their names as code bundles and will reject
- # them if they don't conform to the expected code bundle layout."
- #
- set(PLUGIN_PATH_ID "${PROJECT_MAJOR_VERSION}-${PROJECT_MINOR_VERSION}")
-else()
- set(PLUGIN_PATH_ID "${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}")
-endif()
-
# Directory where plugins and Lua dissectors can be found.
if(WIN32 AND NOT USE_MSYSTEM)
set(PLUGIN_INSTALL_LIBDIR "plugins" CACHE INTERNAL "The plugin dir")
set(PLUGIN_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/plugins" CACHE INTERNAL "The plugin dir")
endif()
set(PLUGIN_INSTALL_FULL_LIBDIR "${CMAKE_INSTALL_PREFIX}/${PLUGIN_INSTALL_LIBDIR}")
-set(PLUGIN_INSTALL_VERSION_LIBDIR "${PLUGIN_INSTALL_LIBDIR}/${PLUGIN_PATH_ID}")
-set(PLUGIN_VERSION_DIR "plugins/${PLUGIN_PATH_ID}")
add_subdirectory( capture )
add_subdirectory( doc )
if(ENABLE_APPLICATION_BUNDLE)
if(CMAKE_CFG_INTDIR STREQUAL ".")
- set(_plugin_dir "${CMAKE_BINARY_DIR}/run/Wireshark.app/Contents/PlugIns/wireshark/${PLUGIN_PATH_ID}")
+ set(_plugin_dir "${CMAKE_BINARY_DIR}/run/Wireshark.app/Contents/PlugIns/wireshark")
else()
# Xcode
- set(_plugin_dir "${CMAKE_BINARY_DIR}/run/$<CONFIG>/Wireshark.app/Contents/PlugIns/wireshark/${PLUGIN_PATH_ID}")
+ set(_plugin_dir "${CMAKE_BINARY_DIR}/run/$<CONFIG>/Wireshark.app/Contents/PlugIns/wireshark")
endif()
if(CMAKE_CFG_INTDIR STREQUAL ".")
- set(_logray_plugin_dir "${CMAKE_BINARY_DIR}/run/Logray.app/Contents/PlugIns/logray/${PLUGIN_PATH_ID}")
+ set(_logray_plugin_dir "${CMAKE_BINARY_DIR}/run/Logray.app/Contents/PlugIns/logray")
else()
# Xcode
- set(_logray_plugin_dir "${CMAKE_BINARY_DIR}/run/$<CONFIG>/Logray.app/Contents/PlugIns/logray/${PLUGIN_PATH_ID}")
+ set(_logray_plugin_dir "${CMAKE_BINARY_DIR}/run/$<CONFIG>/Logray.app/Contents/PlugIns/logray")
endif()
elseif(MSVC AND NOT CMAKE_CFG_INTDIR STREQUAL ".")
- set(_plugin_dir "${CMAKE_BINARY_DIR}/run/$<CONFIG>/${PLUGIN_VERSION_DIR}")
+ set(_plugin_dir "${CMAKE_BINARY_DIR}/run/$<CONFIG>/plugins")
set(_logray_plugin_dir ${_plugin_dir})
else()
- set(_plugin_dir "${DATAFILE_DIR}/${PLUGIN_VERSION_DIR}")
+ set(_plugin_dir "${DATAFILE_DIR}/plugins")
set(_logray_plugin_dir ${_plugin_dir})
endif()
set (PLUGIN_DIR ${_plugin_dir} CACHE INTERNAL "Build time plugin location.")
PATH_VARS
CMAKE_INSTALL_LIBDIR
CMAKE_INSTALL_INCLUDEDIR
- PLUGIN_INSTALL_VERSION_LIBDIR
+ PLUGIN_INSTALL_LIBDIR
EXTCAP_INSTALL_LIBDIR
)
set(Wireshark_PATCH_VERSION @PROJECT_PATCH_VERSION@)
set(Wireshark_VERSION "@PROJECT_VERSION@")
+set(Wireshark_ABI_VERSION_EPAN @PROJECT_ABI_VERSION_EPAN@)
+set(Wireshark_ABI_VERSION_WIRETAP @PROJECT_ABI_VERSION_WIRETAP@)
+set(Wireshark_ABI_VERSION_CODEC @PROJECT_ABI_VERSION_CODEC@)
+
set(Wireshark_PLUGINS_ENABLED @HAVE_PLUGINS@)
-set(Wireshark_PLUGIN_LIBDIR "@PLUGIN_INSTALL_VERSION_LIBDIR@")
+set(Wireshark_PLUGIN_SUFFIX_EPAN "${CMAKE_SHARED_MODULE_SUFFIX}.${Wireshark_ABI_VERSION_EPAN}")
+set(Wireshark_PLUGIN_SUFFIX_WIRETAP "${CMAKE_SHARED_MODULE_SUFFIX}.${Wireshark_ABI_VERSION_WIRETAP}")
+set(Wireshark_PLUGIN_SUFFIX_CODEC "${CMAKE_SHARED_MODULE_SUFFIX}.${Wireshark_ABI_VERSION_CODEC}")
+set(Wireshark_PLUGIN_LIBDIR "@PLUGIN_INSTALL_LIBDIR@")
@PACKAGE_INIT@
# which is not helpful because the variable is correct, it's just that the empty directories
# were not created (also correctly, empty directories are just noise).
#
-if(Wireshark_PLUGINS_ENABLED)
- set(Wireshark_PLUGIN_INSTALL_DIR "@PACKAGE_PLUGIN_INSTALL_VERSION_LIBDIR@")
-endif()
+set(Wireshark_PLUGIN_INSTALL_DIR "@PACKAGE_PLUGIN_INSTALL_LIBDIR@")
set(Wireshark_EXTCAP_INSTALL_DIR "@PACKAGE_EXTCAP_INSTALL_LIBDIR@")
include("${CMAKE_CURRENT_LIST_DIR}/WiresharkTargets.cmake")
add_definitions(-DPLUGIN_VERSION=\"${PLUGIN_VERSION}\")
endmacro()
-macro(ADD_PLUGIN_LIBRARY _plugin _output_dir)
+macro(ADD_PLUGIN_LIBRARY _plugin _output_dir _abi_version)
add_library(${_plugin} MODULE
${PLUGIN_FILES}
${PLUGIN_RC_FILE}
set_target_properties(${_plugin} PROPERTIES
PREFIX ""
+ SUFFIX "${CMAKE_SHARED_MODULE_SUFFIX}.${_abi_version}"
LINK_FLAGS "${WS_LINK_FLAGS}"
FOLDER "Plugins"
LIBRARY_OUTPUT_DIRECTORY ${_output_dir}
endmacro()
macro(ADD_WIRESHARK_EPAN_PLUGIN_LIBRARY _plugin)
- ADD_PLUGIN_LIBRARY(${_plugin} "${PLUGIN_DIR}/epan")
+ ADD_PLUGIN_LIBRARY(${_plugin} "${PLUGIN_DIR}/epan" ${PROJECT_ABI_VERSION_EPAN})
endmacro()
macro(ADD_WIRESHARK_WIRETAP_PLUGIN_LIBRARY _plugin)
- ADD_PLUGIN_LIBRARY(${_plugin} "${PLUGIN_DIR}/wiretap")
+ ADD_PLUGIN_LIBRARY(${_plugin} "${PLUGIN_DIR}/wiretap" ${PROJECT_ABI_VERSION_WIRETAP})
endmacro()
macro(ADD_WIRESHARK_CODEC_PLUGIN_LIBRARY _plugin)
- ADD_PLUGIN_LIBRARY(${_plugin} "${PLUGIN_DIR}/codecs")
+ ADD_PLUGIN_LIBRARY(${_plugin} "${PLUGIN_DIR}/codecs" ${PROJECT_ABI_VERSION_CODEC})
endmacro()
macro(ADD_LOGRAY_EPAN_PLUGIN_LIBRARY _plugin)
- ADD_PLUGIN_LIBRARY(${_plugin} "${LOGRAY_PLUGIN_DIR}/epan")
+ ADD_PLUGIN_LIBRARY(${_plugin} "${LOGRAY_PLUGIN_DIR}/epan" ${PROJECT_ABI_VERSION_EPAN})
endmacro()
macro(INSTALL_PLUGIN _plugin _subfolder)
install(TARGETS ${_plugin}
- LIBRARY DESTINATION ${PLUGIN_INSTALL_VERSION_LIBDIR}/${_subfolder} NAMELINK_SKIP
- RUNTIME DESTINATION ${PLUGIN_INSTALL_VERSION_LIBDIR}
- ARCHIVE DESTINATION ${PLUGIN_INSTALL_VERSION_LIBDIR}
+ LIBRARY DESTINATION ${PLUGIN_INSTALL_LIBDIR}/${_subfolder} NAMELINK_SKIP
+ RUNTIME DESTINATION ${PLUGIN_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${PLUGIN_INSTALL_LIBDIR}
)
endmacro()
/* Version number of Logray and associated utilities */
#define LOG_VERSION "${LOG_PROJECT_VERSION}${VERSION_EXTRA}"
-#define PLUGIN_PATH_ID "${PLUGIN_PATH_ID}"
#define VERSION_FLAVOR "${VERSION_FLAVOR}"
+#define SHARED_MODULE_SUFFIX "${CMAKE_SHARED_MODULE_SUFFIX}"
+
/* Build wsutil with SIMD optimization */
#cmakedefine HAVE_SSE4_2 1
)
add_library(hello MODULE hello.c)
-set_target_properties(hello PROPERTIES PREFIX "" DEFINE_SYMBOL "")
+set_target_properties(hello PROPERTIES
+ PREFIX ""
+ SUFFIX "${Wireshark_PLUGIN_SUFFIX_EPAN}"
+ DEFINE_SYMBOL ""
+)
target_link_libraries(hello epan)
# This is the normal installation target to CMAKE_INSTALL_PREFIX. It is relocatable
* The personal binary plugins folder now has higher priority than the global
folder.
+* The binary plugins folder path no longer uses an X.Y version component. Plugins
+ are required to add the ABI version to the file name.
+
//=== Removed Features and Support
// === Removed Dissectors
Wireshark looks for plugins in both a personal plugin folder and a
global plugin folder. Lua plugins are stored in the plugin folders;
compiled plugins are stored in subfolders of the plugin folders, with
-the subfolder name being the Wireshark minor version number (X.Y). There is
-another hierarchical level for each Wireshark plugin type (libwireshark,
-libwiretap and codecs). So for example the location for a libwireshark plugin
-_foo.so_ (_foo.dll_ on Windows) would be _PLUGINDIR/X.Y/epan_
-(libwireshark used to be called libepan; the other folder names are _codecs_
-and _wiretap_).
+the subfolder name being the plugin binary type. Each Wireshark binary plugin
+has one of three distinct types (libwireshark, libwiretap and codecs).
+So for example the location for a libwireshark plugin
+_foo.so_ (_foo.dll_ on Windows) would be _PLUGINDIR/epan_
+(libwireshark used to be called libepan), for libwiretap it would be
+_PLUGINDIR/wiretap_ and for codecs _PLUGINDIR/codecs_.
+
+Plugins should come with the ABI version appended to the filename, so the
+complete example for an epan binary plugin would be _PLUGINDIR/epan_/foo.so.1_
+for epan ABI version 1.
On Windows:
pkgexec="$bundle/Contents/MacOS"
#pkgres="$bundle/Contents/Resources"
pkglib="$bundle/Contents/Frameworks"
-pkgplugin="$bundle/Contents/PlugIns/$app_lower/@PLUGIN_PATH_ID@"
+pkgplugin="$bundle/Contents/PlugIns/$app_lower"
# Set the 'macosx' directory, usually the current directory.
#resdir=$( pwd )
;Add your custom plugins directives here
; Example:
-;File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\foo.dll"
+;File "${STAGING_DIR}\plugins\epan\foo.dll.${ABI_VERSION_EPAN}"
#define EXTRA_INSTALLER_DIR "@EXTRA_INSTALLER_DIR@"
#define VERSION @LOG_PROJECT_VERSION@
#define PRODUCT_VERSION @LOG_PRODUCT_VERSION@
+#define ABI_VERSION_EPAN @PROJECT_ABI_VERSION_EPAN@
+#define ABI_VERSION_WIRETAP @PROJECT_ABI_VERSION_WIRETAP@
+#define ABI_VERSION_CODEC @PROJECT_ABI_VERSION_CODEC@
# Plugins
#define MAJOR_VERSION @PROJECT_MAJOR_VERSION@
#define MINOR_VERSION @PROJECT_MINOR_VERSION@
Section "Dissector Plugins" SecPlugins
;-------------------------------------------
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\falco-bridge.dll"
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\falco'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\falco\cloudtrail.dll"
+SetOutPath '$INSTDIR\plugins\epan'
+File "${STAGING_DIR}\plugins\epan\falco-bridge.dll.${ABI_VERSION_EPAN}"
+SetOutPath '$INSTDIR\plugins\falco'
+File "${STAGING_DIR}\plugins\falco\cloudtrail.dll.${ABI_VERSION_EPAN}"
!include "custom_plugins.txt"
SectionEnd
Section "Tree Statistics Plugin" SecStatsTree
;-------------------------------------------
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\stats_tree.dll"
+SetOutPath '$INSTDIR\plugins\epan'
+File "${STAGING_DIR}\plugins\epan\stats_tree.dll.${ABI_VERSION_EPAN}"
SectionEnd
Section "Mate - Meta Analysis and Tracing Engine" SecMate
;-------------------------------------------
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\mate.dll"
+SetOutPath '$INSTDIR\plugins\epan'
+File "${STAGING_DIR}\plugins\epan\mate.dll.${ABI_VERSION_EPAN}"
SectionEnd
Section "Configuration Profiles" SecProfiles
#define MINOR_VERSION @PROJECT_MINOR_VERSION@
#define PRODUCT_VERSION @PRODUCT_VERSION@
+#define ABI_VERSION_EPAN @PROJECT_ABI_VERSION_EPAN@
+#define ABI_VERSION_WIRETAP @PROJECT_ABI_VERSION_WIRETAP@
+#define ABI_VERSION_CODEC @PROJECT_ABI_VERSION_CODEC@
+
#define VCREDIST_DIR "@VCREDIST_DIR@"
#define VCREDIST_EXE "@VCREDIST_EXE@"
Section "-Plugins & Extensions"
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\g711.dll"
+SetOutPath '$INSTDIR\plugins\codecs'
+File "${STAGING_DIR}\plugins\codecs\g711.dll.${ABI_VERSION_CODEC}"
!ifdef SPANDSP_FOUND
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\g722.dll"
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\g726.dll"
+File "${STAGING_DIR}\plugins\codecs\g722.dll.${ABI_VERSION_CODEC}"
+File "${STAGING_DIR}\plugins\codecs\g726.dll.${ABI_VERSION_CODEC}"
!endif
!ifdef BCG729_FOUND
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\g729.dll"
+File "${STAGING_DIR}\plugins\codecs\g729.dll.${ABI_VERSION_CODEC}"
!endif
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\l16mono.dll"
+File "${STAGING_DIR}\plugins\codecs\l16mono.dll.${ABI_VERSION_CODEC}"
!ifdef SBC_FOUND
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\sbc.dll"
+File "${STAGING_DIR}\plugins\codecs\sbc.dll.${ABI_VERSION_CODEC}"
!endif
!ifdef ILBC_FOUND
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\ilbc.dll"
+File "${STAGING_DIR}\plugins\codecs\ilbc.dll.${ABI_VERSION_CODEC}"
!endif
!ifdef OPUS_FOUND
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\opus_dec.dll"
+File "${STAGING_DIR}\plugins\codecs\opus_dec.dll.${ABI_VERSION_CODEC}"
!endif
; This should be a function or macro
SetOutPath '$INSTDIR\profiles\No Reassembly'
File "${STAGING_DIR}\profiles\No Reassembly\preferences"
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\ethercat.dll"
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\gryphon.dll"
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\irda.dll"
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\opcua.dll"
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\profinet.dll"
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\unistim.dll"
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\wimax.dll"
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\wimaxasncp.dll"
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\wimaxmacphy.dll"
+SetOutPath '$INSTDIR\plugins\epan'
+File "${STAGING_DIR}\plugins\epan\ethercat.dll.${ABI_VERSION_EPAN}"
+File "${STAGING_DIR}\plugins\epan\gryphon.dll.${ABI_VERSION_EPAN}"
+File "${STAGING_DIR}\plugins\epan\irda.dll.${ABI_VERSION_EPAN}"
+File "${STAGING_DIR}\plugins\epan\opcua.dll.${ABI_VERSION_EPAN}"
+File "${STAGING_DIR}\plugins\epan\profinet.dll.${ABI_VERSION_EPAN}"
+File "${STAGING_DIR}\plugins\epan\unistim.dll.${ABI_VERSION_EPAN}"
+File "${STAGING_DIR}\plugins\epan\wimax.dll.${ABI_VERSION_EPAN}"
+File "${STAGING_DIR}\plugins\epan\wimaxasncp.dll.${ABI_VERSION_EPAN}"
+File "${STAGING_DIR}\plugins\epan\wimaxmacphy.dll.${ABI_VERSION_EPAN}"
!include "custom_plugins.txt"
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\wiretap'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\wiretap\usbdump.dll"
+SetOutPath '$INSTDIR\plugins\wiretap'
+File "${STAGING_DIR}\plugins\wiretap\usbdump.dll.${ABI_VERSION_WIRETAP}"
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\mate.dll"
+SetOutPath '$INSTDIR\plugins\epan'
+File "${STAGING_DIR}\plugins\epan\mate.dll.${ABI_VERSION_EPAN}"
!ifdef SMI_DIR
SetOutPath '$INSTDIR\snmp\mibs'
!include "custom_mibs.txt"
!endif
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\transum.dll"
+SetOutPath '$INSTDIR\plugins\epan'
+File "${STAGING_DIR}\plugins\epan\transum.dll.${ABI_VERSION_EPAN}"
-SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan'
-File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\stats_tree.dll"
+SetOutPath '$INSTDIR\plugins\epan'
+File "${STAGING_DIR}\plugins\epan\stats_tree.dll.${ABI_VERSION_EPAN}"
SectionEnd ; "Plugins / Extensions"
-dPlatform=${WIRESHARK_TARGET_PLATFORM}
-dWiresharkName=${CMAKE_PROJECT_NAME}
-dWiresharkVersion=${PRODUCT_VERSION}
- -dWiresharkMajorVersion=${PROJECT_MAJOR_VERSION}
- -dWiresharkMinorVersion=${PROJECT_MINOR_VERSION}
+ -dWiresharkAbiVersionEpan=${PROJECT_ABI_VERSION_EPAN}
+ -dWiresharkAbiVersionWtap=${PROJECT_ABI_VERSION_WIRETAP}
+ -dWiresharkAbiVersionCodec=${PROJECT_ABI_VERSION_CODEC}
-dAssetDir=${CMAKE_SOURCE_DIR}/packaging/wix
-dBuildOutputDir=${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}
-dDiameterDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/diameter
<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" />
+ <File Id="filEthercat_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\ethercat.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
<Component Id="cmpGryphon_dll" Guid="*">
- <File Id="filGryphon_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\gryphon.dll" />
+ <File Id="filGryphon_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\gryphon.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
<Component Id="cmpIrda_dll" Guid="*">
- <File Id="filIrda_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\irda.dll" />
+ <File Id="filIrda_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\irda.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
<Component Id="cmpOpcua_dll" Guid="*">
- <File Id="filOpcua_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\opcua.dll" />
+ <File Id="filOpcua_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\opcua.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
<Component Id="cmpProfinet_dll" Guid="*">
- <File Id="filProfinet_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\profinet.dll" />
+ <File Id="filProfinet_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\profinet.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
<Component Id="cmpUnistim_dll" Guid="*">
- <File Id="filUnistim_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\unistim.dll" />
+ <File Id="filUnistim_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\unistim.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
<Component Id="cmpWimax_dll" Guid="*">
- <File Id="filWimax_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\wimax.dll" />
+ <File Id="filWimax_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\wimax.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
<Component Id="cmpWimaxasmcp_dll" Guid="*">
- <File Id="filWimaxasmcp_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\wimaxasncp.dll" />
+ <File Id="filWimaxasmcp_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\wimaxasncp.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
<Component Id="cmpWimaxmacphy_dll" Guid="*">
- <File Id="filWimaxmacphy_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\wimaxmacphy.dll" />
+ <File Id="filWimaxmacphy_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\wimaxmacphy.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
<!-- Add custom plugin Components here -->
</DirectoryRef>
<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" />
+ <File Id="filStatsTree_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\stats_tree.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
</DirectoryRef>
</Fragment>
<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" />
+ <File Id="filMate_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\mate.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
</DirectoryRef>
</Fragment>
<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" />
+ <File Id="filTransum_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\epan\transum.dll.$(var.WiresharkAbiVersionEpan)" />
</Component>
</DirectoryRef>
</Fragment>
<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" />
+ <File Id="filUsbdump_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\wiretap\usbdump.dll.$(var.WiresharkAbiVersionWtap)" />
</Component>
</DirectoryRef>
</Fragment>
<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" />
+ <File Id="filG711_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\codecs\g711.dll.$(var.WiresharkAbiVersionCodec)" />
</Component>
<Component Id="cmpG722_dll" Guid="*">
- <File Id="filG722_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g722.dll" />
+ <File Id="filG722_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\codecs\g722.dll.$(var.WiresharkAbiVersionCodec)" />
</Component>
<Component Id="cmpG726_dll" Guid="*">
- <File Id="filG726_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g726.dll" />
+ <File Id="filG726_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\codecs\g726.dll.$(var.WiresharkAbiVersionCodec)" />
</Component>
<Component Id="cmpG729_dll" Guid="*">
- <File Id="filG729_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g729.dll" />
+ <File Id="filG729_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\codecs\g729.dll.$(var.WiresharkAbiVersionCodec)" />
</Component>
<Component Id="cmpL16mono_dll" Guid="*">
- <File Id="filL16mono_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\l16mono.dll" />
+ <File Id="filL16mono_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\codecs\l16mono.dll.$(var.WiresharkAbiVersionCodec)" />
</Component>
<Component Id="cmpSBC_dll" Guid="*">
- <File Id="filSBC_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\sbc.dll" />
+ <File Id="filSBC_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\codecs\sbc.dll.$(var.WiresharkAbiVersionCodec)" />
</Component>
<Component Id="cmpILBC_dll" Guid="*">
- <File Id="filILBC_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\ilbc.dll" />
+ <File Id="filILBC_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\codecs\ilbc.dll.$(var.WiresharkAbiVersionCodec)" />
</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" />
+ <File Id="filOPUS_dec_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\codecs\opus_dec.dll.$(var.WiresharkAbiVersionCodec)" />
</Component>
</DirectoryRef>
</Fragment>
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
sharedlibdir=${libdir}
-plugindir=${libdir}/wireshark/@PLUGIN_VERSION_DIR@
+plugindir=${libdir}/wireshark/plugins
Name: Wireshark
Description: Network Protocol Analyzer (Packet Dissection Library)
constpath = get_progfile_dir();
printf("%-21s\t%s\n", "Program:", constpath);
-#ifdef HAVE_PLUGINS
- /* pers plugins */
- printf("%-21s\t%s\n", "Personal Plugins:", get_plugins_pers_dir_with_version());
+ if (plugins_supported()) {
+ /* pers plugins */
+ printf("%-21s\t%s\n", "Personal Plugins:", get_plugins_pers_dir());
- /* global plugins */
- printf("%-21s\t%s\n", "Global Plugins:", get_plugins_dir_with_version());
-#endif
+ /* global plugins */
+ printf("%-21s\t%s\n", "Global Plugins:", get_plugins_dir());
+ }
#ifdef HAVE_LUA
/* pers lua plugins */
/* program */
appendRow(QStringList() << tr("Program") << get_progfile_dir() << tr("program files"));
-#ifdef HAVE_PLUGINS
- /* pers plugins */
- appendRow(QStringList() << tr("Personal Plugins") << get_plugins_pers_dir_with_version() << tr("binary plugins"));
+ if (plugins_supported()) {
+ /* pers plugins */
+ appendRow(QStringList() << tr("Personal Plugins") << get_plugins_pers_dir() << tr("binary plugins"));
- /* global plugins */
- appendRow(QStringList() << tr("Global Plugins") << get_plugins_dir_with_version() << tr("binary plugins"));
-#endif
+ /* global plugins */
+ appendRow(QStringList() << tr("Global Plugins") << get_plugins_dir() << tr("binary plugins"));
+ }
#ifdef HAVE_LUA
/* pers plugins */
QString caption = mainApp->windowTitleString(tr("Install plugin"));
// Get the plugin file path to install
- QString plugin_filter = tr("Binary plugin (*%1)").arg(WS_PLUGIN_MODULE_SUFFIX);
+ QString plugin_filter = tr("Binary plugin (*%1 *%1.[0-9]*)").arg(WS_PLUGIN_MODULE_SUFFIX);
QString src_path = WiresharkFileDialog::getOpenFileName(this, caption, "", plugin_filter);
if (src_path.isEmpty()) {
return;
// a way to load and unload plugins without having to restart the program.
QFileInfo file_info(src_path);
QString file_name = file_info.fileName();
+ if (file_name.endsWith(WS_PLUGIN_MODULE_SUFFIX)) {
+ // Append the version to our destination name
+ file_name = QString("%1.%2").arg(file_name).arg(plugins_abi_version(have_type));
+ }
if (type_dir.exists(file_name)) {
reply = QMessageBox::question(this, caption,
tr("The file already exists. Do you want to overwrite it?"));
* configure script.
*/
static char *plugin_dir = NULL;
-static char *plugin_dir_with_version = NULL;
static char *plugin_pers_dir = NULL;
-static char *plugin_pers_dir_with_version = NULL;
static char *extcap_pers_dir = NULL;
static void
return plugin_dir;
}
-const char *
-get_plugins_dir_with_version(void)
-{
- if (!plugin_dir)
- init_plugin_dir();
- if (plugin_dir && !plugin_dir_with_version)
- plugin_dir_with_version = g_build_filename(plugin_dir, PLUGIN_PATH_ID, (char *)NULL);
- return plugin_dir_with_version;
-}
-
/* Get the personal plugin dir */
const char *
get_plugins_pers_dir(void)
return plugin_pers_dir;
}
-const char *
-get_plugins_pers_dir_with_version(void)
-{
- if (!plugin_pers_dir)
- init_plugin_pers_dir();
- if (plugin_pers_dir && !plugin_pers_dir_with_version)
- plugin_pers_dir_with_version = g_build_filename(plugin_pers_dir, PLUGIN_PATH_ID, (char *)NULL);
- return plugin_pers_dir_with_version;
-}
-
/*
* Find the directory where the extcap hooks are stored.
*
#if defined(HAVE_PLUGINS) || defined(HAVE_LUA)
g_free(plugin_dir);
plugin_dir = NULL;
- g_free(plugin_dir_with_version);
- plugin_dir_with_version = NULL;
g_free(plugin_pers_dir);
plugin_pers_dir = NULL;
- g_free(plugin_pers_dir_with_version);
- plugin_pers_dir_with_version = NULL;
#endif
g_free(extcap_dir);
extcap_dir = NULL;
*/
WS_DLL_PUBLIC const char *get_plugins_dir(void);
-/*
- * Append VERSION_MAJOR.VERSION_MINOR to the plugin dir.
- */
-WS_DLL_PUBLIC const char *get_plugins_dir_with_version(void);
-
/*
* Get the personal plugin dir.
*/
WS_DLL_PUBLIC const char *get_plugins_pers_dir(void);
-/*
- * Append VERSION_MAJOR.VERSION_MINOR to the plugin personal dir.
- */
-WS_DLL_PUBLIC const char *get_plugins_pers_dir_with_version(void);
-
/*
* Get the directory in which extcap hooks are stored; this must not be called
* before configuration_init() is called, as they might be stored in a
const char *name; /* current file name */
char *plugin_folder;
char *plugin_file; /* current file full path */
+ char *plugin_ext; /* plugin file extension */
GModule *handle; /* handle returned by g_module_open */
void *symbol;
plugin *new_plug;
plugin_type_e have_type;
int abi_version;
struct ws_module *module;
+ char *s;
plugin_folder = g_build_filename(dirpath, type_to_dir(type), (char *)NULL);
return;
}
- ws_debug("Scanning plugins folder \"%s\"", plugin_folder);
+ plugin_ext = plugins_file_suffix(type);
+
+ ws_debug("Scanning plugins folder \"%s\" for *%s", plugin_folder, plugin_ext);
while ((name = g_dir_read_name(dir)) != NULL) {
/* Skip anything but files with .dll or .so. */
- if (!g_str_has_suffix(name, WS_PLUGIN_MODULE_SUFFIX))
+ if (!g_str_has_suffix(name, plugin_ext))
continue;
plugin_file = g_build_filename(plugin_folder, name, (char *)NULL);
new_plug->module = module;
new_plug->scope = scope;
+ // Strip version from plugin display name
+ s = strrchr(new_plug->name, '.');
+ if (s != NULL && g_ascii_isdigit(*(s+1)))
+ *s = '\0';
+
/* Add it to the list of plugins. */
- g_hash_table_replace(plugins_module, new_plug->name, new_plug);
+ g_hash_table_replace(plugins_module, g_strdup(name), new_plug);
ws_info("Registered plugin: %s (%s)", new_plug->name, plugin_file);
ws_debug("plugin '%s' meta data: version = %s, flags = 0x%"PRIu32", spdx = %s, blurb = %s",
name, module->version, module->flags, module->spdx_id, module->blurb);
g_free(plugin_file);
}
ws_dir_close(dir);
+ wmem_free(NULL, plugin_ext);
g_free(plugin_folder);
}
if (!plugins_supported())
return NULL; /* nothing to do */
- GHashTable *plugins_module = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, free_plugin);
+ GHashTable *plugins_module = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, free_plugin);
/* Scan the users plugins directory first, giving it priority over the
* global plugins folder. Only scan it if we weren't started with special
* if we need privileges to start capturing, we'd need to
* reclaim them before each time we start capturing.)
*/
- const char *user_dir = get_plugins_pers_dir_with_version();
+ const char *user_dir = get_plugins_pers_dir();
if (!started_with_special_privs()) {
scan_plugins_dir(plugins_module, user_dir, type, WS_PLUGIN_SCOPE_USER);
}
* Scan the global plugin directory. Make sure we don't scan the same directory
* twice (under some unusual install configurations).
*/
- const char *global_dir = get_plugins_dir_with_version();
+ const char *global_dir = get_plugins_dir();
if (strcmp(global_dir, user_dir) != 0) {
scan_plugins_dir(plugins_module, global_dir, type, WS_PLUGIN_SCOPE_GLOBAL);
}
char *
plugins_pers_type_folder(plugin_type_e type)
{
- return g_build_filename(get_plugins_pers_dir_with_version(),
+ return g_build_filename(get_plugins_pers_dir(),
type_to_dir(type), (const char *)NULL);
}
+char *
+plugins_file_suffix(plugin_type_e type)
+{
+ return ws_strdup_printf("%s.%d", WS_PLUGIN_MODULE_SUFFIX, plugins_abi_version(type));
+}
+
int
plugins_abi_version(plugin_type_e type)
{
#define WS_PLUGIN_DESC_TAP_LISTENER (1UL << 4)
#define WS_PLUGIN_DESC_DFUNCTION (1UL << 5)
-// GLib and Qt allow ".dylib" and ".so" on macOS. Should we do the same?
-#ifdef _WIN32
+#if defined(SHARED_MODULE_SUFFIX)
+#define WS_PLUGIN_MODULE_SUFFIX SHARED_MODULE_SUFFIX
+#elif defined(_WIN32)
#define WS_PLUGIN_MODULE_SUFFIX ".dll"
#else
#define WS_PLUGIN_MODULE_SUFFIX ".so"
WS_DLL_PUBLIC char *plugins_pers_type_folder(plugin_type_e type);
+WS_DLL_PUBLIC char *plugins_file_suffix(plugin_type_e type);
+
WS_DLL_PUBLIC
int plugins_abi_version(plugin_type_e type);