1#
2# Makefile for LCOV
3#
4# Make targets:
5#   - install:   install LCOV tools and man pages on the system
6#   - uninstall: remove tools and man pages from the system
7#   - dist:      create files required for distribution, i.e. the lcov.tar.gz
8#                and the lcov.rpm file. Just make sure to adjust the VERSION
9#                and RELEASE variables below - both version and date strings
10#                will be updated in all necessary files.
11#   - clean:     remove all generated files
12#
13
14VERSION := $(shell bin/get_version.sh --version)
15RELEASE := $(shell bin/get_version.sh --release)
16FULL    := $(shell bin/get_version.sh --full)
17
18# Set this variable during 'make install' to specify the Perl interpreter used in
19# installed scripts, or leave empty to keep the current interpreter.
20export LCOV_PERL_PATH := /usr/bin/perl
21
22PREFIX  := /usr/local
23
24CFG_DIR := $(PREFIX)/etc
25BIN_DIR := $(PREFIX)/bin
26MAN_DIR := $(PREFIX)/man
27TMP_DIR := $(shell mktemp -d)
28FILES   := $(wildcard bin/*) $(wildcard man/*) README Makefile \
29	   $(wildcard rpm/*) lcovrc
30
31.PHONY: all info clean install uninstall rpms test
32
33all: info
34
35info:
36	@echo "Available make targets:"
37	@echo "  install   : install binaries and man pages in DESTDIR (default /)"
38	@echo "  uninstall : delete binaries and man pages from DESTDIR (default /)"
39	@echo "  dist      : create packages (RPM, tarball) ready for distribution"
40	@echo "  check     : perform self-tests"
41
42clean:
43	rm -f lcov-*.tar.gz
44	rm -f lcov-*.rpm
45	make -C example clean
46	make -C tests -s clean
47
48install:
49	bin/install.sh bin/lcov $(DESTDIR)$(BIN_DIR)/lcov -m 755
50	bin/install.sh bin/genhtml $(DESTDIR)$(BIN_DIR)/genhtml -m 755
51	bin/install.sh bin/geninfo $(DESTDIR)$(BIN_DIR)/geninfo -m 755
52	bin/install.sh bin/genpng $(DESTDIR)$(BIN_DIR)/genpng -m 755
53	bin/install.sh bin/gendesc $(DESTDIR)$(BIN_DIR)/gendesc -m 755
54	bin/install.sh man/lcov.1 $(DESTDIR)$(MAN_DIR)/man1/lcov.1 -m 644
55	bin/install.sh man/genhtml.1 $(DESTDIR)$(MAN_DIR)/man1/genhtml.1 -m 644
56	bin/install.sh man/geninfo.1 $(DESTDIR)$(MAN_DIR)/man1/geninfo.1 -m 644
57	bin/install.sh man/genpng.1 $(DESTDIR)$(MAN_DIR)/man1/genpng.1 -m 644
58	bin/install.sh man/gendesc.1 $(DESTDIR)$(MAN_DIR)/man1/gendesc.1 -m 644
59	bin/install.sh man/lcovrc.5 $(DESTDIR)$(MAN_DIR)/man5/lcovrc.5 -m 644
60	bin/install.sh lcovrc $(DESTDIR)$(CFG_DIR)/lcovrc -m 644
61	bin/updateversion.pl $(DESTDIR)$(BIN_DIR)/lcov $(VERSION) $(RELEASE) $(FULL)
62	bin/updateversion.pl $(DESTDIR)$(BIN_DIR)/genhtml $(VERSION) $(RELEASE) $(FULL)
63	bin/updateversion.pl $(DESTDIR)$(BIN_DIR)/geninfo $(VERSION) $(RELEASE) $(FULL)
64	bin/updateversion.pl $(DESTDIR)$(BIN_DIR)/genpng $(VERSION) $(RELEASE) $(FULL)
65	bin/updateversion.pl $(DESTDIR)$(BIN_DIR)/gendesc $(VERSION) $(RELEASE) $(FULL)
66	bin/updateversion.pl $(DESTDIR)$(MAN_DIR)/man1/lcov.1 $(VERSION) $(RELEASE) $(FULL)
67	bin/updateversion.pl $(DESTDIR)$(MAN_DIR)/man1/genhtml.1 $(VERSION) $(RELEASE) $(FULL)
68	bin/updateversion.pl $(DESTDIR)$(MAN_DIR)/man1/geninfo.1 $(VERSION) $(RELEASE) $(FULL)
69	bin/updateversion.pl $(DESTDIR)$(MAN_DIR)/man1/genpng.1 $(VERSION) $(RELEASE) $(FULL)
70	bin/updateversion.pl $(DESTDIR)$(MAN_DIR)/man1/gendesc.1 $(VERSION) $(RELEASE) $(FULL)
71	bin/updateversion.pl $(DESTDIR)$(MAN_DIR)/man5/lcovrc.5 $(VERSION) $(RELEASE) $(FULL)
72
73uninstall:
74	bin/install.sh --uninstall bin/lcov $(DESTDIR)$(BIN_DIR)/lcov
75	bin/install.sh --uninstall bin/genhtml $(DESTDIR)$(BIN_DIR)/genhtml
76	bin/install.sh --uninstall bin/geninfo $(DESTDIR)$(BIN_DIR)/geninfo
77	bin/install.sh --uninstall bin/genpng $(DESTDIR)$(BIN_DIR)/genpng
78	bin/install.sh --uninstall bin/gendesc $(DESTDIR)$(BIN_DIR)/gendesc
79	bin/install.sh --uninstall man/lcov.1 $(DESTDIR)$(MAN_DIR)/man1/lcov.1
80	bin/install.sh --uninstall man/genhtml.1 $(DESTDIR)$(MAN_DIR)/man1/genhtml.1
81	bin/install.sh --uninstall man/geninfo.1 $(DESTDIR)$(MAN_DIR)/man1/geninfo.1
82	bin/install.sh --uninstall man/genpng.1 $(DESTDIR)$(MAN_DIR)/man1/genpng.1
83	bin/install.sh --uninstall man/gendesc.1 $(DESTDIR)$(MAN_DIR)/man1/gendesc.1
84	bin/install.sh --uninstall man/lcovrc.5 $(DESTDIR)$(MAN_DIR)/man5/lcovrc.5
85	bin/install.sh --uninstall lcovrc $(DESTDIR)$(CFG_DIR)/lcovrc
86
87dist: lcov-$(VERSION).tar.gz lcov-$(VERSION)-$(RELEASE).noarch.rpm \
88      lcov-$(VERSION)-$(RELEASE).src.rpm
89
90lcov-$(VERSION).tar.gz: $(FILES)
91	mkdir $(TMP_DIR)/lcov-$(VERSION)
92	cp -r * $(TMP_DIR)/lcov-$(VERSION)
93	bin/copy_dates.sh . $(TMP_DIR)/lcov-$(VERSION)
94	make -C $(TMP_DIR)/lcov-$(VERSION) clean
95	bin/updateversion.pl $(TMP_DIR)/lcov-$(VERSION) $(VERSION) $(RELEASE) $(FULL)
96	bin/get_changes.sh > $(TMP_DIR)/lcov-$(VERSION)/CHANGES
97	cd $(TMP_DIR) ; \
98	tar cfz $(TMP_DIR)/lcov-$(VERSION).tar.gz lcov-$(VERSION) \
99	    --owner root --group root
100	mv $(TMP_DIR)/lcov-$(VERSION).tar.gz .
101	rm -rf $(TMP_DIR)
102
103lcov-$(VERSION)-$(RELEASE).noarch.rpm: rpms
104lcov-$(VERSION)-$(RELEASE).src.rpm: rpms
105
106rpms: lcov-$(VERSION).tar.gz
107	mkdir $(TMP_DIR)
108	mkdir $(TMP_DIR)/BUILD
109	mkdir $(TMP_DIR)/RPMS
110	mkdir $(TMP_DIR)/SOURCES
111	mkdir $(TMP_DIR)/SRPMS
112	cp lcov-$(VERSION).tar.gz $(TMP_DIR)/SOURCES
113	cd $(TMP_DIR)/BUILD ; \
114	tar xfz $(TMP_DIR)/SOURCES/lcov-$(VERSION).tar.gz \
115		lcov-$(VERSION)/rpm/lcov.spec
116	rpmbuild --define '_topdir $(TMP_DIR)' --define '_buildhost localhost' \
117		 --undefine vendor --undefine packager \
118		 -ba $(TMP_DIR)/BUILD/lcov-$(VERSION)/rpm/lcov.spec
119	mv $(TMP_DIR)/RPMS/noarch/lcov-$(VERSION)-$(RELEASE).noarch.rpm .
120	mv $(TMP_DIR)/SRPMS/lcov-$(VERSION)-$(RELEASE).src.rpm .
121	rm -rf $(TMP_DIR)
122
123test: check
124
125check:
126	@make -s -C tests check
127