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