diff --git a/check b/check index 48fc975..6a2f29d 100755 --- a/check +++ b/check @@ -1,335 +1,335 @@ #!/bin/bash export CFLAGS="$CFLAGS" export MAKEFLAGS="$MAKEFLAGS --no-print-directory" export BROWSER="firefox" help_all() { echo echo "Usage: check " echo echo "Commands:" echo echo " ansi Check using ansi compiler option" echo " sysv Check using sys-v semaphores" echo " nosection Check without gcc __attribute__(section)" echo " noepoll Check using poll (not epoll)" echo " nogettime Check without gettime()" echo " bsd Check with a bsd-like config" echo " mac Check with a mac/darwin-like config" echo " dist do make distcheck" echo " rpm Run rpmlint" echo " mock Test doing a mock build" echo " coverity Run coverity" echo " clang Run clang-analyze" echo " abi Check abi compatibility" echo " api_sanity api sanity test" echo echo " help This help" echo exit 1 } if [ $# -lt 1 ] then help_all fi command=$1 shift args="$@" if [ -n "$(git rev-parse)" ] ; then perror "Must be inside a git repository to work" exit 1 fi up=$(git rev-parse --show-cdup) if [ "x$up" == "x" ] ; then up="." fi cd $up set -e if [ ! -e build-aux/install-sh ] then ./autogen.sh fi if [ ! -e Makefile ] then ./configure --quiet fi check() { options="$1 --enable-debug --enable-slow-tests --enable-fatal-warnings --quiet" echo "./configure $options" echo "ENV CFLAGS=\"$CFLAGS\"" echo "ENV MAKEFLAGS=\"$MAKEFLAGS\"" ( ./configure $options ) make check if [ $? -ne 0 ] then echo "======================" echo failed: $1 echo "======================" if [ -f tests/test-suite.log ] then cat tests/test-suite.log fi exit 1 fi } check_ansi() { echo "checking ansi" echo "===============" check "--enable-ansi" } check_nosection() { echo "checking nosection" echo "=======================" # no __attribute__((section)) check "ac_cv_link_attribute_section=no" } check_sysv() { # use sys-v semaphores echo "checking sysv" echo "=======================" ORIG_CFLAGS=$CFLAGS export CFLAGS="$CFLAGS -DDISABLE_POSIX_THREAD_PROCESS_SHARED" check export CFLAGS=$ORIG_CFLAGS } check_nogettime() { # no clock_gettime echo "checking nogettime" echo "=======================" check "ac_cv_func_clock_gettime=no" } check_noepoll() { # no epoll echo "checking noepoll" echo "=======================" check "ac_cv_func_epoll_create1=no ac_cv_func_epoll_create=no" } check_bsd() { # bsd-like echo "checking bsd" echo "=======================" ORIG_CFLAGS=$CFLAGS check "ac_cv_func_sem_timedwait=no ac_cv_func_clock_gettime=no ac_cv_func_epoll_create1=no ac_cv_func_epoll_create=no" export CFLAGS=$ORIG_CFLAGS } check_mac() { # mac-like echo "checking mac" echo "=======================" ORIG_CFLAGS=$CFLAGS export CFLAGS="$CFLAGS -DDISABLE_POSIX_THREAD_PROCESS_SHARED" check "ac_cv_func_clock_gettime=no ac_cv_func_epoll_create1=no ac_cv_func_epoll_create=no ac_cv_link_attribute_section=no" export CFLAGS=$ORIG_CFLAGS } check_dist() { # normal configure with distcheck echo "checking dist" echo "======================" set +e ./configure --quiet make distcheck set -e } check_rpm() { echo "checking rpm building" echo "======================" set +e make maintainer-clean ./autogen.sh ./configure --quiet make rpm echo sudo rpm -Uvf --force libqb-*.rpm echo rpmlint libqb rpmlint libqb echo rpmlint libqb-debuginfo rpmlint libqb-debuginfo echo rpmlint libqb-devel rpmlint libqb-devel set -e } check_mock() { echo "checking mock building" echo "======================" set +e make maintainer-clean rm -f *.rpm ./autogen.sh ./configure --quiet make srpm mock --no-clean --rebuild *.src.rpm } check_coverity() { echo "checking coverity" echo "======================" make clean cov-build --dir=cov make cov-analyze --dir cov \ --concurrency \ --all \ --aggressiveness-level high \ --security \ --wait-for-license cov-format-errors --dir cov } check_clang() { if [ ! -f /usr/libexec/clang-analyzer/scan-build/ccc-analyzer ] then echo try installing clang-analyze exit 1 fi echo "checking clang" echo "====================" make clean ./configure \ CC=/usr/libexec/clang-analyzer/scan-build/ccc-analyzer \ CXX=/usr/libexec/clang-analyzer/scan-build/c++-analyzer make check } check_abi() { ver1=$1 ver2=$2 if [ -z "$ver1" ] ; then echo need two versions. exit 1 fi if [ -z "$ver2" ] ; then echo need two versions. exit 1 fi TMPL=build-aux/abi-check-templ.xml checker=abi-compliance-checker mkdir -p abi_dumps/libqb for v in $ver1 $ver2 do p=$(pwd)_inst_$v sed -e "s|@PREFIX@|$p|" -e "s|@VERSION@|$v|" $TMPL > abi_dumps/libqb/$v.xml done for v in $ver1 $ver2 do p=$(pwd)_inst_$v t=v$v - b=api-check-$v echo "== Version $v ==" if [ ! -f abi_dumps/libqb/libqb_$v.abi.tar.gz ] then - git checkout $t + git checkout $t ./autogen.sh ./configure make make install DESTDIR=$p $checker -l libqb -dump_abi abi_dumps/libqb/$v.xml fi done + # Don't exit if there were incompatible ABI changes. + set +e $checker -l libqb \ -d1 abi_dumps/libqb/libqb_$ver1.abi.tar.gz \ -d2 abi_dumps/libqb/libqb_$ver2.abi.tar.gz + set -e - $BROWSER file://`pwd`/compat_reports/libqb/$ver1\_to_$ver2/abi_compat_report.html + $BROWSER file://`pwd`/compat_reports/libqb/$ver1\_to_$ver2/compat_report.html - echo mv compat_reports/libqb/$ver1\_to_$ver2/abi_compat_report.html abi_compat_report_$ver1\_to_$ver2.html - echo scp abi_compat_report_$ver1\_to_$ver2.html fedorahosted.org:quarterback git checkout master } check_api_sanity() { make export CFLAGS="-Wall -ggdb2" api-sanity-checker -l libqb -d build-aux/api-auto-test.xml -gen -build -run $BROWSER file://`pwd`/test_results/libqb/master/test_results.html $BROWSER file://`pwd`/test_results/libqb/master/test_results.html } check_all() { check_ansi check_nosection check_sysv check_noepoll check_nogettime check_bsd check_dist check_rpm } case $command in help) help_all $args ;; ansi) check_ansi ;; nosection) check_nosection ;; sysv) check_sysv ;; noepoll) check_noepoll ;; nogettime) check_nogettime ;; bsd) check_bsd ;; mac) check_mac ;; rpm) check_rpm ;; mock) check_mock ;; dist) check_dist ;; coverity) check_coverity ;; clang) check_clang ;; abi) check_abi $args ;; api_sanity) check_api_sanity ;; all) check_all ;; *) help_all ;; esac cd - exit 0