From 56ac230e976172f80d3735fd52d02e3fc2ff6cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20St=C3=B6neberg?= Date: Tue, 10 May 2022 13:03:58 +0200 Subject: [PATCH] added strict cfg check (#4093) * runtests.sh: added strict mode - enabled via `STRICT=1` * CI-unixish.yml: added strict cfg check * runtests.sh: disabled syntax check for kde.cpp since `kde-4config` is no longer commonly available in recent distros * runtests.sh: disabled syntax check for opencv2.cpp since `opencv.pc` is not commonly available in distros * runtests.sh: added missing trailing slash to `CFG` - fixes define checks --- .github/workflows/CI-unixish.yml | 15 ++++++++++- .travis.yml | 5 +--- test/cfg/runtests.sh | 44 +++++++++++++++++++++++++++++--- 3 files changed, 56 insertions(+), 8 deletions(-) diff --git a/.github/workflows/CI-unixish.yml b/.github/workflows/CI-unixish.yml index 18e039c13..1c79267ec 100644 --- a/.github/workflows/CI-unixish.yml +++ b/.github/workflows/CI-unixish.yml @@ -25,6 +25,12 @@ jobs: sudo apt-get install libtinyxml2-dev sudo apt-get install qtbase5-dev qttools5-dev libqt5charts5-dev qt5-default + # packages for strict cfg checks + - name: Install missing software on ubuntu 20.04 + if: matrix.os == 'ubuntu-20.04' + run: | + sudo apt-get install libcairo2-dev libcurl4-openssl-dev liblua5.3-dev libssl-dev libsqlite3-dev libcppunit-dev libsigc++-2.0-dev libgtk-3-dev libboost-all-dev libwxgtk3.0-gtk3-dev xmlstarlet + - name: Install missing software on macos if: contains(matrix.os, 'macos') run: | @@ -117,10 +123,17 @@ jobs: # fails on macos since some includes (e.g. sys/epoll.h) are not available - name: Run cfg tests - if: contains(matrix.os, 'ubuntu') + if: contains(matrix.os, 'ubuntu') && matrix.os != 'ubuntu-20.04' run: | make -j$(nproc) checkcfg + - name: Run cfg tests (strict) + if: matrix.os == 'ubuntu-20.04' + run: | + make -j$(nproc) checkcfg + env: + STRICT: 1 + # it seems macos has no "wc" command - name: Run showtimetop5 tests if: contains(matrix.os, 'ubuntu') diff --git a/.travis.yml b/.travis.yml index 46c3a211c..fe4364149 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,10 +16,7 @@ env: - CXXFLAGS="${CXXFLAGS} -DCHECK_INTERNAL" MAKEFLAGS="HAVE_RULES=yes" MATCHCOMPILER=yes VERIFY=1 before_install: -# install needed deps - - travis_retry sudo apt-get update -qq - - travis_retry sudo apt-get install -qq python3-pip libxml2-utils libpcre3 gdb unzip wx-common xmlstarlet python3-dev liblua5.3-dev libcurl3 libcairo2-dev libsigc++-2.0-dev tidy libopencv-dev -# Python 2 modules +# Python 2 modules - travis_retry python2 -m pip install --user pytest==4.6.4 - travis_retry python2 -m pip install --user unittest2 - travis_retry python2 -m pip install --user pexpect # imported by tools/ci.py diff --git a/test/cfg/runtests.sh b/test/cfg/runtests.sh index 648d06b5f..f53b11a6b 100755 --- a/test/cfg/runtests.sh +++ b/test/cfg/runtests.sh @@ -2,6 +2,12 @@ set -e # abort on error #set -x # be verbose +function exit_if_strict { + if [ -n "${STRICT}" ] && [ "${STRICT}" -eq 1 ]; then + exit 1 + fi +} + echo "Checking for pkg-config..." if pkg-config --version; then HAS_PKG_CONFIG=1 @@ -9,11 +15,12 @@ if pkg-config --version; then else HAS_PKG_CONFIG=0 echo "pkg-config is not available, skipping all syntax checks." + exit_if_strict fi DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/ CPPCHECK="$DIR"../../cppcheck -CFG="$DIR"../../cfg +CFG="$DIR"../../cfg/ # Cppcheck options CPPCHECK_OPT='--check-library --enable=information --enable=style --error-exitcode=-1 --suppress=missingIncludeSystem --inline-suppr --template="{file}:{line}:{severity}:{id}:{message}"' @@ -63,12 +70,14 @@ function qt_fn { set -e if [ $QTCHECK_RETURNCODE -ne 0 ]; then echo "Qt not completely present or not working, skipping syntax check with ${CXX}." + exit_if_strict else echo "Qt found and working, checking syntax with ${CXX} now." ${CXX} ${CXX_OPT} ${QTCONFIG} ${DIR}qt.cpp fi else echo "Qt not present, skipping syntax check with ${CXX}." + exit_if_strict fi fi } @@ -103,6 +112,7 @@ function wxwidgets_fn { set -e if [ $WXCONFIG_RETURNCODE -ne 0 ]; then echo "wx-config does not work, skipping syntax check for wxWidgets tests." + exit_if_strict else set +e echo -e "#include \n#include \n#include \n#include \n#if wxVERSION_NUMBER<2950\n#error \"Old version\"\n#endif" | ${CXX} ${CXX_OPT} ${WXCONFIG} -x c++ - @@ -110,6 +120,7 @@ function wxwidgets_fn { set -e if [ $WXCHECK_RETURNCODE -ne 0 ]; then echo "wxWidgets not completely present (with GUI classes) or not working, skipping syntax check with ${CXX}." + exit_if_strict else echo "wxWidgets found, checking syntax with ${CXX} now." ${CXX} ${CXX_OPT} ${WXCONFIG} -Wno-deprecated-declarations ${DIR}wxwidgets.cpp @@ -131,12 +142,14 @@ function gtk_fn { set -e if [ $GTKCHECK_RETURNCODE -ne 0 ]; then echo "GTK+ not completely present or not working, skipping syntax check with ${CXX}." + exit_if_strict else echo "GTK+ found and working, checking syntax with ${CXX} now." ${CC} ${CC_OPT} ${GTKCONFIG} ${DIR}gtk.c fi else echo "GTK+ not present, skipping syntax check with ${CXX}." + exit_if_strict fi fi } @@ -149,6 +162,7 @@ function boost_fn { set -e if [ ${BOOSTCHECK_RETURNCODE} -ne 0 ]; then echo "Boost not completely present or not working, skipping syntax check with ${CXX}." + exit_if_strict else echo "Boost found and working, checking syntax with ${CXX} now." ${CXX} ${CXX_OPT} ${DIR}boost.cpp @@ -166,12 +180,14 @@ function sqlite3_fn { set -e if [ $SQLITE3CHECK_RETURNCODE -ne 0 ]; then echo "SQLite3 not completely present or not working, skipping syntax check with ${CC}." + exit_if_strict else echo "SQLite3 found and working, checking syntax with ${CC} now." ${CC} ${CC_OPT} ${SQLITE3CONFIG} ${DIR}sqlite3.c fi else echo "SQLite3 not present, skipping syntax check with ${CC}." + exit_if_strict fi fi } @@ -192,12 +208,14 @@ function python_fn { set -e if [ $PYTHON3CONFIG_RETURNCODE -ne 0 ]; then echo "Python 3 not completely present or not working, skipping syntax check with ${CC}." + exit_if_strict else echo "Python 3 found and working, checking syntax with ${CC} now." ${CC} ${CC_OPT} ${PYTHON3CONFIG} ${DIR}python.c fi else echo "Python 3 not present, skipping syntax check with ${CC}." + exit_if_strict fi fi } @@ -213,12 +231,14 @@ function lua_fn { set -e if [ $LUACONFIG_RETURNCODE -ne 0 ]; then echo "Lua not completely present or not working, skipping syntax check with ${CC}." + exit_if_strict else echo "Lua found and working, checking syntax with ${CC} now." ${CC} ${CC_OPT} ${LUACONFIG} ${DIR}lua.c fi else echo "Lua not present, skipping syntax check with ${CC}." + exit_if_strict fi fi } @@ -234,12 +254,14 @@ function libcurl_fn { set -e if [ $LIBCURLCONFIG_RETURNCODE -ne 0 ]; then echo "libcurl not completely present or not working, skipping syntax check with ${CC}." + exit_if_strict else echo "libcurl found and working, checking syntax with ${CC} now." ${CC} ${CC_OPT} ${LIBCURLCONFIG} ${DIR}libcurl.c fi else echo "libcurl not present, skipping syntax check with ${CC}." + exit_if_strict fi fi } @@ -255,12 +277,14 @@ function cairo_fn { set -e if [ $CAIROCONFIG_RETURNCODE -ne 0 ]; then echo "cairo not completely present or not working, skipping syntax check with ${CC}." + exit_if_strict else echo "cairo found and working, checking syntax with ${CC} now." ${CC} ${CC_OPT} ${CAIROCONFIG} ${DIR}cairo.c fi else echo "cairo not present, skipping syntax check with ${CC}." + exit_if_strict fi fi } @@ -278,10 +302,12 @@ function kde_fn { set -e if [ $KDECONFIG_RETURNCODE -ne 0 ]; then echo "kde4-config does not work, skipping syntax check." + exit_if_strict else KDEQTCONFIG=$(get_pkg_config_cflags QtCore) if [ -n "$KDEQTCONFIG" ]; then echo "Suitable Qt not present, Qt is necessary for KDE. Skipping syntax check." + exit_if_strict else set +e echo -e "#include \n" | ${CXX} ${CXX_OPT} -I${KDECONFIG} ${KDEQTCONFIG} -x c++ - @@ -289,6 +315,7 @@ function kde_fn { set -e if [ $KDECHECK_RETURNCODE -ne 0 ]; then echo "KDE headers not completely present or not working, skipping syntax check with ${CXX}." + exit_if_strict else echo "KDE found, checking syntax with ${CXX} now." ${CXX} ${CXX_OPT} -I${KDECONFIG} ${KDEQTCONFIG} ${DIR}kde.cpp @@ -308,12 +335,14 @@ function libsigcpp_fn { set -e if [ $LIBSIGCPPCONFIG_RETURNCODE -ne 0 ]; then echo "libsigc++ not completely present or not working, skipping syntax check with ${CXX}." + exit_if_strict else echo "libsigc++ found and working, checking syntax with ${CXX} now." ${CXX} ${CXX_OPT} ${LIBSIGCPPCONFIG} ${DIR}libsigc++.cpp fi else echo "libsigc++ not present, skipping syntax check with ${CXX}." + exit_if_strict fi fi } @@ -329,12 +358,14 @@ function openssl_fn { set -e if [ $OPENSSLCONFIG_RETURNCODE -ne 0 ]; then echo "OpenSSL not completely present or not working, skipping syntax check with ${CC}." + exit_if_strict else echo "OpenSSL found and working, checking syntax with ${CC} now." ${CC} ${CC_OPT} ${OPENSSLCONFIG} ${DIR}openssl.c fi else echo "OpenSSL not present, skipping syntax check with ${CC}." + exit_if_strict fi fi } @@ -350,12 +381,14 @@ function opencv2_fn { set -e if [ $OPENCVCONFIG_RETURNCODE -ne 0 ]; then echo "OpenCV not completely present or not working, skipping syntax check with ${CXX}." + exit_if_strict else echo "OpenCV found and working, checking syntax with ${CXX} now." ${CXX} ${CXX_OPT} ${OPENCVCONFIG} ${DIR}opencv2.cpp fi else echo "OpenCV not present, skipping syntax check with ${CXX}." + exit_if_strict fi fi } @@ -365,6 +398,7 @@ function cppunit_fn { if [ $HAS_PKG_CONFIG -eq 1 ]; then if ! pkg-config cppunit; then echo "cppunit not found, skipping syntax check for cppunit" + exit_if_strict else echo "cppunit found, checking syntax with ${CXX} now." ${CXX} ${CXX_OPT} -Wno-deprecated-declarations ${DIR}cppunit.cpp @@ -405,7 +439,8 @@ do ${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --library=gtk -f ${DIR}gtk.c ;; kde.cpp) - kde_fn + # TODO: "kde-4config" is no longer commonly available in recent distros + #kde_fn ${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --library=kde ${DIR}kde.cpp ;; libcurl.c) @@ -421,7 +456,8 @@ do ${CPPCHECK} ${CPPCHECK_OPT} --library=lua ${DIR}lua.c ;; opencv2.cpp) - opencv2_fn + # TODO: "opencv.pc" is not commonly available in distros + #opencv2_fn ${CPPCHECK} ${CPPCHECK_OPT} --library=opencv2 ${DIR}opencv2.cpp ;; openmp.c) @@ -468,12 +504,14 @@ do ;; *) echo "Unhandled file $f" + exit_if_strict esac done # Check the syntax of the defines in the configuration files if ! xmlstarlet --version; then echo "xmlstarlet needed to extract defines, skipping defines check." + exit_if_strict else for configfile in ${CFG}*.cfg; do echo "Checking defines in $configfile"