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