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