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