From 409aa533dafc548623cf0225b355c6b9a33b89d8 Mon Sep 17 00:00:00 2001 From: Francesco Giacomini Date: Thu, 25 Jun 2020 15:38:45 +0200 Subject: [PATCH 1/5] Ninja <1.10 doesn't support Fortran --- CMakeLists.txt | 4 ++-- src/CMakeLists.txt | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d594c4e..f2f03c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,9 +24,9 @@ endif (POLICY CMP0042) # project information # if (${CMAKE_MAJOR_VERSION} EQUAL 3) - project("test" LANGUAGES C Fortran) + project("test" LANGUAGES C) else () - project("test" C Fortran) + project("test" C) endif () diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 50e4dff..38bbe3f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,4 +13,3 @@ add_subdirectory(libfoo) add_subdirectory(bar) add_subdirectory(libheader) -add_subdirectory(fortran) From cee7f2c9f86fd79eafd2a8c460a93ec802e0b974 Mon Sep 17 00:00:00 2001 From: Francesco Giacomini Date: Thu, 25 Jun 2020 15:39:08 +0200 Subject: [PATCH 2/5] Ignore build directories and VSCode stuff --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a15c88 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build* +.vscode \ No newline at end of file From 273dc1eb428bc55990953f57a4f3a427cfbc4dc1 Mon Sep 17 00:00:00 2001 From: Francesco Giacomini Date: Thu, 25 Jun 2020 17:04:31 +0200 Subject: [PATCH 3/5] Add a simple test script Test the combinations (ninja,make) x (gcov,lcov) --- run_test.sh | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 run_test.sh diff --git a/run_test.sh b/run_test.sh new file mode 100755 index 0000000..25f325c --- /dev/null +++ b/run_test.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +echo "\n\e[31;7mNinja + Gcov\e[0m" +mkdir build-ninja-gcov +cd build-ninja-gcov +cmake -Wno-dev -DENABLE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug -G Ninja .. +ninja -v -j 1 +ninja -v -j 1 test +ninja -v -j 1 gcov +cd - + +echo "\n\e[31;7mNinja + Lcov\e[0m" +mkdir build-ninja-lcov +cd build-ninja-lcov +cmake -Wno-dev -DENABLE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug -G Ninja .. +ninja -v -j 1 +ninja -v -j 1 test +ninja -v -j 1 lcov +cd - + +echo "\n\e[31;7mMake + Gcov\e[0m" +mkdir build-make-gcov +cd build-make-gcov +cmake -Wno-dev -DENABLE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug -G "Unix Makefiles" .. +make +make test +make gcov +cd - + +echo "\n\e[31;7mMake + Lcov\e[0m" +mkdir build-make-lcov +cd build-make-lcov +cmake -Wno-dev -DENABLE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug -G "Unix Makefiles" .. +make +make test +make lcov +cd - From bef45536d971a3c384f777b7cd6acf8cbdaf2410 Mon Sep 17 00:00:00 2001 From: Francesco Giacomini Date: Thu, 25 Jun 2020 17:09:17 +0200 Subject: [PATCH 4/5] Run gcov from the cmake binary dir If run from the *current* binary dir, gcov gives errors such as: Cannot open source file ../src/libfoo/foo.c The gcov files are all created in the same dir, but the -p option should guarantee there are no name clashes --- cmake/FindGcov.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindGcov.cmake b/cmake/FindGcov.cmake index db03e53..d6eb1e6 100644 --- a/cmake/FindGcov.cmake +++ b/cmake/FindGcov.cmake @@ -147,7 +147,7 @@ function (add_gcov_target TNAME) add_custom_command(OUTPUT ${TDIR}/${FILE}.gcov COMMAND ${GCOV_ENV} ${GCOV_BIN} -p ${TDIR}/${FILE}.gcno > ${NULL_DEVICE} DEPENDS ${TNAME} ${TDIR}/${FILE}.gcno - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) list(APPEND BUFFER ${TDIR}/${FILE}.gcov) From 115a51dab22f991977af603edba137dc3866156d Mon Sep 17 00:00:00 2001 From: Francesco Giacomini Date: Thu, 25 Jun 2020 17:13:32 +0200 Subject: [PATCH 5/5] Don't use --base-directory and --no-external flags This seems the only way to make all the ninja/make combinations happy. If this is really the case, some cleanup is needed. External code should be excluded through LCOV_REMOVE_PATTERNS. --- cmake/FindLcov.cmake | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cmake/FindLcov.cmake b/cmake/FindLcov.cmake index 244d1c2..0e99440 100644 --- a/cmake/FindLcov.cmake +++ b/cmake/FindLcov.cmake @@ -70,7 +70,7 @@ if (GENINFO_BIN AND NOT DEFINED GENINFO_EXTERN_FLAG) execute_process(COMMAND ${GENINFO_BIN} --help OUTPUT_VARIABLE GENINFO_HELP) string(REGEX MATCH "external" GENINFO_RES "${GENINFO_HELP}") if (GENINFO_RES) - set(FLAG "--no-external") + #set(FLAG "--no-external") endif () set(GENINFO_EXTERN_FLAG "${FLAG}" @@ -91,6 +91,8 @@ file(MAKE_DIRECTORY ${LCOV_DATA_PATH_CAPTURE}) set(LCOV_REMOVE_PATTERNS "") +#set(BASE_DIRECTORY "--base-directory ${PROJECT_SOURCE_DIR}") + # This function will merge lcov files to a single target file. Additional lcov # flags may be set with setting LCOV_EXTRA_FLAGS before calling this function. function (lcov_merge_files OUTFILE ...) @@ -107,7 +109,7 @@ function (lcov_merge_files OUTFILE ...) add_custom_command(OUTPUT "${OUTFILE}" COMMAND ${LCOV_BIN} --quiet -a ${OUTFILE}.raw --output-file ${OUTFILE} - --base-directory ${PROJECT_SOURCE_DIR} ${LCOV_EXTRA_FLAGS} + ${BASE_DIRECTORY} ${LCOV_EXTRA_FLAGS} COMMAND ${LCOV_BIN} --quiet -r ${OUTFILE} ${LCOV_REMOVE_PATTERNS} --output-file ${OUTFILE} ${LCOV_EXTRA_FLAGS} DEPENDS ${OUTFILE}.raw @@ -169,7 +171,7 @@ function (lcov_capture_initial_tgt TNAME) list(APPEND GENINFO_FILES ${OUTFILE}) add_custom_command(OUTPUT ${OUTFILE} COMMAND ${GCOV_ENV} ${GENINFO_BIN} - --quiet --base-directory ${PROJECT_SOURCE_DIR} --initial + --quiet ${BASE_DIRECTORY} --initial --gcov-tool ${GCOV_BIN} --output-filename ${OUTFILE} ${GENINFO_EXTERN_FLAG} ${TDIR}/${FILE}.gcno DEPENDS ${TNAME} @@ -269,8 +271,8 @@ function (lcov_capture_tgt TNAME) add_custom_command(OUTPUT ${OUTFILE} COMMAND test -s "${TDIR}/${FILE}.gcda" - && ${GCOV_ENV} ${GENINFO_BIN} --quiet --base-directory - ${PROJECT_SOURCE_DIR} --gcov-tool ${GCOV_BIN} + && ${GCOV_ENV} ${GENINFO_BIN} --quiet ${BASE_DIRECTORY} + --gcov-tool ${GCOV_BIN} --output-filename ${OUTFILE} ${GENINFO_EXTERN_FLAG} ${TDIR}/${FILE}.gcda || cp ${OUTFILE}.init ${OUTFILE}