You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.0 KiB
163 lines
5.0 KiB
#!/bin/bash
|
|
#
|
|
# @author Guy Maurel
|
|
# @license GPL v2+
|
|
#
|
|
# 30. 4. 2018
|
|
#
|
|
# The script prepare a new version of uncrustify with the compile options:
|
|
# CMAKE_CXX_FLAGS -fprofile-arcs -ftest-coverage
|
|
# CMAKE_C_FLAGS -fprofile-arcs -ftest-coverage
|
|
# to use the facilities from gcov.
|
|
# Running uncrustify with all the test data will mark all parts of the sources
|
|
# which are used.
|
|
# The "not marked" portions, if any, should give the opportunity to prepare new
|
|
# test data to complete the whole tests.
|
|
# The results are stored in the directory ${TOTALS_DIR}
|
|
# The name of the file is ${source_file}.total
|
|
# The line(s) of code which are still not used by any of the tests cases are
|
|
# marked which the token "#####" at the beginning of the line.
|
|
# As the testing part (unc_tools.cpp, backup.cpp) are only used by a developper,
|
|
# all the lines are marked.
|
|
# Also the detect.cpp part of uncrustify is completly marked.
|
|
#
|
|
# TAKE ATTENTION:
|
|
# ===============
|
|
#
|
|
# Running the test is long. I need about 20 minutes.
|
|
# This is about 40 times so much as the ctest.
|
|
# The disk space necessary is also very big, about 3 Gbytes
|
|
# This is about 1500 times bigger as the sources.
|
|
#
|
|
SCRIPT_NAME=$0
|
|
#echo "SCRIPT_NAME="${SCRIPT_NAME}
|
|
BASE_NAME=`basename ${SCRIPT_NAME}`
|
|
DIR_NAME=`dirname ${SCRIPT_NAME}`
|
|
if [ ${DIR_NAME} != "." ] ;
|
|
then
|
|
echo "you must use the script at the directory <uncrustify_directory>/scripts"
|
|
exit
|
|
fi
|
|
cd ..
|
|
SOURCES_LIST_H=`ls -1 src/*.h | cut -b 5-`
|
|
SOURCES_LIST_CPP=`ls -1 src/*.cpp | cut -b 5-`
|
|
#
|
|
rm -rf gcov_test
|
|
mkdir gcov_test
|
|
#
|
|
cd gcov_test
|
|
# build a new uncrustify binary
|
|
cmake -D CMAKE_BUILD_TYPE=Release \
|
|
-D CMAKE_C_FLAGS="-fprofile-arcs -ftest-coverage" \
|
|
-D CMAKE_CXX_FLAGS="-fprofile-arcs -ftest-coverage" ..
|
|
make
|
|
# use uncrustify without parameter
|
|
./uncrustify
|
|
#
|
|
GCNO_LIST=`ls -1 ./CMakeFiles/uncrustify.dir/src/*.gcno`
|
|
for gcno_file in ${GCNO_LIST}
|
|
do
|
|
echo "gcno_file=${gcno_file}"
|
|
gcno_base_name=`basename ${gcno_file} .gcno`
|
|
echo ${gcno_base_name}
|
|
gcov ${gcno_file} -m
|
|
done
|
|
#
|
|
ADD_TEST_LIST="add_test_list.txt"
|
|
ADD_TEST_LIST_10="add_test_list_10.txt"
|
|
ADD_TEST_LIST_NUMBER="add_test_list_number.txt"
|
|
ADD_TEST_LIST_AWK="../scripts/add_test_list.awk"
|
|
ADD_TEST_LIST_CMD="add_test_list.sh"
|
|
#
|
|
# prepare a list of all tests
|
|
grep add_test ../build/tests/CTestTestfile.cmake > ${ADD_TEST_LIST}
|
|
cut -b 10- < ${ADD_TEST_LIST} > ${ADD_TEST_LIST_10}
|
|
cut --delimiter=" " --fields=1 < ${ADD_TEST_LIST_10} > ${ADD_TEST_LIST_NUMBER}
|
|
#
|
|
NUMBER_LIST=`cat ${ADD_TEST_LIST_NUMBER}`
|
|
#
|
|
# prepare a new script file to use uncrustify with all the tests cases
|
|
gawk --file ${ADD_TEST_LIST_AWK} \
|
|
--assign sources_cpp="${SOURCES_LIST_CPP}" \
|
|
--assign sources_h="${SOURCES_LIST_H}" < ${ADD_TEST_LIST} > ${ADD_TEST_LIST_CMD}
|
|
chmod +x ${ADD_TEST_LIST_CMD}
|
|
#
|
|
# ATTENTION: this takes about 10 minutes
|
|
# use the new script file ADD_TEST_LIST_CMD to build the information
|
|
./${ADD_TEST_LIST_CMD}
|
|
#
|
|
# compare, add the counts of each lines of generated gcov-tests
|
|
COMPARE_AND_ADD="../scripts/compare_the_gcov.awk"
|
|
TOTALS_DIR="Totals"
|
|
mkdir -p Totals
|
|
#
|
|
# choose
|
|
DO_IT_WITH_TEST="yes"
|
|
#DO_IT_WITH_TEST="no"
|
|
#
|
|
# and apply
|
|
if [ ${DO_IT_WITH_TEST} == "yes" ]
|
|
then
|
|
# do it with intermediate files
|
|
# to save the last file of each test
|
|
for test_number in ${NUMBER_LIST}
|
|
do
|
|
last_test_number=${test_number}
|
|
done
|
|
#
|
|
for source_file in ${SOURCES_LIST_CPP}
|
|
do
|
|
echo "source_file is ${source_file}"
|
|
I_file="blabla"
|
|
# this file doesn' exists
|
|
for test_number in ${NUMBER_LIST}
|
|
do
|
|
echo "source_file is ${source_file}: test_number=${test_number}"
|
|
H_DIR="${source_file}_Dir"
|
|
mkdir -p ${TOTALS_DIR}/${H_DIR}
|
|
TEST_FILE=${test_number}/${source_file}.gcov
|
|
if [ -s ${TEST_FILE} ] ;
|
|
then
|
|
O_file="${TOTALS_DIR}/${H_DIR}/${test_number}"
|
|
gawk --file ${COMPARE_AND_ADD} \
|
|
--assign in_file="${I_file}" \
|
|
--assign out_file="${O_file}" < ${TEST_FILE}
|
|
I_file=${O_file}
|
|
fi
|
|
# to brake before the end
|
|
#if [ "${test_number}" == "c-sharp_10010" ]
|
|
#if [ "${test_number}" == "c_10005" ]
|
|
#if [ "${test_number}" == "cpp_60042" ]
|
|
#then
|
|
# exit
|
|
#fi
|
|
done
|
|
# save the last file of each test
|
|
cp ${O_file} ${TOTALS_DIR}/${source_file}.total
|
|
done
|
|
else
|
|
# do it directly, without intermediate files
|
|
for source_file in ${SOURCES_LIST_CPP}
|
|
do
|
|
for test_number in ${NUMBER_LIST}
|
|
do
|
|
echo "source_file is ${source_file}: test_number=${test_number}"
|
|
TEST_FILE=${test_number}/${source_file}.gcov
|
|
TOTALS_FILE=${source_file}
|
|
if [ -s ${TEST_FILE} ] ;
|
|
then
|
|
gawk --file ${COMPARE_AND_ADD} \
|
|
--assign in_file="${TOTALS_DIR}/${TOTALS_FILE}" \
|
|
--assign out_file="${TOTALS_DIR}/${TOTALS_FILE}" < ${TEST_FILE}
|
|
fi
|
|
# to brake before the end
|
|
#if [ "${test_number}" == "c-sharp_10010" ]
|
|
#if [ "${test_number}" == "c_10005" ]
|
|
#if [ "${test_number}" == "cpp_60042" ]
|
|
#then
|
|
# exit
|
|
#fi
|
|
done
|
|
done
|
|
fi
|