]> The Tcpdump Group git mirrors - tcpdump/blob - build.sh
CI: Switch from bash to POSIX shell.
[tcpdump] / build.sh
1 #!/bin/sh -e
2
3 # This script runs one build with setup environment variables: BUILD_LIBPCAP,
4 # REMOTE, CC, CMAKE, CRYPTO and SMB
5 # (default: BUILD_LIBPCAP=no, REMOTE=no, CC=gcc, CMAKE=no, CRYPTO=no, SMB=no).
6
7 # BUILD_LIBPCAP: no or yes
8 BUILD_LIBPCAP=${BUILD_LIBPCAP:-no}
9 # REMOTE: no or yes
10 REMOTE=${REMOTE:-no}
11 # CC: gcc or clang
12 CC=${CC:-gcc}
13 # GCC and Clang recognize --version and print to stdout. Sun compilers
14 # recognize -V and print to stderr.
15 "$CC" --version 2>/dev/null || "$CC" -V || :
16 # CMAKE: no or yes
17 CMAKE=${CMAKE:-no}
18 # CRYPTO: no or yes
19 CRYPTO=${CRYPTO:-no}
20 # SMB: no or yes
21 SMB=${SMB:-no}
22 # Install directory prefix
23 if [ -z "$PREFIX" ]; then
24 PREFIX=$(mktemp -d -t tcpdump_build_XXXXXXXX)
25 echo "PREFIX set to '$PREFIX'"
26 fi
27 # For TESTrun
28 export TCPDUMP_BIN="$PREFIX/bin/tcpdump"
29
30 travis_fold() {
31 tf_action=${1:?}
32 tf_name=${2:?}
33 if [ "$TRAVIS" != true ]; then return; fi
34 printf 'travis_fold:%s:%s.script.%s\r' "$tf_action" "$LABEL" "$tf_name"
35 sleep 1
36 }
37
38 # Run a command after displaying it
39 run_after_echo() {
40 printf '$ '
41 echo "$@"
42 # shellcheck disable=SC2068
43 $@
44 }
45
46 # LABEL is needed to build the travis fold labels
47 LABEL="$BUILD_LIBPCAP.$REMOTE.$CC.$CMAKE.$CRYPTO.$SMB"
48 if [ "$CMAKE" = no ]; then
49 echo '$ ./configure [...]'
50 travis_fold start configure
51 if [ "$BUILD_LIBPCAP" = yes ]; then
52 echo "Using PKG_CONFIG_PATH=$PKG_CONFIG_PATH"
53 ./configure --with-crypto="$CRYPTO" --enable-smb="$SMB" --prefix="$PREFIX"
54 export LD_LIBRARY_PATH="$PREFIX/lib"
55 else
56 ./configure --disable-local-libpcap --with-crypto="$CRYPTO" --enable-smb="$SMB" --prefix="$PREFIX"
57 fi
58 travis_fold end configure
59 else
60 rm -rf build
61 mkdir build
62 cd build
63 echo '$ cmake [...]'
64 travis_fold start cmake
65 if [ "$BUILD_LIBPCAP" = yes ]; then
66 cmake -DWITH_CRYPTO="$CRYPTO" -DENABLE_SMB="$SMB" -DCMAKE_PREFIX_PATH="$PREFIX" -DCMAKE_INSTALL_PREFIX="$PREFIX" ..
67 export LD_LIBRARY_PATH="$PREFIX/lib"
68 else
69 cmake -DWITH_CRYPTO="$CRYPTO" -DENABLE_SMB="$SMB" -DCMAKE_INSTALL_PREFIX="$PREFIX" ..
70 fi
71 travis_fold end cmake
72 fi
73 run_after_echo "make -s clean"
74 run_after_echo "make -s CFLAGS=-Werror"
75 echo '$ make install'
76 travis_fold start make_install
77 make install
78 travis_fold end make_install
79 run_after_echo "$TCPDUMP_BIN --version"
80 run_after_echo "$TCPDUMP_BIN -h"
81 run_after_echo "$TCPDUMP_BIN -D"
82 system=$(uname -s)
83 if [ "$system" = Linux ]; then
84 run_after_echo "ldd $TCPDUMP_BIN"
85 fi
86 if [ "$TRAVIS" = true ]; then
87 if [ -n "$LD_LIBRARY_PATH" ]; then
88 run_after_echo "sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH $TCPDUMP_BIN -J"
89 run_after_echo "sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH $TCPDUMP_BIN -L"
90 else
91 run_after_echo "sudo $TCPDUMP_BIN -J"
92 run_after_echo "sudo $TCPDUMP_BIN -L"
93 fi
94 fi
95 if [ "$BUILD_LIBPCAP" = yes ]; then
96 run_after_echo "make check"
97 fi
98 if [ "$CMAKE" = no ]; then
99 system=$(uname -s)
100 if [ "$system" = Darwin ] || [ "$system" = Linux ]; then
101 run_after_echo "make releasetar"
102 fi
103 fi
104 if [ "$TRAVIS" = true ]; then
105 if [ "$TRAVIS_OS_NAME" = linux ] && [ "$TRAVIS_CPU_ARCH" != ppc64le ] && [ "$TRAVIS_CPU_ARCH" != s390x ] && [ "$TRAVIS_CPU_ARCH" != arm64 ]; then
106 if [ -n "$LD_LIBRARY_PATH" ]; then
107 run_after_echo "sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH $TCPDUMP_BIN -#n -c 10"
108 else
109 run_after_echo "sudo $TCPDUMP_BIN -#n -c 10"
110 fi
111 fi
112 fi
113 # The DEBUG_BUILD variable is not set by default to avoid Travis error message:
114 # "The job exceeded the maximum log length, and has been terminated."
115 # Setting it needs to reduce the matrix cases.
116 if [ "$TRAVIS" = true ] && [ -n "$DEBUG_BUILD" ] ; then
117 echo '$ cat Makefile [...]'
118 travis_fold start cat_makefile
119 sed '/DO NOT DELETE THIS LINE -- mkdep uses it/q' < Makefile
120 travis_fold end cat_makefile
121 echo '$ cat config.h'
122 travis_fold start cat_config_h
123 cat config.h
124 travis_fold end cat_config_h
125 if [ "$CMAKE" = no ]; then
126 echo '$ cat config.log'
127 travis_fold start cat_config_log
128 cat config.log
129 travis_fold end cat_config_log
130 fi
131 fi
132 if [ "$DELETE_PREFIX" = yes ]; then
133 rm -rf "$PREFIX"
134 fi
135 # vi: set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab autoindent :