From 9dbd2debda252dd9c69f55877e0b5ea017583b8e Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Sun, 4 Oct 2015 00:03:24 +0200 Subject: [PATCH 1/9] fix --coverage build option; building with it now creates .gcda files that gcov can use --- SConstruct | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SConstruct b/SConstruct index a8f7ce8..b7549cd 100644 --- a/SConstruct +++ b/SConstruct @@ -91,9 +91,9 @@ else: env = opt if GetOption("coverage"): - env.Append(CFLAGS=["-fprofile-arcs", "-ftest-coverage"], - CXXFLAGS=["-fprofile-arcs", "-ftest-coverage"], - LDFLAGS=["-fprofile-arcs", "-ftest-coverage"], + env.Append(CFLAGS=["--coverage"], + CXXFLAGS=["--coverage"], + LDFLAGS=["--coverage"], LIBS=['gcov']) env["CC"] = os.getenv("CC") or env["CC"] From 10997afcbb0fffc6a1ddfee767b9d6095d8e7176 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Sun, 4 Oct 2015 00:42:28 +0200 Subject: [PATCH 2/9] adding code coverage to automation --- .travis.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8973c57..eb7a752 100644 --- a/.travis.yml +++ b/.travis.yml @@ -92,6 +92,8 @@ matrix: env: BINDINGS=cpp CC=clang before_install: - sudo apt-get update -qq + - sudo apt-get install lcov + - gem install coveralls-lcov - if [ "$BINDINGS" != "none" ]; then sudo apt-get install -qq swig; fi - if [ "$BINDINGS" == "perl" ]; then sudo add-apt-repository ppa:dns/irc -y; sudo apt-get update -qq; sudo apt-get install -qq swig=2.0.8-1irc1~12.04; fi - if [ "$BINDINGS" == "python" ]; then sudo apt-get install -qq python-dev; fi @@ -100,11 +102,13 @@ install: true before_script: - if [ "$BINDINGS" == "php" ]; then phpenv config-add src/bindings/php/hammer.ini; fi script: - - scons bindings=$BINDINGS test + - scons bindings=$BINDINGS test --coverage +after_success: + - lcov --capture --directory build/opt/src --output-file coverage.info + - coveralls-lcov coverage.info notifications: irc: channels: - "irc.upstandinghackers.com#hammer" use_notice: true skip_join: true - From ff65571474ea6bbff8791b873df2321d60e73412 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Sun, 4 Oct 2015 01:43:44 +0200 Subject: [PATCH 3/9] this is a dirty hack, but it solves the Program builder not honoring LDFLAGS --- .travis.yml | 26 +++++++++++++------------- SConstruct | 3 +-- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index eb7a752..fe473d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ matrix: - compiler: clang language: ruby rvm: ruby-1.9.3-p484 - env: BINDINGS=ruby CC=clang + env: BINDINGS=ruby CC="clang --coverage" - compiler: gcc language: ruby rvm: ruby-2.0.0-p353 @@ -21,7 +21,7 @@ matrix: - compiler: clang language: ruby rvm: ruby-2.0.0-p353 - env: BINDINGS=ruby CC=clang + env: BINDINGS=ruby CC="clang --coverage" - compiler: gcc language: ruby rvm: ruby-2.1.0 @@ -29,7 +29,7 @@ matrix: - compiler: clang language: ruby rvm: ruby-2.1.0 - env: BINDINGS=ruby CC=clang + env: BINDINGS=ruby CC="clang --coverage" - compiler: gcc language: python python: "2.7" @@ -37,7 +37,7 @@ matrix: - compiler: clang language: python python: "2.7" - env: BINDINGS=python CC=clang + env: BINDINGS=python CC="clang --coverage" - compiler: gcc language: perl perl: "5.18" @@ -45,7 +45,7 @@ matrix: - compiler: clang language: perl perl: "5.18" - env: BINDINGS=perl CC=clang + env: BINDINGS=perl CC="clang --coverage" - compiler: gcc language: perl perl: "5.14" @@ -53,7 +53,7 @@ matrix: - compiler: clang language: perl perl: "5.14" - env: BINDINGS=perl CC=clang + env: BINDINGS=perl CC="clang --coverage" - compiler: gcc language: perl perl: "5.10" @@ -61,7 +61,7 @@ matrix: - compiler: clang language: perl perl: "5.10" - env: BINDINGS=perl CC=clang + env: BINDINGS=perl CC="clang --coverage" - compiler: gcc language: php php: "5.5" @@ -69,7 +69,7 @@ matrix: - compiler: clang language: php php: "5.5" - env: BINDINGS=php CC=clang + env: BINDINGS=php CC="clang --coverage" - compiler: gcc language: php php: "5.4" @@ -77,19 +77,19 @@ matrix: - compiler: clang language: php php: "5.4" - env: BINDINGS=php CC=clang + env: BINDINGS=php CC="clang --coverage" - compiler: gcc language: dotnet env: BINDINGS=dotnet - compiler: clang language: dotnet - env: BINDINGS=dotnet CC=clang + env: BINDINGS=dotnet CC="clang --coverage" - compiler: gcc language: cpp env: BINDINGS=cpp - compiler: gcc language: cpp - env: BINDINGS=cpp CC=clang + env: BINDINGS=cpp CC="clang --coverage" before_install: - sudo apt-get update -qq - sudo apt-get install lcov @@ -102,9 +102,9 @@ install: true before_script: - if [ "$BINDINGS" == "php" ]; then phpenv config-add src/bindings/php/hammer.ini; fi script: - - scons bindings=$BINDINGS test --coverage + - scons bindings=$BINDINGS test --variant=debug --coverage after_success: - - lcov --capture --directory build/opt/src --output-file coverage.info + - if [ "$CC" == "clang --coverage" ]; then llvm-cov gcov -o coverage.info build/debug/src/test_suite.gcda; else lcov --capture --directory build/debug/src --output-file coverage.info; fi - coveralls-lcov coverage.info notifications: irc: diff --git a/SConstruct b/SConstruct index b7549cd..05596f3 100644 --- a/SConstruct +++ b/SConstruct @@ -93,8 +93,7 @@ else: if GetOption("coverage"): env.Append(CFLAGS=["--coverage"], CXXFLAGS=["--coverage"], - LDFLAGS=["--coverage"], - LIBS=['gcov']) + LDFLAGS=["--coverage"]) env["CC"] = os.getenv("CC") or env["CC"] env["CXX"] = os.getenv("CXX") or env["CXX"] From 2b637946fac73db06e830497413d2fd3bb161497 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Sun, 4 Oct 2015 01:49:39 +0200 Subject: [PATCH 4/9] nope, guess we need -lgcov after all --- SConstruct | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SConstruct b/SConstruct index 05596f3..b7549cd 100644 --- a/SConstruct +++ b/SConstruct @@ -93,7 +93,8 @@ else: if GetOption("coverage"): env.Append(CFLAGS=["--coverage"], CXXFLAGS=["--coverage"], - LDFLAGS=["--coverage"]) + LDFLAGS=["--coverage"], + LIBS=['gcov']) env["CC"] = os.getenv("CC") or env["CC"] env["CXX"] = os.getenv("CXX") or env["CXX"] From 2915a8f174e6fd71b748266d239d01116c14d090 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Sun, 4 Oct 2015 01:52:26 +0200 Subject: [PATCH 5/9] dirty hack continues --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index fe473d6..ff04ef5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -91,6 +91,7 @@ matrix: language: cpp env: BINDINGS=cpp CC="clang --coverage" before_install: + - if [ "$CC" == "clang" ]; then export CC="clang --coverage" - sudo apt-get update -qq - sudo apt-get install lcov - gem install coveralls-lcov From d8d106d03552c15ac60e3d96e934ea353bac1661 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Sun, 4 Oct 2015 01:55:11 +0200 Subject: [PATCH 6/9] typo --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ff04ef5..c0990f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -91,7 +91,7 @@ matrix: language: cpp env: BINDINGS=cpp CC="clang --coverage" before_install: - - if [ "$CC" == "clang" ]; then export CC="clang --coverage" + - if [ "$CC" == "clang" ]; then export CC="clang --coverage"; fi - sudo apt-get update -qq - sudo apt-get install lcov - gem install coveralls-lcov From d809bbd1a905206207334d70cbb82013988b0669 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Sun, 4 Oct 2015 01:59:20 +0200 Subject: [PATCH 7/9] slightly less ugly --- .travis.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index c0990f7..d74cf61 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ matrix: - compiler: clang language: ruby rvm: ruby-1.9.3-p484 - env: BINDINGS=ruby CC="clang --coverage" + env: BINDINGS=ruby CC=clang - compiler: gcc language: ruby rvm: ruby-2.0.0-p353 @@ -21,7 +21,7 @@ matrix: - compiler: clang language: ruby rvm: ruby-2.0.0-p353 - env: BINDINGS=ruby CC="clang --coverage" + env: BINDINGS=ruby CC=clang - compiler: gcc language: ruby rvm: ruby-2.1.0 @@ -29,7 +29,7 @@ matrix: - compiler: clang language: ruby rvm: ruby-2.1.0 - env: BINDINGS=ruby CC="clang --coverage" + env: BINDINGS=ruby CC=clang - compiler: gcc language: python python: "2.7" @@ -37,7 +37,7 @@ matrix: - compiler: clang language: python python: "2.7" - env: BINDINGS=python CC="clang --coverage" + env: BINDINGS=python CC=clang - compiler: gcc language: perl perl: "5.18" @@ -45,7 +45,7 @@ matrix: - compiler: clang language: perl perl: "5.18" - env: BINDINGS=perl CC="clang --coverage" + env: BINDINGS=perl CC=clang - compiler: gcc language: perl perl: "5.14" @@ -53,7 +53,7 @@ matrix: - compiler: clang language: perl perl: "5.14" - env: BINDINGS=perl CC="clang --coverage" + env: BINDINGS=perl CC=clang - compiler: gcc language: perl perl: "5.10" @@ -61,7 +61,7 @@ matrix: - compiler: clang language: perl perl: "5.10" - env: BINDINGS=perl CC="clang --coverage" + env: BINDINGS=perl CC=clang - compiler: gcc language: php php: "5.5" @@ -69,7 +69,7 @@ matrix: - compiler: clang language: php php: "5.5" - env: BINDINGS=php CC="clang --coverage" + env: BINDINGS=php CC=clang - compiler: gcc language: php php: "5.4" @@ -77,19 +77,19 @@ matrix: - compiler: clang language: php php: "5.4" - env: BINDINGS=php CC="clang --coverage" + env: BINDINGS=php CC=clang - compiler: gcc language: dotnet env: BINDINGS=dotnet - compiler: clang language: dotnet - env: BINDINGS=dotnet CC="clang --coverage" + env: BINDINGS=dotnet CC=clang - compiler: gcc language: cpp env: BINDINGS=cpp - compiler: gcc language: cpp - env: BINDINGS=cpp CC="clang --coverage" + env: BINDINGS=cpp CC=clang before_install: - if [ "$CC" == "clang" ]; then export CC="clang --coverage"; fi - sudo apt-get update -qq From 4fed9327a4b87c8871677ca5b5892263022a914b Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Sun, 4 Oct 2015 02:53:54 +0200 Subject: [PATCH 8/9] 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 d74cf61..05206db 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 b7549cd..bb2bb85 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 0351e1b..dd6b616 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) From 9235bf793c4fbffd7423e4d1a8005e2a47dc7970 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Sun, 4 Oct 2015 03:36:02 +0200 Subject: [PATCH 9/9] Only do coverage with the C builds; otherwise the bindings tests don't work --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 05206db..b533da3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -101,10 +101,10 @@ before_install: install: true before_script: - if [ "$BINDINGS" == "php" ]; then phpenv config-add src/bindings/php/hammer.ini; fi -script: - - scons bindings=$BINDINGS test --variant=debug --coverage +script: + - if [ "$BINDINGS" == "none" ]; then scons test --variant=debug --coverage; else scons bindings=$BINDINGS test; fi after_success: - - if [ "$CC" == "clang --coverage" ]; then llvm-cov gcov -o coverage.info build/debug/src/test_suite.gcda; else lcov --capture --directory build/debug/src --output-file coverage.info; fi + - if [ "$BINDINGS" == "none" ]; then if [ "$CC" == "clang" ]; then llvm-cov gcov -o coverage.info build/debug/src/test_suite.gcda; else lcov --capture --directory build/debug/src --output-file coverage.info; fi; fi - coveralls-lcov coverage.info notifications: irc: