| #!/bin/sh -e |
| |
| # 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. |
| # The matrix can be configured with environment variables |
| # MATRIX_BUILD_LIBPCAP, MATRIX_REMOTE, MATRIX_CC, MATRIX_CMAKE, MATRIX_CRYPTO |
| # and MATRIX_SMB. |
| |
| : "${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 cmake |
| # 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 cmake warning-free because of the version or whatever other factor |
| # that the scripts can detect both in and out of CI. |
| : "${TCPDUMP_CMAKE_TAINTED:=no}" |
| # 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}" |
| # Some OSes have native make without parallel jobs support and sometimes have |
| # GNU Make available as "gmake". |
| : "${MAKE_BIN:=make}" |
| |
| . ./build_common.sh |
| print_sysinfo |
| # Install directory prefix |
| if [ -z "$PREFIX" ]; then |
| PREFIX=`mktempdir tcpdump_build_matrix` |
| echo "PREFIX set to '$PREFIX'" |
| export PREFIX |
| fi |
| COUNT=0 |
| export TCPDUMP_TAINTED |
| export TCPDUMP_CMAKE_TAINTED |
| export MAKE_BIN |
| |
| build_tcpdump() { |
| for CMAKE in $MATRIX_CMAKE; do |
| export CMAKE |
| for CRYPTO in $MATRIX_CRYPTO; do |
| export CRYPTO |
| for SMB in $MATRIX_SMB; do |
| export SMB |
| 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_BIN" 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 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" |
| if [ -d ../libpcap ]; then |
| (cd ../libpcap; "$MAKE_BIN" distclean || echo '(Ignoring the make error.)') |
| fi |
| build_tcpdump |
| fi |
| done |
| done |
| |
| run_after_echo rm -rf "$PREFIX" |
| echo_magenta "Tested setup count: $COUNT" >&2 |
| # vi: set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab autoindent : |