summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: 76036b7c17f363fbccb16510537e489bca50859c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
PERL ?= perl
PO4A ?= po4a
POD2MAN ?= pod2man

# List of files of dh_* commands. Sorted for debhelper man page.
COMMANDS=$(shell find . -maxdepth 1 -type f -perm /100 -name "dh_*" -printf "%f\n" | grep -v '~$$' | LC_ALL=C sort)
MANPAGES=$(COMMANDS:=.1) dh.1

# Find deprecated commands by looking at their synopsis.
DEPRECATED=$(shell egrep -l '^dh_.* - .*deprecated' $(COMMANDS))

ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    TEST_JOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
else
    TEST_JOBS = 1
endif

# Figure out the `current debhelper version.
VERSION=$(shell dpkg-parsechangelog -SVersion)

# This generates a list of synopses of debhelper commands, and substitutes
# it in to the #LIST# line on the man page fed to it on stdin. Must be passed
# parameters of all the executables or pod files to get the synopses from.
# For correct conversion of pod tags (like S< >) #LIST# must be substituted in
# the pod file and not in the troff file.
MAKEMANLIST=$(PERL) -e ' \
		undef $$/; \
		foreach (@ARGV) { \
		        open (IN, $$_) or die "$$_: $$!"; \
		        $$file=<IN>; \
		        close IN; \
		        if ($$file=~m/=head1 .*?\n\n(.*?) - (.*?)\n\n/s) { \
				my $$item="=item $$1(1)\n\n$$2\n\n"; \
				if (" $(DEPRECATED) " !~ / $$1 /) { \
			                $$list.=$$item; \
				} \
				else { \
			                $$list_deprecated.=$$item; \
				} \
		        } \
		} \
		END { \
			my $$recommended_compat = q{$(VERSION)}; \
			$$recommended_compat =~ s{^\d+\K(?:\D.*|\..*)?}{}; \
			while (<STDIN>) { \
				s/\#LIST\#/$$list/g; \
				s/\#LIST_DEPRECATED\#/$$list_deprecated/g; \
				s/\#RECOMMENDED_COMPAT\#/$$recommended_compat/g; \
				print; \
			}; \
		}'

PERLLIBDIR=$(shell $(PERL) -MConfig -e 'print $$Config{vendorlib}')/Debian/Debhelper

PREFIX=/usr

POD2MAN_FLAGS=--utf8 -c Debhelper -r "$(VERSION)"

ifneq ($(USE_NLS),no)
# l10n to be built is determined from .po files
LANGS?=$(notdir $(basename $(wildcard man/po4a/po/*.po)))
LANG_TARGETS = $(foreach L,$(LANGS),translated-$(L)-stamp)
else
LANGS=
LANG_TARGETS =
endif

build: $(LANG_TARGETS) version debhelper.7 debhelper-compat-upgrade-checklist.7 debhelper-obsolete-compat.7 $(MANPAGES)


po4a-stamp:
	$(PO4A) --previous -L UTF-8 man/po4a/po4a.cfg
	touch $@

translated-%-stamp: po4a-stamp
	set -e; \
	lang=$* ; \
	dir=man/$$lang; \
	for file in $$dir/dh*.pod; do \
		prog=`basename $$file | sed 's/.pod//'`; \
		$(POD2MAN) $(POD2MAN_FLAGS) $$file $$prog.$$lang.1; \
	done; \
	if [ -e $$dir/debhelper.pod ]; then \
		cat $$dir/debhelper.pod | \
			$(MAKEMANLIST) `find $$dir -type f -maxdepth 1 -name "dh_*.pod" | LC_ALL=C sort` | \
			$(POD2MAN) $(POD2MAN_FLAGS) --name="debhelper" --section=7 > debhelper.$$lang.7; \
	fi; \
	if [ -e $$dir/debhelper-compat-upgrade-checklist.pod ]; then \
		$(POD2MAN) $(POD2MAN_FLAGS) --name="debhelper" --section=7 $$dir/debhelper-compat-upgrade-checklist.pod > debhelper-compat-upgrade-checklist.$$lang.7; \
	fi ; \
	if [ -e $$dir/debhelper-obsolete-compat.pod ]; then \
		$(POD2MAN) $(POD2MAN_FLAGS) --name="debhelper" --section=7 $$dir/debhelper-obsolete-compat.pod > debhelper-obsolete-compat.$$lang.7; \
	fi
	touch $@

version:
	printf "package Debian::Debhelper::Dh_Version;\n\$$version='$(VERSION)';\n1" > \
		lib/Debian/Debhelper/Dh_Version.pm

dh_%.1: dh_%
	$(POD2MAN) $(POD2MAN_FLAGS) $^ $@

dh.1: dh
	$(POD2MAN) $(POD2MAN_FLAGS) $^ $@

debhelper.7: debhelper.pod
	cat debhelper.pod | \
		$(MAKEMANLIST) $(COMMANDS) | \
		$(POD2MAN) $(POD2MAN_FLAGS) --name="debhelper" --section=7  > $@

%.7: %.pod
	$(POD2MAN) $(POD2MAN_FLAGS) --name="debhelper" --section=7 $^ > $@

clean:
	rm -f *-stamp *.1 *.7 lib/Debian/Debhelper/Dh_Version.pm
ifneq ($(USE_NLS),no)
	$(PO4A) --previous --rm-translations --rm-backups man/po4a/po4a.cfg
endif
	for lang in $(LANGS); do \
		if [ -e man/$$lang ]; then rmdir man/$$lang; fi; \
	done;

install:
	install -d $(DESTDIR)$(PREFIX)/bin \
		$(DESTDIR)$(PREFIX)/share/debhelper/autoscripts \
		$(DESTDIR)$(PERLLIBDIR)/Sequence \
		$(DESTDIR)$(PERLLIBDIR)/Buildsystem \
		$(DESTDIR)$(PERLLIBDIR)/DH
	install dh $(COMMANDS) $(DESTDIR)$(PREFIX)/bin
	install -m 0644 autoscripts/* $(DESTDIR)$(PREFIX)/share/debhelper/autoscripts
	install -m 0644 lib/Debian/Debhelper/*.pm $(DESTDIR)$(PERLLIBDIR)
	[ "$(PREFIX)" = /usr ] || \
		sed -i '/$$prefix=/s@/usr@$(PREFIX)@g' $(DESTDIR)$(PERLLIBDIR)/Dh_Lib.pm
	if [ "$(VERSION)" ]; then \
		MV=$$(echo "$(VERSION)" | $(PERL) -ne 'print $$1 if /^(\d+)[~.]/;') ; \
		sed -i "/constant HIGHEST_STABLE_COMPAT_LEVEL =>/s@=>.*;@=> $${MV};@g" $(DESTDIR)$(PERLLIBDIR)/Dh_Lib.pm ; \
	fi
	install -m 0644 lib/Debian/Debhelper/Sequence/*.pm $(DESTDIR)$(PERLLIBDIR)/Sequence
	install -m 0644 lib/Debian/Debhelper/Buildsystem/*.pm $(DESTDIR)$(PERLLIBDIR)/Buildsystem
	install -m 0644 lib/Debian/Debhelper/DH/*.pm $(DESTDIR)$(PERLLIBDIR)/DH

test: version
	MAKEFLAGS= prove -lrj$(TEST_JOBS) --timer t