1#!/usr/bin/env bash 2 3# This script executes the matrix loops, exclude tests and cleaning. 4# It calls the build.sh script which runs one build with setup environment 5# variables: BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB 6# (default: BUILD_LIBPCAP=no, REMOTE=no, CC=gcc, CMAKE=no, CRYPTO=no, SMB=no). 7# The matrix can be configured with environment variables 8# MATRIX_BUILD_LIBPCAP, MATRIX_REMOTE, MATRIX_CC, MATRIX_CMAKE, MATRIX_CRYPTO 9# and MATRIX_SMB 10# (default: MATRIX_BUILD_LIBPCAP='no yes', MATRIX_REMOTE='no yes', 11# MATRIX_CC='gcc clang', MATRIX_CMAKE='no yes', MATRIX_CRYPTO='no yes', 12# MATRIX_SMB='no yes'). 13 14set -e 15 16# ANSI color escape sequences 17ANSI_MAGENTA="\\033[35;1m" 18ANSI_RESET="\\033[0m" 19uname -a 20date 21# Install directory prefix 22if [ -z "$PREFIX" ]; then 23 PREFIX=$(mktemp -d -t tcpdump_build_matrix_XXXXXXXX) 24 echo "PREFIX set to '$PREFIX'" 25 export PREFIX 26fi 27COUNT=0 28 29travis_fold() { 30 local action=${1:?} 31 local name=${2:?} 32 if [ "$TRAVIS" != true ]; then return; fi 33 echo -ne "travis_fold:$action:$LABEL.script.$name\\r" 34 sleep 1 35} 36 37# Display text in magenta 38echo_magenta() { 39 echo -ne "$ANSI_MAGENTA" 40 echo "$@" 41 echo -ne "$ANSI_RESET" 42} 43 44build_tcpdump() { 45 for CC in ${MATRIX_CC:-gcc clang}; do 46 export CC 47 # Exclude gcc on macOS (it is just an alias for clang). 48 if [ "$CC" = gcc ] && [ "$(uname -s)" = Darwin ]; then 49 echo '(skipped)' 50 continue 51 fi 52 for CMAKE in ${MATRIX_CMAKE:-no yes}; do 53 export CMAKE 54 for CRYPTO in ${MATRIX_CRYPTO:-no yes}; do 55 export CRYPTO 56 for SMB in ${MATRIX_SMB:-no yes}; do 57 export SMB 58 COUNT=$((COUNT+1)) 59 echo_magenta "===== SETUP $COUNT: BUILD_LIBPCAP=$BUILD_LIBPCAP REMOTE=${REMOTE:-?} CC=$CC CMAKE=$CMAKE CRYPTO=$CRYPTO SMB=$SMB =====" 60 # LABEL is needed to build the travis fold labels 61 LABEL="$BUILD_LIBPCAP.$REMOTE.$CC.$CMAKE.$CRYPTO.$SMB" 62 # Run one build with setup environment variables: 63 # BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB 64 ./build.sh 65 echo 'Cleaning...' 66 travis_fold start cleaning 67 if [ "$CMAKE" = yes ]; then rm -rf build; else make distclean; fi 68 rm -rf "$PREFIX"/bin/tcpdump* 69 git status -suall 70 # Cancel changes in configure 71 git checkout configure 72 travis_fold end cleaning 73 done 74 done 75 done 76 done 77} 78 79touch .devel configure 80for BUILD_LIBPCAP in ${MATRIX_BUILD_LIBPCAP:-no yes}; do 81 export BUILD_LIBPCAP 82 if [ "$BUILD_LIBPCAP" = yes ]; then 83 for REMOTE in ${MATRIX_REMOTE:-no}; do 84 export REMOTE 85 # Build libpcap with Autoconf. 86 echo_magenta "Build libpcap (CMAKE=no REMOTE=$REMOTE)" 87 (cd ../libpcap && CMAKE=no ./build.sh) 88 # Set PKG_CONFIG_PATH for configure when building libpcap 89 if [ "$CMAKE" != no ]; then 90 export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig" 91 fi 92 build_tcpdump 93 done 94 else 95 echo_magenta 'Use system libpcap' 96 rm -rf "${PREFIX:?}"/* 97 make -C ../libpcap distclean || : 98 build_tcpdump 99 fi 100done 101 102rm -rf "$PREFIX" 103echo_magenta "Tested setup count: $COUNT" 104# vi: set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab autoindent : 105