#!/bin/sh # 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. # if [ "$1" = "--help" ] then echo "\nUtility to setup a bsd-based system for Wireshark Development.\n" echo "The basic usage installs the needed software\n\n" echo "Usage: $0 [--install-optional] [...other options...]\n" echo "\t--install-optional: install optional software as well" echo "\t[other]: other options are passed as-is to pkg manager.\n" exit 1 fi # Check if the user is root if [ $(id -u) -ne 0 ] then echo "You must be root." exit 1 fi for op do if [ "$op" = "--install-optional" ] then ADDITIONAL=1 else OPTIONS="$OPTIONS $op" fi done BASIC_LIST="\ cmake \ qt5 \ git" ADDITIONAL_LIST="\ gettext-tools \ snappy \ bcg729 \ doxygen \ libssh \ libmaxminddb \ libsmi" # 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 ADDITIONAL_LIST c-ares || add_package ADDITIONAL_LIST libcares || echo "c-ares is unavailable" # rubygem-asciidoctor: FreeBSD add_package ADDITIONAL_LIST rubygem-asciidoctor || echo "asciidoctor is unavailable" # lz4: NetBSD 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" # Add OS-specific required/optional packages # Those not listed don't require additions. case `uname` in OpenBSD) add_package ADDITIONAL_LIST bison || echo "bison is unavailable" ;; NetBSD) add_package ADDITIONAL_LIST libgcrypt || echo "libgcrypt is unavailable" ;; esac ACTUAL_LIST=$BASIC_LIST # Now arrange for optional support libraries if [ $ADDITIONAL ] then ACTUAL_LIST="$ACTUAL_LIST $ADDITIONAL_LIST" fi $PM $PM_OPTIONS $ACTUAL_LIST $OPTIONS if [ $? != 0 ] then exit 2 fi if [ ! $ADDITIONAL ] then echo "\n*** Optional packages not installed. Rerun with --install-optional to have them.\n" fi