#!/usr/bin/env bash # Build core and run the local regression checks. set -euo pipefail mode=${1:-release} source_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd) build_dir=${2:-"$source_dir/build-ci/$mode"} qmake_args=() compiler_flags=() case "$mode" in release) qmake_args+=(CONFIG+=release CONFIG-=debug) compiler_flags+=(-O2) ;; sanitize) qmake_args+=(CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=-fsanitize=address,undefined -fno-omit-frame-pointer' 'QMAKE_LFLAGS+=-fsanitize=address,undefined') compiler_flags+=(-g -fsanitize=address,undefined -fno-omit-frame-pointer) export ASAN_OPTIONS=${ASAN_OPTIONS:-detect_leaks=1:halt_on_error=1} export UBSAN_OPTIONS=${UBSAN_OPTIONS:-halt_on_error=1:print_stacktrace=1} ;; *) echo "Usage: $0 [release|sanitize] [build-directory]" >&2 exit 2 ;; esac export QT_FATAL_WARNINGS=${QT_FATAL_WARNINGS:-1} mkdir -p -- "$build_dir" cd -- "$build_dir" "${QMAKE:-qmake6}" "$source_dir/dbc.pro" "${qmake_args[@]}" make -j"${JOBS:-4}" make check # Also verify that the tree and its builder compile and run without Qt. "${CXX:-c++}" -std=c++17 "${compiler_flags[@]}" -I"$source_dir/core" \ "$source_dir/tests/tree_node_test.cpp" "$source_dir/core/tree_node.cpp" \ "$source_dir/core/dbc_tree_builder.cpp" -o dbc_tree_standalone_test ./dbc_tree_standalone_test