summaryrefslogtreecommitdiff
path: root/.travis/cmake-linux
blob: 0deeaacc0911d141b57315aaaa5db6ad54addb91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/bin/sh

ACTION="$1"

set -eu

CACHEDIR="$HOME/cache"
NPROC=`nproc`
ASTYLE="$CACHEDIR/astyle/build/gcc/bin/astyle"
ASTYLE_VERSION=3.1

install_tool() {
  SLUG="$1"
  TOOL="$2"
  TARGET="$3"

  VERSION=$(curl -L -s -H 'Accept: application/json' \
    "https://github.com/$SLUG/releases/latest" \
    | egrep -o '"v[0-9][^"]+"' \
    | egrep -o '[^"]+')
  URL="https://github.com/$SLUG/releases/download/$VERSION/$TOOL-x86_64-linux-$VERSION.tar.gz"
  curl -L -s "$URL" | tar xzv -C "$TARGET"
}

travis_install() {
  install_tool TokTok/hs-tokstyle tokstyle "$HOME/.local"

  which coveralls || {
    # Install cpp-coveralls to upload test coverage results.
    pip install --user ndg-httpsclient urllib3[secure] cpp-coveralls

    # Work around https://github.com/eddyxu/cpp-coveralls/issues/108 by manually
    # installing the pyOpenSSL module and injecting it into urllib3 as per
    # https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2
    sed -i -e '/^import sys$/a import urllib3.contrib.pyopenssl\nurllib3.contrib.pyopenssl.inject_into_urllib3()' `which coveralls`
  }

  # Install astyle (version in ubuntu-precise too old).
  ([ -f "$ASTYLE" ] && "$ASTYLE" --version | grep "$ASTYLE_VERSION" >/dev/null) || {
    wget -O ../astyle.tar.gz "https://deb.debian.org/debian/pool/main/a/astyle/astyle_$ASTYLE_VERSION.orig.tar.gz"
    tar -xf ../astyle.tar.gz -C "$CACHEDIR"
    make -C "$CACHEDIR/astyle/build/gcc" clean
    make -C "$CACHEDIR/astyle/build/gcc" "-j$NPROC"
  }
}

run_static_analysis() {
  pylint -E other/analysis/check_recursion

  export CPPFLAGS="-isystem $CACHEDIR/include"
  export LDFLAGS="-L $CACHEDIR/lib"
  cat toxav/*.c toxcore/*.c toxencryptsave/*.c \
    | clang `pkg-config --cflags libsodium opus vpx` \
        -Itoxav -Itoxcore -Itoxencryptsave -S -emit-llvm -xc - -o- \
    | opt -analyze -print-callgraph 2>&1 \
    | other/analysis/check_recursion
  other/analysis/run-clang
  other/analysis/run-clang-analyze
}

travis_script() {
  . ".travis/flags-$CC.sh"

  add_ld_flag -Wl,-z,defs

  # Make compilation error on a warning
  add_flag -Werror

  # Coverage flags.
  add_flag -fprofile-arcs -ftest-coverage

  "$ASTYLE" --version
  other/astyle/format-source . "$ASTYLE"

  echo "Running TokTok style checker"
  "$HOME/.local/bin/check-cimple"

  # Use () to run in a separate process so the exports are local.
  (run_static_analysis)

  other/analysis/check_logger_levels

  cmake -B_build -H. -GNinja \
    -DCMAKE_C_FLAGS="$C_FLAGS" \
    -DCMAKE_CXX_FLAGS="$CXX_FLAGS" \
    -DCMAKE_EXE_LINKER_FLAGS="$LD_FLAGS" \
    -DCMAKE_SHARED_LINKER_FLAGS="$LD_FLAGS" \
    -DCMAKE_INSTALL_PREFIX:PATH="$PWD/_install" \
    -DMIN_LOGGER_LEVEL=TRACE \
    -DMUST_BUILD_TOXAV=ON \
    -DSTRICT_ABI=ON \
    -DTEST_TIMEOUT_SECONDS=120 \
    -DUSE_IPV6=OFF \
    -DAUTOTEST=ON

  cmake --build _build --parallel "$NPROC" --target install -- -k 0

  cd _build  # pushd
  ctest -j50 --output-on-failure || \
    ctest -j50 --output-on-failure --rerun-failed
  cd -  # popd
}

if [ "-z" "$ACTION" ]; then
  "travis_script"
else
  "travis_$ACTION"
fi