#!/usr/bin/env bash set -e which lcov !1 >/dev/null !2 > !1 if test $Status != 0 { echo "lcov is required to generate the coverage report" exit 1 } if [[ -z $MAKE ]] { global MAKE := 'make' } if [[ -z $GTEST_FILTER ]] { global GTEST_FILTER := ''*'' } pushd build # Reconfigure with gcov support. env CXXFLAGS="-pg --coverage" CFLAGS="-pg --coverage" LDFLAGS="-lgcov" ../configure --disable-optimize # Ensure no old data is in the tree. find -name '*'.gcda | xargs rm find -name '*'.gcno | xargs rm # Generate gcov output. $(MAKE) lcov --directory . --zerocounters $(MAKE) check GTEST_FILTER=$(GTEST_FILTER) # Generate report. lcov --directory . -c -o mesos_test.info # Remove output for external libraries and generated files. global LCOV_FILTERS := '"/usr/include/*'" global LCOV_FILTERS := '" /usr/lib/jvm/*'" global LCOV_FILTERS := '" mesos/build/*'" global LCOV_FILTERS := '" build/3rdparty/setuptools-*'" global LCOV_FILTERS := '" build/3rdparty/leveldb*'" global LCOV_FILTERS := '" build/3rdparty/zookeeper-*'" global LCOV_FILTERS := '" */boost-*'" global LCOV_FILTERS := '" */elfio-*'" global LCOV_FILTERS := '" */glog-*'" global LCOV_FILTERS := '" */gmock-*'" global LCOV_FILTERS := '" */picojson-*'" global LCOV_FILTERS := '" */protobuf-*'" for f in [$LCOV_FILTERS] { lcov --remove mesos_test.info $f -o mesos_test.info } # Generate HTML report. genhtml -o ./test_coverage -t "mesos test coverage" --num-spaces 2 mesos_test.info popd (CommandList children: [ (C {(set)} {(-e)}) (SimpleCommand words: [{(which)} {(lcov)}] redirects: [ (Redir op_id:Redir_Great fd:1 arg_word:{(/dev/null)} spids:[13]) (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[16]) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(KW_Bang "!") (Lit_Other "=")} {(0)} {(Lit_Other "]")} ) terminator: ) ] action: [ (C {(echo)} {(DQ ("lcov is required to generate the coverage report"))}) (C {(exit)} {(1)}) ] spids: [-1 33] ) ] spids: [-1 47] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{($ VSub_Name "$MAKE")})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:MAKE) op:Equal rhs:{(make)} spids:[64])] spids: [64] ) ] spids: [-1 61] ) ] spids: [-1 67] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{($ VSub_Name "$GTEST_FILTER")})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GTEST_FILTER) op: Equal rhs: {(SQ <"*">)} spids: [84] ) ] spids: [84] ) ] spids: [-1 81] ) ] spids: [-1 89] ) (C {(pushd)} {(build)}) (SimpleCommand words: [{(../configure)} {(--disable-optimize)}] more_env: [ (env_pair name:CXXFLAGS val:{(DQ ("-pg --coverage"))} spids:[100]) (env_pair name:CFLAGS val:{(DQ ("-pg --coverage"))} spids:[105]) (env_pair name:LDFLAGS val:{(DQ (-lgcov))} spids:[110]) ] ) (Pipeline children: [ (C {(find)} {(-name)} {(EscapedLiteralPart token:) (.gcda)}) (C {(xargs)} {(rm)}) ] negated: False ) (Pipeline children: [ (C {(find)} {(-name)} {(EscapedLiteralPart token:) (.gcno)}) (C {(xargs)} {(rm)}) ] negated: False ) (C {(${ VSub_Name MAKE)}) (C {(lcov)} {(--directory)} {(.)} {(--zerocounters)}) (C {(${ VSub_Name MAKE)} {(check)} {(Lit_VarLike "GTEST_FILTER=") (${ VSub_Name GTEST_FILTER)}) (C {(lcov)} {(--directory)} {(.)} {(-c)} {(-o)} {(mesos_test.info)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: Equal rhs: {(DQ ("/usr/include/*"))} spids: [197] ) ] spids: [197] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" /usr/lib/jvm/*"))} spids: [202] ) ] spids: [202] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" mesos/build/*"))} spids: [207] ) ] spids: [207] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" build/3rdparty/setuptools-*"))} spids: [212] ) ] spids: [212] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" build/3rdparty/leveldb*"))} spids: [217] ) ] spids: [217] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" build/3rdparty/zookeeper-*"))} spids: [222] ) ] spids: [222] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" */boost-*"))} spids: [227] ) ] spids: [227] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" */elfio-*"))} spids: [232] ) ] spids: [232] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" */glog-*"))} spids: [237] ) ] spids: [237] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" */gmock-*"))} spids: [242] ) ] spids: [242] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" */picojson-*"))} spids: [247] ) ] spids: [247] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LCOV_FILTERS) op: PlusEqual rhs: {(DQ (" */protobuf-*"))} spids: [252] ) ] spids: [252] ) (ForEach iter_name: f iter_words: [{($ VSub_Name "$LCOV_FILTERS")}] do_arg_iter: False body: (DoGroup children: [ (C {(lcov)} {(--remove)} {(mesos_test.info)} {($ VSub_Name "$f")} {(-o)} {(mesos_test.info)}) ] spids: [267 282] ) spids: [263 265] ) (C {(genhtml)} {(-o)} {(./test_coverage)} {(-t)} {(DQ ("mesos test coverage"))} {(--num-spaces)} {(2)} {(mesos_test.info)} ) (C {(popd)}) ] )