1 # 2 # Makefile for the LCOV example program. 3 # 4 # Make targets: 5 # - example: compile the example program 6 # - output: run test cases on example program and create HTML output 7 # - clean: clean up directory 8 # 9 10 CC := gcc 11 CFLAGS := -Wall -I. -fprofile-arcs -ftest-coverage 12 13 LCOV := ../bin/lcov 14 GENHTML := ../bin/genhtml 15 GENDESC := ../bin/gendesc 16 GENPNG := ../bin/genpng 17 18 # Depending on the presence of the GD.pm perl module, we can use the 19 # special option '--frames' for genhtml 20 USE_GENPNG := $(shell $(GENPNG) --help >/dev/null 2>/dev/null; echo $$?) 21 22 ifeq ($(USE_GENPNG),0) 23 FRAMES := --frames 24 else 25 FRAMES := 26 endif 27 28 .PHONY: clean output test_noargs test_2_to_2000 test_overflow 29 30 all: output 31 32 example: example.o iterate.o gauss.o 33 $(CC) example.o iterate.o gauss.o -o example -lgcov 34 35 example.o: example.c iterate.h gauss.h 36 $(CC) $(CFLAGS) -c example.c -o example.o 37 38 iterate.o: methods/iterate.c iterate.h 39 $(CC) $(CFLAGS) -c methods/iterate.c -o iterate.o 40 41 gauss.o: methods/gauss.c gauss.h 42 $(CC) $(CFLAGS) -c methods/gauss.c -o gauss.o 43 44 output: example descriptions test_noargs test_2_to_2000 test_overflow 45 @echo 46 @echo '*' 47 @echo '* Generating HTML output' 48 @echo '*' 49 @echo 50 $(GENHTML) trace_noargs.info trace_args.info trace_overflow.info \ 51 --output-directory output --title "Basic example" \ 52 --show-details --description-file descriptions $(FRAMES) \ 53 --legend 54 @echo 55 @echo '*' 56 @echo '* See '`pwd`/output/index.html 57 @echo '*' 58 @echo 59 60 descriptions: descriptions.txt 61 $(GENDESC) descriptions.txt -o descriptions 62 63 all_tests: example test_noargs test_2_to_2000 test_overflow 64 65 test_noargs: 66 @echo 67 @echo '*' 68 @echo '* Test case 1: running ./example without parameters' 69 @echo '*' 70 @echo 71 $(LCOV) --zerocounters --directory . 72 ./example 73 $(LCOV) --capture --directory . --output-file trace_noargs.info --test-name test_noargs --no-external 74 75 test_2_to_2000: 76 @echo 77 @echo '*' 78 @echo '* Test case 2: running ./example 2 2000' 79 @echo '*' 80 @echo 81 $(LCOV) --zerocounters --directory . 82 ./example 2 2000 83 $(LCOV) --capture --directory . --output-file trace_args.info --test-name test_2_to_2000 --no-external 84 85 test_overflow: 86 @echo 87 @echo '*' 88 @echo '* Test case 3: running ./example 0 100000 (causes an overflow)' 89 @echo '*' 90 @echo 91 $(LCOV) --zerocounters --directory . 92 ./example 0 100000 || true 93 $(LCOV) --capture --directory . --output-file trace_overflow.info --test-name "test_overflow" --no-external 94 95 clean: 96 rm -rf *.o *.bb *.bbg *.da *.gcno *.gcda *.info output example \ 97 descriptions 98 99