X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/a36b3aeb877e4357918cfd99ddad5ce913a3a0b6..c39d40a767a1ae36171e5bcbf6f157ff3e80fb6c:/build_matrix.sh diff --git a/build_matrix.sh b/build_matrix.sh index 5c5df5ea..c5f699a0 100755 --- a/build_matrix.sh +++ b/build_matrix.sh @@ -2,86 +2,96 @@ # This script executes the matrix loops, exclude tests and cleaning. # It calls the build.sh script which runs one build with setup environment -# variables: BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB -# (default: BUILD_LIBPCAP=no, REMOTE=no, CC=gcc, CMAKE=no, CRYPTO=no, SMB=no). +# variables: BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB. # The matrix can be configured with environment variables # MATRIX_BUILD_LIBPCAP, MATRIX_REMOTE, MATRIX_CC, MATRIX_CMAKE, MATRIX_CRYPTO -# and MATRIX_SMB -# (default: MATRIX_BUILD_LIBPCAP='no yes', MATRIX_REMOTE='no yes', -# MATRIX_CC='gcc clang', MATRIX_CMAKE='no yes', MATRIX_CRYPTO='no yes', -# MATRIX_SMB='no yes'). +# and MATRIX_SMB. -uname -a -date +: "${MATRIX_BUILD_LIBPCAP:=no yes}" +: "${MATRIX_REMOTE:=no}" +: "${MATRIX_CC:=gcc clang}" +: "${MATRIX_CMAKE:=no yes}" +: "${MATRIX_CRYPTO:=no yes}" +: "${MATRIX_SMB:=no yes}" +# Set this variable to "yes" before calling this script to disregard all +# warnings in a particular environment (CI or a local working copy). Set it +# to "yes" in this script or in build.sh when a matrix subset is known to be +# not warning-free because of the OS, the compiler or whatever other factor +# that the scripts can detect both in and out of CI. +: "${TCPDUMP_TAINTED:=no}" + +. ./build_common.sh +print_sysinfo # Install directory prefix if [ -z "$PREFIX" ]; then - PREFIX=$(mktemp -d -t tcpdump_build_matrix_XXXXXXXX) + # shellcheck disable=SC2006 + PREFIX=`mktempdir tcpdump_build_matrix` echo "PREFIX set to '$PREFIX'" export PREFIX fi COUNT=0 - -# Display text in magenta -echo_magenta() { - printf '\033[35;1m' # ANSI magenta - echo "$@" - printf '\033[0m' # ANSI reset -} +export TCPDUMP_TAINTED build_tcpdump() { - for CC in ${MATRIX_CC:-gcc clang}; do - export CC - # Exclude gcc on macOS (it is just an alias for clang). - if [ "$CC" = gcc ] && [ "$(uname -s)" = Darwin ]; then - echo '(skipped)' - continue - fi - for CMAKE in ${MATRIX_CMAKE:-no yes}; do - export CMAKE - for CRYPTO in ${MATRIX_CRYPTO:-no yes}; do - export CRYPTO - for SMB in ${MATRIX_SMB:-no yes}; do - export SMB - COUNT=$((COUNT+1)) - echo_magenta "===== SETUP $COUNT: BUILD_LIBPCAP=$BUILD_LIBPCAP REMOTE=${REMOTE:-?} CC=$CC CMAKE=$CMAKE CRYPTO=$CRYPTO SMB=$SMB =====" - # Run one build with setup environment variables: - # BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB - ./build.sh - echo 'Cleaning...' - if [ "$CMAKE" = yes ]; then rm -rf build; else make distclean; fi - rm -rf "$PREFIX"/bin/tcpdump* - git status -suall - # Cancel changes in configure - git checkout configure - done + for CMAKE in $MATRIX_CMAKE; do + export CMAKE + for CRYPTO in $MATRIX_CRYPTO; do + export CRYPTO + for SMB in $MATRIX_SMB; do + export SMB + # shellcheck disable=SC2006 + COUNT=`increment $COUNT` + echo_magenta "===== SETUP $COUNT: BUILD_LIBPCAP=$BUILD_LIBPCAP REMOTE=${REMOTE:-?} CC=$CC CMAKE=$CMAKE CRYPTO=$CRYPTO SMB=$SMB =====" >&2 + # Run one build with setup environment variables: + # BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB + run_after_echo ./build.sh + echo 'Cleaning...' + if [ "$CMAKE" = yes ]; then + run_after_echo rm -rf build + else + run_after_echo make distclean + fi + run_after_echo rm -rf "$PREFIX"/bin/tcpdump* + run_after_echo git status -suall + # Cancel changes in configure + run_after_echo git checkout configure done done done } touch .devel configure -for BUILD_LIBPCAP in ${MATRIX_BUILD_LIBPCAP:-no yes}; do - export BUILD_LIBPCAP - if [ "$BUILD_LIBPCAP" = yes ]; then - for REMOTE in ${MATRIX_REMOTE:-no}; do - export REMOTE - # Build libpcap with Autoconf. - echo_magenta "Build libpcap (CMAKE=no REMOTE=$REMOTE)" - (cd ../libpcap && CMAKE=no ./build.sh) - # Set PKG_CONFIG_PATH for configure when building libpcap - if [ "$CMAKE" != no ]; then - export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig" - fi - build_tcpdump - done - else - echo_magenta 'Use system libpcap' - rm -rf "${PREFIX:?}"/* - make -C ../libpcap distclean || : - build_tcpdump +for CC in $MATRIX_CC; do + export CC + discard_cc_cache + if gcc_is_clang_in_disguise; then + echo '(skipped)' + continue fi + for BUILD_LIBPCAP in $MATRIX_BUILD_LIBPCAP; do + export BUILD_LIBPCAP + if [ "$BUILD_LIBPCAP" = yes ]; then + for REMOTE in $MATRIX_REMOTE; do + export REMOTE + # Build libpcap with Autoconf. + echo_magenta "Build libpcap (CMAKE=no REMOTE=$REMOTE)" >&2 + (cd ../libpcap && CMAKE=no ./build.sh) + # Set PKG_CONFIG_PATH for configure when building libpcap + if [ "$CMAKE" != no ]; then + PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig" + export PKG_CONFIG_PATH + fi + build_tcpdump + done + else + echo_magenta 'Use system libpcap' >&2 + purge_directory "$PREFIX" + (cd ../libpcap; make distclean || echo '(Ignoring the make error.)') + build_tcpdump + fi + done done -rm -rf "$PREFIX" -echo_magenta "Tested setup count: $COUNT" +run_after_echo rm -rf "$PREFIX" +echo_magenta "Tested setup count: $COUNT" >&2 # vi: set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab autoindent :