xref: /unit/pkg/deb/Makefile (revision 1887:0a32914bf7bf)
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 10
139ifeq ($(CODENAME),buster)
140include Makefile.php
141include Makefile.python27
142include Makefile.python37
143include Makefile.go
144include Makefile.perl
145include Makefile.ruby
146include Makefile.jsc-common
147include Makefile.jsc11
148endif
149
150# Debian 9
151ifeq ($(CODENAME),stretch)
152include Makefile.php
153include Makefile.python27
154include Makefile.python35
155include Makefile.go
156include Makefile.perl
157include Makefile.ruby
158include Makefile.jsc-common
159include Makefile.jsc8
160endif
161
162# Debian 8
163ifeq ($(CODENAME),jessie)
164include Makefile.php
165include Makefile.python27
166include Makefile.python34
167include Makefile.perl
168include Makefile.ruby
169endif
170
171CONFIGURE_ARGS=\
172	--prefix=/usr \
173	--state=/var/lib/unit \
174	--control="unix:/var/run/control.unit.sock" \
175	--pid=/var/run/unit.pid \
176	--log=/var/log/unit.log \
177	--tmp=/var/tmp \
178	--user=unit \
179	--group=unit \
180	--tests \
181	--openssl
182
183export CR=\\n
184
185default:
186	@echo "valid targets: all modules unit $(addprefix unit-, $(MODULES)) test test-debug clean"
187
188all: check-build-depends-all unit modules
189
190modules: $(addprefix unit-, $(MODULES))
191
192check-build-depends-%:
193	@{ \
194	case "$*" in \
195		all) pkgs="$(BUILD_DEPENDS)" ;; \
196		unit) pkgs="$(BUILD_DEPENDS_unit)" ;; \
197		*) pkgs="$(BUILD_DEPENDS_unit) $(BUILD_DEPENDS_$*)" ;; \
198	esac ; \
199	not_installed= ; \
200	for pkg in $${pkgs}; do \
201		dpkg -s $${pkg} >/dev/null 2>&1 ; \
202		if [ $$? -ne 0 ]; then \
203			not_installed="$${not_installed} $${pkg}" ; \
204		fi ; \
205	done ; \
206	if test -n "$${not_installed}" ; then \
207		echo "" >&2 ; \
208		echo "The following packages are required in order to proceed:" >&2 ; \
209		echo "" >&2 ; \
210		echo $${not_installed} >&2 ; \
211		echo "" >&2 ; \
212		exit 1 ; \
213	fi \
214	}
215	touch $@
216
217debuild/$(SRCDIR)/debian:
218	@{ \
219	set -e ; \
220	mkdir -p debuild/$(SRCDIR) ; \
221	cp -pr debian debuild/$(SRCDIR) ; \
222	echo '9' > debuild/$(SRCDIR)/debian/compat ; \
223	mkdir -p debuild/$(SRCDIR)/debian/source ; \
224	echo '3.0 (quilt)' > debuild/$(SRCDIR)/debian/source/format ; \
225	cat debian/control.in | sed \
226		-e "s#%%PACKAGE_VENDOR%%#$(PACKAGE_VENDOR)#g" \
227	> debuild/$(SRCDIR)/debian/control ; \
228        cat debian/rules.in | sed \
229                -e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \
230        > debuild/$(SRCDIR)/debian/rules ; \
231	chmod +x debuild/$(SRCDIR)/debian/rules ; \
232	}
233
234debuild/$(SRCDIR)/debian/changelog: ../../docs/changes.xml | debuild/$(SRCDIR)/debian
235	cd ../../docs && make ../build/unit.deb-changelog
236ifneq ($(DEFAULT_VERSION)$(DEFAULT_RELEASE), $(VERSION)$(RELEASE))
237	cat ../../build/unit.deb-changelog | sed \
238		-e "s/unit ($(DEFAULT_VERSION)-$(DEFAULT_RELEASE)~/unit ($(VERSION)-$(RELEASE)~/" \
239		-e "s#%%CODENAME%%#$(CODENAME)#g" \
240		> debuild/$(SRCDIR)/debian/changelog
241else
242	cat ../../build/unit.deb-changelog | sed \
243		-e "s#%%CODENAME%%#$(CODENAME)#g" \
244		> debuild/$(SRCDIR)/debian/changelog
245endif
246
247debuild/unit_$(VERSION).orig.tar.gz: | debuild/$(SRCDIR)/debian
248	cd ../.. && tar -czf pkg/deb/debuild/$(SRCDIR).tar.gz \
249		--transform "s#^#$(SRCDIR)/#" \
250		LICENSE NOTICE CHANGES README configure auto src test version go docs/man/unitd.8.in
251	mv debuild/$(SRCDIR).tar.gz debuild/unit_$(VERSION).orig.tar.gz
252	cd debuild && tar zxf unit_$(VERSION).orig.tar.gz
253
254unit: check-build-depends-unit debuild/unit_$(VERSION).orig.tar.gz debuild/$(SRCDIR)/debian/changelog
255	@echo "===> Building $@ package"
256	cd debuild/$(SRCDIR) && debuild -us -uc
257	mkdir -p debs
258	find debuild/ -maxdepth 1 -type f -exec cp {} debs/ \;
259	ln -s debuild/$(SRCDIR)/build $@
260
261debuild-%: debuild/unit_$(VERSION).orig.tar.gz ../../docs/changes.xml
262	mkdir $@
263	cp debuild/unit_$(VERSION).orig.tar.gz debuild-$*/unit-$(MODULE_SUFFIX_$*)_$(VERSION).orig.tar.gz
264	cd $@ && tar zxf unit-$(MODULE_SUFFIX_$*)_$(VERSION).orig.tar.gz
265	mkdir $@/$(SRCDIR)/debian
266	echo '9' > $@/$(SRCDIR)/debian/compat
267	mkdir $@/$(SRCDIR)/debian/source
268	echo '3.0 (quilt)' > $@/$(SRCDIR)/debian/source/format
269	cd ../../docs && make ../build/unit-$(MODULE_SUFFIX_$*).deb-changelog
270ifneq ($(DEFAULT_VERSION)$(DEFAULT_RELEASE), $(VERSION)$(RELEASE))
271	cat ../../build/unit-$(MODULE_SUFFIX_$*).deb-changelog | sed \
272		-e "s/unit-$* ($(DEFAULT_VERSION)-$(DEFAULT_RELEASE)~/unit-$* ($(VERSION)-$(RELEASE)~/" \
273		-e "s#%%CODENAME%%#$(CODENAME)#g" \
274		> $@/$(SRCDIR)/debian/changelog
275else
276	cat ../../build/unit-$(MODULE_SUFFIX_$*).deb-changelog | sed \
277		-e "s#%%CODENAME%%#$(CODENAME)#g" \
278		> $@/$(SRCDIR)/debian/changelog
279endif
280	if [ -f debian.module/copyright.unit-$(MODULE_SUFFIX_$*) ]; then \
281		cp debian.module/copyright.unit-$(MODULE_SUFFIX_$*) debuild-$*/$(SRCDIR)/debian/copyright ; \
282	else \
283		cp debian/copyright debuild-$*/$(SRCDIR)/debian/ ; \
284	fi
285	@{ \
286	set -e ; \
287	for src in $(MODULE_SOURCES_$*); do \
288		cp debian.module/$${src} $@/$(SRCDIR)/debian/ ; \
289	done ; \
290	definitions=`echo "$$MODULE_DEFINITIONS_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
291	prebuild=`echo "$$MODULE_PREBUILD_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
292	preinstall=`echo "$$MODULE_PREINSTALL_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
293	postinstall=`echo "$$MODULE_POSTINSTALL_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
294	post=`echo "$$MODULE_POST_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
295	cat debian.module/$(if $(MODULE_NOARCH_$*),control-noarch.in,control.in) | sed \
296                -e "s#%%NAME%%#unit-$(MODULE_SUFFIX_$*)#g" \
297                -e "s#%%SUMMARY%%#$(MODULE_SUMMARY_$*)#g" \
298                -e "s#%%CODENAME%%#$(CODENAME)#g" \
299                -e "s#%%UNIT_VERSION%%#$(VERSION)#g" \
300                -e "s#%%UNIT_RELEASE%%#$(RELEASE)#g" \
301                -e "s#%%VERSION%%#$(MODULE_VERSION_$*)#g" \
302                -e "s#%%RELEASE%%#$(MODULE_RELEASE_$*)#g" \
303                -e "s#%%PACKAGE_VENDOR%%#$(PACKAGE_VENDOR)#g" \
304                -e "s#%%MODULE_BUILD_DEPENDS%%#$(MODULE_BUILD_DEPENDS_$*)#g" \
305                -e "s#%%MODULE_DEPENDS%%#$(MODULE_DEPENDS_$*)#g" \
306        > $@/$(SRCDIR)/debian/control ; \
307        cat debian.module/$(if $(MODULE_NOARCH_$*),rules-noarch.in,rules.in) | sed \
308                -e "s#%%NAME%%#unit-$(MODULE_SUFFIX_$*)#g" \
309                -e "s#%%CODENAME%%#$(CODENAME)#g" \
310                -e "s#%%UNIT_VERSION%%#$(VERSION)#g" \
311                -e "s#%%UNIT_RELEASE%%#$(RELEASE)#g" \
312                -e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \
313                -e "s#%%MODULE_CONFARGS%%#$(MODULE_CONFARGS_$*)#g" \
314                -e "s#%%MODULE_MAKEARGS%%#$(MODULE_MAKEARGS_$*)#g" \
315                -e "s#%%MODULE_INSTARGS%%#$(MODULE_INSTARGS_$*)#g" \
316                -e "s#%%MODULE_DEFINITIONS%%#$${definitions}#g" \
317                -e "s#%%MODULE_PREBUILD%%#$${prebuild}#g" \
318                -e "s#%%MODULE_PREINSTALL%%#$${preinstall}#g" \
319                -e "s#%%MODULE_POSTINSTALL%%#$${postinstall}#g" \
320        > $@/$(SRCDIR)/debian/rules ; \
321        cat debian.module/preinst.in | sed \
322                -e "s#%%MODULE_POST%%#$$post#g" \
323        > $@/$(SRCDIR)/debian/preinst ; \
324        chmod +x $@/$(SRCDIR)/debian/rules ; \
325	}
326
327unit-%: check-build-depends-% | debuild-%
328	@echo "===> Building $@ package"
329	cd debuild-$*/$(SRCDIR) && debuild -us -uc
330	mkdir -p debs
331	find debuild-$*/ -maxdepth 1 -type f -exec cp {} debs/ \;
332	ln -s debuild-$*/$(SRCDIR)/build $@
333
334test: unit modules
335	@{ \
336	for so in `find debuild-*/unit-$(VERSION)/debian/build-unit/ -type f \( -name "*.so" -o -name "*.jar" \)`; do \
337		soname=`basename $${so}` ; \
338		test "$${soname}" = "java.unit.so" && continue ; \
339		test -h debuild/unit-$(VERSION)/debian/build-unit/build/$${soname} || \
340		ln -fs `pwd`/$${so} debuild/unit-$(VERSION)/debian/build-unit/build/$${soname} ; \
341	done ; \
342	( cd debuild/unit-$(VERSION)/debian/build-unit && env python3 -m pytest --user=nobody $(PYTEST_ARGS) ) ; \
343	}
344
345test-debug: unit modules
346	@{ \
347	for so in `find debuild-*/unit-$(VERSION)/debian/build-unit-debug/ -type f \( -name "*.so" -o -name "*.jar" \)`; do \
348		soname=`basename $${so}` ; \
349		test "$${soname}" = "java.unit.so" && continue ; \
350		test -h debuild/unit-$(VERSION)/debian/build-unit-debug/build/$${soname} || \
351		ln -fs `pwd`/$${so} debuild/unit-$(VERSION)/debian/build-unit-debug/build/$${soname} ; \
352	done ; \
353	( cd debuild/unit-$(VERSION)/debian/build-unit-debug && env python3 -m pytest --user=nobody $(PYTEST_ARGS) ) ; \
354	}
355
356clean:
357	rm -rf debuild debuild-* debs ../../build
358	rm -f check-build-depends-*
359	find . -maxdepth 1 -type l -delete
360
361.PHONY: default all modules test test-debug clean
362
363.SECONDARY: $(addprefix check-build-depends-, $(MODULES)) $(addprefix debuild-, $(MODULES))
364