ci_build.sh 4.0 KB

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