xref: /unit/pkg/deb/Makefile (revision 1974:199a11eceb3c)
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.10
23ifeq ($(CODENAME),impish)
24include Makefile.php
25include Makefile.python27
26include Makefile.python39
27include Makefile.python310
28include Makefile.go
29include Makefile.perl
30include Makefile.ruby
31include Makefile.jsc-common
32include Makefile.jsc11
33include Makefile.jsc16
34include Makefile.jsc17
35include Makefile.jsc18
36endif
37
38# Ubuntu 21.04
39ifeq ($(CODENAME),hirsute)
40include Makefile.php
41include Makefile.python27
42include Makefile.python39
43include Makefile.go
44include Makefile.perl
45include Makefile.ruby
46include Makefile.jsc-common
47include Makefile.jsc11
48include Makefile.jsc15
49include Makefile.jsc16
50include Makefile.jsc17
51endif
52
53# Ubuntu 20.04
54ifeq ($(CODENAME),focal)
55include Makefile.php
56include Makefile.python27
57include Makefile.python38
58include Makefile.go
59include Makefile.perl
60include Makefile.ruby
61include Makefile.jsc-common
62include Makefile.jsc11
63endif
64
65# Ubuntu 18.04
66ifeq ($(CODENAME),bionic)
67include Makefile.php
68include Makefile.python27
69include Makefile.python36
70include Makefile.python37
71include Makefile.python38
72include Makefile.go
73include Makefile.perl
74include Makefile.ruby
75include Makefile.jsc-common
76include Makefile.jsc8
77include Makefile.jsc11
78endif
79
80# Debian 11
81ifeq ($(CODENAME),bullseye)
82include Makefile.php
83include Makefile.python27
84include Makefile.python39
85include Makefile.go
86include Makefile.perl
87include Makefile.ruby
88include Makefile.jsc-common
89include Makefile.jsc11
90endif
91
92# Debian 10
93ifeq ($(CODENAME),buster)
94include Makefile.php
95include Makefile.python27
96include Makefile.python37
97include Makefile.go
98include Makefile.perl
99include Makefile.ruby
100include Makefile.jsc-common
101include Makefile.jsc11
102endif
103
104CONFIGURE_ARGS=\
105	--prefix=/usr \
106	--state=/var/lib/unit \
107	--control="unix:/var/run/control.unit.sock" \
108	--pid=/var/run/unit.pid \
109	--log=/var/log/unit.log \
110	--tmp=/var/tmp \
111	--user=unit \
112	--group=unit \
113	--tests \
114	--openssl
115
116export CR=\\n
117
118default:
119	@echo "valid targets: all modules unit $(addprefix unit-, $(MODULES)) test test-debug clean"
120
121all: check-build-depends-all unit modules
122
123modules: $(addprefix unit-, $(MODULES))
124
125check-build-depends-%:
126	@{ \
127	case "$*" in \
128		all) pkgs="$(BUILD_DEPENDS)" ;; \
129		unit) pkgs="$(BUILD_DEPENDS_unit)" ;; \
130		*) pkgs="$(BUILD_DEPENDS_unit) $(BUILD_DEPENDS_$*)" ;; \
131	esac ; \
132	not_installed= ; \
133	for pkg in $${pkgs}; do \
134		dpkg -s $${pkg} >/dev/null 2>&1 ; \
135		if [ $$? -ne 0 ]; then \
136			not_installed="$${not_installed} $${pkg}" ; \
137		fi ; \
138	done ; \
139	if test -n "$${not_installed}" ; then \
140		echo "" >&2 ; \
141		echo "The following packages are required in order to proceed:" >&2 ; \
142		echo "" >&2 ; \
143		echo $${not_installed} >&2 ; \
144		echo "" >&2 ; \
145		exit 1 ; \
146	fi \
147	}
148	touch $@
149
150debuild/$(SRCDIR)/debian:
151	@{ \
152	set -e ; \
153	mkdir -p debuild/$(SRCDIR) ; \
154	cp -pr debian debuild/$(SRCDIR) ; \
155	echo '11' > debuild/$(SRCDIR)/debian/compat ; \
156	mkdir -p debuild/$(SRCDIR)/debian/source ; \
157	echo '3.0 (quilt)' > debuild/$(SRCDIR)/debian/source/format ; \
158	cat debian/control.in | sed \
159		-e "s#%%PACKAGE_VENDOR%%#$(PACKAGE_VENDOR)#g" \
160	> debuild/$(SRCDIR)/debian/control ; \
161        cat debian/rules.in | sed \
162                -e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \
163        > debuild/$(SRCDIR)/debian/rules ; \
164	chmod +x debuild/$(SRCDIR)/debian/rules ; \
165	}
166
167debuild/$(SRCDIR)/debian/changelog: ../../docs/changes.xml | debuild/$(SRCDIR)/debian
168	cd ../../docs && make ../build/unit.deb-changelog
169ifneq ($(DEFAULT_VERSION)$(DEFAULT_RELEASE), $(VERSION)$(RELEASE))
170	cat ../../build/unit.deb-changelog | sed \
171		-e "s/unit ($(DEFAULT_VERSION)-$(DEFAULT_RELEASE)~/unit ($(VERSION)-$(RELEASE)~/" \
172		-e "s#%%CODENAME%%#$(CODENAME)#g" \
173		> debuild/$(SRCDIR)/debian/changelog
174else
175	cat ../../build/unit.deb-changelog | sed \
176		-e "s#%%CODENAME%%#$(CODENAME)#g" \
177		> debuild/$(SRCDIR)/debian/changelog
178endif
179
180debuild/unit_$(VERSION).orig.tar.gz: | debuild/$(SRCDIR)/debian
181	cd ../.. && tar -czf pkg/deb/debuild/$(SRCDIR).tar.gz \
182		--transform "s#^#$(SRCDIR)/#" \
183		LICENSE NOTICE CHANGES README configure auto src test version go docs/man/unitd.8.in
184	mv debuild/$(SRCDIR).tar.gz debuild/unit_$(VERSION).orig.tar.gz
185	cd debuild && tar zxf unit_$(VERSION).orig.tar.gz
186
187unit: check-build-depends-unit debuild/unit_$(VERSION).orig.tar.gz debuild/$(SRCDIR)/debian/changelog
188	@echo "===> Building $@ package"
189	cd debuild/$(SRCDIR) && debuild -us -uc
190	mkdir -p debs
191	find debuild/ -maxdepth 1 -type f -exec cp {} debs/ \;
192	ln -s debuild/$(SRCDIR)/build $@
193
194debuild-%: debuild/unit_$(VERSION).orig.tar.gz ../../docs/changes.xml
195	mkdir $@
196	cp debuild/unit_$(VERSION).orig.tar.gz debuild-$*/unit-$(MODULE_SUFFIX_$*)_$(VERSION).orig.tar.gz
197	cd $@ && tar zxf unit-$(MODULE_SUFFIX_$*)_$(VERSION).orig.tar.gz
198	mkdir $@/$(SRCDIR)/debian
199	echo '11' > $@/$(SRCDIR)/debian/compat
200	mkdir $@/$(SRCDIR)/debian/source
201	echo '3.0 (quilt)' > $@/$(SRCDIR)/debian/source/format
202	cd ../../docs && make ../build/unit-$(MODULE_SUFFIX_$*).deb-changelog
203ifneq ($(DEFAULT_VERSION)$(DEFAULT_RELEASE), $(VERSION)$(RELEASE))
204	cat ../../build/unit-$(MODULE_SUFFIX_$*).deb-changelog | sed \
205		-e "s/unit-$* ($(DEFAULT_VERSION)-$(DEFAULT_RELEASE)~/unit-$* ($(VERSION)-$(RELEASE)~/" \
206		-e "s#%%CODENAME%%#$(CODENAME)#g" \
207		> $@/$(SRCDIR)/debian/changelog
208else
209	cat ../../build/unit-$(MODULE_SUFFIX_$*).deb-changelog | sed \
210		-e "s#%%CODENAME%%#$(CODENAME)#g" \
211		> $@/$(SRCDIR)/debian/changelog
212endif
213	if [ -f debian.module/copyright.unit-$(MODULE_SUFFIX_$*) ]; then \
214		cp debian.module/copyright.unit-$(MODULE_SUFFIX_$*) debuild-$*/$(SRCDIR)/debian/copyright ; \
215	else \
216		cp debian/copyright debuild-$*/$(SRCDIR)/debian/ ; \
217	fi
218	@{ \
219	set -e ; \
220	for src in $(MODULE_SOURCES_$*); do \
221		cp debian.module/$${src} $@/$(SRCDIR)/debian/ ; \
222	done ; \
223	definitions=`echo "$$MODULE_DEFINITIONS_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
224	prebuild=`echo "$$MODULE_PREBUILD_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
225	preinstall=`echo "$$MODULE_PREINSTALL_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
226	postinstall=`echo "$$MODULE_POSTINSTALL_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
227	post=`echo "$$MODULE_POST_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
228	cat debian.module/$(if $(MODULE_NOARCH_$*),control-noarch.in,control.in) | sed \
229                -e "s#%%NAME%%#unit-$(MODULE_SUFFIX_$*)#g" \
230                -e "s#%%SUMMARY%%#$(MODULE_SUMMARY_$*)#g" \
231                -e "s#%%CODENAME%%#$(CODENAME)#g" \
232                -e "s#%%UNIT_VERSION%%#$(VERSION)#g" \
233                -e "s#%%UNIT_RELEASE%%#$(RELEASE)#g" \
234                -e "s#%%VERSION%%#$(MODULE_VERSION_$*)#g" \
235                -e "s#%%RELEASE%%#$(MODULE_RELEASE_$*)#g" \
236                -e "s#%%PACKAGE_VENDOR%%#$(PACKAGE_VENDOR)#g" \
237                -e "s#%%MODULE_BUILD_DEPENDS%%#$(MODULE_BUILD_DEPENDS_$*)#g" \
238                -e "s#%%MODULE_DEPENDS%%#$(MODULE_DEPENDS_$*)#g" \
239        > $@/$(SRCDIR)/debian/control ; \
240        cat debian.module/$(if $(MODULE_NOARCH_$*),rules-noarch.in,rules.in) | sed \
241                -e "s#%%NAME%%#unit-$(MODULE_SUFFIX_$*)#g" \
242                -e "s#%%CODENAME%%#$(CODENAME)#g" \
243                -e "s#%%UNIT_VERSION%%#$(VERSION)#g" \
244                -e "s#%%UNIT_RELEASE%%#$(RELEASE)#g" \
245                -e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \
246                -e "s#%%MODULE_CONFARGS%%#$(MODULE_CONFARGS_$*)#g" \
247                -e "s#%%MODULE_MAKEARGS%%#$(MODULE_MAKEARGS_$*)#g" \
248                -e "s#%%MODULE_INSTARGS%%#$(MODULE_INSTARGS_$*)#g" \
249                -e "s#%%MODULE_DEFINITIONS%%#$${definitions}#g" \
250                -e "s#%%MODULE_PREBUILD%%#$${prebuild}#g" \
251                -e "s#%%MODULE_PREINSTALL%%#$${preinstall}#g" \
252                -e "s#%%MODULE_POSTINSTALL%%#$${postinstall}#g" \
253        > $@/$(SRCDIR)/debian/rules ; \
254        cat debian.module/preinst.in | sed \
255                -e "s#%%MODULE_POST%%#$$post#g" \
256        > $@/$(SRCDIR)/debian/preinst ; \
257        chmod +x $@/$(SRCDIR)/debian/rules ; \
258	}
259
260unit-%: check-build-depends-% | debuild-%
261	@echo "===> Building $@ package"
262	cd debuild-$*/$(SRCDIR) && debuild -us -uc
263	mkdir -p debs
264	find debuild-$*/ -maxdepth 1 -type f -exec cp {} debs/ \;
265	ln -s debuild-$*/$(SRCDIR)/build $@
266
267test: unit modules
268	@{ \
269	for so in `find debuild-*/unit-$(VERSION)/debian/build-unit/ -type f \( -name "*.so" -o -name "*.jar" \)`; do \
270		soname=`basename $${so}` ; \
271		test "$${soname}" = "java.unit.so" && continue ; \
272		test -h debuild/unit-$(VERSION)/debian/build-unit/build/$${soname} || \
273		ln -fs `pwd`/$${so} debuild/unit-$(VERSION)/debian/build-unit/build/$${soname} ; \
274	done ; \
275	( cd debuild/unit-$(VERSION)/debian/build-unit && env python3 -m pytest --user=nobody $(PYTEST_ARGS) ) ; \
276	}
277
278test-debug: unit modules
279	@{ \
280	for so in `find debuild-*/unit-$(VERSION)/debian/build-unit-debug/ -type f \( -name "*.so" -o -name "*.jar" \)`; do \
281		soname=`basename $${so}` ; \
282		test "$${soname}" = "java.unit.so" && continue ; \
283		test -h debuild/unit-$(VERSION)/debian/build-unit-debug/build/$${soname} || \
284		ln -fs `pwd`/$${so} debuild/unit-$(VERSION)/debian/build-unit-debug/build/$${soname} ; \
285	done ; \
286	( cd debuild/unit-$(VERSION)/debian/build-unit-debug && env python3 -m pytest --user=nobody $(PYTEST_ARGS) ) ; \
287	}
288
289clean:
290	rm -rf debuild debuild-* debs ../../build
291	rm -f check-build-depends-*
292	find . -maxdepth 1 -type l -delete
293
294.PHONY: default all modules test test-debug clean
295
296.SECONDARY: $(addprefix check-build-depends-, $(MODULES)) $(addprefix debuild-, $(MODULES))
297