summaryrefslogtreecommitdiffstats
path: root/packaging/macosx
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /packaging/macosx
parentInitial commit. (diff)
downloadwireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz
wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'packaging/macosx')
-rw-r--r--packaging/macosx/ChmodBPF/install-distribution.xml25
-rwxr-xr-xpackaging/macosx/ChmodBPF/install-scripts/postinstall35
-rwxr-xr-xpackaging/macosx/ChmodBPF/root/Library/Application Support/Wireshark/ChmodBPF/ChmodBPF41
-rw-r--r--packaging/macosx/ChmodBPF/root/Library/LaunchDaemons/org.wireshark.ChmodBPF.plist14
-rw-r--r--packaging/macosx/ChmodBPF/uninstall-distribution.xml25
-rwxr-xr-xpackaging/macosx/ChmodBPF/uninstall-scripts/postinstall26
-rw-r--r--packaging/macosx/Donate_to_the_Wireshark_Foundation.adoc15
-rw-r--r--packaging/macosx/Logray.icnsbin0 -> 161519 bytes
-rw-r--r--packaging/macosx/LograyInfo.plist.in71
-rw-r--r--packaging/macosx/Logray_dsym_installation.adoc17
-rw-r--r--packaging/macosx/Logray_read_me_first.adoc34
-rw-r--r--packaging/macosx/Wireshark.icnsbin0 -> 1031753 bytes
-rw-r--r--packaging/macosx/WiresharkInfo.plist.in276
-rw-r--r--packaging/macosx/Wireshark_dsym_installation.adoc17
-rw-r--r--packaging/macosx/Wireshark_read_me_first.adoc70
-rw-r--r--packaging/macosx/Wiresharkdoc.icnsbin0 -> 81772 bytes
-rw-r--r--packaging/macosx/dmg_background.pngbin0 -> 1410 bytes
-rw-r--r--packaging/macosx/dmg_background.svg1394
-rw-r--r--packaging/macosx/entitlements.plist8
-rw-r--r--packaging/macosx/logray-app.dmgbuild.in146
-rw-r--r--packaging/macosx/logray-dsym.dmgbuild.in139
-rw-r--r--packaging/macosx/lriconvol.icnsbin0 -> 71576 bytes
-rw-r--r--packaging/macosx/lriconvol.svg113
-rwxr-xr-xpackaging/macosx/osx-app.sh.in717
-rwxr-xr-xpackaging/macosx/osx-dmg.sh.in108
-rwxr-xr-xpackaging/macosx/osx-extras.sh86
-rw-r--r--packaging/macosx/path_helper/install-distribution.xml24
-rw-r--r--packaging/macosx/path_helper/root/etc/manpaths.d/Wireshark1
-rw-r--r--packaging/macosx/path_helper/root/etc/paths.d/Wireshark1
-rw-r--r--packaging/macosx/path_helper/uninstall-distribution.xml24
-rwxr-xr-xpackaging/macosx/path_helper/uninstall-scripts/postinstall11
-rw-r--r--packaging/macosx/wireshark-app.dmgbuild.in170
-rw-r--r--packaging/macosx/wireshark-dsym.dmgbuild.in139
-rw-r--r--packaging/macosx/wsiconvol.icnsbin0 -> 21096 bytes
-rw-r--r--packaging/macosx/wsiconvol.svg106
35 files changed, 3853 insertions, 0 deletions
diff --git a/packaging/macosx/ChmodBPF/install-distribution.xml b/packaging/macosx/ChmodBPF/install-distribution.xml
new file mode 100644
index 00000000..fbd6fd91
--- /dev/null
+++ b/packaging/macosx/ChmodBPF/install-distribution.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Created using `productbuild -\-synthesize -\-package install.ChmodBPF.pkg /tmp/distribution.xml`
+See also: https://github.com/open-eid/osx-installer/blob/master/distribution.xml
+https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/DistributionDefinitionRef/
+https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/InstallerJavaScriptRef/
+-->
+<installer-gui-script minSpecVersion="1">
+ <title>ChmodBPF</title>
+ <welcome language="en" mime-type="text/html"><![CDATA[<html><body><br />
+<p style="margin: 0px; font: 13px 'Lucida Grande'">This package will install the ChmodBPF launch daemon, create the access_bpf group, and add you to that group.</p></body></html>]]></welcome>
+ <pkg-ref id="org.wireshark.ChmodBPF.pkg"/>
+ <options customize="never" require-scripts="false" hostArchitectures="arm64,x86_64"/>
+ <domains enable_anywhere="false" enable_currentUserHome="false" enable_localSystem="true"/>
+ <choices-outline>
+ <line choice="default">
+ <line choice="org.wireshark.ChmodBPF.pkg"/>
+ </line>
+ </choices-outline>
+ <choice id="default"/>
+ <choice id="org.wireshark.ChmodBPF.pkg" visible="false">
+ <pkg-ref id="org.wireshark.ChmodBPF.pkg"/>
+ </choice>
+ <pkg-ref id="org.wireshark.ChmodBPF.pkg" onConclusion="none">install.ChmodBPF.pkg</pkg-ref>
+</installer-gui-script>
diff --git a/packaging/macosx/ChmodBPF/install-scripts/postinstall b/packaging/macosx/ChmodBPF/install-scripts/postinstall
new file mode 100755
index 00000000..1f11eb3e
--- /dev/null
+++ b/packaging/macosx/ChmodBPF/install-scripts/postinstall
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+#
+# Fix up ownership and permissions on /Library/Application Support/Wireshark;
+# for some reason, it's not being owned by root:wheel, and it's not
+# publicly readable and, for directories and executables, not publicly
+# searchable/executable.
+#
+# Also take away group write permission.
+#
+# XXX - that may be a problem with the process of building the installer
+# package; if so, that's where it *should* be fixed.
+#
+chown -R root:wheel "/Library/Application Support/Wireshark"
+chmod -R a+rX,go-w "/Library/Application Support/Wireshark"
+
+CHMOD_BPF_PLIST="/Library/LaunchDaemons/org.wireshark.ChmodBPF.plist"
+BPF_GROUP="access_bpf"
+BPF_GROUP_NAME="BPF device access ACL"
+min_gid=100
+
+if ! dscl . -read /Groups/"$BPF_GROUP" > /dev/null 2>&1; then
+ free_gid=$(dscl . -list /Groups PrimaryGroupID | sort -bnk2 | awk -v min_gid=$min_gid 'BEGIN{i=min_gid}{if($2==i)i++}END{print i}')
+ dseditgroup -q -o create -i $free_gid -r "$BPF_GROUP_NAME" "$BPF_GROUP"
+fi
+
+dseditgroup -q -o edit -a "$USER" -t user "$BPF_GROUP"
+
+chmod u=rw,g=r,o=r "$CHMOD_BPF_PLIST"
+chown root:wheel "$CHMOD_BPF_PLIST"
+
+# Clean up our legacy startup item if it's still around.
+rm -rf /Library/StartupItems/ChmodBPF
+
+launchctl bootstrap system "$CHMOD_BPF_PLIST"
diff --git a/packaging/macosx/ChmodBPF/root/Library/Application Support/Wireshark/ChmodBPF/ChmodBPF b/packaging/macosx/ChmodBPF/root/Library/Application Support/Wireshark/ChmodBPF/ChmodBPF
new file mode 100755
index 00000000..1dc12e7a
--- /dev/null
+++ b/packaging/macosx/ChmodBPF/root/Library/Application Support/Wireshark/ChmodBPF/ChmodBPF
@@ -0,0 +1,41 @@
+#! /bin/zsh
+# shellcheck shell=bash
+
+#
+# Unfortunately, macOS's devfs is based on the old FreeBSD
+# one, not the current one, so there's no way to configure it
+# to create BPF devices with particular owners or groups. BPF
+# devices on macOS are also non-cloning, that is they can
+# be created on demand at any time. This startup item will
+# pre-create a number of BPF devices, then make them owned by
+# the access_bpf group, with permissions rw-rw----, so that
+# anybody in the access_bpf group can use programs that capture
+# or send raw packets.
+#
+# Change this as appropriate for your site, e.g. to make
+# it owned by a particular user without changing the permissions,
+# so only that user and the super-user can capture or send raw
+# packets, or give it the permissions rw-r-----, so that
+# only the super-user can send raw packets but anybody in the
+# admin group can capture packets.
+#
+
+# Pre-create BPF devices. Set to 0 to disable.
+FORCE_CREATE_BPF_MAX=256
+
+SYSCTL_MAX=$( sysctl -n debug.bpf_maxdevices )
+if [ "$FORCE_CREATE_BPF_MAX" -gt "$SYSCTL_MAX" ] ; then
+ FORCE_CREATE_BPF_MAX=$SYSCTL_MAX
+fi
+
+syslog -s -l notice "ChmodBPF: Forcing creation and setting permissions for /dev/bpf0-$(( FORCE_CREATE_BPF_MAX - 1))"
+
+CUR_DEV=0
+while [ "$CUR_DEV" -lt "$FORCE_CREATE_BPF_MAX" ] ; do
+ # Try to do the minimum necessary to trigger the next device.
+ read -r -n 0 < /dev/bpf$CUR_DEV > /dev/null 2>&1
+ CUR_DEV=$(( CUR_DEV + 1 ))
+done
+
+chgrp access_bpf /dev/bpf*
+chmod g+rw /dev/bpf*
diff --git a/packaging/macosx/ChmodBPF/root/Library/LaunchDaemons/org.wireshark.ChmodBPF.plist b/packaging/macosx/ChmodBPF/root/Library/LaunchDaemons/org.wireshark.ChmodBPF.plist
new file mode 100644
index 00000000..1b3317e3
--- /dev/null
+++ b/packaging/macosx/ChmodBPF/root/Library/LaunchDaemons/org.wireshark.ChmodBPF.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>org.wireshark.ChmodBPF</string>
+ <key>RunAtLoad</key>
+ <true/>
+ <key>Program</key>
+ <string>/Library/Application Support/Wireshark/ChmodBPF/ChmodBPF</string>
+ <key>AssociatedBundleIdentifiers</key>
+ <string>org.wireshark.Wireshark</string>
+</dict>
+</plist>
diff --git a/packaging/macosx/ChmodBPF/uninstall-distribution.xml b/packaging/macosx/ChmodBPF/uninstall-distribution.xml
new file mode 100644
index 00000000..001f6e14
--- /dev/null
+++ b/packaging/macosx/ChmodBPF/uninstall-distribution.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Created using `productbuild -\-synthesize -\-package install.ChmodBPF.pkg /tmp/distribution.xml`
+See also: https://github.com/open-eid/osx-installer/blob/master/distribution.xml
+https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/DistributionDefinitionRef/
+https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/InstallerJavaScriptRef/
+-->
+<installer-gui-script minSpecVersion="1">
+ <title>Uninstall ChmodBPF</title>
+ <welcome language="en" mime-type="text/html"><![CDATA[<html><body><br />
+<p style="margin: 0px; font: 13px 'Lucida Grande'">This package will uninstall the ChmodBPF launch daemon and remove the access_bpf group.</p></body></html>]]></welcome>
+ <pkg-ref id="org.wireshark.uninstall.ChmodBPF.pkg"/>
+ <options customize="never" require-scripts="false" hostArchitectures="arm64,x86_64"/>
+ <domains enable_anywhere="false" enable_currentUserHome="false" enable_localSystem="true"/>
+ <choices-outline>
+ <line choice="default">
+ <line choice="org.wireshark.uninstall.ChmodBPF.pkg"/>
+ </line>
+ </choices-outline>
+ <choice id="default"/>
+ <choice id="org.wireshark.uninstall.ChmodBPF.pkg" visible="false">
+ <pkg-ref id="org.wireshark.uninstall.ChmodBPF.pkg"/>
+ </choice>
+ <pkg-ref id="org.wireshark.uninstall.ChmodBPF.pkg" onConclusion="none">uninstall.ChmodBPF.pkg</pkg-ref>
+</installer-gui-script>
diff --git a/packaging/macosx/ChmodBPF/uninstall-scripts/postinstall b/packaging/macosx/ChmodBPF/uninstall-scripts/postinstall
new file mode 100755
index 00000000..93a33b4c
--- /dev/null
+++ b/packaging/macosx/ChmodBPF/uninstall-scripts/postinstall
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+#
+# Remove the following:
+# - The ChmmodBPF launch daemon
+# - The ChmmodBPF script
+# - The access_bpf group
+#
+
+CHMOD_BPF_PLIST="/Library/LaunchDaemons/org.wireshark.ChmodBPF.plist"
+BPF_GROUP="access_bpf"
+
+launchctl bootout system "$CHMOD_BPF_PLIST"
+
+dscl . -read /Groups/"$BPF_GROUP" > /dev/null 2>&1 && \
+ dseditgroup -q -o delete "$BPF_GROUP"
+
+rm -rf "/Library/Application Support/Wireshark"
+
+rm -f "$CHMOD_BPF_PLIST"
+
+# ChmodBPF hasn't been a startup item since 2018 (ac4f3c0f4d).
+rm -rf /Library/StartupItems/ChmodBPF
+
+# https://gitlab.com/wireshark/wireshark/-/issues/18734
+pkgutil --forget org.wireshark.ChmodBPF.pkg
diff --git a/packaging/macosx/Donate_to_the_Wireshark_Foundation.adoc b/packaging/macosx/Donate_to_the_Wireshark_Foundation.adoc
new file mode 100644
index 00000000..3c461d5d
--- /dev/null
+++ b/packaging/macosx/Donate_to_the_Wireshark_Foundation.adoc
@@ -0,0 +1,15 @@
+// Required attributes:
+// include-dir
+
+include::{include-dir}/attributes.adoc[]
+:stylesheet: {include-dir}/ws.css
+
+== The Wireshark Founation
+
+The https://wiresharkfoundation.org/[Wireshark Foundation] is a non-profit organization helping as many people as possible understand their networks as much as possible.
+As time goes on, more and more of our daily life happens using software, and that software relies on network connectivity.
+By hosting educational conferences, the Wireshark Foundation provides industry professionals and students with the knowledge and understanding required to ensure that the networks and systems we depend on are reliable, fast, and secure.
+
+The Wireshark Foundation fosters open source development and explores new ways of educating the public.
+
+You can learn more and donate at https://wiresharkfoundation.org/[wiresharkfoundation.org].
diff --git a/packaging/macosx/Logray.icns b/packaging/macosx/Logray.icns
new file mode 100644
index 00000000..68949c3a
--- /dev/null
+++ b/packaging/macosx/Logray.icns
Binary files differ
diff --git a/packaging/macosx/LograyInfo.plist.in b/packaging/macosx/LograyInfo.plist.in
new file mode 100644
index 00000000..1074f1a2
--- /dev/null
+++ b/packaging/macosx/LograyInfo.plist.in
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>Logray</string>
+ <key>CFBundleGetInfoString</key>
+ <string>@LOG_PROJECT_VERSION@, Copyright 1998-2024 Wireshark Development Team</string>
+ <key>CFBundleIconFile</key>
+ <string>Logray.icns</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.wireshark.Logray</string>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>scap</string>
+ <string>scap.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Sysdig capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <!-- XXX - This dictionary needs a lot more entries -->
+ </array>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>@LOG_PROJECT_VERSION@</string>
+ <key>CFBundleSignature</key>
+ <string>Lgry</string>
+ <key>CFBundleVersion</key>
+ <string>@LOG_PROJECT_VERSION@</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>Copyright 1998-2024 Wireshark Developers, GNU General Public License.</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+ <key>NSHighResolutionCapable</key>
+ <true/>
+ <!-- Force dark mode support. -->
+ <key>NSRequiresAquaSystemAppearance</key>
+ <false/>
+ <key>LSMinimumSystemVersion</key>
+ <string>@MIN_MACOS_VERSION@</string>
+
+ <!-- Sparkle settings https://sparkle-project.org/documentation/customization/ -->
+ <key>SUFeedURL</key>
+ <string>https://www.wireshark.org/update/0/Logray/@LOG_PROJECT_MAJOR_VERSION@.@LOG_PROJECT_MINOR_VERSION@.@PROJECT_PATCH_VERSION@/macOS/x86-64/en-US/stable.xml</string>
+ <key>SUEnableAutomaticChecks</key>
+ <false/>
+ <key>SUPublicEDKey</key>
+ <string>BeSuPpEZOmOzkON9QMnfIdwyi06P/LcVoik8M5O2bsQ=</string>
+ <key>SUEnableSystemProfiling</key>
+ <false/>
+ <!--
+ Disable automatic updates here, then enable them at program
+ startup depending on prefs.gui_update_enabled.
+ -->
+ <key>SUAutomaticallyUpdate</key>
+ <false/>
+
+</dict>
+</plist>
diff --git a/packaging/macosx/Logray_dsym_installation.adoc b/packaging/macosx/Logray_dsym_installation.adoc
new file mode 100644
index 00000000..6ca4f2f8
--- /dev/null
+++ b/packaging/macosx/Logray_dsym_installation.adoc
@@ -0,0 +1,17 @@
+// Required attributes:
+// include-dir
+
+include::{include-dir}/attributes.adoc[]
+:stylesheet: {include-dir}/ws.css
+
+== Debugging Symbols for Logray
+
+This archive contains the debugging symbols for Logray {logray-version}.
+The debugging symbols are only necessary if Logray is crashing and you need to report an issue to the Logray development team.
+
+WARNING: This won't work properly with any version other than Logray {logray-version}.
+
+To install the symbols, drag _Logray.dSYM_ to the same location as _Logray_.
+This is usually your _Applications_ folder.
+
+To uninstall, drag _Logray.dSYM_ to the trash.
diff --git a/packaging/macosx/Logray_read_me_first.adoc b/packaging/macosx/Logray_read_me_first.adoc
new file mode 100644
index 00000000..498b039e
--- /dev/null
+++ b/packaging/macosx/Logray_read_me_first.adoc
@@ -0,0 +1,34 @@
+// Required attributes:
+// include-dir
+// min-macos-version
+
+include::{include-dir}/attributes.adoc[]
+:stylesheet: {include-dir}/ws.css
+
+== Before You Begin
+
+This release of Logray requires macOS {min-macos-version} or later.
+If you are running an earlier version of macOS you can install using another packaging system such as Homebrew or MacPorts.
+
+== Quick Setup
+
+To install Logray, drag the _Logray_ application bundle to the _Applications_ folder.
+
+////
+If you would like to add the path to
+https://www.wireshark.org/docs/man-pages/wireshark.html[Logray],
+https://www.wireshark.org/docs/man-pages/tshark.html[TShark],
+https://www.wireshark.org/docs/man-pages/capinfos.html[capinfos],
+https://www.wireshark.org/docs/man-pages/editcap.html[editcap],
+and
+https://www.wireshark.org/docs/man-pages/[other command line utilities]
+to the system PATH, install the
+link:Logray.app/Contents/Resources/Extras/Add%20Wireshark%20to%20the%20system%20path.pkg[Add Logray to the system path]
+package.
+////
+
+== Uninstalling
+
+To uninstall Logray, do the following:
+
+. Remove _/Applications/Logray.app_
diff --git a/packaging/macosx/Wireshark.icns b/packaging/macosx/Wireshark.icns
new file mode 100644
index 00000000..21dcd6c0
--- /dev/null
+++ b/packaging/macosx/Wireshark.icns
Binary files differ
diff --git a/packaging/macosx/WiresharkInfo.plist.in b/packaging/macosx/WiresharkInfo.plist.in
new file mode 100644
index 00000000..64ae6119
--- /dev/null
+++ b/packaging/macosx/WiresharkInfo.plist.in
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>Wireshark</string>
+ <key>CFBundleGetInfoString</key>
+ <string>@PROJECT_VERSION@, Copyright 1998-2024 Wireshark Development Team</string>
+ <key>CFBundleIconFile</key>
+ <string>Wireshark.icns</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.wireshark.Wireshark</string>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>5vw</string>
+ <string>5vw.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>InfoVista/Accellent 5View Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>apc</string>
+ <string>pkt</string>
+ <string>tpc</string>
+ <string>wpz</string>
+ <string>apc.gz</string>
+ <string>pkt.gz</string>
+ <string>tpc.gz</string>
+ <string>wpz.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>LiveAction/Savvius/WildPackets *Peek Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>bfr</string>
+ <string>bfr.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Viavi/Network Instruments Observer Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>erf</string>
+ <string>erf.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Endace ERF Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>ipfix</string>
+ <string>ipfix.gz</string>
+ <!-- Don't register for .pfx: that extension
+ has another (more common) use.
+ -->
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>IPFIX Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>mplog</string>
+ <string>mplog.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Micropross mplog Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>pcap</string>
+ <string>pcap.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeMIMETypes</key>
+ <array>
+ <string>application/vnd.tcpdump.pcap</string>
+ </array>
+ <key>CFBundleTypeName</key>
+ <string>Pcap Network Capture</string>
+ <key>CFBundleTypeOSTypes</key>
+ <array>
+ <string>PCAP</string>
+ </array>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>pcapng</string>
+ <string>ntar</string>
+ <string>pcapng.gz</string>
+ <string>ntar.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Pcapng Network Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>pklg</string>
+ <string>pklg.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>macOS PacketLogger Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>rf5</string>
+ <string>rf5.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Tektronix K12 Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>snoop</string>
+ <string>snoop.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Solaris snoop Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>tr1</string>
+ <string>tr1.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Novell LANalyzer Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>trc0</string>
+ <string>trc0.gz</string>
+ <string>trc1</string>
+ <string>trc1.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>HP-UX nettl Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>vwr</string>
+ <string>vwr.gz</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Ixia IxVeriWave Packet Capture</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>rtp</string>
+ <string>rtp.gz</string>
+ <string>rtp.zst</string>
+ <string>rtp.lz4</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>Wiresharkdoc.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>RTP stream (RTPDump)</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ <!-- XXX - This dictionary needs a lot more entries -->
+ </array>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>@PROJECT_VERSION@</string>
+ <key>CFBundleSignature</key>
+ <string>Wshk</string>
+ <key>CFBundleVersion</key>
+ <string>@PROJECT_VERSION@</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>Copyright 1998-2024 Wireshark Developers, GNU General Public License.</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+ <key>NSHighResolutionCapable</key>
+ <true/>
+ <!-- Force dark mode support. -->
+ <key>NSRequiresAquaSystemAppearance</key>
+ <false/>
+ <key>LSMinimumSystemVersion</key>
+ <string>@MIN_MACOS_VERSION@</string>
+
+ <!-- Sparkle settings https://sparkle-project.org/documentation/customization/ -->
+ <key>SUFeedURL</key>
+ <string>https://www.wireshark.org/update/0/Wireshark/@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_PATCH_VERSION@/macOS/x86-64/en-US/stable.xml</string>
+ <key>SUEnableAutomaticChecks</key>
+ <false/>
+ <key>SUPublicEDKey</key>
+ <string>BeSuPpEZOmOzkON9QMnfIdwyi06P/LcVoik8M5O2bsQ=</string>
+ <key>SUEnableSystemProfiling</key>
+ <false/>
+ <!--
+ Disable automatic updates here, then enable them at program
+ startup depending on prefs.gui_update_enabled.
+ -->
+ <key>SUAutomaticallyUpdate</key>
+ <false/>
+
+</dict>
+</plist>
diff --git a/packaging/macosx/Wireshark_dsym_installation.adoc b/packaging/macosx/Wireshark_dsym_installation.adoc
new file mode 100644
index 00000000..a7c1b99e
--- /dev/null
+++ b/packaging/macosx/Wireshark_dsym_installation.adoc
@@ -0,0 +1,17 @@
+// Required attributes:
+// include-dir
+
+include::{include-dir}/attributes.adoc[]
+:stylesheet: {include-dir}/ws.css
+
+== Debugging Symbols for Wireshark
+
+This archive contains the debugging symbols for Wireshark {wireshark-version}.
+The debugging symbols are only necessary if Wireshark is crashing and you need to report an issue to the Wireshark development team.
+
+WARNING: This won't work properly with any version other than Wireshark {wireshark-version}.
+
+To install the symbols, drag _Wireshark.dSYM_ to the same location as _Wireshark_.
+This is usually your _Applications_ folder.
+
+To uninstall, drag _Wireshark.dSYM_ to the trash.
diff --git a/packaging/macosx/Wireshark_read_me_first.adoc b/packaging/macosx/Wireshark_read_me_first.adoc
new file mode 100644
index 00000000..1f6073de
--- /dev/null
+++ b/packaging/macosx/Wireshark_read_me_first.adoc
@@ -0,0 +1,70 @@
+// Required attributes:
+// include-dir
+// min-macos-version
+
+include::{include-dir}/attributes.adoc[]
+:stylesheet: {include-dir}/ws.css
+
+== Before You Begin
+
+This release of Wireshark requires macOS {min-macos-version} or later.
+If you are running an earlier version of macOS you can install using another packaging system such as Homebrew or MacPorts.
+
+== Quick Setup
+
+To install Wireshark, drag the _Wireshark_ application bundle to the _Applications_ folder.
+
+In order to be able to capture packets, install the
+link:Wireshark.app/Contents/Resources/Extras/Install%20ChmodBPF.pkg[Install ChmodBPF]
+package.
+
+If you would like to add the path to
+https://www.wireshark.org/docs/man-pages/wireshark.html[Wireshark],
+https://www.wireshark.org/docs/man-pages/tshark.html[TShark],
+https://www.wireshark.org/docs/man-pages/capinfos.html[capinfos],
+https://www.wireshark.org/docs/man-pages/editcap.html[editcap],
+and
+https://www.wireshark.org/docs/man-pages/[other command line utilities]
+to the system PATH, install the
+link:Wireshark.app/Contents/Resources/Extras/Add%20Wireshark%20to%20the%20system%20path.pkg[Add Wireshark to the system path]
+package.
+
+== Package Installation Details
+
+The ChmodBPF installer writes to the following locations:
+
+* _/Library/LaunchDaemons/org.wireshark.ChmodBPF.plist_. A launch daemon that adjusts permissions on the system's packet capture devices (/dev/bpf*) when the system starts up.
+* _/Library/Application Support/Wireshark/ChmodBPF_. A copy of the launch daemon property list, and the script that the launch daemon runs.
+
+The installer group named “access_bpf” is created. The user who opened the package is added to the group.
+
+The system path installer writes to the following locations:
+
+* _/etc/paths.d/Wireshark_. The folder name in this file is automatically added to PATH
+* _/etc/manpaths.d/Wireshark_. The folder name in this file is used by the man command.
+
+It assumes that Wireshark is installed in _/Applications_.
+
+== Uninstalling
+
+To uninstall Wireshark, do the following:
+
+. Remove _/Applications/Wireshark.app_
+. Remove _/Library/Application Support/Wireshark_
+
+You can uninstall ChmodBPF via the
+link:Wireshark.app/Contents/Resources/Extras/Uninstall%20ChmodBPF.pkg[Uninstall ChmodBPF]
+package, which is available on this disk or via menu:Wireshark[About Wireshark,Folders,macOS Extras].
+You can also uninstall it manually by doing the following:
+
+. Unload the “org.wireshark.ChmodBPF.plist” launchd job
+. Remove _/Library/LaunchDaemons/org.wireshark.ChmodBPF.plist_
+. Remove the “access_bpf” group.
+
+You can uninstall the system path components via the
+link:Wireshark.app/Contents/Resources/Extras/Remove%20Wireshark%20from%20the%20system%20path.pkg[Remove Wireshark from the system path]
+package, which is available on this disk or via menu:Wireshark[About Wireshark,Folders,macOS Extras].
+You can also uninstall it manually by doing the following:
+
+. Remove _/etc/paths.d/Wireshark_
+. Remove _/etc/manpaths.d/Wireshark_
diff --git a/packaging/macosx/Wiresharkdoc.icns b/packaging/macosx/Wiresharkdoc.icns
new file mode 100644
index 00000000..fb660029
--- /dev/null
+++ b/packaging/macosx/Wiresharkdoc.icns
Binary files differ
diff --git a/packaging/macosx/dmg_background.png b/packaging/macosx/dmg_background.png
new file mode 100644
index 00000000..10502b6c
--- /dev/null
+++ b/packaging/macosx/dmg_background.png
Binary files differ
diff --git a/packaging/macosx/dmg_background.svg b/packaging/macosx/dmg_background.svg
new file mode 100644
index 00000000..2588f018
--- /dev/null
+++ b/packaging/macosx/dmg_background.svg
@@ -0,0 +1,1394 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="360"
+ height="550"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="1.2 (dc2aeda, 2022-05-15)"
+ version="1.0"
+ sodipodi:docname="dmg_background.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="dmg_background.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ xml:space="preserve"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
+ id="defs4"><linearGradient
+ id="linearGradient3157"><stop
+ style="stop-color:#6eac2c;stop-opacity:1;"
+ offset="0"
+ id="stop3159" /><stop
+ id="stop3848"
+ offset="0.5"
+ style="stop-color:#acdd4a;stop-opacity:1;" /><stop
+ style="stop-color:#dbf1b0;stop-opacity:1;"
+ offset="1"
+ id="stop3161" /></linearGradient><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 225 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="625 : 225 : 1"
+ inkscape:persp3d-origin="312.5 : 166.66667 : 1"
+ id="perspective2499" /><linearGradient
+ id="linearGradient4260"><stop
+ style="stop-color:#d3d3d3;stop-opacity:1;"
+ offset="0"
+ id="stop4262" /><stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop4264" /></linearGradient><linearGradient
+ id="linearGradient10020"><stop
+ id="stop10022"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0.85567009;" /><stop
+ style="stop-color:#ffffff;stop-opacity:0.49411765;"
+ offset="0.09"
+ id="stop3157" /><stop
+ style="stop-color:#ffffff;stop-opacity:0.35051546;"
+ offset="0.28999999"
+ id="stop4129" /><stop
+ id="stop10024"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0.05882353;" /></linearGradient><linearGradient
+ id="linearGradient3152"><stop
+ style="stop-color:#1ba0df;stop-opacity:1;"
+ offset="0"
+ id="stop3154" /><stop
+ style="stop-color:#1373a1;stop-opacity:1;"
+ offset="1"
+ id="stop3156" /></linearGradient><linearGradient
+ id="linearGradient3978"><stop
+ style="stop-color:#50e740;stop-opacity:1;"
+ offset="0"
+ id="stop3980" /><stop
+ style="stop-color:#45a615;stop-opacity:0.94117647;"
+ offset="1"
+ id="stop3982" /></linearGradient><inkscape:perspective
+ id="perspective3625"
+ inkscape:persp3d-origin="372.04724 : 400.78739 : 1"
+ inkscape:vp_z="744.09448 : 576.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 576.18109 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective2594"
+ inkscape:persp3d-origin="372.04724 : 400.78739 : 1"
+ inkscape:vp_z="744.09448 : 576.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 576.18109 : 1"
+ sodipodi:type="inkscape:persp3d" /></defs><sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="152.5"
+ inkscape:cy="243.5"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ width="625px"
+ height="350px"
+ inkscape:window-width="1305"
+ inkscape:window-height="811"
+ inkscape:window-x="675"
+ inkscape:window-y="291"
+ showgrid="false"
+ inkscape:window-maximized="0"
+ inkscape:pagecheckerboard="true"
+ inkscape:showpageshadow="2"
+ inkscape:deskcolor="#d1d1d1" /><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" /></cc:Work></rdf:RDF></metadata><g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Screenshot"
+ style="display:none;opacity:0.5;stroke-width:1.33049"
+ transform="matrix(0.75321487,0,0,0.75,5.4076932,18.92308)"><image
+ width="477.95126"
+ height="733.33331"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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
+YII=
+"
+ id="image3451"
+ x="-7.1794829"
+ y="-89.230766" /></g><g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,150)"><text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.551px;line-height:100%;font-family:'Lucida Grande';-inkscape-font-specification:'Lucida Grande';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="163.95821"
+ y="-49.2038"
+ id="text9542"
+ transform="scale(0.84784264,1.1794641)"
+ inkscape:export-filename="/tmp/util_background.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ id="tspan9540"
+ x="163.95821"
+ y="-49.2038"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:62.4037px;font-family:'Arial Narrow';-inkscape-font-specification:'Arial Narrow Bold';stroke-width:0.869726px"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:62.4037px;font-family:'Arial Narrow';-inkscape-font-specification:'Arial Narrow Bold';fill:#000000;fill-opacity:0.372549;stroke-width:1px"
+ id="tspan9544">&gt;</tspan><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:62.4037px;font-family:'Arial Narrow';-inkscape-font-specification:'Arial Narrow Bold';fill:#000000;fill-opacity:0.498039;stroke-width:1px"
+ id="tspan9624">&gt;</tspan><tspan
+ style="fill:#000000;fill-opacity:0.623529;stroke-width:0.869726px"
+ id="tspan9676">&gt;</tspan></tspan></text></g></svg>
diff --git a/packaging/macosx/entitlements.plist b/packaging/macosx/entitlements.plist
new file mode 100644
index 00000000..62a55450
--- /dev/null
+++ b/packaging/macosx/entitlements.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.security.cs.disable-library-validation</key>
+ <true/>
+</dict>
+</plist>
diff --git a/packaging/macosx/logray-app.dmgbuild.in b/packaging/macosx/logray-app.dmgbuild.in
new file mode 100644
index 00000000..a7d83600
--- /dev/null
+++ b/packaging/macosx/logray-app.dmgbuild.in
@@ -0,0 +1,146 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+import os.path
+
+#
+# Example settings file for dmgbuild
+#
+# Adapted from https://raw.githubusercontent.com/al45tair/dmgbuild/master/examples/settings.py
+
+# Use like this: dmgbuild -s settings.py "Test Volume" test.dmg
+
+# You can actually use this file for your own application (not just TextEdit)
+# by doing e.g.
+#
+# dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg
+
+# .. Useful stuff ..............................................................
+
+lr_version = '@LOG_PROJECT_VERSION@'
+lr_volname = 'Logray ' + lr_version
+lr_srcdir = '@CMAKE_SOURCE_DIR@'
+lr_bindir = '@CMAKE_BINARY_DIR@'
+lr_app = 'Logray.app'
+lr_readme = 'Read me first.html'
+lr_install_chmodbpf = 'Install ChmodBPF.pkg'
+lr_uninstall_chmodbpf = 'Uninstall ChmodBPF.pkg'
+lr_install_path_helper = 'Add Logray to the system path.pkg'
+lr_uninstall_path_helper = 'Remove Logray from the system path.pkg'
+
+# .. Basics ....................................................................
+
+# Uncomment to override the output filename
+# filename = lr_volname + ' Intel 64.dmg'
+
+# Uncomment to override the output volume name
+# volume_name = 'Logray ' + lr_version
+
+# From the hdiutil man page:
+# UDZO - UDIF zlib-compressed image
+# UDBZ - UDIF bzip2-compressed image (Mac OS X 10.4+ only)
+# ULFO - UDIF lzfse-compressed image (OS X 10.11+ only)
+# ULMO - UDIF lzma-compressed image (macOS 10.15+ only)
+# Volume format (see hdiutil create -help)
+
+# https://developer.apple.com/forums/thread/128166
+# currently (Jan 2023) says to use UDZO
+format = defines.get('format', 'UDZO')
+
+# Compression level (if relevant)
+compression_level = 9
+
+# Volume size
+size = None
+
+# Files to include
+files = [
+ os.path.join(lr_bindir, 'run', lr_app),
+ os.path.join(lr_bindir, 'packaging', 'macosx', 'logray', lr_readme),
+]
+
+# Symlinks to create
+symlinks = {
+ 'Applications': '/Applications',
+ }
+
+# Volume icon
+#
+# You can either define icon, in which case that icon file will be copied to the
+# image, *or* you can define badge_icon, in which case the icon file you specify
+# will be used to badge the system's Removable Disk icon
+#
+badge_icon = os.path.join(lr_srcdir, 'packaging', 'macosx', 'lriconvol.icns')
+#badge_icon = icon_from_app(application)
+
+# Where to put the icons
+icon_locations = {
+ lr_app: ( 80, 64),
+ 'Applications': (240, 64),
+ lr_readme: (160, 170),
+ lr_install_chmodbpf: ( 80, 276),
+ lr_uninstall_chmodbpf: (250, 276),
+ lr_install_path_helper: ( 80, 382),
+ lr_uninstall_path_helper: (250, 382),
+ }
+
+# .. Window configuration ......................................................
+
+# Background
+#
+# This is a STRING containing any of the following:
+#
+# #3344ff - web-style RGB color
+# #34f - web-style RGB color, short form (#34f == #3344ff)
+# rgb(1,0,0) - RGB color, each value is between 0 and 1
+# hsl(120,1,.5) - HSL (hue saturation lightness) color
+# hwb(300,0,0) - HWB (hue whiteness blackness) color
+# cmyk(0,1,0,0) - CMYK color
+# goldenrod - X11/SVG named color
+# builtin-arrow - A simple built-in background with a blue arrow
+# /foo/bar/baz.png - The path to an image file
+#
+# The hue component in hsl() and hwb() may include a unit; it defaults to
+# degrees ('deg'), but also supports radians ('rad') and gradians ('grad'
+# or 'gon').
+#
+# Other color components may be expressed either in the range 0 to 1, or
+# as percentages (e.g. 60% is equivalent to 0.6).
+background = os.path.join(lr_srcdir, 'packaging', 'macosx', 'dmg_background.png')
+
+show_status_bar = False
+show_tab_view = False
+show_toolbar = False
+show_pathbar = False
+show_sidebar = False
+sidebar_width = 180
+
+# Window position in ((x, y), (w, h)) format
+window_rect = ((600, 200), (350, 525))
+
+# Select the default view; must be one of
+#
+# 'icon-view'
+# 'list-view'
+# 'column-view'
+# 'coverflow'
+#
+default_view = 'icon-view'
+
+# General view configuration
+show_icon_preview = False
+
+# Set these to True to force inclusion of icon/list view settings (otherwise
+# we only include settings for the default view)
+include_icon_view_settings = 'auto'
+include_list_view_settings = 'auto'
+
+# .. Icon view configuration ...................................................
+
+arrange_by = None
+grid_offset = (0, 0)
+#grid_spacing = 100
+scroll_position = (0, 0)
+#label_pos = 'bottom' # or 'right'
+text_size = 12
+icon_size = 72
diff --git a/packaging/macosx/logray-dsym.dmgbuild.in b/packaging/macosx/logray-dsym.dmgbuild.in
new file mode 100644
index 00000000..f57950bb
--- /dev/null
+++ b/packaging/macosx/logray-dsym.dmgbuild.in
@@ -0,0 +1,139 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+import os.path
+
+#
+# Example settings file for dmgbuild
+#
+# Adapted from https://raw.githubusercontent.com/al45tair/dmgbuild/master/examples/settings.py
+
+# Use like this: dmgbuild -s settings.py "Test Volume" test.dmg
+
+# You can actually use this file for your own application (not just TextEdit)
+# by doing e.g.
+#
+# dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg
+
+# .. Useful stuff ..............................................................
+
+lw_version = '@LOG_PROJECT_VERSION@'
+lw_volname = 'Logray Debugging Symbols' + lw_version
+lw_srcdir = '@CMAKE_SOURCE_DIR@'
+lw_bindir = '@CMAKE_BINARY_DIR@'
+lw_app_dsym = 'Logray.dSYM'
+lw_readme_dsym = 'Debugging symbols installation.html'
+
+# .. Basics ....................................................................
+
+# Uncomment to override the output filename
+# filename = lw_volname + ' Intel 64.dmg'
+
+# Uncomment to override the output volume name
+# volume_name = 'Logray ' + lw_version
+
+# From the hdiutil man page:
+# UDZO - UDIF zlib-compressed image
+# UDBZ - UDIF bzip2-compressed image (Mac OS X 10.4+ only)
+# ULFO - UDIF lzfse-compressed image (OS X 10.11+ only)
+# ULMO - UDIF lzma-compressed image (macOS 10.15+ only)
+# Volume format (see hdiutil create -help)
+
+# dSYMs are huge, so compress them with UDBZ despite what
+# https://developer.apple.com/forums/thread/128166
+# currently (Jan 2023) says.
+format = defines.get('format', 'UDBZ')
+
+# Compression level (if relevant)
+compression_level = 9
+
+# Volume size
+size = None
+
+# Files to include
+files = [
+ os.path.join(lw_bindir, 'run', lw_app_dsym),
+ os.path.join(lw_bindir, 'packaging', 'macosx', 'logray', lw_readme_dsym),
+]
+
+# Symlinks to create
+symlinks = {
+ 'Applications': '/Applications',
+ }
+
+# Volume icon
+#
+# You can either define icon, in which case that icon file will be copied to the
+# image, *or* you can define badge_icon, in which case the icon file you specify
+# will be used to badge the system's Removable Disk icon
+#
+badge_icon = os.path.join(lw_srcdir, 'packaging', 'macosx', 'lriconvol.icns')
+#badge_icon = icon_from_app(application)
+
+# Where to put the icons
+icon_locations = {
+ lw_app_dsym: ( 80, 64),
+ 'Applications': (240, 64),
+ lw_readme_dsym: (160, 170),
+ }
+
+# .. Window configuration ......................................................
+
+# Background
+#
+# This is a STRING containing any of the following:
+#
+# #3344ff - web-style RGB color
+# #34f - web-style RGB color, short form (#34f == #3344ff)
+# rgb(1,0,0) - RGB color, each value is between 0 and 1
+# hsl(120,1,.5) - HSL (hue saturation lightness) color
+# hwb(300,0,0) - HWB (hue whiteness blackness) color
+# cmyk(0,1,0,0) - CMYK color
+# goldenrod - X11/SVG named color
+# builtin-arrow - A simple built-in background with a blue arrow
+# /foo/bar/baz.png - The path to an image file
+#
+# The hue component in hsl() and hwb() may include a unit; it defaults to
+# degrees ('deg'), but also supports radians ('rad') and gradians ('grad'
+# or 'gon').
+#
+# Other color components may be expressed either in the range 0 to 1, or
+# as percentages (e.g. 60% is equivalent to 0.6).
+background = os.path.join(lw_srcdir, 'packaging', 'macosx', 'dmg_background.png')
+
+show_status_bar = False
+show_tab_view = False
+show_toolbar = False
+show_pathbar = False
+show_sidebar = False
+sidebar_width = 180
+
+# Window position in ((x, y), (w, h)) format
+window_rect = ((600, 200), (350, 325))
+
+# Select the default view; must be one of
+#
+# 'icon-view'
+# 'list-view'
+# 'column-view'
+# 'coverflow'
+#
+default_view = 'icon-view'
+
+# General view configuration
+show_icon_preview = False
+
+# Set these to True to force inclusion of icon/list view settings (otherwise
+# we only include settings for the default view)
+include_icon_view_settings = 'auto'
+include_list_view_settings = 'auto'
+
+# .. Icon view configuration ...................................................
+
+arrange_by = None
+grid_offset = (0, 0)
+#grid_spacing = 100
+scroll_position = (0, 0)
+#label_pos = 'bottom' # or 'right'
+text_size = 12
+icon_size = 72
diff --git a/packaging/macosx/lriconvol.icns b/packaging/macosx/lriconvol.icns
new file mode 100644
index 00000000..80282496
--- /dev/null
+++ b/packaging/macosx/lriconvol.icns
Binary files differ
diff --git a/packaging/macosx/lriconvol.svg b/packaging/macosx/lriconvol.svg
new file mode 100644
index 00000000..c25a8c82
--- /dev/null
+++ b/packaging/macosx/lriconvol.svg
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ id="svg548"
+ sodipodi:version="0.32"
+ sodipodi:docname="lriconvol.svg"
+ inkscape:version="1.2 (dc2aeda, 2022-05-15)"
+ inkscape:export-filename="lriconvol.iconset/icon_512x512.png"
+ inkscape:export-xdpi="2048"
+ inkscape:export-ydpi="2048"
+ x="0px"
+ y="0px"
+ width="24px"
+ height="24px"
+ viewBox="0 0 24 24"
+ enable-background="new 0 0 24 24"
+ xml:space="preserve"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
+ id="metadata3007"><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 /></cc:Work></rdf:RDF></metadata><defs
+ id="defs3005"><linearGradient
+ inkscape:collect="always"
+ id="linearGradient1850"><stop
+ style="stop-color:#1f4c8c;stop-opacity:1;"
+ offset="0"
+ id="stop1846" /><stop
+ style="stop-color:#5785d9;stop-opacity:1;"
+ offset="1"
+ id="stop1848" /></linearGradient><linearGradient
+ id="linearGradient5067"><stop
+ style="stop-color:#000000;stop-opacity:0.15753424;"
+ offset="0"
+ id="stop5069" /><stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop5071" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1850"
+ id="linearGradient1852"
+ x1="0.90263927"
+ y1="14.816668"
+ x2="0.90263927"
+ y2="2.1164389"
+ gradientUnits="userSpaceOnUse" /></defs>
+
+<sodipodi:namedview
+ inkscape:snap-page="false"
+ inkscape:current-layer="svg548"
+ inkscape:window-width="1718"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-maximized="0"
+ inkscape:window-height="1032"
+ inkscape:cy="11.71897"
+ inkscape:cx="11.325527"
+ inkscape:window-x="250"
+ id="base"
+ inkscape:window-y="27"
+ showgrid="true"
+ inkscape:zoom="35.583333"
+ inkscape:document-rotation="0"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1">
+
+ <inkscape:grid
+ type="xygrid"
+ enabled="true"
+ visible="true"
+ spacingx="0.5px"
+ spacingy="0.5px"
+ empspacing="5"
+ snapvisiblegridlinesonly="true"
+ id="grid3142">
+ </inkscape:grid>
+<sodipodi:guide
+ position="22,24"
+ orientation="-1,0"
+ id="guide4492"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,134,229)" /></sodipodi:namedview>
+
+<g
+ id="g3209"
+ style="display:inline;stroke-width:2.28576;fill:url(#linearGradient1852);fill-opacity:1"
+ transform="matrix(1.6535135,0,0,1.6535135,-1.9925262,-1.9995602)"
+ inkscape:label="logray"><path
+ id="path5467"
+ style="color:#000000;display:inline;fill:url(#linearGradient1852);stroke-width:2.28576;-inkscape-stroke:none;fill-opacity:1"
+ d="m 3.2400727,6.0332235 c -1.6282601,0.025031 -0.9649152,0.033365 -1.9427167,0.03514 -0.00246,4.4e-6 -0.00551,-1.246e-4 -0.00775,0 h -0.00207 c -0.00151,1.863e-4 -0.00755,0.00201 -0.00775,0.00207 -1.023e-4,3.36e-5 -0.00977,0.00358 -0.00982,0.00362 -5.02e-5,3.77e-5 -0.013438,0.029414 -0.013436,0.029456 1.8e-6,4.16e-5 0.011315,0.023209 0.011369,0.023254 5.36e-5,4.56e-5 0.00816,0.00408 0.00827,0.00413 2.104e-4,9.91e-5 0.0043,0.00374 0.00568,0.00413 0.00139,3.829e-4 0.00254,-2.261e-4 0.00362,0 0.00858,0.00181 0.019386,0.00364 0.037207,0.00568 0.7450762,0.1040572 1.4869276,0.2050597 2.0135135,0.2656165 0.050206,0.0061 0.092576,-0.01329 0.1188558,-0.041341 0.02628,-0.028051 0.035949,-0.06235 0.040824,-0.097152 0.00487,-0.034802 0.00431,-0.071307 0.00207,-0.099736 -0.00224,-0.02843 -0.00568,-0.052455 -0.00568,-0.054777 V 6.087992 L 3.4690065,6.080242 C 3.4186965,6.0664 3.3985335,6.056142 3.3692715,6.046652 3.3400085,6.037162 3.3054505,6.03221 3.2400804,6.033216 Z"
+ inkscape:label="path5467"
+ sodipodi:nodetypes="csccccssscsccscssccscc" /><path
+ style="fill:url(#linearGradient1852);fill-opacity:1;stroke:none;stroke-width:0.604772px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 8.9032692,6.1928876 C 6.8638617,6.0382159 4.5961906,5.9612841 3.6084262,5.9804506 3.4148813,5.9842241 3.4132913,6.0163697 3.2997077,6.1473133 3.2255203,6.2328396 3.1612662,6.302039 3.2225006,6.4932988 c 0.061237,0.19126 1.1039387,1.7303724 1.5035164,2.4394119 0.3087693,0.5479034 0.6305558,1.7898373 0.71721,2.4766723 0.095323,0.755546 0.00949,1.138757 -0.1326524,1.633742 -0.08989,0.313022 -0.277895,0.777884 -0.3291536,0.883345 -0.071749,0.147618 -0.2424409,0.438716 -0.2780846,0.533086 -0.084615,0.224023 -0.055321,0.267404 0.1122927,0.337702 0.144197,0.06048 1.4882014,-0.03298 1.8109768,-0.107824 0.3469277,-0.08045 0.7924818,-0.303498 1.1487712,-0.561988 C 8.2021253,13.817837 9.3085408,12.666171 9.7145043,11.889861 10.120468,11.113552 11.018747,9.8289026 11.235702,9.5534115 11.791959,8.8470788 12.42794,8.4769487 12.723889,8.3179773 13.178299,8.0738903 13.680024,8.2113596 14.207641,7.6982137 14.448023,7.4644225 14.608088,7.1972481 14.533722,6.9712183 14.459354,6.7451873 14.172097,6.745049 13.973417,6.7053004 13.774739,6.6655519 13.575575,6.6305956 13.364945,6.6053352 11.882005,6.4274872 11.256513,6.3713525 8.9032682,6.1928793 Z"
+ id="path3205"
+ sodipodi:nodetypes="ssssssssssssssssszsss" /><path
+ style="fill:url(#linearGradient1852);fill-opacity:1;stroke:none;stroke-width:0.604772px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 13.061635,5.2295311 C 13.013617,4.9413813 12.875822,4.3436854 12.80026,4.0297442 12.753435,3.8351889 12.645904,3.3934937 12.51538,3.1076385 12.355481,2.7574505 12.156827,2.4673879 11.900236,2.2341766 11.801496,2.1444339 11.623019,2.1134401 11.53973,2.1166641 11.323239,2.1250442 11.36145,2.1997672 11.305994,2.3921507 11.24828,2.5923659 11.224831,2.7057664 11.1125,2.9104136 10.960772,3.1868365 10.583333,3.7041667 10.31875,3.96875 9.9843113,4.3031885 9.5077152,4.5996551 9.2604168,4.7625 8.7662984,5.0878748 8.3389344,5.227556 8.0846163,5.3187745 7.475322,5.5373184 6.4981568,5.6783374 5.8414466,5.8117975 c 0.6818225,0.013539 2.5610101,0.097892 4.5452274,0.2552756 1.678991,0.1331734 2.755596,0.2723835 3.094781,0.3211796 -0.313793,-0.4073843 -0.350107,-0.7318582 -0.41982,-1.1587216 z"
+ id="path3207"
+ sodipodi:nodetypes="cssssssssscscc" /></g></svg>
diff --git a/packaging/macosx/osx-app.sh.in b/packaging/macosx/osx-app.sh.in
new file mode 100755
index 00000000..0bd0b932
--- /dev/null
+++ b/packaging/macosx/osx-app.sh.in
@@ -0,0 +1,717 @@
+#!/bin/bash
+#
+# USAGE
+# osx-app [-s] [-l /path/to/libraries]
+#
+# This script attempts to build an application bundle for macOS, resolving
+# dynamic libraries, etc.
+# It strips the executable and libraries if '-s' is given.
+#
+# AUTHORS
+# Kees Cook <kees@outflux.net>
+# Michael Wybrow <mjwybrow@users.sourceforge.net>
+# Jean-Olivier Irisson <jo.irisson@gmail.com>
+#
+# Copyright (C) 2005 Kees Cook
+# Copyright (C) 2005-2007 Michael Wybrow
+# Copyright (C) 2007 Jean-Olivier Irisson
+#
+# Released under GNU GPL, read the file 'COPYING' for more information
+#
+# Thanks to GNUnet's "build_app" script for help with library dep resolution.
+# https://gnunet.org/svn/GNUnet/contrib/OSX/build_app
+#
+# NB:
+# This originally came from Inkscape; Inkscape's configure script has an
+# "--enable-osxapp", which causes some of Inkscape's installation data
+# files to have macOS-ish paths under Contents/Resources of the bundle
+# or under /Library/Application Support. We don't have such an option;
+# we just put them in "bin", "etc", "lib", and "share" directories
+# under Contents/Resources, rather than in the "bin", "etc", "lib",
+# and "share" directories under the installation directory.
+#
+
+# XXX We could probably replace a lot of this with https://github.com/auriamg/macdylibbundler
+
+shopt -s extglob
+
+# Defaults
+strip=false
+install_exclude_prefixes="/System/|/Library/|/usr/lib/|/usr/X11/|/opt/X11/|@executable_path"
+
+# Bundle always has the same name. Version information is stored in
+# the Info.plist file which is filled in by the configure script.
+bundle="Wireshark.app"
+
+# Location for libraries (tools/macos-setup.sh defaults to whatever the
+# various support libraries use as their standard installation location,
+# which is /usr/local)
+if [ -z "$LIBPREFIX" ]; then
+ LIBPREFIX="/usr/local"
+fi
+
+
+# Help message
+#----------------------------------------------------------
+help()
+{
+echo -e "
+Create an app bundle for macOS
+
+USAGE
+ $0 [-s] [-l /path/to/libraries]
+
+OPTIONS
+ -h,--help
+ Display this help message.
+ -b,--bundle
+ The application bundle name. Default is Wireshark.app.
+ -s
+ Strip the libraries and executables from debugging symbols.
+ -l,--libraries
+ Specify the path to the libraries the application depends
+ on (typically /sw or /opt/local). By default it is
+ /usr/local.
+
+EXAMPLE
+ $0 -b Logray.app -s -l /opt/local
+"
+}
+
+
+# Parse command line arguments
+#----------------------------------------------------------
+while [ "$1" != "" ]
+do
+ case $1 in
+ -b|--bundle)
+ bundle="$2"
+ shift 1 ;;
+ -s)
+ strip=true ;;
+ -l|--libraries)
+ LIBPREFIX="$2"
+ shift 1 ;;
+ -h|--help)
+ help
+ exit 0 ;;
+ *)
+ echo "Invalid command line option: $1"
+ exit 2 ;;
+ esac
+ shift 1
+done
+
+# Safety tests
+if [ ! -e "$LIBPREFIX" ]; then
+ echo "Cannot find the directory containing the libraries: $LIBPREFIX" >&2
+ exit 1
+fi
+
+if [ ! -d "$bundle" ] ; then
+ echo "$bundle not found" >&2
+ exit 1
+fi
+
+qt_frameworks_dir=$( "@QT_QMAKE_EXECUTABLE@" -query QT_INSTALL_LIBS )
+if [ ! -d "$qt_frameworks_dir" ] ; then
+ echo "Can't find the Qt frameworks directory" >&2
+ exit 1
+fi
+
+sparkle_version="@SPARKLE_VERSION@"
+sparkle_frameworks_dir="@SPARKLE_LIBRARY@"
+
+#
+# Define the signing identities, or use self-signed ("-")
+# if the identity is not provided.
+if [ -n "$CODE_SIGN_IDENTITY" ] ; then
+ codesign_dev_app_identity="Developer ID Application: $CODE_SIGN_IDENTITY"
+ codesign_dev_install_identity="Developer ID Installer: $CODE_SIGN_IDENTITY"
+else
+ codesign_dev_app_identity="-"
+ codesign_dev_install_identity="-"
+fi
+
+#
+# Leave the Qt frameworks out of the special processing.
+#
+install_exclude_prefixes="$install_exclude_prefixes|$qt_frameworks_dir"
+
+app_name=${bundle%%.app}
+app_lower=$(echo "$app_name" | tr '[:upper:]' '[:lower:]')
+
+# Package paths
+pkgexec="$bundle/Contents/MacOS"
+#pkgres="$bundle/Contents/Resources"
+pkglib="$bundle/Contents/Frameworks"
+pkgplugin="$bundle/Contents/PlugIns/$app_lower/@PLUGIN_PATH_ID@"
+
+# Set the 'macosx' directory, usually the current directory.
+#resdir=$( pwd )
+
+#
+# Get a list of all binaries in the bundle.
+# Treat all plain files with read and execute permissions for all as
+# binaries.
+#
+secondary_binary_list=()
+while read -r binary ; do
+ secondary_binary_list+=("$binary")
+done < <( find "$pkgexec" \! -name "$app_name" -type f -perm -0555 -print | sort )
+plugin_library_list=()
+while read -r library ; do
+ plugin_library_list+=("$library")
+done < <( find "$pkgplugin" -name "*.so" -type f -perm -0555 -print | sort )
+bundle_binary_list=("$pkgexec/$app_name" "${secondary_binary_list[@]}" "${plugin_library_list[@]}")
+
+echo -e "\\nFixing up $bundle..."
+
+# Start with a clean Frameworks slate.
+if [ -d "$pkglib" ] ; then
+ printf "Removing %s\n" "$pkglib"
+ rm -v -r -f "$pkglib"
+fi
+mkdir -v -m u=rwx,go=rx "$pkglib"
+
+echo -e "\\nPrepopulating our libraries"
+
+# Copy only <library>.<SOVERSION>.dylib.
+cp -v +([^.]).+([[:digit:]]).dylib "$pkglib"
+
+# Fetch a unique list of LC_RPATHs from our executables, which will be used
+# for our dependency search below.
+bundle_binary_rpaths=("/usr/local/lib")
+rpaths=()
+
+# macdeployqt handles our Qt dependencies. We handle our Sparkle and
+# internal dependencies.
+skip_pats="Qt|Sparkle|build/run"
+
+for binary in "${bundle_binary_list[@]}" "$pkglib"/*.dylib ; do
+ while read -r rpath ; do
+ bundle_binary_rpaths+=("$rpath")
+ done < <( otool -l "$binary" | grep -A2 LC_RPATH | awk '$1=="path" && $2 !~ /^@/ {print $2}' | grep -E -v "$skip_pats" )
+done
+
+while read -r rpath ; do
+ rpaths+=("$rpath")
+done < <( printf '%s\n' "${bundle_binary_rpaths[@]}" | sort -u)
+
+printf "\nSearching the following LC_RPATHs for dependencies:\n"
+printf '%s\n' "${rpaths[@]}"
+
+# Find out libs we need from Fink, MacPorts, or from a custom install
+# (i.e. $LIBPREFIX), then loop until no changes.
+a=1
+nfiles=0
+endl=true
+while $endl; do
+ echo -e "\\nLooking for dependencies. Round $a"
+ #
+ # To find dependencies, we:
+ #
+ # run otool -L on all the binaries in the bundle, and on all
+ # the shared libraries in the $pkglib directory, to find all
+ # the libraries they depend on (we don't bother with the
+ # frameworks, as the only frameworks we ship are the Qt
+ # frameworks, which don't depend on any libraries that
+ # don't ship with the OS, and as it's hard to find the
+ # framework libraries under $pkglib without getting
+ # non-framework files);
+ #
+ # filter out all lines that don't contain "compatibility" to
+ # remove lines of output that don't correspond to dependencies;
+ #
+ # use cut to extract the library name from the output;
+
+ # replace "\tlibbrotli" with "\t/usr/local/lib/libbrotli" so that
+ # it isn't excluded from subsequent filtering.
+ # libbrotli 1.09 and earlier doesn't have a path prefix in its
+ # "install name" when built by tools/macos-setup.sh:
+ # https://github.com/google/brotli/pull/976;
+ #
+ # replace "@loader_path/libbrotli" with "/usr/local/lib/libbrotli" so that
+ # it isn't excluded from subsequent filtering;
+ #
+ # strip out system libraries, as we don't bundle them with
+ # Wireshark;
+ #
+ # eliminate duplicates.
+ #
+ # We might want to let dyld do some of the work for us, e.g. by
+ # parsing the output of
+ #
+ # `DYLD_PRINT_LIBRARIES=1 $bundle_binary`
+ #
+ # instead, or just use CMake's fixup_bundle:
+ # https://cmake.org/cmake/help/latest/module/BundleUtilities.html
+ libs=()
+ while read -r lib ; do
+ libs+=("$lib")
+ done < <(
+ otool -L "${bundle_binary_list[@]}" "$pkglib"/*.dylib 2>/dev/null \
+ | grep -F compatibility \
+ | grep -v @rpath \
+ | cut -d\( -f1 \
+ | sed '1,$s;^ libbrotli; /usr/local/lib/libbrotli;' \
+ | sed '1,$s;^ @loader_path/libbrotli; /usr/local/lib/libbrotli;' \
+ | grep -E -v "$install_exclude_prefixes" \
+ | sort \
+ | uniq \
+ )
+ while read -r rpath_lib _ ; do
+ suffix=${rpath_lib/@rpath\/}
+ for rpath in "${rpaths[@]}" ; do
+ if [ -f "$rpath/$suffix" ] ; then
+ printf "Found @rpath/%s in %s\n" "$suffix" "$rpath"
+ libs+=("$rpath/$suffix")
+ fi
+ done
+ done < <( otool -L "${bundle_binary_list[@]}" "$pkglib"/*.dylib \
+ | grep @rpath \
+ | grep -E -v "$skip_pats" \
+ | sort -u \
+ )
+ install -m 644 -C -v "${libs[@]}" "$pkglib"
+ (( a++ ))
+ # shellcheck disable=SC2012
+ nnfiles=$( ls "$pkglib" | wc -l )
+ if (( nnfiles == nfiles )); then
+ endl=false
+ else
+ nfiles=$nnfiles
+ fi
+done
+
+# Strip libraries and executables if requested
+#----------------------------------------------------------
+if [ "$strip" = "true" ]; then
+ echo -e "\\nStripping debugging symbols...\\n"
+ strip -x "$pkglib"/*.dylib
+ strip -ur "${bundle_binary_list[@]}"
+fi
+
+"@QT_MACDEPLOYQT_EXECUTABLE@" "$bundle" -no-strip -verbose=2 || exit 1
+
+#
+# The build process added to the Wireshark/Logray binary an rpath
+# entry pointing to the directory containing the Qt frameworks; remove
+# that entry from the binary in the package.
+#
+/usr/bin/install_name_tool -delete_rpath "$qt_frameworks_dir" "$pkgexec/$app_name"
+
+if [ -d "$sparkle_frameworks_dir" ] ; then
+ cp -R "$sparkle_frameworks_dir" "$pkglib" || exit 1
+ # Remove these if we ever start sandboxing.
+ rm -f "$pkglib/Sparkle.framework/XPCServices" || exit 1
+ rm -rf "$pkglib/Sparkle.framework/Versions/B/XPCServices" || exit 1
+fi
+
+# NOTE: we must rpathify *all* files, *including* Qt libraries etc.,
+#
+rpathify_file () {
+ local rpathify_exclude_prefixes="$install_exclude_prefixes|@rpath"
+
+ # Fix a given executable, library, or plugin to be relocatable
+ if [ ! -f "$1" ]; then
+ return 0;
+ fi
+
+ #
+ # OK, what type of file is this?
+ #
+ if ! filetype=$( otool -hv "$1" | grep -E MH_MAGIC | awk '{print $5}' ; exit "${PIPESTATUS[0]}" ) ; then
+ echo "Unable to rpathify $1 in $( pwd ): file type failed."
+ exit 1
+ fi
+
+ case "$filetype" in
+
+ EXECUTE|DYLIB|BUNDLE)
+ #
+ # Executable, library, or plugin. (Plugins
+ # can be either DYLIB or BUNDLE; shared
+ # libraries are DYLIB.)
+ #
+ # For DYLIB and BUNDLE, fix the shared
+ # library identification.
+ #
+ if [[ "$filetype" = "DYLIB" || "$filetype" = "BUNDLE" ]]; then
+ echo "Changing shared library identification of $1"
+ base=$( echo "$1" | awk -F/ '{print $NF}' )
+ #
+ # The library will end up in a directory in
+ # the rpath; this is what we should change its
+ # ID to.
+ #
+ to=@rpath/$base
+ /usr/bin/install_name_tool -id "$to" "$1"
+
+ #
+ # If we're a library and we depend on something in
+ # @executable_path/../Frameworks, replace that with
+ # @rpath.
+ #
+ while read -r dep_lib ; do
+ base=$( echo "$dep_lib" | awk -F/ '{print $NF}' )
+ to="@rpath/$base"
+ echo "Changing reference to $dep_lib to $to in $1"
+ /usr/bin/install_name_tool -change "$dep_lib" "$to" "$1"
+ done < <( otool -L "$1" | grep @executable_path/../Frameworks | awk '{print $1}' )
+
+ #
+ # Try to work around brotli's lack of a full path
+ # https://github.com/google/brotli/issues/934
+ #
+ while read -r base ; do
+ to="@rpath/$base"
+ echo "Changing reference to $base to $to in $1"
+ /usr/bin/install_name_tool -change "$base" "$to" "$1"
+ done < <( otool -L "$1" | grep '^ libbrotli' | awk '{print $1}' )
+ fi
+
+ #
+ # Find our local rpaths and remove them.
+ #
+ otool -l "$1" | grep -A2 LC_RPATH \
+ | awk '$1=="path" && $2 !~ /^@/ {print $2}' \
+ | grep -E -v "$rpathify_exclude_prefixes" | \
+ while read -r lc_rpath ; do
+ echo "Stripping LC_RPATH $lc_rpath from $1"
+ install_name_tool -delete_rpath "$lc_rpath" "$1"
+ done
+
+ #
+ # Add -Wl,-rpath,@executable_path/../Frameworks
+ # to the rpath, so it'll find the bundled
+ # frameworks and libraries if they're referred
+ # to by @rpath/, rather than having a wrapper
+ # script tweak DYLD_LIBRARY_PATH.
+ #
+ if [[ "$filetype" = "EXECUTE" ]]; then
+ if [ -d ../Frameworks ] ; then
+ framework_path=../Frameworks
+ elif [ -d ../../Frameworks ] ; then
+ framework_path=../../Frameworks
+ else
+ echo "Unable to find relative path to Frameworks for $1 from $( pwd )"
+ exit 1
+ fi
+
+ echo "Adding @executable_path/$framework_path to rpath of $1"
+ /usr/bin/install_name_tool -add_rpath @executable_path/$framework_path "$1"
+ fi
+
+ #
+ # Show the minimum supported version of macOS
+ # for each executable or library
+ #
+ if [[ "$filetype" = "EXECUTE" || "$filetype" = "DYLIB" ]] ; then
+ echo "Minimum macOS version for $1:"
+ otool -l "$1" | grep -A3 LC_VERSION_MIN_MACOSX
+ fi
+
+ #
+ # Get the list of dynamic libraries on which this
+ # file depends, and select only the libraries that
+ # are in $LIBPREFIX, as those are the only ones
+ # that we'll be shipping in the app bundle; the
+ # other libraries are system-supplied or supplied
+ # as part of X11, will be expected to be on the
+ # system on which the bundle will be installed,
+ # and should be referred to by their full pathnames.
+ #
+ local libs=()
+ while read -r lib ; do
+ libs+=("$lib")
+ done < <( otool -L "$1" \
+ | grep -F compatibility \
+ | cut -d\( -f1 \
+ | grep -E -v "$rpathify_exclude_prefixes" \
+ | sort \
+ | uniq \
+ )
+
+ for lib in "${libs[@]}"; do
+ #
+ # Get the file name of the library.
+ #
+ base=$( echo "$lib" | awk -F/ '{print $NF}' )
+ #
+ # The library will end up in a directory in
+ # the rpath; this is what we should change its
+ # file name to.
+ #
+ to=@rpath/$base
+ #
+ # Change the reference to that library.
+ #
+ echo "Changing reference to $lib to $to in $1"
+ /usr/bin/install_name_tool -change "$lib" "$to" "$1"
+ done
+ ;;
+ esac
+}
+
+rpathify_dir () {
+ #
+ # Make sure we *have* that directory
+ #
+ if [ -d "$1" ]; then
+ (cd "$1" || exit 1
+ echo "rpathifying $1"
+ #
+ # Make sure we *have* files to fix
+ #
+ # shellcheck disable=SC2086
+ files=$( ls $2 2>/dev/null )
+ if [ -n "$files" ]; then
+ for file in $files; do
+ rpathify_file "$file" "$( pwd )"
+ done
+ else
+ echo "no files found in $1"
+ fi
+ )
+ rf_ret=$?
+ if [ $rf_ret -ne 0 ] ; then exit $rf_ret ; fi
+ fi
+}
+
+rpathify_files () {
+ #
+ # Fix bundle deps
+ #
+ rpathify_dir "$pkglib" "*.dylib"
+ rpathify_dir "$pkgexec" "*"
+ for plugindir in "$pkgplugin"/*
+ do
+ rpathify_dir "$plugindir" "*"
+ done
+
+ rpathify_dir "$pkgexec/extcap" "*"
+}
+
+if [ ${#LIBPREFIX} -ge "6" ]; then
+ # If the LIBPREFIX path is long enough to allow
+ # path rewriting, then do this.
+ # 6 is the length of @rpath, which replaces LIBPREFIX.
+ rpathify_files
+else
+ echo "Could not rewrite dylib paths for bundled libraries. This requires" >&2
+ echo "the support libraries to be installed in a PREFIX of at least 6 characters in length." >&2
+ echo "" >&2
+ exit 1
+
+fi
+
+# QtNetwork might be linked with brotli.
+rpathify_file "$pkglib/QtNetwork.framework/Versions/Current/QtNetwork"
+
+bundle_dsym="${bundle%%.app}.dSYM"
+
+frameworks=()
+for framework in "$pkglib"/*.framework/Versions/*/* ; do
+ if [ -f "$framework" ];then
+ frameworks+=("$framework")
+ fi
+done
+
+echo "Dsymifying binaries to $bundle_dsym:"
+# shellcheck disable=SC2086
+dsymutil --minimize --out "$bundle_dsym" \
+ "${bundle_binary_list[@]}" \
+ "${frameworks[@]}" \
+ "$pkglib"/*.dylib
+
+# echo "Stripping binaries:"
+# # shellcheck disable=SC2086
+# strip -S \
+# "${bundle_binary_list[@]}" \
+# "${frameworks[@]}" \
+# "$pkglib"/*.dylib \
+# "$pkgplugin"/*/*.so
+
+# XXX What's the proper directory layout here?
+# dsymify_file () {
+# # out_dsym="${1/#$bundle/$bundle_dsym}.dSYM"
+# echo " $1"
+# dsymutil --minimize --out "$bundle_dsym" "$1"
+# strip "$1"
+# }
+
+# echo "Dsymifying and stripping executables:"
+# if [ -z "${bundle_binary_list[@]}" ] ; then
+# echo "No executables specified for dsymifying."
+# exit 1
+# fi
+# for binary in "${bundle_binary_list[@]}" ; do
+# if [ -e "$binary" ];then
+# dsymify_file "$binary"
+# fi
+# done
+
+# echo "Dsymifying and stripping frameworks:"
+# for framework in "$pkglib"/*.framework/Versions/*/* ; do
+# if [ -f "$framework" ];then
+# dsymify_file "$framework"
+# fi
+# done
+
+# echo "Dsymifying and stripping libraries:"
+# for library in "$pkglib"/*.dylib ; do
+# #
+# # Squelch warnings, in case the .o files from building
+# # support libraries aren't around any more.
+# #
+# dsymify_file "$library" | grep -E -v 'unable to open object file'
+# done
+
+# echo "Dsymifying and stripping plugins:"
+# for plugin in "$pkgplugin"/*/*.so ; do
+# dsymify_file "$plugin"
+# done
+
+codesign_file () {
+ # https://developer.apple.com/forums/thread/128166
+ # https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html
+ # https://developer.apple.com/library/archive/technotes/tn2206/_index.html
+ # https://developer.apple.com/documentation/security/notarizing_your_app_before_distribution/resolving_common_notarization_issues?language=objc
+ #
+ # XXX Do we need to add the com.apple.security.cs.allow-unsigned-executable-memory
+ # entitlement for Lua?
+ # https://developer.apple.com/documentation/security/hardened_runtime_entitlements?language=objc
+
+ codesign \
+ --sign "$codesign_dev_app_identity" \
+ --prefix "org.wireshark." \
+ --force \
+ --options runtime \
+ --entitlements "@CMAKE_SOURCE_DIR@/packaging/macosx/entitlements.plist" \
+ --timestamp \
+ --verbose \
+ "$1" || exit 1
+}
+
+# XXX We could do this via the productbuild calls in the {,un}install_*_pkg
+# targets in CMakeLists.txt instead.
+productsign_pkg () {
+ mv "$1" "$1.unsigned" || exit 1
+ productsign \
+ --sign "$codesign_dev_install_identity" \
+ --timestamp \
+ "$1.unsigned" "$1" || exit 1
+ rm -f "$1.unsigned" || exit 1
+}
+
+if [ -n "$CODE_SIGN_IDENTITY" ] ; then
+ security find-identity -v -s "$CODE_SIGN_IDENTITY" -p codesigning
+
+ # The Code Signing Guide says:
+ #
+ # "While you use the --deep option for verification to mimic what Gatekeeper does,
+ # it is not recommended for signing. During signing, if you have nested code, and
+ # if you are signing manually, you sign nested code in stages (as Xcode does
+ # automatically), starting with the most deeply embedded components first. You
+ # then sign code at the next level of hierarchy, and so on. You work your way
+ # outward, finally signing the top level entity that contains all the others.
+ # Signing all the components in one shot with --deep is for emergency repairs and
+ # temporary adjustments only. Note that signing with the combination --deep
+ # --force will forcibly re-sign all code in a bundle."
+
+ # We need to force-sign Sparkle and its Updater.app.
+ # https://sparkle-project.org/documentation/#4-distributing-your-app
+ # https://sparkle-project.org/documentation/sandboxing/#code-signing
+
+ if [ "$sparkle_version" == "2" ] ; then
+ echo "Signing Sparkle's assets"
+ codesign \
+ --sign "$codesign_dev_app_identity" \
+ --force \
+ --options runtime \
+ --verbose \
+ "$pkglib/Sparkle.framework/Versions/B/AutoUpdate" \
+ "$pkglib/Sparkle.framework/Versions/B/Updater.app" \
+ "$pkglib/Sparkle.framework" \
+ || exit 1
+ # Uncomment if we ever start sandboxing.
+ # "$pkglib/Sparkle.framework/Versions/B/XPCServices/org.sparkle-project.InstallerLauncher.xpc"
+ # codesign \
+ # --sign "$codesign_dev_app_identity" \
+ # --force \
+ # --options runtime \
+ # --entitlements "$sparkle_frameworks_dir/../Entitlements/org.sparkle-project.Downloader.entitlements" \
+ # --verbose \
+ # "$pkglib/Sparkle.framework/Versions/B/XPCServices/org.sparkle-project.Downloader.xpc" \
+ # || exit 1
+ else
+ echo "Signing Sparkle's AutoUpdate.app"
+ codesign \
+ --sign "$codesign_dev_app_identity" \
+ --force \
+ --timestamp \
+ --options runtime \
+ --verbose \
+ "$pkglib/Sparkle.framework/Versions/A/Resources/AutoUpdate.app" \
+ || exit 1
+ fi
+
+ echo "Signing frameworks"
+ for framework in "$pkglib"/*.framework/Versions/* ; do
+ if [ -L "$framework" ] ; then
+ # Skip "Current"
+ continue
+ fi
+ codesign_file "$framework"
+ done
+
+ echo "Signing libraries"
+ for library in "$pkglib"/*.dylib ; do
+ codesign_file "$library"
+ done
+
+ plugin_list=$( find "$bundle/Contents/PlugIns" -type f -name "*.dylib" -o -name "*.so" )
+ echo "Signing plugins"
+ for plugin in $plugin_list ; do
+ codesign_file "$plugin"
+ done
+
+ echo "Signing extra packages"
+ find "$bundle/Contents/Resources/Extras" -type f -name "*.pkg" | \
+ while read -r extra_pkg ; do
+ productsign_pkg "$extra_pkg"
+ done
+
+ echo "Signing secondary executables"
+ if (( ! ${#secondary_binary_list[@]} )) ; then
+ echo "No executables specified for code signing."
+ exit 1
+ fi
+ for binary in "${secondary_binary_list[@]}" ; do
+ if [ -e "$binary" ];then
+ codesign_file "$binary"
+ fi
+ done
+
+ echo "Signing primary executable"
+ codesign_file "$pkgexec/$app_name"
+
+ echo "Signing $bundle"
+ codesign_file "$bundle"
+
+ # Code Signing Guide, "Testing Conformance with Command Line Tools"
+ codesign --verify --deep --strict --verbose=2 "$bundle" || exit 1
+ spctl --assess --type exec --verbose=2 "$bundle" || exit 1
+else
+ echo "Code signing not performed (no identity)"
+fi
+
+# File permission sanity check.
+if badperms=$( find "$bundle" ! -perm -0444 -exec ls -l "{}" + | grep . ) ; then
+ echo "Found files with restrictive permissions:"
+ echo "$badperms"
+ exit 1
+fi
+
+exit 0
diff --git a/packaging/macosx/osx-dmg.sh.in b/packaging/macosx/osx-dmg.sh.in
new file mode 100755
index 00000000..5eda3998
--- /dev/null
+++ b/packaging/macosx/osx-dmg.sh.in
@@ -0,0 +1,108 @@
+#!/bin/bash
+#
+# The script creates a disk image using the dmgbuild utility and signs it.
+
+set -e
+
+# Defaults
+app_name="Wireshark"
+dmgbuild="@DMGBUILD_EXECUTABLE@"
+version="@PROJECT_VERSION@"
+log_version="@LOG_PROJECT_VERSION@"
+app_settings_file="@CMAKE_BINARY_DIR@/packaging/macosx/wireshark-app.dmgbuild"
+dsym_settings_file="@CMAKE_BINARY_DIR@/packaging/macosx/wireshark-dsym.dmgbuild"
+architecture=""
+
+# Help message
+#----------------------------------------------------------
+help()
+{
+echo -e "
+Create a custom dmg file to distribute Wireshark
+
+USAGE
+ $0
+
+OPTIONS
+ -h,--help
+ Display this help message.
+
+Icons are positioned and the background image is set in wireshark-app.dmgbuild.in
+and wireshark-dsym.dmgbuild.in.
+"
+}
+
+if [ ! -x "$dmgbuild" ] ; then
+ echo "Error: \"$dmgbuild\" not found."
+ exit 1
+fi
+
+# Parse command line arguments
+while [ "$1" != "" ]
+do
+ case $1 in
+ -a|--app-name)
+ shift 1
+ app_name="$1"
+ ;;
+ -h|--help)
+ help
+ exit 0 ;;
+ *)
+ echo "Invalid command line option"
+ exit 2 ;;
+ esac
+ shift 1
+done
+
+if lipo "$app_name.app/Contents/MacOS/$app_name" -verify_arch arm64 ; then
+ architecture="Arm 64"
+elif lipo "$app_name.app/Contents/MacOS/$app_name" -verify_arch x86_64 ; then
+ architecture="Intel 64"
+else
+ echo "Error: $app_name.app missing or has unknown architecture."
+ lipo "$app_name.app/Contents/MacOS/$app_name" -detailed_info
+ exit 1
+fi
+
+if [[ $app_name = Log* ]] ; then
+ version=$log_version
+ app_settings_file="@CMAKE_BINARY_DIR@/packaging/macosx/logray-app.dmgbuild"
+ dsym_settings_file="@CMAKE_BINARY_DIR@/packaging/macosx/logray-dsym.dmgbuild"
+fi
+
+app_vol_name="$app_name ${version}"
+app_img_name="$app_vol_name $architecture.dmg"
+
+printf "\nCreating application disk image %s\n" "$app_img_name"
+
+"$dmgbuild" \
+ --no-hidpi \
+ -s "$app_settings_file" \
+ "$app_vol_name" \
+ "$app_img_name" || exit 1
+
+dsym_vol_name="$app_name dSYM ${version}"
+dsym_img_name="$dsym_vol_name $architecture.dmg"
+
+printf "\nCreating debugging symbols disk image %s\n" "$dsym_img_name"
+
+"$dmgbuild" \
+ --no-hidpi \
+ -s "$dsym_settings_file" \
+ "$dsym_vol_name" \
+ "$dsym_img_name" || exit 1
+
+printf "\nSigning disk images\n"
+
+# TN2206, "Signing Disk Images"
+if [ -n "$CODE_SIGN_IDENTITY" ] ; then
+ echo -e "Signing $app_img_name and $dsym_img_name"
+ codesign \
+ --sign "Developer ID Application: $CODE_SIGN_IDENTITY" \
+ --timestamp \
+ --verbose \
+ "$app_img_name" "$dsym_img_name"
+fi
+
+exit 0
diff --git a/packaging/macosx/osx-extras.sh b/packaging/macosx/osx-extras.sh
new file mode 100755
index 00000000..a306ce40
--- /dev/null
+++ b/packaging/macosx/osx-extras.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+#
+# USAGE
+# osx-extras
+#
+# This script preps the "Extras" packages prior to package creation.
+#
+
+set -e
+shopt -s extglob
+
+# Help message
+#----------------------------------------------------------
+help()
+{
+echo -e "
+Prepare Wireshark's \"Extras\" packages.
+
+USAGE
+ $0
+
+OPTIONS
+ -h,--help
+ Display this help message.
+"
+}
+
+
+# Parse command line arguments
+#----------------------------------------------------------
+while [ "$1" != "" ]
+do
+ case $1 in
+ -h|--help)
+ help
+ exit 0 ;;
+ *)
+ echo "Invalid command line option: $1"
+ exit 2 ;;
+ esac
+ shift 1
+done
+
+script_dir=$( dirname "$0" )
+
+codesign_file () {
+ # https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html
+ # https://developer.apple.com/library/archive/technotes/tn2206/_index.html
+ # https://developer.apple.com/documentation/security/notarizing_your_app_before_distribution/resolving_common_notarization_issues?language=objc
+ #
+ # XXX Do we need to add the com.apple.security.cs.allow-unsigned-executable-memory
+ # entitlement for Lua?
+ # https://developer.apple.com/documentation/security/hardened_runtime_entitlements?language=objc
+ codesign \
+ --sign "Developer ID Application: $CODE_SIGN_IDENTITY" \
+ --prefix "org.wireshark." \
+ --force \
+ --timestamp \
+ --verbose \
+ "$1"
+}
+
+if [ -n "$CODE_SIGN_IDENTITY" ] ; then
+ security find-identity -v -s "$CODE_SIGN_IDENTITY" -p codesigning
+
+ # According to
+ # https://developer.apple.com/library/archive/technotes/tn2206/_index.html and
+ # https://carlashley.com/2018/09/23/code-signing-scripts-for-pppc-whitelisting/
+ # script signatures are stored in the file's extended attributes.
+ #
+ # In general, signing shell scripts probably isn't very useful.
+ # In this specific case we should be able to ensure that
+ # ChmodBPF's extended attributes are preserved from the build
+ # system to the end user's machine.
+
+ chmodbpf="$script_dir/ChmodBPF/root/Library/Application Support/Wireshark/ChmodBPF/ChmodBPF"
+ echo "Signing ChmodBPF"
+ codesign_file "$chmodbpf"
+
+ # Code Signing Guide, "Testing Conformance with Command Line Tools"
+ codesign --verify --strict --verbose=2 "$chmodbpf" || exit 1
+else
+ echo "Extras code signing not performed (no identity)"
+fi
+
+exit 0
diff --git a/packaging/macosx/path_helper/install-distribution.xml b/packaging/macosx/path_helper/install-distribution.xml
new file mode 100644
index 00000000..245f0765
--- /dev/null
+++ b/packaging/macosx/path_helper/install-distribution.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Created using `productbuild -\-synthesize -\-package org.wireshark.path_helper.pkg.pkg /tmp/install-distribution.xml`
+See also: https://github.com/open-eid/osx-installer/blob/master/distribution.xml
+https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/DistributionDefinitionRef/
+https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/InstallerJavaScriptRef/
+-->
+<installer-gui-script minSpecVersion="1">
+ <title>Add Wireshark to the system PATH</title>
+ <welcome language="en" mime-type="text/html"><![CDATA[<html><body><br />
+<p style="margin: 0px; font: 13px 'Lucida Grande'">This package will add Wireshark and its associated utilities to the system PATH and MANPATH. Wireshark must be installed in /Applications.</p></body></html>]]></welcome>
+ <pkg-ref id="org.wireshark.path_helper.pkg"/>
+ <options customize="never" require-scripts="false" hostArchitectures="arm64,x86_64"/>
+ <choices-outline>
+ <line choice="default">
+ <line choice="org.wireshark.path_helper.pkg"/>
+ </line>
+ </choices-outline>
+ <choice id="default"/>
+ <choice id="org.wireshark.path_helper.pkg" visible="false">
+ <pkg-ref id="org.wireshark.path_helper.pkg"/>
+ </choice>
+ <pkg-ref id="org.wireshark.path_helper.pkg" onConclusion="none">install.path_helper.pkg</pkg-ref>
+</installer-gui-script>
diff --git a/packaging/macosx/path_helper/root/etc/manpaths.d/Wireshark b/packaging/macosx/path_helper/root/etc/manpaths.d/Wireshark
new file mode 100644
index 00000000..205dad7e
--- /dev/null
+++ b/packaging/macosx/path_helper/root/etc/manpaths.d/Wireshark
@@ -0,0 +1 @@
+/Applications/Wireshark.app/Contents/Resources/share/man
diff --git a/packaging/macosx/path_helper/root/etc/paths.d/Wireshark b/packaging/macosx/path_helper/root/etc/paths.d/Wireshark
new file mode 100644
index 00000000..55493761
--- /dev/null
+++ b/packaging/macosx/path_helper/root/etc/paths.d/Wireshark
@@ -0,0 +1 @@
+/Applications/Wireshark.app/Contents/MacOS
diff --git a/packaging/macosx/path_helper/uninstall-distribution.xml b/packaging/macosx/path_helper/uninstall-distribution.xml
new file mode 100644
index 00000000..d44538cd
--- /dev/null
+++ b/packaging/macosx/path_helper/uninstall-distribution.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Created using `productbuild -\-synthesize -\-package org.wireshark.uninstall.path.pkg /tmp/uninstall-distribution.xml`
+See also: https://github.com/open-eid/osx-installer/blob/master/distribution.xml
+https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/DistributionDefinitionRef/
+https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/InstallerJavaScriptRef/
+-->
+<installer-gui-script minSpecVersion="1">
+ <title>Remove Wireshark from the system PATH</title>
+ <welcome language="en" mime-type="text/html"><![CDATA[<html><body><br />
+<p style="margin: 0px; font: 13px 'Lucida Grande'">This package will remove Wireshark and its associated utilities from the system PATH and MANPATH.</p></body></html>]]></welcome>
+ <pkg-ref id="org.wireshark.uninstall.path_helper.pkg"/>
+ <options customize="never" require-scripts="false" hostArchitectures="arm64,x86_64"/>
+ <choices-outline>
+ <line choice="default">
+ <line choice="org.wireshark.uninstall.path_helper.pkg"/>
+ </line>
+ </choices-outline>
+ <choice id="default"/>
+ <choice id="org.wireshark.uninstall.path_helper.pkg" visible="false">
+ <pkg-ref id="org.wireshark.uninstall.path_helper.pkg"/>
+ </choice>
+ <pkg-ref id="org.wireshark.uninstall.path_helper.pkg" onConclusion="none">uninstall.path_helper.pkg</pkg-ref>
+</installer-gui-script>
diff --git a/packaging/macosx/path_helper/uninstall-scripts/postinstall b/packaging/macosx/path_helper/uninstall-scripts/postinstall
new file mode 100755
index 00000000..5575bdee
--- /dev/null
+++ b/packaging/macosx/path_helper/uninstall-scripts/postinstall
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+#
+# Remove the Wireshark paths.d and manpaths.d entries.
+#
+
+rm -f /private/etc/paths.d/Wireshark
+rm -f /private/etc/manpaths.d/Wireshark
+
+# https://gitlab.com/wireshark/wireshark/-/issues/18734
+pkgutil --forget org.wireshark.path_helper.pkg
diff --git a/packaging/macosx/wireshark-app.dmgbuild.in b/packaging/macosx/wireshark-app.dmgbuild.in
new file mode 100644
index 00000000..b7ba5598
--- /dev/null
+++ b/packaging/macosx/wireshark-app.dmgbuild.in
@@ -0,0 +1,170 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+import os.path
+
+#
+# Example settings file for dmgbuild
+#
+# Adapted from https://raw.githubusercontent.com/al45tair/dmgbuild/master/examples/settings.py
+
+# Use like this: dmgbuild -s settings.py "Test Volume" test.dmg
+
+# You can actually use this file for your own application (not just TextEdit)
+# by doing e.g.
+#
+# dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg
+
+# .. Useful stuff ..............................................................
+
+ws_version = '@PROJECT_VERSION@'
+ws_volname = 'Wireshark ' + ws_version
+ws_srcdir = '@CMAKE_SOURCE_DIR@'
+ws_bindir = '@CMAKE_BINARY_DIR@'
+ws_app = 'Wireshark.app'
+ws_readme = 'Read me first.html'
+ws_donate = 'Donate to the Wireshark Foundation.html'
+ws_install_chmodbpf = 'Install ChmodBPF.pkg'
+ws_uninstall_chmodbpf = 'Uninstall ChmodBPF.pkg'
+ws_install_path_helper = 'Add Wireshark to the system path.pkg'
+ws_uninstall_path_helper = 'Remove Wireshark from the system path.pkg'
+
+# .. Basics ....................................................................
+
+# Uncomment to override the output filename
+# filename = ws_volname + ' Intel 64.dmg'
+
+# Uncomment to override the output volume name
+# volume_name = 'Wireshark ' + ws_version
+
+# From the hdiutil man page:
+# UDZO - UDIF zlib-compressed image
+# UDBZ - UDIF bzip2-compressed image (Mac OS X 10.4+ only)
+# ULFO - UDIF lzfse-compressed image (OS X 10.11+ only)
+# ULMO - UDIF lzma-compressed image (macOS 10.15+ only)
+# Volume format (see hdiutil create -help)
+#
+# A test with the following bundles resulted in the following .dmg sizes,
+# measured with `du -sm`:
+# 182 Wireshark.app
+# 267 Wireshark.dSYM
+#
+# UDBZ
+# 51 Wireshark 3.7.0 Intel 64.dmg
+# 81 Wireshark dSYM 3.7.0 Intel 64.dmg
+#
+# ULFO
+# 51 Wireshark 3.7.0 Intel 64.dmg
+# 81 Wireshark dSYM 3.7.0 Intel 64.dmg
+#
+# ULMO
+# 40 Wireshark 3.7.0 Intel 64.dmg
+# 50 Wireshark dSYM 3.7.0 Intel 64.dmg
+
+# https://developer.apple.com/forums/thread/128166
+# currently (Jan 2023) says to use UDZO
+format = defines.get('format', 'UDZO')
+
+# Compression level (if relevant)
+compression_level = 9
+
+# Volume size
+size = None
+
+# Files to include
+files = [
+ os.path.join(ws_bindir, 'run', ws_app),
+ os.path.join(ws_bindir, 'packaging', 'macosx', 'wireshark', ws_readme),
+ os.path.join(ws_bindir, 'packaging', 'macosx', 'wireshark', ws_donate),
+ os.path.join(ws_bindir, 'run', ws_app, 'Contents', 'Resources', 'Extras', ws_install_chmodbpf),
+ os.path.join(ws_bindir, 'run', ws_app, 'Contents', 'Resources', 'Extras', ws_uninstall_chmodbpf),
+ os.path.join(ws_bindir, 'run', ws_app, 'Contents', 'Resources', 'Extras', ws_install_path_helper),
+ os.path.join(ws_bindir, 'run', ws_app, 'Contents', 'Resources', 'Extras', ws_uninstall_path_helper),
+]
+
+# Symlinks to create
+symlinks = {
+ 'Applications': '/Applications',
+ }
+
+# Volume icon
+#
+# You can either define icon, in which case that icon file will be copied to the
+# image, *or* you can define badge_icon, in which case the icon file you specify
+# will be used to badge the system's Removable Disk icon
+#
+badge_icon = os.path.join(ws_srcdir, 'packaging', 'macosx', 'wsiconvol.icns')
+#badge_icon = icon_from_app(application)
+
+# Window position in ((x, y), (w, h)) format
+window_rect = ((600, 200), (360, 550))
+
+# Where to put the icons
+icon_locations = {
+ ws_app: ( 80, 64),
+ 'Applications': (250, 64),
+ ws_readme: ( 80, 180),
+ ws_donate: (250, 180),
+ ws_install_chmodbpf: ( 80, 296),
+ ws_uninstall_chmodbpf: (250, 296),
+ ws_install_path_helper: ( 80, 402),
+ ws_uninstall_path_helper: (250, 402),
+ }
+
+# .. Window configuration ......................................................
+
+# Background
+#
+# This is a STRING containing any of the following:
+#
+# #3344ff - web-style RGB color
+# #34f - web-style RGB color, short form (#34f == #3344ff)
+# rgb(1,0,0) - RGB color, each value is between 0 and 1
+# hsl(120,1,.5) - HSL (hue saturation lightness) color
+# hwb(300,0,0) - HWB (hue whiteness blackness) color
+# cmyk(0,1,0,0) - CMYK color
+# goldenrod - X11/SVG named color
+# builtin-arrow - A simple built-in background with a blue arrow
+# /foo/bar/baz.png - The path to an image file
+#
+# The hue component in hsl() and hwb() may include a unit; it defaults to
+# degrees ('deg'), but also supports radians ('rad') and gradians ('grad'
+# or 'gon').
+#
+# Other color components may be expressed either in the range 0 to 1, or
+# as percentages (e.g. 60% is equivalent to 0.6).
+background = os.path.join(ws_srcdir, 'packaging', 'macosx', 'dmg_background.png')
+
+show_status_bar = False
+show_tab_view = False
+show_toolbar = False
+show_pathbar = False
+show_sidebar = False
+sidebar_width = 180
+
+# Select the default view; must be one of
+#
+# 'icon-view'
+# 'list-view'
+# 'column-view'
+# 'coverflow'
+#
+default_view = 'icon-view'
+
+# General view configuration
+show_icon_preview = False
+
+# Set these to True to force inclusion of icon/list view settings (otherwise
+# we only include settings for the default view)
+include_icon_view_settings = 'auto'
+include_list_view_settings = 'auto'
+
+# .. Icon view configuration ...................................................
+
+arrange_by = None
+grid_offset = (0, 0)
+#grid_spacing = 100
+scroll_position = (0, 0)
+#label_pos = 'bottom' # or 'right'
+text_size = 12
+icon_size = 72
diff --git a/packaging/macosx/wireshark-dsym.dmgbuild.in b/packaging/macosx/wireshark-dsym.dmgbuild.in
new file mode 100644
index 00000000..99516a0a
--- /dev/null
+++ b/packaging/macosx/wireshark-dsym.dmgbuild.in
@@ -0,0 +1,139 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+import os.path
+
+#
+# Example settings file for dmgbuild
+#
+# Adapted from https://raw.githubusercontent.com/al45tair/dmgbuild/master/examples/settings.py
+
+# Use like this: dmgbuild -s settings.py "Test Volume" test.dmg
+
+# You can actually use this file for your own application (not just TextEdit)
+# by doing e.g.
+#
+# dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg
+
+# .. Useful stuff ..............................................................
+
+ws_version = '@PROJECT_VERSION@'
+ws_volname = 'Wireshark Debugging Symbols' + ws_version
+ws_srcdir = '@CMAKE_SOURCE_DIR@'
+ws_bindir = '@CMAKE_BINARY_DIR@'
+ws_app_dsym = 'Wireshark.dSYM'
+ws_readme_dsym = 'Debugging symbols installation.html'
+
+# .. Basics ....................................................................
+
+# Uncomment to override the output filename
+# filename = ws_volname + ' Intel 64.dmg'
+
+# Uncomment to override the output volume name
+# volume_name = 'Wireshark ' + ws_version
+
+# From the hdiutil man page:
+# UDZO - UDIF zlib-compressed image
+# UDBZ - UDIF bzip2-compressed image (Mac OS X 10.4+ only)
+# ULFO - UDIF lzfse-compressed image (OS X 10.11+ only)
+# ULMO - UDIF lzma-compressed image (macOS 10.15+ only)
+# Volume format (see hdiutil create -help)
+
+# dSYMs are huge, so compress them with UDBZ despite what
+# https://developer.apple.com/forums/thread/128166
+# currently (Jan 2023) says.
+format = defines.get('format', 'UDBZ')
+
+# Compression level (if relevant)
+compression_level = 9
+
+# Volume size
+size = None
+
+# Files to include
+files = [
+ os.path.join(ws_bindir, 'run', ws_app_dsym),
+ os.path.join(ws_bindir, 'packaging', 'macosx', 'wireshark', ws_readme_dsym),
+]
+
+# Symlinks to create
+symlinks = {
+ 'Applications': '/Applications',
+ }
+
+# Volume icon
+#
+# You can either define icon, in which case that icon file will be copied to the
+# image, *or* you can define badge_icon, in which case the icon file you specify
+# will be used to badge the system's Removable Disk icon
+#
+badge_icon = os.path.join(ws_srcdir, 'packaging', 'macosx', 'wsiconvol.icns')
+#badge_icon = icon_from_app(application)
+
+# Where to put the icons
+icon_locations = {
+ ws_app_dsym: ( 80, 64),
+ 'Applications': (240, 64),
+ ws_readme_dsym: (160, 170),
+ }
+
+# .. Window configuration ......................................................
+
+# Background
+#
+# This is a STRING containing any of the following:
+#
+# #3344ff - web-style RGB color
+# #34f - web-style RGB color, short form (#34f == #3344ff)
+# rgb(1,0,0) - RGB color, each value is between 0 and 1
+# hsl(120,1,.5) - HSL (hue saturation lightness) color
+# hwb(300,0,0) - HWB (hue whiteness blackness) color
+# cmyk(0,1,0,0) - CMYK color
+# goldenrod - X11/SVG named color
+# builtin-arrow - A simple built-in background with a blue arrow
+# /foo/bar/baz.png - The path to an image file
+#
+# The hue component in hsl() and hwb() may include a unit; it defaults to
+# degrees ('deg'), but also supports radians ('rad') and gradians ('grad'
+# or 'gon').
+#
+# Other color components may be expressed either in the range 0 to 1, or
+# as percentages (e.g. 60% is equivalent to 0.6).
+background = os.path.join(ws_srcdir, 'packaging', 'macosx', 'dmg_background.png')
+
+show_status_bar = False
+show_tab_view = False
+show_toolbar = False
+show_pathbar = False
+show_sidebar = False
+sidebar_width = 180
+
+# Window position in ((x, y), (w, h)) format
+window_rect = ((600, 200), (350, 325))
+
+# Select the default view; must be one of
+#
+# 'icon-view'
+# 'list-view'
+# 'column-view'
+# 'coverflow'
+#
+default_view = 'icon-view'
+
+# General view configuration
+show_icon_preview = False
+
+# Set these to True to force inclusion of icon/list view settings (otherwise
+# we only include settings for the default view)
+include_icon_view_settings = 'auto'
+include_list_view_settings = 'auto'
+
+# .. Icon view configuration ...................................................
+
+arrange_by = None
+grid_offset = (0, 0)
+#grid_spacing = 100
+scroll_position = (0, 0)
+#label_pos = 'bottom' # or 'right'
+text_size = 12
+icon_size = 72
diff --git a/packaging/macosx/wsiconvol.icns b/packaging/macosx/wsiconvol.icns
new file mode 100644
index 00000000..e32e03c0
--- /dev/null
+++ b/packaging/macosx/wsiconvol.icns
Binary files differ
diff --git a/packaging/macosx/wsiconvol.svg b/packaging/macosx/wsiconvol.svg
new file mode 100644
index 00000000..542fbab2
--- /dev/null
+++ b/packaging/macosx/wsiconvol.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+ version="1.1"
+ id="svg548"
+ sodipodi:version="0.32"
+ sodipodi:docname="wsiconvol.svg"
+ inkscape:version="1.0beta2 (2b71d25, 2019-12-03)"
+ inkscape:export-filename="/tmp/diskicon512.png"
+ inkscape:export-xdpi="2048"
+ inkscape:export-ydpi="2048"
+ x="0px"
+ y="0px"
+ width="24px"
+ height="24px"
+ viewBox="0 0 24 24"
+ enable-background="new 0 0 24 24"
+ xml:space="preserve"><metadata
+ id="metadata3007"><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 /></cc:Work></rdf:RDF></metadata><defs
+ id="defs3005"><linearGradient
+ id="linearGradient875"
+ inkscape:collect="always"><stop
+ id="stop871"
+ offset="0"
+ style="stop-color:#243ea3;stop-opacity:1" /><stop
+ id="stop873"
+ offset="1"
+ style="stop-color:#5873da;stop-opacity:1" /></linearGradient><linearGradient
+ id="linearGradient5067"><stop
+ style="stop-color:#000000;stop-opacity:0.15753424;"
+ offset="0"
+ id="stop5069" /><stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop5071" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5067"
+ id="linearGradient5073"
+ x1="15"
+ y1="21.5"
+ x2="12.5"
+ y2="11.5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2395694,0,0,1.1444028,21.297859,-1.7705992)" /><linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="0"
+ x2="13.5"
+ y1="24"
+ x1="13.5"
+ id="linearGradient877"
+ xlink:href="#linearGradient875"
+ inkscape:collect="always"
+ gradientTransform="matrix(0.87638123,0,0,0.87638123,1.4841582,0.98437829)" /></defs>
+
+<sodipodi:namedview
+ inkscape:snap-page="false"
+ inkscape:current-layer="svg548"
+ inkscape:window-width="1443"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-maximized="0"
+ inkscape:window-height="837"
+ inkscape:cy="12"
+ inkscape:cx="12"
+ inkscape:window-x="89"
+ id="base"
+ inkscape:window-y="54"
+ showgrid="true"
+ inkscape:zoom="26.208333"
+ inkscape:document-rotation="0">
+
+ <inkscape:grid
+ type="xygrid"
+ enabled="true"
+ visible="true"
+ spacingx="0.5px"
+ spacingy="0.5px"
+ empspacing="5"
+ snapvisiblegridlinesonly="true"
+ id="grid3142">
+ </inkscape:grid>
+</sodipodi:namedview>
+<path
+ d="m 21.25269,21.999123 v 0 L 2.4166278,21.971079 C 2.2991927,21.970203 2.1870159,21.921125 2.1072652,21.83524 2.0275146,21.747602 1.9880773,21.632796 1.9977176,21.515361 2.0152452,21.313794 3.9257562,1.2814715 21.576951,1.0027823 c 0.145479,-0.0210331 0.29797,0.07975 0.373338,0.2155897 0.07537,0.1349627 0.07099,0.3005988 -0.01315,0.4303032 -5.18029,8.1091553 -0.824675,18.5696408 -0.347047,19.6616118 0.06135,0.07274 0.09815,0.166513 0.09815,0.269926 0,0.232241 -0.188423,0.419787 -0.419788,0.419787 -0.0035,0 -0.0096,0 -0.01578,-8.77e-4 z"
+ id="path3002"
+ inkscape:connector-curvature="0"
+ style="fill:url(#linearGradient877);fill-opacity:1;stroke-width:3.50552;stroke-miterlimit:4;stroke-dasharray:none"
+ sodipodi:nodetypes="cccccccccssc" />
+<path
+ id="path4555"
+ inkscape:export-filename="/home/gerald/devel/wsweb/image/wslogo.png"
+ inkscape:export-xdpi="90.000000"
+ inkscape:export-ydpi="90.000000"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ d="M 25.5,23.001143 C 25.5,23.001143 28.365885,3.2922387 46.267747,1 40.714476,11.678422 46,23.02632 46,23.02632 Z"
+ style="fill:url(#linearGradient5073);fill-opacity:1;stroke-width:1.19103" /></svg>