ci_build.sh 3.98 KB
Newer Older
1 2
#!/usr/bin/env bash

3
set -x -e
4

5 6 7 8
cd ../..

# always install custom builds from dist
# to make sure that `make dist` doesn't omit any files required to build & test
9
if [ -z "$DO_CLANG_FORMAT_CHECK" -a -z "$CLANG_TIDY" ]; then
10 11 12 13 14 15 16 17
    ./autogen.sh
    ./configure
    make -j5 dist-gzip
    V=$(./version.sh)
    tar -xzf zeromq-$V.tar.gz
    cd zeromq-$V
fi

18
mkdir tmp || true
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
BUILD_PREFIX=$PWD/tmp

CONFIG_OPTS=()
CONFIG_OPTS+=("CFLAGS=-I${BUILD_PREFIX}/include")
CONFIG_OPTS+=("CPPFLAGS=-I${BUILD_PREFIX}/include")
CONFIG_OPTS+=("CXXFLAGS=-I${BUILD_PREFIX}/include")
CONFIG_OPTS+=("LDFLAGS=-L${BUILD_PREFIX}/lib")
CONFIG_OPTS+=("PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig")

CMAKE_OPTS=()
CMAKE_OPTS+=("-DCMAKE_INSTALL_PREFIX:PATH=${BUILD_PREFIX}")
CMAKE_OPTS+=("-DCMAKE_PREFIX_PATH:PATH=${BUILD_PREFIX}")
CMAKE_OPTS+=("-DCMAKE_LIBRARY_PATH:PATH=${BUILD_PREFIX}/lib")
CMAKE_OPTS+=("-DCMAKE_INCLUDE_PATH:PATH=${BUILD_PREFIX}/include")

34 35 36 37
if [ "$CLANG_FORMAT" != "" ] ; then
    CMAKE_OPTS+=("-DCLANG_FORMAT=${CLANG_FORMAT}")
fi

38 39 40 41 42
if [ -z $CURVE ]; then
    CMAKE_OPTS+=("-DENABLE_CURVE=OFF")
elif [ $CURVE == "libsodium" ]; then
    CMAKE_OPTS+=("-DWITH_LIBSODIUM=ON")

43 44
    if ! ((command -v dpkg-query >/dev/null 2>&1 && dpkg-query --list libsodium-dev >/dev/null 2>&1) || \
            (command -v brew >/dev/null 2>&1 && brew ls --versions libsodium >/dev/null 2>&1)); then
45
        git clone --depth 1 -b stable git://github.com/jedisct1/libsodium.git
46
        ( cd libsodium; ./autogen.sh; ./configure --prefix=$BUILD_PREFIX; make install)
47
    fi
48 49
fi

50 51 52 53
CMAKE_PREFIXES=()
MAKE_PREFIXES=()
PARALLEL_MAKE_OPT="-j5"
if [ -n "$CLANG_TIDY" ] ; then
54
    CMAKE_OPTS+=("-DCMAKE_BUILD_TYPE=Debug") # do a debug build to avoid unused variable warnings with assertions, and to speed up build
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
    CMAKE_OPTS+=("-DCMAKE_CXX_CLANG_TIDY:STRING=${CLANG_TIDY}")
    if [ -n ${SONARCLOUD_BUILD_WRAPPER_PATH} ] ; then
        MAKE_PREFIXES+=("${SONARCLOUD_BUILD_WRAPPER_PATH}build-wrapper-linux-x86-64")
        MAKE_PREFIXES+=("--out-dir")
        MAKE_PREFIXES+=("${TRAVIS_BUILD_DIR}/bw-output")
        
    fi
    CMAKE_PREFIXES+=("scan-build-6.0")
    MAKE_PREFIXES+=("scan-build-6.0")
    MAKE_PREFIXES+=("-plist-html")
    SCAN_BUILD_OUTPUT="$(pwd)/scan-build-report"
    MAKE_PREFIXES+=("-o ${SCAN_BUILD_OUTPUT}")
    # TODO this does not work with sonarcloud.io as it misses the sonar-cxx plugin
    #MAKE_PREFIXES+=("-plist")
    IFS="/" read -ra GITHUB_USER <<< "${TRAVIS_REPO_SLUG}"
    PARALLEL_MAKE_OPT=""
fi

73
# Build, check, and install from local source
74 75
mkdir build_cmake
cd build_cmake
76
if [ "$DO_CLANG_FORMAT_CHECK" = "1" ] ; then
77
    if ! ( PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig cmake "${CMAKE_OPTS[@]}" .. && make clang-format-check) ; then
78 79 80 81
        make clang-format-diff
        exit 1
    fi
else
82 83 84 85
    if [ -n "$CLANG_TIDY" ] ; then
        ${CLANG_TIDY} -explain-config
    fi

86
    export CTEST_OUTPUT_ON_FAILURE=1
87 88 89 90 91 92 93
    PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig ${CMAKE_PREFIXES[@]} cmake "${CMAKE_OPTS[@]}" ..
    ${MAKE_PREFIXES[@]} make ${PARALLEL_MAKE_OPT} all VERBOSE=1 | tee clang-tidy-report
    
    if [ -n "${SONAR_SCANNER_CLI_PATH}" ] ; then
        find ${SCAN_BUILD_OUTPUT} || echo "WARNING: ${SCAN_BUILD_OUTPUT} does not exist"
    
        ${SONAR_SCANNER_CLI_PATH}sonar-scanner \
94
            -Dsonar.projectKey=${GITHUB_USER}-libzmq \
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
            -Dsonar.organization=${GITHUB_USER}-github \
            -Dsonar.projectBaseDir=.. \
            -Dsonar.sources=${TRAVIS_BUILD_DIR}/include,${TRAVIS_BUILD_DIR}/src,${TRAVIS_BUILD_DIR}/tests,${TRAVIS_BUILD_DIR}/unittests \
            -Dsonar.cfamily.build-wrapper-output=${TRAVIS_BUILD_DIR}/bw-output \
            -Dsonar.host.url=https://sonarcloud.io \
            -Dsonar.login=${SONARQUBE_TOKEN}

            # TODO this does not work with sonarcloud.io as it misses the sonar-cxx plugin
            # -Dsonar.cxx.clangtidy.reportPath=clang-tidy-report \
            # -Dsonar.cxx.clangsa.reportPath=*.plist \
            
    fi

    make install
    make ${PARALLEL_MAKE_OPT} test ARGS="-V"
110
fi