1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
|
#!/usr/bin/env sh
# Setup development environment on BSD-like platforms.
#
# Tested on: FreeBSD, OpenBSD, NetBSD.
#
# Wireshark - Network traffic analyzer
# By Gerald Combs <gerald@wireshark.org>
# Copyright 1998 Gerald Combs
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
# We drag in tools that might not be needed by all users; it's easier
# that way.
#
# We do not use Bash as the shell for this script, and use the POSIX
# syntax for function definition rather than the
# "function <name>() { ... }" syntax, as FreeBSD 13, at least, does
# not have Bash, and its /bin/sh doesn't support the other syntax.
#
print_usage() {
printf "\\nUtility to setup a bsd-based system for Wireshark Development.\\n"
printf "The basic usage installs the needed software\\n\\n"
printf "Usage: %s [--install-optional] [...other options...]\\n" "$0"
printf "\\t--install-optional: install optional software as well\\n"
printf "\\t[other]: other options are passed as-is to pkg manager.\\n"
}
ADDITIONAL=0
OPTIONS=
for arg; do
case $arg in
--help)
print_usage
exit 0
;;
--install-optional)
ADDITIONAL=1
;;
*)
OPTIONS="$OPTIONS $arg"
;;
esac
done
# Check if the user is root
if [ "$(id -u)" -ne 0 ]
then
echo "You must be root."
exit 1
fi
BASIC_LIST="\
cmake \
qt6 \
git \
pcre2 \
speexdsp"
ADDITIONAL_LIST="\
gettext-tools \
snappy \
bcg729 \
libssh \
libmaxminddb \
libsmi \
brotli \
zstd \
"
# Uncomment to add PNG compression utilities used by compress-pngs:
# ADDITIONAL_LIST="$ADDITIONAL_LIST \
# advancecomp \
# optipng \
# pngcrush"
# Guess which package manager we will use
PM=$( which pkgin 2> /dev/null || which pkg 2> /dev/null || which pkg_add 2> /dev/null )
case $PM in
*/pkgin)
PM_OPTIONS="install"
PM_SEARCH="pkgin search"
PM_MUST_GLOB=no
;;
*/pkg)
PM_OPTIONS="install"
PM_SEARCH="pkg search"
PM_MUST_GLOB=yes
;;
*/pkg_add)
PM_OPTIONS=""
PM_SEARCH="pkg_info"
PM_MUST_GLOB=no
;;
esac
echo "Using $PM ($PM_SEARCH)"
# Adds package $2 to list variable $1 if the package is found
add_package() {
# shellcheck disable=SC3043
local list="$1" pkgname="$2"
# fail if the package is not known
if [ "$PM_MUST_GLOB" = yes ]
then
#
# We need to do a glob search, with a "*" at the
# end, so we only find packages that *begin* with
# the name; otherwise, searching for pkg-config
# could find packages that *don't* begin with
# pkg-config, but have it later in the name
# (FreeBSD 11 has one such package), so when
# we then try to install it, that fails. Doing
# an *exact* search fails, as that requires that
# the package name include the version number.
#
$PM_SEARCH -g "$pkgname*" > /dev/null 2>&1 || return 1
else
$PM_SEARCH "$pkgname" > /dev/null 2>&1 || return 1
fi
# package is found, append it to list
eval "${list}=\"\${${list}} \${pkgname}\""
}
# pkg-config: NetBSD
# pkgconf: FreeBSD
add_package BASIC_LIST pkg-config ||
add_package BASIC_LIST pkgconf ||
echo "pkg-config is unavailable"
# c-ares: FreeBSD
# libcares: OpenBSD
add_package BASIC_LIST c-ares ||
add_package BASIC_LIST libcares ||
echo "c-ares is unavailable"
# rubygem-asciidoctor: FreeBSD
add_package ADDITIONAL_LIST rubygem-asciidoctor ||
echo "asciidoctor is unavailable"
# liblz4: FreeBSD
# lz4: NetBSD
add_package ADDITIONAL_LIST liblz4 ||
add_package ADDITIONAL_LIST lz4 ||
echo "lz4 is unavailable"
# libnghttp2: FreeBSD
# nghttp2: NetBSD
add_package ADDITIONAL_LIST libnghttp2 ||
add_package ADDITIONAL_LIST nghttp2 ||
echo "nghttp2 is unavailable"
# libnghttp3: FreeBSD
# nghttp3: NetBSD
add_package ADDITIONAL_LIST libnghttp3 ||
add_package ADDITIONAL_LIST nghttp3 ||
echo "nghttp3 is unavailable"
# spandsp: NetBSD
add_package ADDITIONAL_LIST spandsp ||
echo "spandsp is unavailable"
# ninja: FreeBSD, OpenBSD
# ninja-build: NetBSD
add_package ADDITIONAL_LIST ninja-build ||
add_package ADDITIONAL_LIST ninja ||
echo "ninja is unavailable"
# libilbc: FreeBSD
add_package ADDITIONAL_LIST libilbc ||
echo "libilbc is unavailable"
# lua: OpenBSD latest (current 5.4)
# lua54: FreeBSD, NetBSD 5.4.x
# lua53 is also acceptable
add_package ADDITIONAL_LIST lua ||
add_package ADDITIONAL_LIST lua54 ||
add_package ADDITIONAL_LIST lua53 ||
echo "lua >= 5.3 is unavailable"
# Add OS-specific required/optional packages
# Those not listed don't require additions.
case $( uname ) in
FreeBSD | NetBSD)
add_package ADDITIONAL_LIST libgcrypt || echo "libgcrypt is unavailable"
;;
esac
ACTUAL_LIST=$BASIC_LIST
# Now arrange for optional support libraries
if [ $ADDITIONAL -ne 0 ]
then
ACTUAL_LIST="$ACTUAL_LIST $ADDITIONAL_LIST"
fi
# shellcheck disable=SC2086
$PM $PM_OPTIONS $ACTUAL_LIST $OPTIONS
if [ ! $? ]
then
exit 2
fi
if [ $ADDITIONAL -eq 0 ]
then
printf "\\n*** Optional packages not installed. Rerun with --install-optional to have them.\\n"
fi
|