diff options
Diffstat (limited to 'ci/main.sh')
-rwxr-xr-x | ci/main.sh | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/ci/main.sh b/ci/main.sh new file mode 100755 index 0000000..c8d80c9 --- /dev/null +++ b/ci/main.sh @@ -0,0 +1,109 @@ +#!/usr/bin/env bash +set -eux + +. ci/env.inc.sh + +: "${GPG_VERSION:=stable}" +: "${BUILD_MODE:=normal}" + +: "${RNP_TESTS=${RNP_TESTS-.*}}" +: "${LD_LIBRARY_PATH:=}" + +: "${DIST:=}" +: "${DIST_VERSION:=}" + +: "${SKIP_TESTS:=0}" + +prepare_build_prerequisites() { + CMAKE=cmake + + case "${OS}-${CPU}" in +# linux-i386) # For i386/Debian (the only 32 bit run) python3 is already installed by +# build_and_install_python # linux_install @ install_functions.inc.sh called from install_cacheable_dependencies.sh +# ;; # If there is a distribution that does not have python3 pre-apckeges (highly unlikely) + linux-*) # it shall be implemented like ensure_cmake + ensure_cmake + ;; + esac + + export CMAKE +} + +prepare_test_env() { + prepare_build_tool_env + + export LD_LIBRARY_PATH="${GPG_INSTALL}/lib:${BOTAN_INSTALL}/lib:${JSONC_INSTALL}/lib:${RNP_INSTALL}/lib:$LD_LIBRARY_PATH" + + # update dll search path for windows + if [[ "${OS}" = "msys" ]]; then + export PATH="${LOCAL_BUILDS}/rnp-build/lib:${LOCAL_BUILDS}/rnp-build/bin:${LOCAL_BUILDS}/rnp-build/src/lib:${BOTAN_INSTALL}/bin:$PATH" + fi +} + +prepare_tests() { + : "${COVERITY_SCAN_BRANCH:=0}" + if [[ ${COVERITY_SCAN_BRANCH} = 1 ]]; then + exit 0 + fi +} + +build_tests() { + # use test costs to prioritize + mkdir -p "${LOCAL_BUILDS}/rnp-build/Testing/Temporary" + cp "${rnpsrc}/cmake/CTestCostData.txt" "${LOCAL_BUILDS}/rnp-build/Testing/Temporary" + + local run=run + case "${DIST_VERSION}" in + centos-8|centos-9|fedora-*) + run=run_in_python_venv + ;; + esac + + "${run}" ctest -j"${CTEST_PARALLEL}" -R "$RNP_TESTS" --output-on-failure + popd +} + +main() { + if [[ ${SKIP_TESTS} = 0 ]]; then + prepare_test_env + fi + prepare_build_prerequisites + + export rnpsrc="$PWD" + + mkdir -p "${LOCAL_BUILDS}/rnp-build" + pushd "${LOCAL_BUILDS}/rnp-build" + + cmakeopts=( + -DCMAKE_BUILD_TYPE=Release + -DBUILD_SHARED_LIBS=yes + -DCMAKE_INSTALL_PREFIX="${RNP_INSTALL}" + -DCMAKE_PREFIX_PATH="${BOTAN_INSTALL};${JSONC_INSTALL};${GPG_INSTALL}" + ) + [[ ${SKIP_TESTS} = 1 ]] && cmakeopts+=(-DBUILD_TESTING=OFF) + [[ "${BUILD_MODE}" = "coverage" ]] && cmakeopts+=(-DENABLE_COVERAGE=yes) + [[ "${BUILD_MODE}" = "sanitize" ]] && cmakeopts+=(-DENABLE_SANITIZERS=yes) + [ -n "${GTEST_SOURCES:-}" ] && cmakeopts+=(-DGTEST_SOURCES="${GTEST_SOURCES}") + [ -n "${DOWNLOAD_GTEST:-}" ] && cmakeopts+=(-DDOWNLOAD_GTEST="${DOWNLOAD_GTEST}") + [ -n "${CRYPTO_BACKEND:-}" ] && cmakeopts+=(-DCRYPTO_BACKEND="${CRYPTO_BACKEND}") + [ -n "${ENABLE_SM2:-}" ] && cmakeopts+=(-DENABLE_SM2="${ENABLE_SM2}") + [ -n "${ENABLE_IDEA:-}" ] && cmakeopts+=(-DENABLE_IDEA="${ENABLE_IDEA}") + [ -n "${ENABLE_TWOFISH:-}" ] && cmakeopts+=(-DENABLE_TWOFISH="${ENABLE_TWOFISH}") + [ -n "${ENABLE_BRAINPOOL:-}" ] && cmakeopts+=(-DENABLE_BRAINPOOL="${ENABLE_BRAINPOOL}") + + if [[ "${OS}" = "msys" ]]; then + cmakeopts+=(-G "MSYS Makefiles") + fi + build_rnp "${rnpsrc}" + make_install VERBOSE=0 + + if [[ ${SKIP_TESTS} = 0 ]]; then + echo "TESTS NOT SKIPPED" + prepare_tests + build_tests + fi +} + +main "$@" + +exit 0 |