From: Jonas Licht <jonas.li...@fem.tu-ilmenau.de> Signed-off-by: Jonas Licht <jonas.li...@fem.tu-ilmenau.de> --- eclass/nginx-module.eclass | 73 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 eclass/nginx-module.eclass
diff --git a/eclass/nginx-module.eclass b/eclass/nginx-module.eclass new file mode 100644 index 00000000000..178982af285 --- /dev/null +++ b/eclass/nginx-module.eclass @@ -0,0 +1,73 @@ +# Copyright 2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: nginx-module.eclass +# @MAINTAINER: +# Jonas Licht <jonas.li...@gmail.com> +# @AUTHOR: +# Jonas Licht <jonas.li...@gmail.com> +# @BLURB: Provide a set of functions to build nginx dynamic modules. +# @DESCRIPTION: +# Eclass to make dynamic nginx modules. +# As these modules are hardly build against one nginx version we use version cut to indicate the nginx version too. +# The first three parts of the version must represent the nginx version, +# the remaining part displays the module version. +# +# To build a nginx module the whole nginx source code is needed, +# therfore we set the SRC_URI to the nginx source archive. +# The module archive must be added with SRC_URI+= + +case ${EAPI:-0} in + 7) ;; + *) die "This eclass only supports EAPI 7" ;; +esac + +# @ECLASS-VARIABLE: NGX_PV +# @DESCRIPTION: +# Uses version cut of the first three parts of the version to determine the proposed nginx version. +# This version is used for SRC_URI, BDPEND and compiling process. +NGX_PV=$(ver_cut 1-3) + +# @ECLASS-VARIABLE: MODULE_PV +# @DESCRIPTION: +# Uses version cut to get the version of the module. +# Variable can uses for SRC_URI. +MODULE_PV=$(ver_cut 4-) + +BDPEND="=www-servers/nginx-${NGX_PV}:=" +SRC_URI="https://nginx.org/download/nginx-${NGX_PV}.tar.gz + " + +S="${WORKDIR}/nginx-${NGX_PV}" + +EXPORT_FUNCTIONS src_configure src_compile src_install + +# @FUNCTION: nginx-module_src_configure +# @USAGE: [additional-args] +# @DESCRIPTION: +# Parses the configure from the original nginx binary by exicution 'nginx -V' and adds the package as dynamic module. +nginx-module_src_configure() { + if [ `grep -c "\.[[:space:]]auto/module" ${WORKDIR}/${PN}-${MODULE_PV}/config` -eq 0 ]; then + die "module uses old unsupported static config file syntax: https://www.nginx.com/resources/wiki/extending/converting/" + fi + #grep nginx configure from nginx -V add drop all other external modules + NGX_ORIGIN_CONFIGURE=`nginx -V 2>&1 | grep "configure arguments:" | cut -d: -f2 | sed "s/--add-module=\([^\s]\)*\s/ /"` + ./configure ${NGX_ORIGIN_CONFIGURE} --add-dynamic-module="../${PN}-${MODULE_PV}" "$@" || die "configure failed" +} + +# @FUNCTION: nginx-module_src_compile +# @USAGE: [additional-args] +# @DESCRIPTION: +# Runs 'make modules' to only build our package module. +nginx-module_src_compile() { + emake modules "$@" +} + +# @FUNCTION: nginx-module_src_install +# @DESCRIPTION: +# Parses the module config file to get the so file name and install the shared object file to '/usr/$(get_libdir)/nginx/modules' +nginx-module_src_install() { + NGX_MODULE_NAME=`grep ${WORKDIR}/${PN}-${MODULE_PV}/config -e "ngx_addon_name" | cut -d= -f2` + exeinto /usr/$(get_libdir)/nginx/modules + doexe ${S}/objs/${NGX_MODULE_NAME}.so +} -- 2.26.2