From c79aa66dc06a291d785eae0e29607c72f596ddf2 Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Thu, 15 Sep 2016 11:26:51 +0200
Subject: [PATCH] Added support for gcov

---
 .gitignore               |  2 ++
 configure                | 73 ++++++++++++++++++++++++++++++++++++++++
 configure.ac             |  9 +++++
 src/maketools/make.rules |  2 +-
 4 files changed, 85 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 5e74ce7dc..36f0ca346 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,8 @@
 *.dll
 *.sw?
 *.exe
+*.gcda
+*.gcno
 a.out
 makefile.dep
 /Makefile.conf
diff --git a/configure b/configure
index 8f15791a4..eda363efc 100755
--- a/configure
+++ b/configure
@@ -697,6 +697,7 @@ enable_modules
 enable_doc
 enable_pdfdoc
 enable_debug
+enable_gcov
 enable_basic_warnings
 enable_fussy
 enable_debug_glibcxx
@@ -1359,6 +1360,7 @@ Optional Features:
   --enable-doc            enable documentation, default: yes
   --enable-pdfdoc         enable pdf version of the manual, default: no
   --enable-debug          enable debugging, default: no
+  --enable-gcov           enable gcov to estimate code coverage, default: no
   --enable-basic-warnings enable basic warnings, default: yes
   --enable-fussy          enable fussy warnings, default: no
   --enable-debug-glibcxx  enable enable boundary check, default: no
@@ -2462,6 +2464,24 @@ fi
 
 
 
+gcov=
+# Check whether --enable-gcov was given.
+if test "${enable_gcov+set}" = set; then :
+  enableval=$enable_gcov; case "${enableval}" in
+             (yes) gcov=true ;;
+             (no)  gcov=false ;;
+             (*)   as_fn_error $? "wrong argument to --enable-gcov" "$LINENO" 5 ;;
+  esac
+else
+  case "no" in
+             (yes) gcov=true ;;
+             (no)  gcov=false ;;
+  esac
+
+fi
+
+
+
 basic_warnings=
 # Check whether --enable-basic-warnings was given.
 if test "${enable_basic_warnings+set}" = set; then :
@@ -4519,6 +4539,59 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
 
+if test $gcov == true
+then
+
+  save_CXXFLAGS="$CXXFLAGS"
+  CXXFLAGS="$CXXFLAGS --coverage"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts --coverage" >&5
+$as_echo_n "checking whether $CXX accepts --coverage... " >&6; }
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: not linking" >&5
+$as_echo "not linking" >&6; }; CXXFLAGS="$save_CXXFLAGS"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }; CXXFLAGS="$save_CXXFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+  CFLAGS="$CFLAGS --coverage"
+  LDFLAGS="$CFLAGS --coverage"
+  STATIC_LIBS="$STATIC_LIBS --coverage"
+fi
+
 if test $fussy == true
 then
 
diff --git a/configure.ac b/configure.ac
index 6a63de251..b9ecf5bec 100644
--- a/configure.ac
+++ b/configure.ac
@@ -162,6 +162,7 @@ AC_ARG_ENABLE([modules],
 PLUMED_CONFIG_ENABLE([doc],[doc],[documentation],[yes])
 PLUMED_CONFIG_ENABLE([pdfdoc],[pdfdoc],[pdf version of the manual],[no])
 PLUMED_CONFIG_ENABLE([debug],[debug],[debugging],[no])
+PLUMED_CONFIG_ENABLE([gcov],[gcov],[gcov to estimate code coverage],[no])
 PLUMED_CONFIG_ENABLE([basic_warnings],[basic-warnings],[basic warnings],[yes])
 PLUMED_CONFIG_ENABLE([fussy],[fussy],[fussy warnings],[no])
 PLUMED_CONFIG_ENABLE([debug_glibcxx],[debug-glibcxx],[enable boundary check],[no])
@@ -259,6 +260,14 @@ then
   PLUMED_CHECK_CXXFLAG([-g])
 fi
 
+if test $gcov == true
+then
+  PLUMED_CHECK_CXXFLAG([--coverage])
+  CFLAGS="$CFLAGS --coverage"
+  LDFLAGS="$CFLAGS --coverage"
+  STATIC_LIBS="$STATIC_LIBS --coverage"
+fi
+
 if test $fussy == true
 then
   PLUMED_CHECK_CXXFLAG([-Wextra])
diff --git a/src/maketools/make.rules b/src/maketools/make.rules
index 2d3155e89..835b9bc64 100644
--- a/src/maketools/make.rules
+++ b/src/maketools/make.rules
@@ -42,5 +42,5 @@ ifndef XLF
 endif
 
 #
-CLEANLIST=*~ *.tmp *.xxd *.o *.so *.dylib
+CLEANLIST=*~ *.tmp *.xxd *.o *.so *.dylib *.gcda *.gcno
 
-- 
GitLab