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 13ifeq ($(shell test `rpm --eval '0%{?rhel} -eq 7 -a 0%{?amzn} -eq 0'`; echo $$?), 0) 14OSVER = centos7 15else ifeq ($(shell rpm --eval "%{?rhel}"), 8) 16OSVER = centos8 17else ifeq ($(shell rpm --eval "%{?rhel}"), 9) 18OSVER = centos9 19else ifeq ($(shell rpm --eval "%{?amzn}"), 2) 20OSVER = amazonlinux2 21else ifeq ($(shell test `rpm --eval '0%{?suse_version} -ge 1315 -a 0%{?suse_version} -lt 1330 -a 0%{?is_opensuse} -eq 1'`; echo $$?), 0) 22OSVER = opensuse-leap 23else ifeq ($(shell test `rpm --eval '0%{?suse_version} -ge 1330 -a 0%{?is_opensuse} -eq 1'`; echo $$?), 0) 24OSVER = opensuse-tumbleweed 25else ifeq ($(shell test `rpm --eval '0%{?suse_version} -ge 1315 -a 0%{?is_opensuse} -eq 0'`; echo $$?), 0) 26OSVER = sles 27else ifeq ($(shell test `rpm --eval '0%{?fedora} -ge 35'`; echo $$?),0) 28OSVER = fedora 29endif 30 31BUILD_DEPENDS_unit = gcc rpm-build rpmlint 32 33ifeq ($(OSVER), centos7) 34BUILD_DEPENDS_unit += which 35endif 36 37ifneq (,$(findstring $(OSVER),opensuse-leap opensuse-tumbleweed sles)) 38BUILD_DEPENDS_unit += libxml2-tools libxslt1 libopenssl-devel 39else 40ifneq (,$(findstring $(OSVER),amazonlinux2)) 41BUILD_DEPENDS_unit += libxml2 libxslt openssl11-devel 42else 43BUILD_DEPENDS_unit += libxml2 libxslt openssl-devel 44endif 45endif 46 47BUILD_DEPENDS = $(BUILD_DEPENDS_unit) 48 49MODULES= 50 51ifeq ($(OSVER), centos7) 52include Makefile.php 53include Makefile.python27 54include Makefile.python36 55include Makefile.go 56include Makefile.perl 57include Makefile.jsc-common 58include Makefile.jsc8 59include Makefile.jsc11 60endif 61 62ifeq ($(OSVER), centos8) 63include Makefile.php 64include Makefile.python27 65include Makefile.python36 66include Makefile.go 67include Makefile.perl 68include Makefile.jsc-common 69include Makefile.jsc8 70include Makefile.jsc11 71endif 72 73ifeq ($(OSVER), centos9) 74include Makefile.php 75include Makefile.python39 76include Makefile.go 77include Makefile.perl 78include Makefile.jsc-common 79include Makefile.jsc8 80include Makefile.jsc11 81endif 82 83ifeq ($(OSVER), amazonlinux2) 84include Makefile.php 85include Makefile.python27 86include Makefile.python37 87include Makefile.go 88include Makefile.perl 89include Makefile.jsc-common 90include Makefile.jsc8 91endif 92 93ifeq ($(OSVER), opensuse-leap) 94include Makefile.python27 95include Makefile.python34 96include Makefile.go 97include Makefile.perl 98include Makefile.ruby 99endif 100 101ifeq ($(OSVER), opensuse-tumbleweed) 102include Makefile.php 103include Makefile.python27 104include Makefile.python36 105include Makefile.go 106include Makefile.perl 107include Makefile.ruby 108endif 109 110ifeq ($(OSVER), sles) 111include Makefile.python27 112include Makefile.python34 113include Makefile.perl 114endif 115 116ifeq ($(OSVER), fedora) 117include Makefile.php 118include Makefile.python310 119include Makefile.go 120include Makefile.perl 121include Makefile.ruby 122include Makefile.jsc-common 123include Makefile.jsc8 124include Makefile.jsc11 125endif 126 127CONFIGURE_ARGS=\ 128 --prefix=/usr \ 129 --state=%{_sharedstatedir}/unit \ 130 --control="unix:/var/run/unit/control.sock" \ 131 --pid=/var/run/unit/unit.pid \ 132 --log=/var/log/unit/unit.log \ 133 --tmp=/var/tmp \ 134 --user=unit \ 135 --group=unit \ 136 --tests \ 137 --openssl 138 139export CR=\\n 140 141default: 142 @echo "valid targets: all modules unit $(addprefix unit-, $(MODULES)) rpmlint specs test test-debug clean" 143 144all: check-build-depends-all unit modules 145 146modules: $(addprefix unit-, $(MODULES)) 147 148specs: rpmbuild/SPECS/unit.spec $(addsuffix .spec, $(addprefix rpmbuild/SPECS/unit-, $(MODULES))) 149 150check-build-depends-%: 151 @{ \ 152 case "$*" in \ 153 all) pkgs="$(BUILD_DEPENDS)" ;; \ 154 unit) pkgs="$(BUILD_DEPENDS_unit)" ;; \ 155 *) pkgs="$(BUILD_DEPENDS_unit) $(BUILD_DEPENDS_$*)" ;; \ 156 esac ; \ 157 not_installed= ; \ 158 for pkg in $${pkgs}; do \ 159 rpm -qi $${pkg} >/dev/null 2>&1 ; \ 160 if [ $$? -ne 0 ]; then \ 161 not_installed="$${not_installed} $${pkg}" ; \ 162 fi ; \ 163 done ; \ 164 if test -n "$${not_installed}" ; then \ 165 echo "" >&2 ; \ 166 echo "The following packages are required in order to proceed:" >&2 ; \ 167 echo "" >&2 ; \ 168 echo $${not_installed} >&2 ; \ 169 echo "" >&2 ; \ 170 exit 1 ; \ 171 fi \ 172 } 173 touch $@ 174 175rpmbuild/SPECS: 176 mkdir -p rpmbuild/SPECS 177 178rpmbuild/SPECS/unit.spec: unit.spec.in ../../docs/changes.xml | rpmbuild/SPECS 179 cat unit.spec.in | \ 180 sed -e "s#%%VERSION%%#$(VERSION)#g" \ 181 -e "s#%%RELEASE%%#$(RELEASE)#g" \ 182 -e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \ 183 -e "s#%%PACKAGE_VENDOR%%#$(PACKAGE_VENDOR)#g" \ 184 > rpmbuild/SPECS/unit.spec 185 cd ../../docs && make ../build/unit.rpm-changelog 186ifneq ($(DEFAULT_VERSION)$(DEFAULT_RELEASE), $(VERSION)$(RELEASE)) 187 cat ../../build/unit.rpm-changelog | sed -e \ 188 "s/> - $(DEFAULT_VERSION)-$(DEFAULT_RELEASE)/> - $(VERSION)-$(RELEASE)/" \ 189 >> rpmbuild/SPECS/unit.spec 190else 191 cat ../../build/unit.rpm-changelog >> rpmbuild/SPECS/unit.spec 192endif 193 194rpmbuild/SOURCES/unit-$(VERSION).tar.gz: 195 cd ../.. && tar -czf pkg/rpm/rpmbuild/SOURCES/unit-$(VERSION).tar.gz \ 196 --transform "s#^#unit-$(VERSION)/#" \ 197 LICENSE NOTICE CHANGES README.md CONTRIBUTING.md configure auto src test version go docs/man/unitd.8.in 198 199unit: check-build-depends-unit rpmbuild/SPECS/unit.spec rpmbuild/SOURCES/unit-$(VERSION).tar.gz 200 @echo "===> Building $@ package" ; \ 201 rpmbuild -D "_topdir `pwd`/rpmbuild" -ba rpmbuild/SPECS/unit.spec && \ 202 ln -s rpmbuild/BUILD/$@-$(VERSION)/build $@ 203 204rpmlint: 205 find rpmbuild/ -name "*.rpm" -print -exec rpmlint {} \; 206 207rpmbuild/SPECS/unit-%.spec: unit.module.spec.in ../../docs/changes.xml | rpmbuild/SPECS 208 @echo "===> Creating $@" 209 @{ \ 210 set -e ; \ 211 i=100 ; \ 212 sources= ; \ 213 for src in $(MODULE_SOURCES_$*); do \ 214 s="`printf "Source%d: %s\n" $${i} $${src}`" ; \ 215 sources="$${sources}\n$${s}" ; \ 216 i=$$(($${i}+1)) ; \ 217 done ; \ 218 pkgname=$(shell echo $@ | cut -d '/' -f 3 | tr '_' '-' | cut -d '.' -f 1) ; \ 219 definitions=`echo "$$MODULE_DEFINITIONS_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \ 220 preinstall=`echo "$$MODULE_PREINSTALL_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \ 221 postinstall=`echo "$$MODULE_POSTINSTALL_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \ 222 files=`echo "$$MODULE_FILES_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \ 223 post=`echo "$$MODULE_POST_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \ 224 cat unit.module.spec.in | sed \ 225 -e "s#%%NAME%%#$${pkgname}#g" \ 226 -e "s#%%SUMMARY%%#$(MODULE_SUMMARY_$*)#g" \ 227 -e "s#%%VERSION%%#$(MODULE_VERSION_$*)#g" \ 228 -e "s#%%RELEASE%%#$(MODULE_RELEASE_$*)#g" \ 229 -e "s#%%UNIT_VERSION%%#$(VERSION)#g" \ 230 -e "s#%%UNIT_RELEASE%%#$(RELEASE)#g" \ 231 -e "s#%%PACKAGE_VENDOR%%#$(PACKAGE_VENDOR)#g" \ 232 -e "s#%%MODULE_SOURCES%%#$${sources}#g" \ 233 -e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \ 234 -e "s#%%MODULE_CONFARGS%%#$(MODULE_CONFARGS_$*)#g" \ 235 -e "s#%%MODULE_MAKEARGS%%#$(MODULE_MAKEARGS_$*)#g" \ 236 -e "s#%%MODULE_INSTARGS%%#$(MODULE_INSTARGS_$*)#g" \ 237 -e "s#%%MODULE_DEFINITIONS%%#$${definitions}#g" \ 238 -e "s#%%MODULE_PREINSTALL%%#$${preinstall}#g" \ 239 -e "s#%%MODULE_POSTINSTALL%%#$${postinstall}#g" \ 240 -e "s#%%MODULE_FILES%%#$${files}#g" \ 241 -e "s#%%MODULE_POST%%#$${post}#g" \ 242 > $@.tmp ; \ 243 } 244 cd ../../docs && make ../build/unit-$(MODULE_SUFFIX_$*).rpm-changelog 245 cat ../../build/unit-$(MODULE_SUFFIX_$*).rpm-changelog | sed -e \ 246 "s/> - $(DEFAULT_VERSION)-$(DEFAULT_RELEASE)/> - $(MODULE_VERSION_$*)-$(MODULE_RELEASE_$*)/" \ 247 >> $@.tmp 248 mv $@.tmp $@ 249 250unit-%: check-build-depends-% rpmbuild/SPECS/unit-%.spec rpmbuild/SOURCES/unit-$(VERSION).tar.gz 251 @echo "===> Building $(subst _,-,$@) package" ; \ 252 rpmbuild -D "_topdir `pwd`/rpmbuild" -ba rpmbuild/SPECS/$@.spec && \ 253 ln -s rpmbuild/BUILD/$(subst _,-,$@)-$(VERSION)/build $@ 254 255test: unit modules 256 @{ \ 257 for so in `find rpmbuild/BUILD/*/build-nodebug/ -type f \( -name "*.so" -o -name "*.jar" \)`; do \ 258 soname=`basename $${so}` ; \ 259 test "$${soname}" = "java.unit.so" && continue ; \ 260 test -h rpmbuild/BUILD/unit-$(VERSION)/build-nodebug/$${soname} || \ 261 ln -fs `pwd`/$${so} rpmbuild/BUILD/unit-$(VERSION)/build-nodebug/$${soname} ; \ 262 done ; \ 263 ( cd rpmbuild/BUILD/unit-$(VERSION) && rm -f build && ln -s build-nodebug build && env python3 -m pytest --user=nobody $(PYTEST_ARGS) ) ; \ 264 } 265 266test-debug: unit modules 267 @{ \ 268 for so in `find rpmbuild/BUILD/*/build-debug/ -type f \( -name "*.so" -o -name "*.jar" \)`; do \ 269 soname=`basename $${so}` ; \ 270 test "$${soname}" = "java.unit.so" && continue ; \ 271 test -h rpmbuild/BUILD/unit-$(VERSION)/build-debug/$${soname} || \ 272 ln -fs `pwd`/$${so} rpmbuild/BUILD/unit-$(VERSION)/build-debug/$${soname} ; \ 273 done ; \ 274 ( cd rpmbuild/BUILD/unit-$(VERSION) && rm -f build && ln -s build-debug build && env python3 -m pytest --user=nobody $(PYTEST_ARGS) ) ; \ 275 } 276 277clean: 278 rm -rf rpmbuild/SPECS rpmbuild/BUILD rpmbuild/BUILDROOT rpmbuild/RPMS rpmbuild/SRPMS ../../build 279 rm -f rpmbuild/SOURCES/unit-*.tar.gz check-build-depends-* 280 find . -maxdepth 1 -type l -delete 281 282.PHONY: default all modules specs rpmlint test test-debug clean 283 284.SECONDARY: $(addprefix check-build-depends-, $(MODULES)) 285