#!/usr/bin/env bash # Setup development environment on BSD-like platforms. # # Tested on: FreeBSD, OpenBSD, NetBSD. # # Wireshark - Network traffic analyzer # By Gerald Combs # 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. # function 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: $0 [--install-optional] [...other options...]\\n" 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 \ lua52 \ " # 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() { 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" # nghttp2: NetBSD add_package ADDITIONAL_LIST nghttp2 || echo "nghttp2 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" # 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 $PM $PM_OPTIONS $ACTUAL_LIST $OPTIONS if [ ! $? ] then exit 2 fi if [ $ADDITIONAL -eq 0 ] then echo -e "\n*** Optional packages not installed. Rerun with --install-optional to have them.\n" fi