wireshark/tools/macos-setup-brew.sh
Joakim Karlsson 812f277d0e Add LibXml2 to the required library list
Library is supported by all OS, and we effectivly already require the
library due to GLIB, libgcrypt, and GnuTLS also require LibXml2.

Ping #20508
2025-05-19 12:48:54 +00:00

231 lines
6.1 KiB
Bash
Executable File

#!/bin/bash
# Copyright 2014, Evan Huus (See AUTHORS file)
#
# Enhance (2016) by Alexis La Goutte (For use with Travis CI)
#
# Wireshark - Network traffic analyzer
# By Gerald Combs <gerald@wireshark.org>
# Copyright 1998 Gerald Combs
#
# SPDX-License-Identifier: GPL-2.0-or-later
set -e -u -o pipefail
eval "$(brew shellenv)"
HOMEBREW_NO_AUTO_UPDATE=${HOMEBREW_NO_AUTO_UPDATE:-}
function print_usage() {
printf "\\nUtility to setup a macOS system for Wireshark Development using Homebrew.\\n"
printf "The basic usage installs the needed software\\n\\n"
printf "Usage: %s [--install-optional] [--install-dmg-deps] [...other options...]\\n" "$0"
printf "\\t--install-required: install third party libraries required to build Wireshark\\n"
printf "\\t--install-optional: install optional third party libraries\\n"
printf "\\t--install-doc-deps: install packages required to build the documentation\\n"
printf "\\t--install-dmg-deps: install packages required to build the .dmg file\\n"
printf "\\t--install-sparkle-deps: install the Sparkle automatic updater\\n"
printf "\\t--install-test-deps: install packages required for automated testing\\n"
printf "\\t--install-all: install everything\\n"
printf "\\t--install-stratoshark: install everything to compile Stratoshark and Falco bridge\\n"
printf "\\t[other]: other options are passed as-is to brew\\n"
}
INSTALLED_FORMULAE=$( brew list --formulae )
function install_formulae() {
INSTALL_LIST=()
for FORMULA in "$@" ; do
if ! grep --word-regexp "$FORMULA" > /dev/null 2>&1 <<<"$INSTALLED_FORMULAE" ; then
INSTALL_LIST+=( "$FORMULA" )
fi
done
if (( ${#INSTALL_LIST[@]} != 0 )); then
brew install "${INSTALL_LIST[@]}"
else
printf "Nothing to install.\n"
fi
}
INSTALL_REQUIRED=0
INSTALL_OPTIONAL=0
INSTALL_DOC_DEPS=0
INSTALL_DMG_DEPS=0
INSTALL_SPARKLE_DEPS=0
INSTALL_TEST_DEPS=0
INSTALL_STRATOSHARK=0
OPTIONS=()
for arg; do
case $arg in
--help)
print_usage
exit 0
;;
--install-required)
INSTALL_REQUIRED=1
;;
--install-optional)
INSTALL_OPTIONAL=1
;;
--install-doc-deps)
INSTALL_DOC_DEPS=1
;;
--install-dmg-deps)
INSTALL_DMG_DEPS=1
;;
--install-sparkle-deps)
INSTALL_SPARKLE_DEPS=1
;;
--install-test-deps)
INSTALL_TEST_DEPS=1
;;
--install-stratoshark)
INSTALL_STRATOSHARK=1
;;
--install-all)
INSTALL_OPTIONAL=1
INSTALL_DOC_DEPS=1
INSTALL_DMG_DEPS=1
INSTALL_SPARKLE_DEPS=1
INSTALL_TEST_DEPS=1
;;
*)
OPTIONS+=("$arg")
;;
esac
done
BUILD_LIST=(
ccache
cmake
ninja
)
# Qt isn't technically required, but...
REQUIRED_LIST=(
c-ares
glib
libgcrypt
libxml2
pcre2
qt6
speexdsp
)
OPTIONAL_LIST=(
brotli
gettext
gnutls
libilbc
libmaxminddb
libnghttp2
libnghttp3
libsmi
libssh
lua
lz4
minizip
minizip-ng
opencore-amr
opus
snappy
spandsp
zlib-ng
zstd
)
DOC_DEPS_LIST=(
asciidoctor
docbook
docbook-xsl
)
STRATOSHARK_LIST=(
jsoncpp
onetbb
re2
uthash
)
ACTUAL_LIST=( "${BUILD_LIST[@]}" )
if [ $INSTALL_REQUIRED -ne 0 ] ; then
ACTUAL_LIST+=( "${REQUIRED_LIST[@]}" )
fi
# Now arrange for optional support libraries
if [ $INSTALL_OPTIONAL -ne 0 ] ; then
ACTUAL_LIST+=( "${OPTIONAL_LIST[@]}" )
fi
if [ $INSTALL_DOC_DEPS -ne 0 ] ; then
ACTUAL_LIST+=( "${DOC_DEPS_LIST[@]}" )
fi
if [ $INSTALL_STRATOSHARK -ne 0 ] ; then
ACTUAL_LIST+=( "${STRATOSHARK_LIST[@]}" )
fi
if (( ${#OPTIONS[@]} != 0 )); then
ACTUAL_LIST+=( "${OPTIONS[@]}" )
fi
install_formulae "${ACTUAL_LIST[@]}"
if [ $INSTALL_DMG_DEPS -ne 0 ] ; then
printf "Sorry, you'll have to install dmgbuild yourself for the time being.\\n"
# pip3 install "dmgbuild[badge_icons]"
fi
if [ $INSTALL_SPARKLE_DEPS -ne 0 ] ; then
brew install --cask sparkle
fi
if [ $INSTALL_TEST_DEPS -ne 0 ] ; then
printf "Sorry, you'll have to install pytest and pytest-xdist yourself for the time being.\\n"
# pip3 install pytest pytest-xdist
fi
if [ $INSTALL_STRATOSHARK -ne 0 ] ; then
FALCO_LIBS_VERSION=0.18.1
FALCO_LIBS_SHA256=1812e8236c4cb51d3fe5dd066d71be99f25da7ed22d8feeeebeed09bdc26325f
if [ "$FALCO_LIBS_VERSION" ] && [ ! -f "falco-libs-$FALCO_LIBS_VERSION-done" ] ; then
echo "Downloading, building, and installing libsinsp and libscap:"
[ -f "falco-libs-$FALCO_LIBS_VERSION.tar.gz" ] || curl -L -O --remote-header-name "https://github.com/falcosecurity/libs/archive/refs/tags/$FALCO_LIBS_VERSION.tar.gz"
mv "libs-$FALCO_LIBS_VERSION.tar.gz" "falco-libs-$FALCO_LIBS_VERSION.tar.gz"
echo "$FALCO_LIBS_SHA256 falco-libs-$FALCO_LIBS_VERSION.tar.gz" | shasum --algorithm 256 --check
tar -xf "falco-libs-$FALCO_LIBS_VERSION.tar.gz"
mv "libs-$FALCO_LIBS_VERSION" "falco-libs-$FALCO_LIBS_VERSION"
cd "falco-libs-$FALCO_LIBS_VERSION"
patch -p1 < "../tools/macos-setup-patches/falco-uthash_h-install.patch"
mkdir build_dir
cd build_dir
cmake -DFALCOSECURITY_LIBS_VERSION="$FALCO_LIBS_VERSION" \
-DBUILD_SHARED_LIBS=ON -DMINIMAL_BUILD=ON -DCREATE_TEST_TARGETS=OFF \
-DUSE_BUNDLED_DEPS=ON -DUSE_BUNDLED_CARES=OFF -DUSE_BUNDLED_ZLIB=OFF \
-DUSE_BUNDLED_JSONCPP=OFF -DUSE_BUNDLED_TBB=OFF -DUSE_BUNDLED_RE2=OFF \
..
make
sudo make install
cd ../..
fi
fi
# Uncomment to add PNG compression utilities used by compress-pngs:
# brew install advancecomp optipng oxipng pngcrush
# Uncomment to enable generation of documentation
# brew install asciidoctor
exit 0
#
# Editor modelines
#
# Local Variables:
# c-basic-offset: 4
# tab-width: 8
# indent-tabs-mode: nil
# End:
#
# ex: set shiftwidth=4 tabstop=8 expandtab:
# :indentSize=4:tabSize=8:noTabs=true:
#