summaryrefslogtreecommitdiff
path: root/qa.sh
diff options
context:
space:
mode:
Diffstat (limited to 'qa.sh')
-rwxr-xr-xqa.sh130
1 files changed, 130 insertions, 0 deletions
diff --git a/qa.sh b/qa.sh
new file mode 100755
index 0000000..2a77f2c
--- /dev/null
+++ b/qa.sh
@@ -0,0 +1,130 @@
+#! /bin/bash
+# Copyright (C) 2016 Sebastian Pipping <sebastian@pipping.org>
+# Licensed under MIT license
+
+set -o nounset
+
+: ${GCC_CC:=gcc}
+: ${GCC_CXX:=g++}
+: ${CLANG_CC:=clang}
+: ${CLANG_CXX:=clang++}
+
+: ${AR:=ar}
+: ${CC:="${CLANG_CC}"}
+: ${CXX:="${CLANG_CXX}"}
+: ${LD:=ld}
+: ${MAKE:=make}
+
+: ${BASE_COMPILE_FLAGS:="-pipe -Wall -Wextra -pedantic -Wno-overlength-strings -Wno-long-long"}
+
+ANNOUNCE() {
+ local open='\e[1m'
+ local close='\e[0m'
+
+ echo -e -n "${open}"
+ echo -n "# $*"
+ echo -e "${close}"
+}
+
+RUN() {
+ ANNOUNCE "$@"
+ env "$@"
+}
+
+main() {
+ local mode="${1:-}"
+ shift
+
+ local RUNENV
+ local BASE_COMPILE_FLAGS="${BASE_COMPILE_FLAGS}"
+
+ case "${mode}" in
+ address)
+ # http://clang.llvm.org/docs/AddressSanitizer.html
+ local CC="${CLANG_CC}"
+ local CXX="${CLANG_CXX}"
+ BASE_COMPILE_FLAGS+=" -g -fsanitize=address -fno-omit-frame-pointer"
+ ;;
+ coverage | lib-coverage | app-coverage)
+ local CC="${GCC_CC}"
+ local CXX="${GCC_CXX}"
+ BASE_COMPILE_FLAGS+=" --coverage --no-inline"
+ ;;
+ egypt)
+ BASE_COMPILE_FLAGS+=" -fdump-rtl-expand"
+ ;;
+ memory)
+ # http://clang.llvm.org/docs/MemorySanitizer.html
+ BASE_COMPILE_FLAGS+=" -fsanitize=memory -fno-omit-frame-pointer -g -O2 -fsanitize-memory-track-origins -fsanitize-blacklist=$PWD/memory-sanitizer-blacklist.txt"
+ ;;
+ ncc)
+ # http://students.ceid.upatras.gr/~sxanth/ncc/
+ local CC="ncc -ncgcc -ncld -ncfabs"
+ local AR=nccar
+ local LD=nccld
+ BASE_COMPILE_FLAGS+=" -fPIC"
+ ;;
+ undefined)
+ # http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
+ BASE_COMPILE_FLAGS+=" -fsanitize=undefined"
+ export UBSAN_OPTIONS=print_stacktrace=1
+ ;;
+ *)
+ echo "Usage:" 1>&2
+ echo " ${0##*/} (address|coverage|lib-coverage|app-coverage|egypt|memory|ncc|undefined)" 1>&2
+ exit 1
+ ;;
+ esac
+
+ local CFLAGS="-std=c89 ${BASE_COMPILE_FLAGS} ${CFLAGS:-}"
+ local CXXFLAGS="-std=c++98 ${BASE_COMPILE_FLAGS} ${CXXFLAGS:-}"
+
+ (
+ set -e
+
+ RUN CC="${CC}" CFLAGS="${CFLAGS}" \
+ CXX="${CXX}" CXXFLAGS="${CXXFLAGS}" \
+ AR="${AR}" \
+ LD="${LD}" \
+ ./configure "$@"
+
+ RUN "${MAKE}" clean all
+
+ case "${mode}" in
+ egypt|ncc)
+ ;;
+ *)
+ RUN "${MAKE}" check run-xmltest
+ ;;
+ esac
+ )
+ [[ $? -ne 0 ]] && exit 1
+
+ case "${mode}" in
+ coverage)
+ find -name '*.gcda' | sort | xargs gcov
+ ;;
+ lib-coverage)
+ find lib -name '*.gcda' | sort | xargs gcov
+ ;;
+ app-coverage)
+ find lib xmlwf -name '*.gcda' | sort | xargs gcov
+ ;;
+ egypt)
+ local DOT_FORMAT="${DOT_FORMAT:-svg}"
+ local o="callgraph.${DOT_FORMAT}"
+ ANNOUNCE "egypt ...... | dot ...... > ${o}"
+ find -name '*.expand' \
+ | sort \
+ | xargs -r egypt \
+ | unflatten -c 20 \
+ | dot -T${DOT_FORMAT} -Grankdir=LR \
+ > "${o}"
+ ;;
+ ncc)
+ RUN nccnav ./.libs/libexpat.a.nccout
+ ;;
+ esac
+}
+
+main "$@"