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