xref: /unit/pkg/deb/Makefile (revision 1941:c437a6538b69)
1#!/usr/bin/make
2
3include ../../version
4
5DEFAULT_VERSION := $(NXT_VERSION)
6DEFAULT_RELEASE := 1
7
8VERSION ?= $(DEFAULT_VERSION)
9RELEASE ?= $(DEFAULT_RELEASE)
10
11PACKAGE_VENDOR = NGINX Packaging <nginx-packaging@f5.com>
12
13SRCDIR=	unit-$(VERSION)
14
15CODENAME = $(shell lsb_release -cs)
16
17BUILD_DEPENDS_unit = build-essential debhelper devscripts fakeroot libxml2-utils lintian lsb-release xsltproc libssl-dev
18BUILD_DEPENDS = $(BUILD_DEPENDS_unit)
19
20MODULES=
21
22# Ubuntu 21.04
23ifeq ($(CODENAME),hirsute)
24include Makefile.php
25include Makefile.python27
26include Makefile.python39
27include Makefile.go
28include Makefile.perl
29include Makefile.ruby
30include Makefile.jsc-common
31include Makefile.jsc11
32include Makefile.jsc15
33include Makefile.jsc16
34include Makefile.jsc17
35endif
36
37# Ubuntu 20.10
38ifeq ($(CODENAME),groovy)
39include Makefile.php
40include Makefile.python27
41include Makefile.python38
42include Makefile.go
43include Makefile.perl
44include Makefile.ruby
45include Makefile.jsc-common
46include Makefile.jsc11
47include Makefile.jsc13
48include Makefile.jsc14
49include Makefile.jsc15
50endif
51
52# Ubuntu 20.04
53ifeq ($(CODENAME),focal)
54include Makefile.php
55include Makefile.python27
56include Makefile.python38
57include Makefile.go
58include Makefile.perl
59include Makefile.ruby
60include Makefile.jsc-common
61include Makefile.jsc11
62endif
63
64# Ubuntu 19.10
65ifeq ($(CODENAME),eoan)
66include Makefile.php
67include Makefile.python27
68include Makefile.python37
69include Makefile.python38
70include Makefile.go
71include Makefile.perl
72include Makefile.ruby
73include Makefile.jsc-common
74include Makefile.jsc11
75endif
76
77# Ubuntu 19.04
78ifeq ($(CODENAME),disco)
79include Makefile.php
80include Makefile.python27
81include Makefile.python37
82include Makefile.python38
83include Makefile.go
84include Makefile.perl
85include Makefile.ruby
86include Makefile.jsc-common
87include Makefile.jsc11
88endif
89
90# Ubuntu 18.10
91ifeq ($(CODENAME),cosmic)
92include Makefile.php
93include Makefile.python27
94include Makefile.python36
95include Makefile.python37
96include Makefile.go
97include Makefile.perl
98include Makefile.ruby
99include Makefile.jsc-common
100include Makefile.jsc8
101include Makefile.jsc11
102endif
103
104# Ubuntu 18.04
105ifeq ($(CODENAME),bionic)
106include Makefile.php
107include Makefile.python27
108include Makefile.python36
109include Makefile.python37
110include Makefile.python38
111include Makefile.go
112include Makefile.perl
113include Makefile.ruby
114include Makefile.jsc-common
115include Makefile.jsc8
116include Makefile.jsc11
117endif
118
119# Ubuntu 16.04
120ifeq ($(CODENAME),xenial)
121include Makefile.php
122include Makefile.python27
123include Makefile.python35
124include Makefile.go
125include Makefile.perl
126include Makefile.ruby
127include Makefile.jsc-common
128include Makefile.jsc8
129endif
130
131# Ubuntu 14.04
132ifeq ($(CODENAME),trusty)
133include Makefile.php
134include Makefile.python
135include Makefile.perl
136endif
137
138# Debian 11
139ifeq ($(CODENAME),bullseye)
140include Makefile.php
141include Makefile.python27
142include Makefile.python39
143include Makefile.go
144include Makefile.perl
145include Makefile.ruby
146include Makefile.jsc-common
147include Makefile.jsc11
148endif
149
150# Debian 10
151ifeq ($(CODENAME),buster)
152include Makefile.php
153include Makefile.python27
154include Makefile.python37
155include Makefile.go
156include Makefile.perl
157include Makefile.ruby
158include Makefile.jsc-common
159include Makefile.jsc11
160endif
161
162# Debian 9
163ifeq ($(CODENAME),stretch)
164include Makefile.php
165include Makefile.python27
166include Makefile.python35
167include Makefile.go
168include Makefile.perl
169include Makefile.ruby
170include Makefile.jsc-common
171include Makefile.jsc8
172endif
173
174# Debian 8
175ifeq ($(CODENAME),jessie)
176include Makefile.php
177include Makefile.python27
178include Makefile.python34
179include Makefile.perl
180include Makefile.ruby
181endif
182
183CONFIGURE_ARGS=\
184	--prefix=/usr \
185	--state=/var/lib/unit \
186	--control="unix:/var/run/control.unit.sock" \
187	--pid=/var/run/unit.pid \
188	--log=/var/log/unit.log \
189	--tmp=/var/tmp \
190	--user=unit \
191	--group=unit \
192	--tests \
193	--openssl
194
195export CR=\\n
196
197default:
198	@echo "valid targets: all modules unit $(addprefix unit-, $(MODULES)) test test-debug clean"
199
200all: check-build-depends-all unit modules
201
202modules: $(addprefix unit-, $(MODULES))
203
204check-build-depends-%:
205	@{ \
206	case "$*" in \
207		all) pkgs="$(BUILD_DEPENDS)" ;; \
208		unit) pkgs="$(BUILD_DEPENDS_unit)" ;; \
209		*) pkgs="$(BUILD_DEPENDS_unit) $(BUILD_DEPENDS_$*)" ;; \
210	esac ; \
211	not_installed= ; \
212	for pkg in $${pkgs}; do \
213		dpkg -s $${pkg} >/dev/null 2>&1 ; \
214		if [ $$? -ne 0 ]; then \
215			not_installed="$${not_installed} $${pkg}" ; \
216		fi ; \
217	done ; \
218	if test -n "$${not_installed}" ; then \
219		echo "" >&2 ; \
220		echo "The following packages are required in order to proceed:" >&2 ; \
221		echo "" >&2 ; \
222		echo $${not_installed} >&2 ; \
223		echo "" >&2 ; \
224		exit 1 ; \
225	fi \
226	}
227	touch $@
228
229debuild/$(SRCDIR)/debian:
230	@{ \
231	set -e ; \
232	mkdir -p debuild/$(SRCDIR) ; \
233	cp -pr debian debuild/$(SRCDIR) ; \
234	echo '9' > debuild/$(SRCDIR)/debian/compat ; \
235	mkdir -p debuild/$(SRCDIR)/debian/source ; \
236	echo '3.0 (quilt)' > debuild/$(SRCDIR)/debian/source/format ; \
237	cat debian/control.in | sed \
238		-e "s#%%PACKAGE_VENDOR%%#$(PACKAGE_VENDOR)#g" \
239	> debuild/$(SRCDIR)/debian/control ; \
240        cat debian/rules.in | sed \
241                -e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \
242        > debuild/$(SRCDIR)/debian/rules ; \
243	chmod +x debuild/$(SRCDIR)/debian/rules ; \
244	}
245
246debuild/$(SRCDIR)/debian/changelog: ../../docs/changes.xml | debuild/$(SRCDIR)/debian
247	cd ../../docs && make ../build/unit.deb-changelog
248ifneq ($(DEFAULT_VERSION)$(DEFAULT_RELEASE), $(VERSION)$(RELEASE))
249	cat ../../build/unit.deb-changelog | sed \
250		-e "s/unit ($(DEFAULT_VERSION)-$(DEFAULT_RELEASE)~/unit ($(VERSION)-$(RELEASE)~/" \
251		-e "s#%%CODENAME%%#$(CODENAME)#g" \
252		> debuild/$(SRCDIR)/debian/changelog
253else
254	cat ../../build/unit.deb-changelog | sed \
255		-e "s#%%CODENAME%%#$(CODENAME)#g" \
256		> debuild/$(SRCDIR)/debian/changelog
257endif
258
259debuild/unit_$(VERSION).orig.tar.gz: | debuild/$(SRCDIR)/debian
260	cd ../.. && tar -czf pkg/deb/debuild/$(SRCDIR).tar.gz \
261		--transform "s#^#$(SRCDIR)/#" \
262		LICENSE NOTICE CHANGES README configure auto src test version go docs/man/unitd.8.in
263	mv debuild/$(SRCDIR).tar.gz debuild/unit_$(VERSION).orig.tar.gz
264	cd debuild && tar zxf unit_$(VERSION).orig.tar.gz
265
266unit: check-build-depends-unit debuild/unit_$(VERSION).orig.tar.gz debuild/$(SRCDIR)/debian/changelog
267	@echo "===> Building $@ package"
268	cd debuild/$(SRCDIR) && debuild -us -uc
269	mkdir -p debs
270	find debuild/ -maxdepth 1 -type f -exec cp {} debs/ \;
271	ln -s debuild/$(SRCDIR)/build $@
272
273debuild-%: debuild/unit_$(VERSION).orig.tar.gz ../../docs/changes.xml
274	mkdir $@
275	cp debuild/unit_$(VERSION).orig.tar.gz debuild-$*/unit-$(MODULE_SUFFIX_$*)_$(VERSION).orig.tar.gz
276	cd $@ && tar zxf unit-$(MODULE_SUFFIX_$*)_$(VERSION).orig.tar.gz
277	mkdir $@/$(SRCDIR)/debian
278	echo '9' > $@/$(SRCDIR)/debian/compat
279	mkdir $@/$(SRCDIR)/debian/source
280	echo '3.0 (quilt)' > $@/$(SRCDIR)/debian/source/format
281	cd ../../docs && make ../build/unit-$(MODULE_SUFFIX_$*).deb-changelog
282ifneq ($(DEFAULT_VERSION)$(DEFAULT_RELEASE), $(VERSION)$(RELEASE))
283	cat ../../build/unit-$(MODULE_SUFFIX_$*).deb-changelog | sed \
284		-e "s/unit-$* ($(DEFAULT_VERSION)-$(DEFAULT_RELEASE)~/unit-$* ($(VERSION)-$(RELEASE)~/" \
285		-e "s#%%CODENAME%%#$(CODENAME)#g" \
286		> $@/$(SRCDIR)/debian/changelog
287else
288	cat ../../build/unit-$(MODULE_SUFFIX_$*).deb-changelog | sed \
289		-e "s#%%CODENAME%%#$(CODENAME)#g" \
290		> $@/$(SRCDIR)/debian/changelog
291endif
292	if [ -f debian.module/copyright.unit-$(MODULE_SUFFIX_$*) ]; then \
293		cp debian.module/copyright.unit-$(MODULE_SUFFIX_$*) debuild-$*/$(SRCDIR)/debian/copyright ; \
294	else \
295		cp debian/copyright debuild-$*/$(SRCDIR)/debian/ ; \
296	fi
297	@{ \
298	set -e ; \
299	for src in $(MODULE_SOURCES_$*); do \
300		cp debian.module/$${src} $@/$(SRCDIR)/debian/ ; \
301	done ; \
302	definitions=`echo "$$MODULE_DEFINITIONS_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
303	prebuild=`echo "$$MODULE_PREBUILD_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
304	preinstall=`echo "$$MODULE_PREINSTALL_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
305	postinstall=`echo "$$MODULE_POSTINSTALL_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
306	post=`echo "$$MODULE_POST_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
307	cat debian.module/$(if $(MODULE_NOARCH_$*),control-noarch.in,control.in) | sed \
308                -e "s#%%NAME%%#unit-$(MODULE_SUFFIX_$*)#g" \
309                -e "s#%%SUMMARY%%#$(MODULE_SUMMARY_$*)#g" \
310                -e "s#%%CODENAME%%#$(CODENAME)#g" \
311                -e "s#%%UNIT_VERSION%%#$(VERSION)#g" \
312                -e "s#%%UNIT_RELEASE%%#$(RELEASE)#g" \
313                -e "s#%%VERSION%%#$(MODULE_VERSION_$*)#g" \
314                -e "s#%%RELEASE%%#$(MODULE_RELEASE_$*)#g" \
315                -e "s#%%PACKAGE_VENDOR%%#$(PACKAGE_VENDOR)#g" \
316                -e "s#%%MODULE_BUILD_DEPENDS%%#$(MODULE_BUILD_DEPENDS_$*)#g" \
317                -e "s#%%MODULE_DEPENDS%%#$(MODULE_DEPENDS_$*)#g" \
318        > $@/$(SRCDIR)/debian/control ; \
319        cat debian.module/$(if $(MODULE_NOARCH_$*),rules-noarch.in,rules.in) | sed \
320                -e "s#%%NAME%%#unit-$(MODULE_SUFFIX_$*)#g" \
321                -e "s#%%CODENAME%%#$(CODENAME)#g" \
322                -e "s#%%UNIT_VERSION%%#$(VERSION)#g" \
323                -e "s#%%UNIT_RELEASE%%#$(RELEASE)#g" \
324                -e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \
325                -e "s#%%MODULE_CONFARGS%%#$(MODULE_CONFARGS_$*)#g" \
326                -e "s#%%MODULE_MAKEARGS%%#$(MODULE_MAKEARGS_$*)#g" \
327                -e "s#%%MODULE_INSTARGS%%#$(MODULE_INSTARGS_$*)#g" \
328                -e "s#%%MODULE_DEFINITIONS%%#$${definitions}#g" \
329                -e "s#%%MODULE_PREBUILD%%#$${prebuild}#g" \
330                -e "s#%%MODULE_PREINSTALL%%#$${preinstall}#g" \
331                -e "s#%%MODULE_POSTINSTALL%%#$${postinstall}#g" \
332        > $@/$(SRCDIR)/debian/rules ; \
333        cat debian.module/preinst.in | sed \
334                -e "s#%%MODULE_POST%%#$$post#g" \
335        > $@/$(SRCDIR)/debian/preinst ; \
336        chmod +x $@/$(SRCDIR)/debian/rules ; \
337	}
338
339unit-%: check-build-depends-% | debuild-%
340	@echo "===> Building $@ package"
341	cd debuild-$*/$(SRCDIR) && debuild -us -uc
342	mkdir -p debs
343	find debuild-$*/ -maxdepth 1 -type f -exec cp {} debs/ \;
344	ln -s debuild-$*/$(SRCDIR)/build $@
345
346test: unit modules
347	@{ \
348	for so in `find debuild-*/unit-$(VERSION)/debian/build-unit/ -type f \( -name "*.so" -o -name "*.jar" \)`; do \
349		soname=`basename $${so}` ; \
350		test "$${soname}" = "java.unit.so" && continue ; \
351		test -h debuild/unit-$(VERSION)/debian/build-unit/build/$${soname} || \
352		ln -fs `pwd`/$${so} debuild/unit-$(VERSION)/debian/build-unit/build/$${soname} ; \
353	done ; \
354	( cd debuild/unit-$(VERSION)/debian/build-unit && env python3 -m pytest --user=nobody $(PYTEST_ARGS) ) ; \
355	}
356
357test-debug: unit modules
358	@{ \
359	for so in `find debuild-*/unit-$(VERSION)/debian/build-unit-debug/ -type f \( -name "*.so" -o -name "*.jar" \)`; do \
360		soname=`basename $${so}` ; \
361		test "$${soname}" = "java.unit.so" && continue ; \
362		test -h debuild/unit-$(VERSION)/debian/build-unit-debug/build/$${soname} || \
363		ln -fs `pwd`/$${so} debuild/unit-$(VERSION)/debian/build-unit-debug/build/$${soname} ; \
364	done ; \
365	( cd debuild/unit-$(VERSION)/debian/build-unit-debug && env python3 -m pytest --user=nobody $(PYTEST_ARGS) ) ; \
366	}
367
368clean:
369	rm -rf debuild debuild-* debs ../../build
370	rm -f check-build-depends-*
371	find . -maxdepth 1 -type l -delete
372
373.PHONY: default all modules test test-debug clean
374
375.SECONDARY: $(addprefix check-build-depends-, $(MODULES)) $(addprefix debuild-, $(MODULES))
376