]> The Tcpdump Group git mirrors - tcpdump/blob - build_matrix.sh
Cirrus CI: Fixup the previous commit. [skip appveyor]
[tcpdump] / build_matrix.sh
1 #!/bin/sh -e
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 # The matrix can be configured with environment variables
7 # MATRIX_BUILD_LIBPCAP, MATRIX_REMOTE, MATRIX_CC, MATRIX_CMAKE, MATRIX_CRYPTO
8 # and MATRIX_SMB.
9
10 : "${MATRIX_BUILD_LIBPCAP:=no yes}"
11 : "${MATRIX_REMOTE:=no}"
12 : "${MATRIX_CC:=gcc clang}"
13 : "${MATRIX_CMAKE:=no yes}"
14 : "${MATRIX_CRYPTO:=no yes}"
15 : "${MATRIX_SMB:=no yes}"
16
17 . ./build_common.sh
18 print_sysinfo
19 # Install directory prefix
20 if [ -z "$PREFIX" ]; then
21 # shellcheck disable=SC2006
22 PREFIX=`mktempdir tcpdump_build_matrix`
23 echo "PREFIX set to '$PREFIX'"
24 export PREFIX
25 fi
26 COUNT=0
27
28 build_tcpdump() {
29 for CMAKE in $MATRIX_CMAKE; do
30 export CMAKE
31 for CRYPTO in $MATRIX_CRYPTO; do
32 export CRYPTO
33 for SMB in $MATRIX_SMB; do
34 export SMB
35 # shellcheck disable=SC2006
36 COUNT=`increment $COUNT`
37 echo_magenta "===== SETUP $COUNT: BUILD_LIBPCAP=$BUILD_LIBPCAP REMOTE=${REMOTE:-?} CC=$CC CMAKE=$CMAKE CRYPTO=$CRYPTO SMB=$SMB ====="
38 # Run one build with setup environment variables:
39 # BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB
40 run_after_echo ./build.sh
41 echo 'Cleaning...'
42 if [ "$CMAKE" = yes ]; then
43 run_after_echo rm -rf build
44 else
45 run_after_echo make distclean
46 fi
47 run_after_echo rm -rf "$PREFIX"/bin/tcpdump*
48 run_after_echo git status -suall
49 # Cancel changes in configure
50 run_after_echo git checkout configure
51 done
52 done
53 done
54 }
55
56 touch .devel configure
57 for CC in $MATRIX_CC; do
58 export CC
59 # Exclude gcc on macOS (it is just an alias for clang).
60 # shellcheck disable=SC2006
61 if [ "$CC" = gcc ] && [ "`uname -s`" = Darwin ]; then
62 echo '(skipped)'
63 continue
64 fi
65 for BUILD_LIBPCAP in $MATRIX_BUILD_LIBPCAP; do
66 export BUILD_LIBPCAP
67 if [ "$BUILD_LIBPCAP" = yes ]; then
68 for REMOTE in $MATRIX_REMOTE; do
69 export REMOTE
70 # Build libpcap with Autoconf.
71 echo_magenta "Build libpcap (CMAKE=no REMOTE=$REMOTE)"
72 (cd ../libpcap && CMAKE=no ./build.sh)
73 # Set PKG_CONFIG_PATH for configure when building libpcap
74 if [ "$CMAKE" != no ]; then
75 PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig"
76 export PKG_CONFIG_PATH
77 fi
78 build_tcpdump
79 done
80 else
81 echo_magenta 'Use system libpcap'
82 purge_directory "$PREFIX"
83 (cd ../libpcap; make distclean || echo '(Ignoring the make error.)')
84 build_tcpdump
85 fi
86 done
87 done
88
89 run_after_echo rm -rf "$PREFIX"
90 echo_magenta "Tested setup count: $COUNT"
91 # vi: set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab autoindent :