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