# Template file for 'nginx'
#
# Consider using mime.types from mime-types package
# See comments in mime-types template
pkgname=nginx
version=1.30.3
revision=1
_tests_commit=4d1de3f357afeb91865d024b27516d6b67aad86e
_njs_version=0.9.9
build_style=gnu-makefile
_cfgdir=/etc/nginx
_tmpdir=/var/lib/nginx/tmp
configure_args="--prefix=${_cfgdir}
 --conf-path=${_cfgdir}/nginx.conf
 --sbin-path=/usr/bin/nginx
 --modules-path=/usr/lib/nginx/modules
 --pid-path=/run/nginx.pid
 --lock-path=/var/lock/nginx.lock
 --user=nginx
 --group=nginx
 --http-log-path=/var/log/nginx/access.log
 --error-log-path=/var/log/nginx/error.log
 --http-client-body-temp-path=${_tmpdir}/client-body
 --http-proxy-temp-path=${_tmpdir}/proxy
 --http-fastcgi-temp-path=${_tmpdir}/fastcgi
 --http-scgi-temp-path=${_tmpdir}/scgi
 --http-uwsgi-temp-path=${_tmpdir}/uwsgi
 --with-compat
 --with-file-aio
 --with-http_auth_request_module
 --with-http_dav_module
 --with-http_gunzip_module
 --with-http_gzip_static_module
 --with-http_realip_module
 --with-http_ssl_module
 --with-http_slice_module
 --with-http_stub_status_module
 --with-http_sub_module
 --with-http_v2_module
 --with-http_v3_module
 --with-http_xslt_module=dynamic
 --with-http_geoip_module=dynamic
 --with-http_perl_module=dynamic
 --with-openssl-opt=enable-ktls
 --with-stream=dynamic
 --with-stream_geoip_module=dynamic
 --with-stream_realip_module
 --with-stream_ssl_module
 --with-stream_ssl_preread_module
 --with-mail
 --with-mail_ssl_module
 --with-pcre-jit
 --with-threads
 --add-dynamic-module=njs/nginx"
hostmakedepends="perl geoip-devel openssl-devel pcre2-devel libxslt-devel"
makedepends="${hostmakedepends}"
checkdepends="perl perl-IO-Socket-SSL perl-GD perl-FCGI perl-CryptX which uwsgi uwsgi-python3"
short_desc="High performance web and reverse proxy server"
maintainer="Duncaen <duncaen@voidlinux.org>"
license="BSD-2-Clause"
homepage="https://nginx.org"
changelog="https://nginx.org/en/CHANGES-${version%.*}"
distfiles="https://nginx.org/download/nginx-${version}.tar.gz
 https://github.com/nginx/nginx-tests/archive/${_tests_commit}.tar.gz>nginx-tests-${_tests_commit}.tar.gz
 https://github.com/nginx/njs/archive/refs/tags/${_njs_version}.tar.gz>njs-${_njs_version}.tar.gz"
checksum="e5823dc6f45610993def93ebf6cfce68264af4958c77e874b7d20f3709001b8f
 e6008f0883a98eb30d84b2ab5d69c19aed2dea8a2eb368402a526e1d3fd16636
 a07f4cf0a2076bbabde23cab48aea68641ebf5d54ea69b415ce70a8da4153843"

skip_extraction="nginx-tests-${_tests_commit}.tar.gz njs-${_njs_version}.tar.gz"

# Tests fail when nginx run as root and there is no nginx user
make_check=ci-skip

if [ "$XBPS_TARGET_LIBC" = "glibc" ]; then
	hostmakedepends+=" libxcrypt-devel"
	makedepends+=" libxcrypt-devel"
fi

# NOTE:
# On update, the pregenerated header file for ARM may need synchronization.
# See srcpkgs/nginx/files/ngx_auto_config.h.armv6l.patch for more information.

conf_files="/etc/nginx/fastcgi.conf
 /etc/nginx/fastcgi_params
 /etc/nginx/koi-win
 /etc/nginx/koi-utf
 /etc/nginx/mime.types
 /etc/nginx/nginx.conf
 /etc/nginx/scgi_params
 /etc/nginx/uwsgi_params
 /etc/nginx/win-utf"
system_accounts="nginx"
nginx_homedir="/var/lib/nginx"
make_dirs="/var/log/nginx 0750 root root
 /var/lib/nginx 1777 root root
 /var/lib/nginx/tmp 0750 nginx root"

post_extract() {
	vsrcextract -C tests "nginx-tests-${_tests_commit}.tar.gz"
	vsrcextract -C njs "njs-${_njs_version}.tar.gz"
}

do_configure() {
	if [ "$CROSS_BUILD" ]; then
		# fake configure run on host
		unset CC CPP LD CFLAGS CPPFLAGS LDFLAGS

		local perlprefix=${XBPS_STATEDIR}/perlprefix-${XBPS_TARGET_MACHINE}
		mkdir -p $perlprefix
		if [ -d "$XBPS_CROSS_BASE/usr/lib/perl5/core_perl" ]; then
			cp "$XBPS_CROSS_BASE/usr/lib/perl5/core_perl/Config"*.p? $perlprefix
			cp "$XBPS_CROSS_BASE/usr/lib/perl5/core_perl/Errno.pm" $perlprefix
			sed -i -e "s;archlibexp => '\(.*\)';archlibexp => '${XBPS_CROSS_BASE}\1';" \
				${perlprefix}/Config.pm
			sed -i -e "s;^archlibexp='\(.*\)';archlibexp='${XBPS_CROSS_BASE}\1';" \
				${perlprefix}/Config_heavy.pl
		else
			cp "/usr/lib/perl5/core_perl/Config"*.p? $perlprefix
			cp "/usr/lib/perl5/core_perl/Errno.pm" $perlprefix
		fi
		export PERL5LIB=$perlprefix
	fi

	./configure ${configure_args}
	( cd njs && ./configure )
}

pre_build() {
	if [ "$CROSS_BUILD" ]; then
		mkdir -p njs/build
		case "$XBPS_TARGET_MACHINE" in
		arm*)
			cp "${FILESDIR}/ngx_auto_config.h.armv6l" objs/ngx_auto_config.h
			cp "${FILESDIR}/njs_auto_config.h.armv6l" njs/build/njs_auto_config.h
			;;
		aarch64*)
			cp "${FILESDIR}/ngx_auto_config.h.aarch64" objs/ngx_auto_config.h
			cp "${FILESDIR}/njs_auto_config.h.aarch64" njs/build/njs_auto_config.h
			;;
		riscv64*)
			cp "${FILESDIR}/ngx_auto_config.h.riscv64" objs/ngx_auto_config.h
			cp "${FILESDIR}/njs_auto_config.h.riscv64" njs/build/njs_auto_config.h
			;;
		esac

		sed -i "s:-I/usr:-I${XBPS_CROSS_BASE}/usr:" objs/Makefile
	fi

	sed -i 's/-lcrypt/$(LDFLAGS) &/' objs/Makefile

	export LD="$CC"

	(
		cd njs
		make ${makejobs} NJS_CC="$CC" NJS_CFLAGS="$CFLAGS -fPIC" \
			NJS_STATIC_LINK="$AR -r -c" NJS_LINK="$CC -O"
	)
}

do_check() {
	TEST_NGINX_BINARY="$PWD/objs/nginx" prove -j ${XBPS_MAKEJOBS} tests
}

post_install() {
	rm -- "$DESTDIR"/etc/nginx/*.default

	vmkdir usr/share/nginx
	mv "$DESTDIR/etc/nginx/html" "$DESTDIR/usr/share/nginx"

	vman man/nginx.8

	vlicense LICENSE
	vsv nginx
}

nginx-mod-http-geoip_package() {
	short_desc+=" - HTTP GeoIP module"
	depends="${sourcepkg}>=${version}_${revision}"
	pkg_install() {
		vmove usr/lib/nginx/modules/ngx_http_geoip_module.so
	}
}

nginx-mod-http-js_package() {
	short_desc+=" - HTTP njs module"
	depends="${sourcepkg}>=${version}_${revision}"
	pkg_install() {
		vmove usr/lib/nginx/modules/ngx_http_js_module.so
	}
}

nginx-mod-http-perl_package() {
	short_desc+=" - Perl module"
	depends="${sourcepkg}>=${version}_${revision}"
	pkg_install() {
		vmove usr/lib/nginx/modules/ngx_http_perl_module.so
	}
}

nginx-mod-http-xslt-filter_package() {
	short_desc+=" - XSLT filter module"
	depends="${sourcepkg}>=${version}_${revision}"
	pkg_install() {
		vmove usr/lib/nginx/modules/ngx_http_xslt_filter_module.so
	}
}

nginx-mod-stream_package() {
	short_desc+=" - Stream module"
	depends="${sourcepkg}>=${version}_${revision}"
	pkg_install() {
		vmove usr/lib/nginx/modules/ngx_stream_module.so
	}
}

nginx-mod-stream-js_package() {
	short_desc+=" - Stream njs module"
	depends="${sourcepkg}>=${version}_${revision}"
	pkg_install() {
		vmove usr/lib/nginx/modules/ngx_stream_js_module.so
	}
}

nginx-mod-stream-geoip_package() {
	short_desc+=" - Stream GeoIP module"
	depends="${sourcepkg}>=${version}_${revision}"
	pkg_install() {
		vmove usr/lib/nginx/modules/ngx_stream_geoip_module.so
	}
}
