From 4fed9327a4b87c8871677ca5b5892263022a914b Mon Sep 17 00:00:00 2001
From: "Meredith L. Patterson" <mlp@thesmartpolitenerd.com>
Date: Sun, 4 Oct 2015 02:53:54 +0200
Subject: [PATCH] now both clang and gcc have coverage without any dumb hacks

---
 .travis.yml    |  1 -
 SConstruct     | 13 ++++++++-----
 src/SConscript |  2 +-
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index d74cf612..05206db5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -91,7 +91,6 @@ matrix:
       language: cpp
       env: BINDINGS=cpp CC=clang
 before_install:
-  - if [ "$CC" == "clang" ]; then export CC="clang --coverage"; fi
   - sudo apt-get update -qq
   - sudo apt-get install lcov
   - gem install coveralls-lcov
diff --git a/SConstruct b/SConstruct
index b7549cd8..bb2bb858 100644
--- a/SConstruct
+++ b/SConstruct
@@ -90,14 +90,17 @@ if GetOption("variant") == 'debug':
 else:
     env = opt
 
+env["CC"] = os.getenv("CC") or env["CC"]
+env["CXX"] = os.getenv("CXX") or env["CXX"]
+
 if GetOption("coverage"):
     env.Append(CFLAGS=["--coverage"],
                CXXFLAGS=["--coverage"],
-               LDFLAGS=["--coverage"],
-               LIBS=['gcov'])
-
-env["CC"] = os.getenv("CC") or env["CC"]
-env["CXX"] = os.getenv("CXX") or env["CXX"]
+               LDFLAGS=["--coverage"])
+    if env["CC"] == "gcc":
+        env.Append(LIBS=['gcov'])
+    else:
+        env.ParseConfig('llvm-config --ldflags')
 
 if os.getenv("CC") == "clang" or env['PLATFORM'] == 'darwin':
     env.Replace(CC="clang",
diff --git a/src/SConscript b/src/SConscript
index 0351e1ba..dd6b6162 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -89,7 +89,7 @@ env.Install("$pkgconfigpath", "../../../libhammer.pc")
 testenv = env.Clone()
 testenv.ParseConfig('pkg-config --cflags --libs glib-2.0')
 testenv.Append(LIBS=['hammer'], LIBPATH=['.'])
-ctestexec = testenv.Program('test_suite', ctests + ['test_suite.c'])
+ctestexec = testenv.Program('test_suite', ctests + ['test_suite.c'], LINKFLAGS="--coverage" if testenv.GetOption("coverage") else None)
 ctest = Alias('testc', [ctestexec], "".join(["env LD_LIBRARY_PATH=", os.path.dirname(ctestexec[0].path), " ", ctestexec[0].path]))
 AlwaysBuild(ctest)
 testruns.append(ctest)
-- 
GitLab