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