1#!/usr/bin/env bash 2 3set -x -e 4 5cd ../.. 6 7# always install custom builds from dist 8# to make sure that `make dist` doesn't omit any files required to build & test 9if [ -z "$DO_CLANG_FORMAT_CHECK" -a -z "$CLANG_TIDY" ]; then 10 ./autogen.sh 11 ./configure 12 make -j5 dist-gzip 13 V=$(./version.sh) 14 tar -xzf zeromq-$V.tar.gz 15 cd zeromq-$V 16fi 17 18mkdir tmp || true 19BUILD_PREFIX=$PWD/tmp 20 21CONFIG_OPTS=() 22CONFIG_OPTS+=("CFLAGS=-I${BUILD_PREFIX}/include") 23CONFIG_OPTS+=("CPPFLAGS=-I${BUILD_PREFIX}/include") 24CONFIG_OPTS+=("CXXFLAGS=-I${BUILD_PREFIX}/include") 25CONFIG_OPTS+=("LDFLAGS=-L${BUILD_PREFIX}/lib") 26CONFIG_OPTS+=("PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig") 27 28CMAKE_OPTS=() 29CMAKE_OPTS+=("-DCMAKE_INSTALL_PREFIX:PATH=${BUILD_PREFIX}") 30CMAKE_OPTS+=("-DCMAKE_PREFIX_PATH:PATH=${BUILD_PREFIX}") 31CMAKE_OPTS+=("-DCMAKE_LIBRARY_PATH:PATH=${BUILD_PREFIX}/lib") 32CMAKE_OPTS+=("-DCMAKE_INCLUDE_PATH:PATH=${BUILD_PREFIX}/include") 33CMAKE_OPTS+=("-DENABLE_CAPSH=ON") 34 35if [ "$CLANG_FORMAT" != "" ] ; then 36 CMAKE_OPTS+=("-DCLANG_FORMAT=${CLANG_FORMAT}") 37fi 38 39if [ -z $CURVE ]; then 40 CMAKE_OPTS+=("-DENABLE_CURVE=OFF") 41elif [ $CURVE == "libsodium" ]; then 42 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) || \ 45 (command -v brew >/dev/null 2>&1 && brew ls --versions libsodium >/dev/null 2>&1)); then 46 git clone --depth 1 -b stable git://github.com/jedisct1/libsodium.git 47 ( cd libsodium; ./autogen.sh; ./configure --prefix=$BUILD_PREFIX; make install) 48 fi 49fi 50 51CMAKE_PREFIXES=() 52MAKE_PREFIXES=() 53PARALLEL_MAKE_OPT="-j5" 54if [ -n "$CLANG_TIDY" ] ; then 55 CMAKE_OPTS+=("-DCMAKE_BUILD_TYPE=Debug") # do a debug build to avoid unused variable warnings with assertions, and to speed up build 56 CMAKE_OPTS+=("-DCMAKE_CXX_CLANG_TIDY:STRING=${CLANG_TIDY}") 57 if [ -n ${SONARCLOUD_BUILD_WRAPPER_PATH} ] ; then 58 MAKE_PREFIXES+=("${SONARCLOUD_BUILD_WRAPPER_PATH}build-wrapper-linux-x86-64") 59 MAKE_PREFIXES+=("--out-dir") 60 MAKE_PREFIXES+=("${TRAVIS_BUILD_DIR}/bw-output") 61 62 fi 63 CMAKE_PREFIXES+=("scan-build-10") 64 MAKE_PREFIXES+=("scan-build-10") 65 MAKE_PREFIXES+=("-plist-html") 66 SCAN_BUILD_OUTPUT="$(pwd)/scan-build-report" 67 MAKE_PREFIXES+=("-o ${SCAN_BUILD_OUTPUT}") 68 # TODO this does not work with sonarcloud.io as it misses the sonar-cxx plugin 69 #MAKE_PREFIXES+=("-plist") 70 IFS="/" read -ra GITHUB_USER <<< "${TRAVIS_REPO_SLUG}" 71 PARALLEL_MAKE_OPT="" 72fi 73 74# Build, check, and install from local source 75mkdir build_cmake 76cd build_cmake 77if [ "$DO_CLANG_FORMAT_CHECK" = "1" ] ; then 78 if ! ( PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig cmake "${CMAKE_OPTS[@]}" .. && make clang-format-check) ; then 79 make clang-format-diff 80 exit 1 81 fi 82else 83 if [ -n "$CLANG_TIDY" ] ; then 84 ${CLANG_TIDY} -explain-config 85 fi 86 87 export CTEST_OUTPUT_ON_FAILURE=1 88 PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig ${CMAKE_PREFIXES[@]} cmake "${CMAKE_OPTS[@]}" .. 89 ${MAKE_PREFIXES[@]} make ${PARALLEL_MAKE_OPT} all VERBOSE=1 | tee clang-tidy-report 90 91 if [ -n "${SONAR_SCANNER_CLI_PATH}" ] ; then 92 find ${SCAN_BUILD_OUTPUT} || echo "WARNING: ${SCAN_BUILD_OUTPUT} does not exist" 93 94 ${SONAR_SCANNER_CLI_PATH}sonar-scanner \ 95 -Dsonar.projectKey=${GITHUB_USER}-libzmq \ 96 -Dsonar.organization=${GITHUB_USER}-github \ 97 -Dsonar.projectBaseDir=.. \ 98 -Dsonar.sources=${TRAVIS_BUILD_DIR}/include,${TRAVIS_BUILD_DIR}/src,${TRAVIS_BUILD_DIR}/tests,${TRAVIS_BUILD_DIR}/unittests \ 99 -Dsonar.cfamily.build-wrapper-output=${TRAVIS_BUILD_DIR}/bw-output \ 100 -Dsonar.host.url=https://sonarcloud.io \ 101 -Dsonar.login=${SONARQUBE_TOKEN} 102 103 # TODO this does not work with sonarcloud.io as it misses the sonar-cxx plugin 104 # -Dsonar.cxx.clangtidy.reportPath=clang-tidy-report \ 105 # -Dsonar.cxx.clangsa.reportPath=*.plist \ 106 107 fi 108 109 make install 110 make ${PARALLEL_MAKE_OPT} test ARGS="-V" 111fi 112