#!/bin/sh -e # This script runs one build with setup environment variables: BUILD_LIBPCAP, # REMOTE, CC, CMAKE, CRYPTO and SMB. : "${BUILD_LIBPCAP:=no}" : "${REMOTE:=no}" : "${CC:=gcc}" : "${CMAKE:=no}" : "${CRYPTO:=no}" : "${SMB:=no}" : "${TCPDUMP_TAINTED:=no}" : "${TCPDUMP_CMAKE_TAINTED:=no}" : "${MAKE_BIN:=make}" . ./build_common.sh # Install directory prefix if [ -z "$PREFIX" ]; then PREFIX=`mktempdir tcpdump_build` echo "PREFIX set to '$PREFIX'" fi TCPDUMP_BIN="$PREFIX/bin/tcpdump" # For TESTrun export TCPDUMP_BIN print_cc_version # The norm is to compile without any warnings, but tcpdump builds on some OSes # are not warning-free for one or another reason. If you manage to fix one of # these cases, please remember to remove respective exemption below to help any # later warnings in the same matrix subset trigger an error. case `cc_id`/`os_id` in clang-*/SunOS-5.11) # (Clang 9 on OpenIndiana, Clang 11 on OmniOS) # tcpdump.c:2312:51: warning: this function declaration is not a prototype # [-Wstrict-prototypes] # tcpdump.c:2737:11: warning: this function declaration is not a prototype # [-Wstrict-prototypes] [ "`uname -o`" = illumos ] && TCPDUMP_TAINTED=yes ;; esac [ "$TCPDUMP_TAINTED" != yes ] && CFLAGS=`cc_werr_cflags` # If necessary, set TCPDUMP_CMAKE_TAINTED here to exempt particular cmake from # warnings. Use as specific terms as possible (e.g. some specific version and # some specific OS). [ "$TCPDUMP_CMAKE_TAINTED" != yes ] && CMAKE_OPTIONS='-Werror=dev' if [ "$CMAKE" = no ]; then if [ "$BUILD_LIBPCAP" = yes ]; then echo "Using PKG_CONFIG_PATH=$PKG_CONFIG_PATH" run_after_echo ./configure --with-crypto="$CRYPTO" \ --enable-smb="$SMB" --prefix="$PREFIX" LD_LIBRARY_PATH="$PREFIX/lib" export LD_LIBRARY_PATH else run_after_echo ./configure --with-crypto="$CRYPTO" \ --enable-smb="$SMB" --prefix="$PREFIX" --disable-local-libpcap fi else # See libpcap build.sh for the rationale. run_after_echo rm -rf CMakeFiles/ CMakeCache.txt build/ run_after_echo mkdir build run_after_echo cd build if [ "$BUILD_LIBPCAP" = yes ]; then run_after_echo cmake "$CMAKE_OPTIONS" \ -DWITH_CRYPTO="$CRYPTO" -DENABLE_SMB="$SMB" \ ${CFLAGS:+-DEXTRA_CFLAGS="$CFLAGS"} \ -DCMAKE_INSTALL_PREFIX="$PREFIX" -DCMAKE_PREFIX_PATH="$PREFIX" .. LD_LIBRARY_PATH="$PREFIX/lib" export LD_LIBRARY_PATH else run_after_echo cmake "$CMAKE_OPTIONS" \ -DWITH_CRYPTO="$CRYPTO" -DENABLE_SMB="$SMB" \ ${CFLAGS:+-DEXTRA_CFLAGS="$CFLAGS"} \ -DCMAKE_INSTALL_PREFIX="$PREFIX" .. fi fi run_after_echo "$MAKE_BIN" -s clean if [ "$CMAKE" = no ]; then run_after_echo "$MAKE_BIN" -s ${CFLAGS:+CFLAGS="$CFLAGS"} else # The "-s" flag is a no-op and CFLAGS is set using -DEXTRA_CFLAGS above. run_after_echo "$MAKE_BIN" fi run_after_echo "$MAKE_BIN" install print_so_deps "$TCPDUMP_BIN" run_after_echo "$TCPDUMP_BIN" -h # The "-D" flag depends on HAVE_PCAP_FINDALLDEVS and it would not be difficult # to run the command below only if the macro is defined. That said, it seems # more useful to run it anyway: every system that currently runs this script # has pcap_findalldevs(), thus if the macro isn't defined, it means something # went wrong in the build process (as was observed with GCC, CMake and the # system libpcap on Solaris 11). run_after_echo "$TCPDUMP_BIN" -D if [ "$CIRRUS_CI" = true ]; then # Likewise for the "-J" flag and HAVE_PCAP_SET_TSTAMP_TYPE. run_after_echo sudo \ ${LD_LIBRARY_PATH:+LD_LIBRARY_PATH="$LD_LIBRARY_PATH"} \ "$TCPDUMP_BIN" -J run_after_echo sudo \ ${LD_LIBRARY_PATH:+LD_LIBRARY_PATH="$LD_LIBRARY_PATH"} \ "$TCPDUMP_BIN" -L fi if [ "$BUILD_LIBPCAP" = yes ]; then run_after_echo "$MAKE_BIN" check fi if [ "$CMAKE" = no ]; then run_after_echo "$MAKE_BIN" releasetar fi if [ "$CIRRUS_CI" = true ]; then run_after_echo sudo \ ${LD_LIBRARY_PATH:+LD_LIBRARY_PATH="$LD_LIBRARY_PATH"} \ "$TCPDUMP_BIN" -#n -c 10 fi handle_matrix_debug if [ "$DELETE_PREFIX" = yes ]; then run_after_echo rm -rf "$PREFIX" fi # vi: set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab autoindent :