add static analysis tests

This commit is contained in:
Arne Morten Kvarving 2017-05-31 09:36:20 +02:00
parent 8b4e1a99cc
commit e6c12921da
9 changed files with 103 additions and 3 deletions

View File

@ -17,7 +17,10 @@ file(GLOB AppCommon_HEADERS *.h)
add_library(IFEMAppCommon STATIC ${AppCommon_SOURCES})
install(TARGETS IFEMAppCommon DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES ${AppCommon_HEADERS} DESTINATION include/IFEM)
install(FILES scripts/regtest.sh.in DESTINATION lib/IFEM/scripts
install(FILES scripts/regtest.sh.in
scripts/clang-check-test.sh.in
scripts/cppcheck-test.sh.in
DESTINATION lib/IFEM/scripts
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE)
@ -39,3 +42,5 @@ endif()
set(TEST_APPS ${TEST_APPS} PARENT_SCOPE)
set(UNIT_TEST_NUMBER ${UNIT_TEST_NUMBER} PARENT_SCOPE)
list(APPEND CHECK_SOURCES ${AppCommon_SOURCES})
set(CHECK_SOURCES ${CHECK_SOURCES} PARENT_SCOPE)

View File

@ -0,0 +1,23 @@
#!/bin/bash
# This script performs a single analysis using clang-check
# It is used by the 'make test' target in the buildsystems
# Usually you should use 'ctest -C clang-check' rather than calling this script directly
#
# Parameters: $1 = Application binary
# $2 = Source file to process
clangcheck_cmd=$1
source_file=$2
tmpfil=`mktemp`
$clangcheck_cmd -p @CMAKE_BINARY_DIR@ -analyze $source_file &> $tmpfil
cat $tmpfil
if test -s $tmpfil
then
rm $tmpfil
exit 1
fi
rm $tmpfil
exit 0

View File

@ -0,0 +1,29 @@
#!/bin/bash
# This script performs a single analysis using cppcheck
# It is used by the 'make test' target in the buildsystems
# Usually you should use 'ctest -C cppcheck' rather than calling this script directly
#
# Parameters: $1 = Application binary
# $2 = Source file to process
# $3..$N = include path parameters (-I dir1 -I dir2 ...)
cppcheck_cmd=$1
source_file=$2
shift 2
tmpfil=`mktemp`
$cppcheck_cmd $@ --force --enable=all --suppress=unusedFunction $source_file &> $tmpfil
nmatch=`cat $tmpfil | grep "\[.*\]" | wc -l`
nsys=`cat $tmpfil | grep "\[/usr.*\]" | wc -l`
nnone=`cat $tmpfil | grep "\[\\*]" | wc -l`
let "nval=$nmatch-$nsys-$nnone"
if test $nval -gt 0
then
cat $tmpfil
rm $tmpfil
exit 1
fi
rm $tmpfil
exit 0

View File

@ -105,6 +105,7 @@ if(LRSPLINE_FOUND OR LRSpline_FOUND)
file(GLOB LR_SRCS ${PROJECT_SOURCE_DIR}/src/ASM/LR/*.C)
list(APPEND IFEM_SRCS ${LR_SRCS})
endif()
list(APPEND CHECK_SOURCES ${IFEM_SRCS})
add_library(IFEM ${IFEM_SRCS} ${TINYXML_SRCS})
target_link_libraries(IFEM ${IFEM_DEPLIBS})
set_target_properties(IFEM PROPERTIES VERSION ${IFEM_VERSION}
@ -213,4 +214,5 @@ endif()
if(IFEM_COMMON_APP_BUILD OR IFEM_AS_SUBMODULE)
set(UNIT_TEST_NUMBER ${UNIT_TEST_NUMBER} PARENT_SCOPE)
set(TEST_APPS ${TEST_APPS} PARENT_SCOPE)
set(CHECK_SOURCES ${CHECK_SOURCES} PARENT_SCOPE)
endif()

View File

@ -155,5 +155,4 @@ if(NOT IFEM_TESTING_INCLUDED)
include(../Scripts/IFEMTesting)
endif()
set(IFEM_REGTEST_SCRIPT ${IFEM_PATH}/Apps/Common/scripts/regtest.sh.in)
include(../Scripts/IFEMDoxy)

View File

@ -262,3 +262,7 @@ endif()
if(HAS_PARENTHESES)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-parentheses")
endif()
set(IFEM_REGTEST_SCRIPT ${IFEM_PATH}/Apps/Common/scripts/regtest.sh.in)
set(IFEM_CLANG_CHECK_TEST_SCRIPT ${IFEM_PATH}/Apps/Common/scripts/clang-check-test.sh.in)
set(IFEM_CPPCHECK_TEST_SCRIPT ${IFEM_PATH}/Apps/Common/scripts/cppcheck-test.sh.in)

View File

@ -152,6 +152,32 @@ macro(add_check_target)
-DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}
-P ${IFEM_CHECKCOMMITS_SCRIPT})
endif()
foreach(dep ${IFEM_INCLUDE_DIRS} ${IFEM_INCLUDES})
list(APPEND IPATHS -I ${dep})
endforeach()
find_program(CLANGCHECK_COMMAND clang-check)
find_program(CPPCHECK_COMMAND cppcheck)
foreach(src ${CHECK_SOURCES})
get_filename_component(name ${src} NAME)
get_filename_component(EXT ${src} EXT)
if(EXT STREQUAL .C)
if(NOT IS_ABSOLUTE ${src})
set(src ${PROJECT_SOURCE_DIR}/${src})
endif()
if(CLANGCHECK_COMMAND AND CMAKE_EXPORT_COMPILE_COMMANDS)
add_test(NAME clang-check+${name}
COMMAND clang-check-test.sh ${CLANGCHECK_COMMAND} ${src}
CONFIGURATIONS analyze clang-check)
endif()
if(CPPCHECK_COMMAND)
add_test(NAME cppcheck+${name}
COMMAND cppcheck-test.sh ${CPPCHECK_COMMAND} ${src} ${IPATHS}
CONFIGURATIONS analyze cppcheck)
endif()
endif()
endforeach()
endmacro()
if(IFEM_TEST_MEMCHECK)
@ -174,3 +200,8 @@ elseif(NOT IFEM_AS_SUBMODULE AND NOT IFEM_LIBRARY_BUILD
include_directories(${GTEST_INCLUDE_DIRS})
endif()
endif()
# Generate regtest script with correct paths
configure_file(${IFEM_REGTEST_SCRIPT} regtest.sh)
configure_file(${IFEM_CLANG_CHECK_TEST_SCRIPT} clang-check-test.sh)
configure_file(${IFEM_CPPCHECK_TEST_SCRIPT} cppcheck-test.sh)

View File

@ -15,6 +15,8 @@ if(NOT IFEM_FOUND)
set(CEREAL_FOUND @CEREAL_FOUND@)
set(IFEM_REGTEST_SCRIPT ${IFEM_PATH}/scripts/regtest.sh.in)
set(IFEM_CLANG_CHECK_TEST_SCRIPT ${IFEM_PATH}/scripts/clang-check-test.sh.in)
set(IFEM_CPPCHECK_TEST_SCRIPT ${IFEM_PATH}/scripts/cppcheck-test.sh.in)
set(IFEM_CHECKCOMMITS_SCRIPT ${IFEM_PATH}/CheckCommits.cmake)
set(CMAKE_INSTALL_DOCDIR @CMAKE_INSTALL_DOCDIR@)

View File

@ -79,7 +79,12 @@ function build_module {
then
cmake --build . --target testapps -- -j$nproc
test $? -eq 0 || exit 2
ctest -T Test --test-timeout 180 --no-compress-output
if test -z "$CTEST_CONFIGURATION"
then
ctest -T Test --test-timeout 180 --no-compress-output
else
ctest -C $CTEST_CONFIGURATION -T Test --test-timeout 180 --no-compress-output
fi
$WORKSPACE/deps/IFEM/jenkins/convert.py -x $WORKSPACE/deps/IFEM/jenkins/conv.xsl -t . > testoutput.xml
else
cmake --build . --target install -- -j$nproc