1*05b00f60SXin Li#!/bin/sh -e 2*05b00f60SXin Li 3*05b00f60SXin Li# This script executes the matrix loops, exclude tests and cleaning. 4*05b00f60SXin Li# It calls the build.sh script which runs one build with setup environment 5*05b00f60SXin Li# variables: BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB. 6*05b00f60SXin Li# The matrix can be configured with environment variables 7*05b00f60SXin Li# MATRIX_BUILD_LIBPCAP, MATRIX_REMOTE, MATRIX_CC, MATRIX_CMAKE, MATRIX_CRYPTO 8*05b00f60SXin Li# and MATRIX_SMB. 9*05b00f60SXin Li 10*05b00f60SXin Li: "${MATRIX_BUILD_LIBPCAP:=no yes}" 11*05b00f60SXin Li: "${MATRIX_REMOTE:=no}" 12*05b00f60SXin Li: "${MATRIX_CC:=gcc clang}" 13*05b00f60SXin Li: "${MATRIX_CMAKE:=no yes}" 14*05b00f60SXin Li: "${MATRIX_CRYPTO:=no yes}" 15*05b00f60SXin Li: "${MATRIX_SMB:=no yes}" 16*05b00f60SXin Li# Set this variable to "yes" before calling this script to disregard all cmake 17*05b00f60SXin Li# warnings in a particular environment (CI or a local working copy). Set it 18*05b00f60SXin Li# to "yes" in this script or in build.sh when a matrix subset is known to be 19*05b00f60SXin Li# not cmake warning-free because of the version or whatever other factor 20*05b00f60SXin Li# that the scripts can detect both in and out of CI. 21*05b00f60SXin Li: "${TCPDUMP_CMAKE_TAINTED:=no}" 22*05b00f60SXin Li# Set this variable to "yes" before calling this script to disregard all 23*05b00f60SXin Li# warnings in a particular environment (CI or a local working copy). Set it 24*05b00f60SXin Li# to "yes" in this script or in build.sh when a matrix subset is known to be 25*05b00f60SXin Li# not warning-free because of the OS, the compiler or whatever other factor 26*05b00f60SXin Li# that the scripts can detect both in and out of CI. 27*05b00f60SXin Li: "${TCPDUMP_TAINTED:=no}" 28*05b00f60SXin Li# Some OSes have native make without parallel jobs support and sometimes have 29*05b00f60SXin Li# GNU Make available as "gmake". 30*05b00f60SXin Li: "${MAKE_BIN:=make}" 31*05b00f60SXin Li 32*05b00f60SXin Li. ./build_common.sh 33*05b00f60SXin Liprint_sysinfo 34*05b00f60SXin Li# Install directory prefix 35*05b00f60SXin Liif [ -z "$PREFIX" ]; then 36*05b00f60SXin Li PREFIX=`mktempdir tcpdump_build_matrix` 37*05b00f60SXin Li echo "PREFIX set to '$PREFIX'" 38*05b00f60SXin Li export PREFIX 39*05b00f60SXin Lifi 40*05b00f60SXin LiCOUNT=0 41*05b00f60SXin Liexport TCPDUMP_TAINTED 42*05b00f60SXin Liexport TCPDUMP_CMAKE_TAINTED 43*05b00f60SXin Liexport MAKE_BIN 44*05b00f60SXin Li 45*05b00f60SXin Libuild_tcpdump() { 46*05b00f60SXin Li for CMAKE in $MATRIX_CMAKE; do 47*05b00f60SXin Li export CMAKE 48*05b00f60SXin Li for CRYPTO in $MATRIX_CRYPTO; do 49*05b00f60SXin Li export CRYPTO 50*05b00f60SXin Li for SMB in $MATRIX_SMB; do 51*05b00f60SXin Li export SMB 52*05b00f60SXin Li COUNT=`increment $COUNT` 53*05b00f60SXin Li echo_magenta "===== SETUP $COUNT: BUILD_LIBPCAP=$BUILD_LIBPCAP REMOTE=${REMOTE:-?} CC=$CC CMAKE=$CMAKE CRYPTO=$CRYPTO SMB=$SMB =====" >&2 54*05b00f60SXin Li # Run one build with setup environment variables: 55*05b00f60SXin Li # BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB 56*05b00f60SXin Li run_after_echo ./build.sh 57*05b00f60SXin Li echo 'Cleaning...' 58*05b00f60SXin Li if [ "$CMAKE" = yes ]; then 59*05b00f60SXin Li run_after_echo rm -rf build 60*05b00f60SXin Li else 61*05b00f60SXin Li run_after_echo "$MAKE_BIN" distclean 62*05b00f60SXin Li fi 63*05b00f60SXin Li run_after_echo rm -rf "$PREFIX"/bin/tcpdump* 64*05b00f60SXin Li run_after_echo git status -suall 65*05b00f60SXin Li # Cancel changes in configure 66*05b00f60SXin Li run_after_echo git checkout configure 67*05b00f60SXin Li done 68*05b00f60SXin Li done 69*05b00f60SXin Li done 70*05b00f60SXin Li} 71*05b00f60SXin Li 72*05b00f60SXin Litouch .devel configure 73*05b00f60SXin Lifor CC in $MATRIX_CC; do 74*05b00f60SXin Li export CC 75*05b00f60SXin Li discard_cc_cache 76*05b00f60SXin Li if gcc_is_clang_in_disguise; then 77*05b00f60SXin Li echo '(skipped)' 78*05b00f60SXin Li continue 79*05b00f60SXin Li fi 80*05b00f60SXin Li for BUILD_LIBPCAP in $MATRIX_BUILD_LIBPCAP; do 81*05b00f60SXin Li export BUILD_LIBPCAP 82*05b00f60SXin Li if [ "$BUILD_LIBPCAP" = yes ]; then 83*05b00f60SXin Li for REMOTE in $MATRIX_REMOTE; do 84*05b00f60SXin Li export REMOTE 85*05b00f60SXin Li # Build libpcap with Autoconf. 86*05b00f60SXin Li echo_magenta "Build libpcap (CMAKE=no REMOTE=$REMOTE)" >&2 87*05b00f60SXin Li (cd ../libpcap && CMAKE=no ./build.sh) 88*05b00f60SXin Li # Set PKG_CONFIG_PATH for configure when building libpcap 89*05b00f60SXin Li if [ "$CMAKE" != no ]; then 90*05b00f60SXin Li PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig" 91*05b00f60SXin Li export PKG_CONFIG_PATH 92*05b00f60SXin Li fi 93*05b00f60SXin Li build_tcpdump 94*05b00f60SXin Li done 95*05b00f60SXin Li else 96*05b00f60SXin Li echo_magenta 'Use system libpcap' >&2 97*05b00f60SXin Li purge_directory "$PREFIX" 98*05b00f60SXin Li if [ -d ../libpcap ]; then 99*05b00f60SXin Li (cd ../libpcap; "$MAKE_BIN" distclean || echo '(Ignoring the make error.)') 100*05b00f60SXin Li fi 101*05b00f60SXin Li build_tcpdump 102*05b00f60SXin Li fi 103*05b00f60SXin Li done 104*05b00f60SXin Lidone 105*05b00f60SXin Li 106*05b00f60SXin Lirun_after_echo rm -rf "$PREFIX" 107*05b00f60SXin Liecho_magenta "Tested setup count: $COUNT" >&2 108*05b00f60SXin Li# vi: set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab autoindent : 109