2015-01-27 19:31:41 +01:00
|
|
|
#!/bin/bash
|
|
|
|
set -e # abort on error
|
2018-12-19 22:18:24 +01:00
|
|
|
#set -x # be verbose
|
2015-01-27 19:31:41 +01:00
|
|
|
|
2016-12-25 00:43:47 +01:00
|
|
|
if [[ $(pwd) == */test/cfg ]] ; then # we are in test/cfg
|
2015-01-27 19:31:41 +01:00
|
|
|
CPPCHECK="../../cppcheck"
|
|
|
|
DIR=""
|
2018-07-15 22:24:31 +02:00
|
|
|
CFG="../../cfg/"
|
2015-01-27 19:31:41 +01:00
|
|
|
else # assume we are in repo root
|
|
|
|
CPPCHECK="./cppcheck"
|
2018-01-10 15:52:06 +01:00
|
|
|
DIR=test/cfg/
|
2018-07-15 22:24:31 +02:00
|
|
|
CFG="cfg/"
|
2015-01-27 19:31:41 +01:00
|
|
|
fi
|
|
|
|
|
2015-08-10 23:44:36 +02:00
|
|
|
# Cppcheck options
|
2019-01-25 17:03:16 +01:00
|
|
|
CPPCHECK_OPT='--check-library --enable=information --enable=style --error-exitcode=-1 --suppress=missingIncludeSystem --inline-suppr --template="{file}:{line}:{severity}:{id}:{message}"'
|
2015-08-10 23:44:36 +02:00
|
|
|
|
2015-08-10 22:58:46 +02:00
|
|
|
# Compiler settings
|
|
|
|
CXX=g++
|
2015-10-18 17:00:09 +02:00
|
|
|
CXX_OPT='-fsyntax-only -std=c++0x -Wno-format -Wno-format-security'
|
2015-08-10 22:58:46 +02:00
|
|
|
CC=gcc
|
2015-10-01 20:18:06 +02:00
|
|
|
CC_OPT='-Wno-format -Wno-nonnull -Wno-implicit-function-declaration -Wno-deprecated-declarations -Wno-format-security -Wno-nonnull -fsyntax-only'
|
2015-08-10 22:58:46 +02:00
|
|
|
|
2015-01-30 06:43:40 +01:00
|
|
|
# posix.c
|
2015-08-10 22:58:46 +02:00
|
|
|
${CC} ${CC_OPT} ${DIR}posix.c
|
2015-08-10 23:44:36 +02:00
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --library=posix ${DIR}posix.c
|
2015-02-16 22:19:51 +01:00
|
|
|
|
|
|
|
# gnu.c
|
2019-01-25 17:03:16 +01:00
|
|
|
${CC} ${CC_OPT} -D_GNU_SOURCE ${DIR}gnu.c
|
2019-05-16 17:49:33 +02:00
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --library=posix,gnu ${DIR}gnu.c
|
2015-08-10 23:44:36 +02:00
|
|
|
|
2017-04-18 18:04:27 +02:00
|
|
|
# qt.cpp
|
2019-01-07 14:40:21 +01:00
|
|
|
set +e
|
|
|
|
pkg-config --version
|
|
|
|
PKGCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $PKGCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "pkg-config needed to retrieve Qt configuration is not available, skipping syntax check."
|
|
|
|
else
|
|
|
|
set +e
|
|
|
|
QTCONFIG=$(pkg-config --cflags Qt5Core)
|
|
|
|
QTCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $QTCONFIG_RETURNCODE -eq 0 ]; then
|
2019-01-14 17:48:04 +01:00
|
|
|
QTBUILDCONFIG=$(pkg-config --variable=qt_config Qt5Core)
|
|
|
|
[[ $QTBUILDCONFIG =~ (^|[[:space:]])reduce_relocations($|[[:space:]]) ]] && QTCONFIG="${QTCONFIG} -fPIC"
|
2019-01-07 14:40:21 +01:00
|
|
|
set +e
|
|
|
|
echo -e "#include <QString>" | ${CXX} ${CXX_OPT} ${QTCONFIG} -x c++ -
|
|
|
|
QTCHECK_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $QTCHECK_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "Qt not completely present or not working, skipping syntax check with ${CXX}."
|
|
|
|
else
|
|
|
|
echo "Qt found and working, checking syntax with ${CXX} now."
|
|
|
|
${CXX} ${CXX_OPT} ${QTCONFIG} ${DIR}qt.cpp
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
2019-01-25 17:03:16 +01:00
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --library=qt ${DIR}qt.cpp
|
2017-04-18 18:04:27 +02:00
|
|
|
|
2018-05-30 16:47:00 +02:00
|
|
|
# bsd.c
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --library=bsd ${DIR}bsd.c
|
|
|
|
|
2015-08-10 23:44:36 +02:00
|
|
|
# std.c
|
2019-01-25 17:03:16 +01:00
|
|
|
${CC} ${CC_OPT} ${DIR}std.c
|
2019-09-11 19:25:09 +02:00
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive ${DIR}std.c
|
2019-01-25 17:03:16 +01:00
|
|
|
${CXX} ${CXX_OPT} ${DIR}std.cpp
|
2019-09-11 19:25:09 +02:00
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive ${DIR}std.cpp
|
2015-01-30 06:43:40 +01:00
|
|
|
|
2018-01-24 20:05:16 +01:00
|
|
|
# windows.cpp
|
|
|
|
# Syntax check via g++ does not work because it can not find a valid windows.h
|
|
|
|
#${CXX} ${CXX_OPT} ${DIR}windows.cpp
|
2019-01-25 17:03:16 +01:00
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --platform=win32A ${DIR}windows.cpp
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --platform=win32W ${DIR}windows.cpp
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --platform=win64 ${DIR}windows.cpp
|
2018-02-06 15:33:45 +01:00
|
|
|
|
|
|
|
# wxwidgets.cpp
|
2018-02-09 20:34:15 +01:00
|
|
|
set +e
|
2019-01-07 14:40:21 +01:00
|
|
|
WXCONFIG=$(wx-config --cxxflags)
|
2018-02-09 20:34:15 +01:00
|
|
|
WXCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $WXCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "wx-config does not work, skipping syntax check for wxWidgets tests."
|
|
|
|
else
|
|
|
|
set +e
|
2018-02-26 20:46:56 +01:00
|
|
|
echo -e "#include <wx/filefn.h>\n#include <wx/app.h>\n#include <wx/artprov.h>\n#include <wx/version.h>\n#if wxVERSION_NUMBER<2950\n#error \"Old version\"\n#endif" | ${CXX} ${CXX_OPT} ${WXCONFIG} -x c++ -
|
2018-02-09 20:34:15 +01:00
|
|
|
WXCHECK_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $WXCHECK_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "wxWidgets not completely present (with GUI classes) or not working, skipping syntax check with ${CXX}."
|
|
|
|
else
|
|
|
|
echo "wxWidgets found, checking syntax with ${CXX} now."
|
|
|
|
${CXX} ${CXX_OPT} ${WXCONFIG} -Wno-deprecated-declarations ${DIR}wxwidgets.cpp
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --library=wxwidgets -f ${DIR}wxwidgets.cpp
|
2018-03-10 11:22:10 +01:00
|
|
|
|
|
|
|
# gtk.c
|
|
|
|
set +e
|
|
|
|
pkg-config --version
|
|
|
|
PKGCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $PKGCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "pkg-config needed to retrieve GTK+ configuration is not available, skipping syntax check."
|
|
|
|
else
|
|
|
|
set +e
|
|
|
|
GTKCONFIG=$(pkg-config --cflags gtk+-3.0)
|
|
|
|
GTKCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $GTKCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
set +e
|
|
|
|
GTKCONFIG=$(pkg-config --cflags gtk+-2.0)
|
|
|
|
GTKCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
fi
|
|
|
|
if [ $GTKCONFIG_RETURNCODE -eq 0 ]; then
|
|
|
|
set +e
|
|
|
|
echo -e "#include <gtk/gtk.h>" | ${CC} ${CC_OPT} ${GTKCONFIG} -x c -
|
|
|
|
GTKCHECK_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $GTKCHECK_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "GTK+ not completely present or not working, skipping syntax check with ${CXX}."
|
|
|
|
else
|
|
|
|
echo "GTK+ found and working, checking syntax with ${CXX} now."
|
|
|
|
${CC} ${CC_OPT} ${GTKCONFIG} ${DIR}gtk.c
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --library=gtk -f ${DIR}gtk.c
|
2018-07-12 08:40:26 +02:00
|
|
|
|
2019-01-08 20:30:21 +01:00
|
|
|
# boost.cpp
|
|
|
|
set +e
|
|
|
|
echo -e "#include <boost/config.hpp>" | ${CXX} ${CXX_OPT} -x c++ -
|
|
|
|
BOOSTCHECK_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ ${BOOSTCHECK_RETURNCODE} -ne 0 ]; then
|
|
|
|
echo "Boost not completely present or not working, skipping syntax check with ${CXX}."
|
|
|
|
else
|
|
|
|
echo "Boost found and working, checking syntax with ${CXX} now."
|
|
|
|
${CXX} ${CXX_OPT} ${DIR}boost.cpp
|
|
|
|
fi
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --library=boost ${DIR}boost.cpp
|
|
|
|
|
2019-03-13 13:57:40 +01:00
|
|
|
# sqlite3.c
|
|
|
|
set +e
|
|
|
|
pkg-config --version
|
|
|
|
PKGCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $PKGCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "pkg-config needed to retrieve SQLite3 configuration is not available, skipping syntax check."
|
|
|
|
else
|
|
|
|
set +e
|
|
|
|
SQLITE3CONFIG=$(pkg-config --cflags sqlite3)
|
|
|
|
SQLITE3CONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $SQLITE3CONFIG_RETURNCODE -eq 0 ]; then
|
|
|
|
set +e
|
|
|
|
echo -e "#include <sqlite3.h>" | ${CC} ${CC_OPT} ${SQLITE3CONFIG} -x c -
|
|
|
|
SQLITE3CHECK_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $SQLITE3CHECK_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "SQLite3 not completely present or not working, skipping syntax check with ${CC}."
|
|
|
|
else
|
|
|
|
echo "SQLite3 found and working, checking syntax with ${CC} now."
|
|
|
|
${CC} ${CC_OPT} ${SQLITE3CONFIG} ${DIR}sqlite3.c
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --library=sqlite3 ${DIR}sqlite3.c
|
|
|
|
|
2019-07-05 03:00:52 +02:00
|
|
|
# openmp.c
|
|
|
|
${CC} ${CC_OPT} -fopenmp ${DIR}openmp.c
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --library=openmp ${DIR}openmp.c
|
|
|
|
|
2019-08-24 10:17:23 +02:00
|
|
|
# python.c
|
|
|
|
set +e
|
|
|
|
pkg-config --version
|
|
|
|
PKGCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $PKGCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "pkg-config needed to retrieve Python 3 configuration is not available, skipping syntax check."
|
|
|
|
else
|
|
|
|
set +e
|
|
|
|
PYTHON3CONFIG=$(pkg-config --cflags python3)
|
|
|
|
PYTHON3CONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $PYTHON3CONFIG_RETURNCODE -eq 0 ]; then
|
|
|
|
set +e
|
|
|
|
echo -e "#include <Python.h>" | ${CC} ${CC_OPT} ${PYTHON3CONFIG} -x c -
|
|
|
|
PYTHON3CONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $PYTHON3CONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "Python 3 not completely present or not working, skipping syntax check with ${CC}."
|
|
|
|
else
|
|
|
|
echo "Python 3 found and working, checking syntax with ${CC} now."
|
|
|
|
${CC} ${CC_OPT} ${PYTHON3CONFIG} ${DIR}python.c
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --library=python ${DIR}python.c
|
|
|
|
|
2019-08-29 11:38:21 +02:00
|
|
|
# lua.c
|
|
|
|
set +e
|
|
|
|
pkg-config --version
|
|
|
|
PKGCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $PKGCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "pkg-config needed to retrieve Lua configuration is not available, skipping syntax check."
|
|
|
|
else
|
|
|
|
set +e
|
|
|
|
LUACONFIG=$(pkg-config --cflags lua-5.3)
|
|
|
|
LUACONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $LUACONFIG_RETURNCODE -eq 0 ]; then
|
|
|
|
set +e
|
|
|
|
echo -e "#include <lua.h>" | ${CC} ${CC_OPT} ${LUACONFIG} -x c -
|
|
|
|
LUACONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $LUACONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "Lua not completely present or not working, skipping syntax check with ${CC}."
|
|
|
|
else
|
|
|
|
echo "Lua found and working, checking syntax with ${CC} now."
|
|
|
|
${CC} ${CC_OPT} ${LUACONFIG} ${DIR}lua.c
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --library=lua ${DIR}lua.c
|
|
|
|
|
2019-08-29 15:11:59 +02:00
|
|
|
# libcurl.c
|
|
|
|
set +e
|
|
|
|
pkg-config --version
|
|
|
|
PKGCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $PKGCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "pkg-config needed to retrieve libcurl configuration is not available, skipping syntax check."
|
|
|
|
else
|
|
|
|
set +e
|
|
|
|
LIBCURLCONFIG=$(pkg-config --cflags libcurl)
|
|
|
|
LIBCURLCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $LIBCURLCONFIG_RETURNCODE -eq 0 ]; then
|
|
|
|
set +e
|
|
|
|
echo -e "#include <curl/curl.h>" | ${CC} ${CC_OPT} ${LIBCURLCONFIG} -x c -
|
|
|
|
LIBCURLCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $LIBCURLCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "libcurl not completely present or not working, skipping syntax check with ${CC}."
|
|
|
|
else
|
|
|
|
echo "libcurl found and working, checking syntax with ${CC} now."
|
|
|
|
${CC} ${CC_OPT} ${LIBCURLCONFIG} ${DIR}libcurl.c
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --library=libcurl ${DIR}libcurl.c
|
|
|
|
|
2019-09-19 08:48:04 +02:00
|
|
|
# cairo.c
|
|
|
|
set +e
|
|
|
|
pkg-config --version
|
|
|
|
PKGCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $PKGCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "pkg-config needed to retrieve cairo configuration is not available, skipping syntax check."
|
|
|
|
else
|
|
|
|
set +e
|
|
|
|
CAIROCONFIG=$(pkg-config --cflags cairo)
|
|
|
|
CAIROCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $CAIROCONFIG_RETURNCODE -eq 0 ]; then
|
|
|
|
set +e
|
|
|
|
echo -e "#include <cairo.h>" | ${CC} ${CC_OPT} ${CAIROCONFIG} -x c -
|
|
|
|
CAIROCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $CAIROCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "cairo not completely present or not working, skipping syntax check with ${CC}."
|
|
|
|
else
|
|
|
|
echo "cairo found and working, checking syntax with ${CC} now."
|
|
|
|
${CC} ${CC_OPT} ${CAIROCONFIG} ${DIR}cairo.c
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --library=cairo ${DIR}cairo.c
|
|
|
|
|
2019-10-09 19:53:58 +02:00
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --library=googletest ${DIR}googletest.cpp
|
|
|
|
|
2019-10-17 21:29:32 +02:00
|
|
|
# kde.cpp
|
|
|
|
set +e
|
|
|
|
set -x
|
|
|
|
KDECONFIG=$(kde4-config --path include)
|
|
|
|
KDECONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $KDECONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "kde4-config does not work, skipping syntax check."
|
|
|
|
else
|
|
|
|
set +e
|
|
|
|
KDEQTCONFIG=$(pkg-config --cflags QtCore)
|
|
|
|
KDEQTCONFIG_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $KDEQTCONFIG_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "Suitable Qt not present, Qt is necessary for KDE. Skipping syntax check."
|
|
|
|
else
|
|
|
|
set +e
|
|
|
|
echo -e "#include <KDE/KGlobal>\n" | ${CXX} ${CXX_OPT} -I${KDECONFIG} ${KDEQTCONFIG} -x c++ -
|
|
|
|
KDECHECK_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $KDECHECK_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "KDE headers not completely present or not working, skipping syntax check with ${CXX}."
|
|
|
|
else
|
|
|
|
echo "KDE found, checking syntax with ${CXX} now."
|
|
|
|
${CXX} ${CXX_OPT} -I${KDECONFIG} ${KDEQTCONFIG} ${DIR}kde.cpp
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
${CPPCHECK} ${CPPCHECK_OPT} --inconclusive --library=kde ${DIR}kde.cpp
|
|
|
|
|
2018-07-12 08:40:26 +02:00
|
|
|
# Check the syntax of the defines in the configuration files
|
2019-01-23 09:40:43 +01:00
|
|
|
set +e
|
|
|
|
xmlstarlet --version
|
|
|
|
XMLSTARLET_RETURNCODE=$?
|
|
|
|
set -e
|
|
|
|
if [ $XMLSTARLET_RETURNCODE -ne 0 ]; then
|
|
|
|
echo "xmlstarlet needed to extract defines, skipping defines check."
|
|
|
|
else
|
|
|
|
for configfile in ${CFG}*.cfg; do
|
|
|
|
echo "Checking defines in $configfile"
|
|
|
|
# Disable debugging output temporarily since there could be many defines
|
|
|
|
set +x
|
|
|
|
# XMLStarlet returns 1 if no elements were found which is no problem here
|
|
|
|
set +e
|
|
|
|
EXTRACTED_DEFINES=$(xmlstarlet sel -t -m '//define' -c . -n <$configfile)
|
|
|
|
set -e
|
|
|
|
EXTRACTED_DEFINES=$(echo "$EXTRACTED_DEFINES" | sed 's/<define name="/#define /g' | sed 's/" value="/ /g' | sed 's/"\/>//g')
|
|
|
|
echo "$EXTRACTED_DEFINES" | gcc -fsyntax-only -xc -Werror -
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo SUCCESS
|