15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Makefile for the LCOV example program.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Make targets:
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#   - example: compile the example program
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#   - output:  run test cases on example program and create HTML output
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#   - clean:   clean up directory
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CC      := gcc
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CFLAGS  := -Wall -I. -fprofile-arcs -ftest-coverage
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LCOV    := ../bin/lcov
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GENHTML := ../bin/genhtml
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GENDESC := ../bin/gendesc
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GENPNG  := ../bin/genpng
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Depending on the presence of the GD.pm perl module, we can use the
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# special option '--frames' for genhtml
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)USE_GENPNG := $(shell $(GENPNG) --help >/dev/null 2>/dev/null; echo $$?)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ifeq ($(USE_GENPNG),0)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRAMES := --frames
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRAMES :=
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endif
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).PHONY: clean output test_noargs test_2_to_2000 test_overflow
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)all: output
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)example: example.o iterate.o gauss.o
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$(CC) example.o iterate.o gauss.o -o example -lgcov
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)example.o: example.c iterate.h gauss.h
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$(CC) $(CFLAGS) -c example.c -o example.o
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)iterate.o: methods/iterate.c iterate.h
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$(CC) $(CFLAGS) -c methods/iterate.c -o iterate.o
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gauss.o: methods/gauss.c gauss.h
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$(CC) $(CFLAGS) -c methods/gauss.c -o gauss.o
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)output: example descriptions test_noargs test_2_to_2000 test_overflow
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '* Generating HTML output'
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$(GENHTML) trace_noargs.info trace_args.info trace_overflow.info \
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		   --output-directory output --title "Basic example" \
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		   --show-details --description-file descriptions $(FRAMES) \
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		   --legend
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '* See '`pwd`/output/index.html
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)descriptions: descriptions.txt
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$(GENDESC) descriptions.txt -o descriptions
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)all_tests: example test_noargs test_2_to_2000 test_overflow
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test_noargs:
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '* Test case 1: running ./example without parameters'
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$(LCOV) --zerocounters --directory .
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	./example
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	$(LCOV) --capture --directory . --output-file trace_noargs.info --test-name test_noargs --no-external
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test_2_to_2000:
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '* Test case 2: running ./example 2 2000'
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$(LCOV) --zerocounters --directory .
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	./example 2 2000
833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	$(LCOV) --capture --directory . --output-file trace_args.info --test-name test_2_to_2000 --no-external
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test_overflow:
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '* Test case 3: running ./example 0 100000 (causes an overflow)'
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo '*'
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@echo
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$(LCOV) --zerocounters --directory .
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	./example 0 100000 || true
933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	$(LCOV) --capture --directory . --output-file trace_overflow.info --test-name "test_overflow" --no-external
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)clean:
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	rm -rf *.o *.bb *.bbg *.da *.gcno *.gcda *.info output example \
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	descriptions
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
99