summaryrefslogtreecommitdiff
path: root/debian/rules
blob: 2354ea97334bd08ccfa153f748b757e769ad2db8 (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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
#!/usr/bin/make -f
# debian/rules file - for dnsmasq.
# Copyright 2001-2020 by Simon Kelley
# Based on the sample in the debian hello package which carries the following:
# Copyright 1994,1995 by Ian Jackson.
# I hereby give you perpetual unlimited permission to copy,
# modify and relicense this file, provided that you do not remove
# my name from the file itself.  (I assert my moral right of
# paternity under the Copyright, Designs and Patents Act 1988.)
# This file may have to be extensively modified

package=dnsmasq-base

dpkg_buildflags := DEB_BUILD_MAINT_OPTIONS="hardening=+all,+pie,+bindnow" dpkg-buildflags

CFLAGS = $(shell $(dpkg_buildflags) --get CFLAGS)
CFLAGS += $(shell $(dpkg_buildflags) --get CPPFLAGS)
CFLAGS += -Wall -W

LDFLAGS = $(shell $(dpkg_buildflags) --get LDFLAGS)

DEB_COPTS = $(COPTS)

TARGET = install-i18n

DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
BUILD_DATE := $(shell dpkg-parsechangelog --show-field Date)

ifeq ($(origin CC),default)
     CC = $(DEB_HOST_GNU_TYPE)-gcc
endif

# Support non-cross-builds on systems without gnu-triplet-binaries for pkg-config.
ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
     PKG_CONFIG=pkg-config
else
     PKG_CONFIG=$(DEB_HOST_GNU_TYPE)-pkg-config	
endif

# Force package version based on git tags.
ifneq (,$(filter gitversion,$(DEB_BUILD_OPTIONS)))
     PACKAGE_VERSION = $(shell bld/get-version `pwd` |  sed 's/test/~&/; s/[a-z]/~&/;  s/-/./g; s/$$/-1/; s/^/-v/';)
endif

ifeq (,$(filter nodbus,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DHAVE_DBUS
endif

ifeq (,$(filter noidn, $(DEB_BUILD_OPTIONS)))
	DEB_COPTS += -DHAVE_LIBIDN2
endif

ifeq (,$(filter nonftset, $(DEB_BUILD_OPTIONS)))
	DEB_COPTS += -DHAVE_NFTSET
endif

ifeq (,$(filter noconntrack,$(DEB_BUILD_OPTIONS)))
ifeq ($(DEB_HOST_ARCH_OS),linux)
     DEB_COPTS += -DHAVE_CONNTRACK
endif
endif

ifneq (,$(filter noipset,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DNO_IPSET
endif

ifneq (,$(filter nodhcp6,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DNO_DHCP6
endif

ifneq (,$(filter noipv6,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DNO_IPV6
endif

ifneq (,$(filter notftp,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DNO_TFTP
endif

ifneq (,$(filter nodhcp,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DNO_DHCP
endif

ifneq (,$(filter noscript,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DNO_SCRIPT
endif

ifneq (,$(filter nortc,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DHAVE_BROKEN_RTC
endif

ifneq (,$(filter noi18n,$(DEB_BUILD_OPTIONS)))
     TARGET = install
endif

ifneq (,$(filter uselua,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DHAVE_LUASCRIPT
endif

ifeq (,$(filter nodnssec,$(DEB_BUILD_OPTIONS)))
     DEB_COPTS += -DHAVE_DNSSEC
endif

ifeq ($(DEB_HOST_ARCH_OS),kfreebsd)
     # For strlcpy in FreeBSD
     LIBS += $(shell ${PKG_CONFIG} --libs libbsd-overlay)
     CFLAGS += $(shell ${PKG_CONFIG} --cflags libbsd-overlay)
endif

define build_tree
	rm -rf $1
	install -m 755 \
		-d $1/DEBIAN \
		-d $1/etc/dbus-1/system.d \
	        -d $1/usr/share/doc/$(package) \
		-d $1/usr/share/doc/$(package)/examples \
		-d $1/usr/share/$(package) \
	        -d $1/var/lib/misc

endef

define add_docs
# Need to remove paypal links in Debian Package for policy reasons.
	sed -e /\<H2\>Donations/Q -e /icon.png/d doc.html -e /favicon.ico/d >$1/usr/share/doc/$(package)/doc.html
	echo "</BODY>" >>$1/usr/share/doc/$(package)/doc.html 
	install -m 644 setup.html $1/usr/share/doc/$(package)/.
	install -m 644 dnsmasq.conf.example $1/usr/share/doc/$(package)/examples/.
	install -m 644 FAQ $1/usr/share/doc/$(package)/.
	gzip -9n $1/usr/share/doc/$(package)/FAQ
	install -m 644 CHANGELOG $1/usr/share/doc/$(package)/changelog
	gzip -9n $1/usr/share/doc/$(package)/changelog
	install -m 644 CHANGELOG.archive $1/usr/share/doc/$(package)/changelog.archive
	gzip -9n $1/usr/share/doc/$(package)/changelog.archive
	install -m 644 dbus/DBus-interface $1/usr/share/doc/$(package)/.
	gzip -9n $1/usr/share/doc/$(package)/DBus-interface	
	install -m 644 debian/systemd_howto $1/usr/share/doc/$(package)/.
	gzip -9n $1/usr/share/doc/$(package)/systemd_howto
	gzip -9n $1/usr/share/man/man8/dnsmasq.8
	for f in $1/usr/share/man/*; do \
		if [ -f $$f/man8/dnsmasq.8 ]; then \
                       gzip -9n $$f/man8/dnsmasq.8 ; \
                fi \
	done
endef

define add_files
	install -m 644 trust-anchors.conf $1/usr/share/$(package)/.
	install -m 644 debian/dnsmasq-base.conffiles $1/DEBIAN/conffiles
	install -m 755 debian/dnsmasq-base.postinst $1/DEBIAN/postinst
	install -m 755 debian/dnsmasq-base.postrm  $1/DEBIAN/postrm
	install -m 644 debian/changelog $1/usr/share/doc/$(package)/changelog.Debian
	gzip -9n $1/usr/share/doc/$(package)/changelog.Debian
	install -m 644 debian/readme $1/usr/share/doc/$(package)/README.Debian
	install -m 644 debian/copyright $1/usr/share/doc/$(package)/copyright
	install -m 644 debian/dbus.conf $1/etc/dbus-1/system.d/dnsmasq.conf
endef

clean:
	$(checkdir)
	make BUILDDIR=debian/build/no-lua clean
	make BUILDDIR=debian/build/lua clean
	make -C contrib/lease-tools clean
	rm -rf debian/build debian/trees debian/*~ debian/files debian/substvars debian/utils-substvars

binary-indep:	checkroot
	$(checkdir)
	rm -rf debian/trees/daemon
	install -m 755 \
	        -d debian/trees/daemon/DEBIAN \
		-d debian/trees/daemon/usr/share/doc/dnsmasq \
	        -d debian/trees/daemon/etc/init.d \
		-d debian/trees/daemon/etc/dnsmasq.d \
	        -d debian/trees/daemon/etc/resolvconf/update.d \
		-d debian/trees/daemon/usr/lib/resolvconf/dpkg-event.d \
		-d debian/trees/daemon/usr/share/dnsmasq \
		-d debian/trees/daemon/usr/share/doc/dnsmasq \
	        -d debian/trees/daemon/etc/default \
		-d debian/trees/daemon/lib/systemd/system \
		-d debian/trees/daemon/usr/lib/tmpfiles.d \
                -d debian/trees/daemon/etc/insserv.conf.d
	install -m 644 debian/conffiles debian/trees/daemon/DEBIAN
	install -m 755 debian/postinst debian/postrm debian/preinst debian/prerm debian/trees/daemon/DEBIAN
	if ! dpkg-vendor --derives-from Ubuntu; then \
                rm -f debian/dnsmasq.postinst.debhelper debian/dnsmasq.postrm.debhelper; \
	      	dh_runit -pdnsmasq -Pdebian/trees/daemon; \
		cat debian/dnsmasq.postinst.debhelper >> debian/trees/daemon/DEBIAN/postinst; \
		cat debian/dnsmasq.postrm.debhelper   >> debian/trees/daemon/DEBIAN/postrm; \
		cd debian/trees/daemon && find etc/sv -type f -printf '/%p\n' >>DEBIAN/conffiles; \
	fi
	install -m 755 debian/init debian/trees/daemon/etc/init.d/dnsmasq
	install -m 755 debian/resolvconf debian/trees/daemon/etc/resolvconf/update.d/dnsmasq
	install -m 755 debian/resolvconf-package debian/trees/daemon/usr/lib/resolvconf/dpkg-event.d/dnsmasq
	install -m 644 debian/installed-marker debian/trees/daemon/usr/share/dnsmasq
	install -m 644 debian/default debian/trees/daemon/etc/default/dnsmasq
	install -m 644 dnsmasq.conf.example debian/trees/daemon/etc/dnsmasq.conf
	install -m 644 debian/readme.dnsmasq.d debian/trees/daemon/etc/dnsmasq.d/README
	install -m 644 debian/systemd.service debian/trees/daemon/lib/systemd/system/dnsmasq.service
	install -m 644 debian/systemd@.service debian/trees/daemon/lib/systemd/system/dnsmasq@.service
	install -m 644 debian/tmpfiles.conf debian/trees/daemon/usr/lib/tmpfiles.d/dnsmasq.conf
	install -m 644 debian/insserv debian/trees/daemon/etc/insserv.conf.d/dnsmasq
	install -m 644 debian/copyright debian/trees/daemon/usr/share/doc/dnsmasq/copyright
	install -m 644 debian/changelog debian/trees/daemon/usr/share/doc/dnsmasq/changelog.Debian
	gzip -9n debian/trees/daemon/usr/share/doc/dnsmasq/changelog.Debian
	cd debian/trees/daemon && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | LC_ALL=C sort -z | xargs -r0 md5sum > DEBIAN/md5sums	
	dpkg-gencontrol $(PACKAGE_VERSION) -Tdebian/dnsmasq.substvars -pdnsmasq -Pdebian/trees/daemon
	find debian/trees/daemon -depth -newermt '$(BUILD_DATE)' -print0 | xargs -0r touch --no-dereference --date='$(BUILD_DATE)'
	chown -R root.root debian/trees/daemon
	chmod -R g-ws debian/trees/daemon
	dpkg --build debian/trees/daemon ..

binary-arch:	checkroot 
	$(call build_tree,debian/trees/base)
	make $(TARGET) BUILDDIR=debian/build/no-lua PREFIX=/usr DESTDIR=`pwd`/debian/trees/base CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" COPTS="$(DEB_COPTS)" CC=$(CC) PKG_CONFIG=$(PKG_CONFIG) LIBS="$(LIBS)"
ifeq (,$(findstring nodoc,$(DEB_BUILD_OPTIONS)))
	$(call add_docs,debian/trees/base)
else	
	rm -rf debian/trees/base/usr/share/man
endif
	$(call add_files,debian/trees/base)
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	$(DEB_HOST_GNU_TYPE)-strip -R .note -R .comment debian/trees/base/usr/sbin/dnsmasq
endif
	cd debian/trees/base && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | LC_ALL=C sort -z | xargs -r0 md5sum > DEBIAN/md5sums
	dpkg-shlibdeps --warnings=1 debian/trees/base/usr/sbin/dnsmasq
	dpkg-gencontrol $(PACKAGE_VERSION) -pdnsmasq-base -Pdebian/trees/base
	find debian/trees/base -depth -newermt '$(BUILD_DATE)' -print0 | xargs -0r touch --no-dereference --date='$(BUILD_DATE)'
	chown -R root.root debian/trees/base
	chmod -R g-ws debian/trees/base 
	dpkg --build debian/trees/base ..

	$(call build_tree,debian/trees/lua-base)
	make $(TARGET) BUILDDIR=debian/build/lua PREFIX=/usr DESTDIR=`pwd`/debian/trees/lua-base CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" COPTS="-DHAVE_LUASCRIPT $(DEB_COPTS)" CC=$(CC) PKG_CONFIG=$(PKG_CONFIG) LIBS="$(LIBS)"
ifeq (,$(findstring nodoc,$(DEB_BUILD_OPTIONS)))
	$(call add_docs,debian/trees/lua-base)
else	
	rm -rf debian/trees/lua-base/usr/share/man
endif
	$(call add_files,debian/trees/lua-base)
	install -m 755 -d debian/trees/lua-base/usr/share/lintian/overrides
	install -m 644 debian/lintian-override debian/trees/lua-base/usr/share/lintian/overrides/dnsmasq-base-lua
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	$(DEB_HOST_GNU_TYPE)-strip -R .note -R .comment debian/trees/lua-base/usr/sbin/dnsmasq
endif
	ln -s $(package) debian/trees/lua-base/usr/share/doc/dnsmasq-base-lua
	cd debian/trees/lua-base && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | LC_ALL=C sort -z | xargs -r0 md5sum > DEBIAN/md5sums
	dpkg-shlibdeps --warnings=1 debian/trees/lua-base/usr/sbin/dnsmasq
	dpkg-gencontrol $(PACKAGE_VERSION) -pdnsmasq-base-lua -Pdebian/trees/lua-base
	find debian/trees/lua-base -depth -newermt '$(BUILD_DATE)' -print0 | xargs -0r touch --no-dereference --date='$(BUILD_DATE)'
	chown -R root.root debian/trees/lua-base
	chmod -R g-ws debian/trees/lua-base 
	dpkg --build debian/trees/lua-base ..


ifeq ($(DEB_HOST_ARCH_OS),linux)
	rm -rf debian/trees/utils
	install -m 755 -d debian/trees/utils/DEBIAN \
	               -d debian/trees/utils/usr/bin \
                       -d debian/trees/utils/usr/share/doc/dnsmasq-utils
ifeq (,$(findstring nodoc,$(DEB_BUILD_OPTIONS)))
	install -m 755 -d debian/trees/utils/usr/share/man/man1
endif
	make -C contrib/lease-tools PREFIX=/usr DESTDIR=`pwd`/debian/trees/utils CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" COPTS="$(DEB_COPTS)" CC=$(CC) PKG_CONFIG=$(PKG_CONFIG) LIBS="$(LIBS)"
	install -m 755 contrib/lease-tools/dhcp_release debian/trees/utils/usr/bin/dhcp_release
	install -m 755 contrib/lease-tools/dhcp_release6 debian/trees/utils/usr/bin/dhcp_release6
	install -m 755 contrib/lease-tools/dhcp_lease_time debian/trees/utils/usr/bin/dhcp_lease_time
ifeq (,$(findstring nodoc,$(DEB_BUILD_OPTIONS)))
	install -m 644 contrib/lease-tools/dhcp_release.1 debian/trees/utils/usr/share/man/man1/dhcp_release.1
	gzip -9n debian/trees/utils/usr/share/man/man1/dhcp_release.1
	install -m 644 contrib/lease-tools/dhcp_release6.1 debian/trees/utils/usr/share/man/man1/dhcp_release6.1
	gzip -9n debian/trees/utils/usr/share/man/man1/dhcp_release6.1
	install -m 644 contrib/lease-tools/dhcp_lease_time.1 debian/trees/utils/usr/share/man/man1/dhcp_lease_time.1
	gzip -9n debian/trees/utils/usr/share/man/man1/dhcp_lease_time.1
endif
	install -m 644 debian/copyright debian/trees/utils/usr/share/doc/dnsmasq-utils/copyright
	install -m 644 debian/changelog debian/trees/utils/usr/share/doc/dnsmasq-utils/changelog.Debian
	gzip -9n debian/trees/utils/usr/share/doc/dnsmasq-utils/changelog.Debian
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	$(DEB_HOST_GNU_TYPE)-strip -R .note -R .comment debian/trees/utils/usr/bin/dhcp_release
	$(DEB_HOST_GNU_TYPE)-strip -R .note -R .comment debian/trees/utils/usr/bin/dhcp_release6
	$(DEB_HOST_GNU_TYPE)-strip -R .note -R .comment debian/trees/utils/usr/bin/dhcp_lease_time
endif	
	cd debian/trees/utils && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | LC_ALL=C sort -z | xargs -r0 md5sum > DEBIAN/md5sums
	dpkg-shlibdeps -Tdebian/utils-substvars debian/trees/utils/usr/bin/dhcp_release debian/trees/utils/usr/bin/dhcp_release6 debian/trees/utils/usr/bin/dhcp_lease_time 
	dpkg-gencontrol $(PACKAGE_VERSION) -Tdebian/utils-substvars -pdnsmasq-utils -Pdebian/trees/utils
	find debian/trees/utils -depth -newermt '$(BUILD_DATE)' -print0 | xargs -0r touch --no-dereference --date='$(BUILD_DATE)'
	chown -R root.root debian/trees/utils
	chmod -R g-ws debian/trees/utils 
	dpkg --build debian/trees/utils ..
endif

define checkdir
	test -f Makefile -a -f debian/rules
endef

# Below here is fairly generic really

binary:		binary-arch binary-indep

build:		
build-arch:
build-indep:

checkroot:
	test root = "`whoami`"

.PHONY: binary binary-arch binary-indep clean checkroot