commit: 84802aaafa00aa974f50124c71006387d5912ca6 Author: Zurab Kvachadze <zurabid2016 <AT> gmail <DOT> com> AuthorDate: Wed Nov 19 02:48:49 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Thu Nov 27 00:24:59 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=84802aaa
www-nginx/njs: new package, add 0.9.4 njs[1] is a "subset of JavaScript language to use in NGINX". The primary dependency is dev-libs/quickjs-ng. The package consists of roughly two parts: libnjs (including libqjs), and the actual njs_module. libnjs is configured and built first in order to use the correct ar and explicitly control other options (e.g. dependencies like OpenSSL, zlib etc). [1]: https://github.com/nginx/njs Closes: https://bugs.gentoo.org/959735 Signed-off-by: Zurab Kvachadze <zurabid2016 <AT> gmail.com> Part-of: https://github.com/gentoo/gentoo/pull/44669 Closes: https://github.com/gentoo/gentoo/pull/44669 Signed-off-by: Sam James <sam <AT> gentoo.org> www-nginx/njs/Manifest | 1 + .../njs-0.9.4-do-not-add-opt-debug-cflags.patch | 85 +++++++++++++++ .../njs/files/njs-0.9.4-support-quickjs-ng.patch | 88 ++++++++++++++++ www-nginx/njs/metadata.xml | 25 +++++ www-nginx/njs/njs-0.9.4.ebuild | 115 +++++++++++++++++++++ 5 files changed, 314 insertions(+) diff --git a/www-nginx/njs/Manifest b/www-nginx/njs/Manifest new file mode 100644 index 000000000000..51a89dc4376c --- /dev/null +++ b/www-nginx/njs/Manifest @@ -0,0 +1 @@ +DIST njs-0.9.4.tar.gz 939082 BLAKE2B f0035edaf72fd5ef1768b3dbd13492105a1885d89c3d2ec97814d3b8e2606a4444eccff4500c7f55a5a92aa4eca1bfa96f1f541d04a971dc60d787c5f76ee8fc SHA512 50b72b9e38dc54b0d013baeff4b00f1857f5b218333d1f090188fbb3bcafcd580edf6807b498002d418bd70490d3c7c16fa5133417aca9faa6f45bf1562020ae diff --git a/www-nginx/njs/files/njs-0.9.4-do-not-add-opt-debug-cflags.patch b/www-nginx/njs/files/njs-0.9.4-do-not-add-opt-debug-cflags.patch new file mode 100644 index 000000000000..6afcd95ceb32 --- /dev/null +++ b/www-nginx/njs/files/njs-0.9.4-do-not-add-opt-debug-cflags.patch @@ -0,0 +1,85 @@ +The initial suggestion and discussion: https://github.com/nginx/njs/pull/990 +The subsequent (authored by a maintainer?) PR: https://github.com/nginx/njs/pull/993 +diff --git a/auto/cc b/auto/cc +index 8a615ec4..d4b28489 100644 +--- a/auto/cc ++++ b/auto/cc +@@ -64,7 +64,6 @@ case $NJS_CC_NAME in + gcc) + njs_define=NJS_GCC . auto/define + +- NJS_CFLAGS="$NJS_CFLAGS -pipe" + NJS_CFLAGS="$NJS_CFLAGS -fPIC" + + # Do not export symbols except explicitly marked with NJS_EXPORT. +@@ -72,9 +71,6 @@ case $NJS_CC_NAME in + + # c99/gnu99 conflict with Solaris XOPEN. + #NJS_CFLAGS="$NJS_CFLAGS -std=gnu99" +- +- NJS_CFLAGS="$NJS_CFLAGS -O" +- #NJS_CFLAGS="$NJS_CFLAGS -O0" + NJS_CFLAGS="$NJS_CFLAGS -W -Wall -Wextra" + + #NJS_CFLAGS="$NJS_CFLAGS -Wunused-result" +@@ -94,12 +90,6 @@ case $NJS_CC_NAME in + + NJS_CFLAGS="$NJS_CFLAGS -Wmissing-prototypes" + +- # Stop on warning. +- NJS_CFLAGS="$NJS_CFLAGS -Werror" +- +- # Debug. +- NJS_CFLAGS="$NJS_CFLAGS -g" +- + if [ "$NJS_ADDRESS_SANITIZER" = "YES" ]; then + NJS_CFLAGS="$NJS_CFLAGS -fsanitize=address" + NJS_CFLAGS="$NJS_CFLAGS -fno-omit-frame-pointer" +@@ -109,14 +99,11 @@ case $NJS_CC_NAME in + clang) + njs_define=NJS_CLANG . auto/define + +- NJS_CFLAGS="$NJS_CFLAGS -pipe" + NJS_CFLAGS="$NJS_CFLAGS -fPIC" + + # Do not export symbols except explicitly marked with NJS_EXPORT. + NJS_CFLAGS="$NJS_CFLAGS -fvisibility=hidden" + +- NJS_CFLAGS="$NJS_CFLAGS -O" +- #NJS_CFLAGS="$NJS_CFLAGS -O0" + NJS_CFLAGS="$NJS_CFLAGS -W -Wall -Wextra" + + #NJS_CFLAGS="$NJS_CFLAGS -Wunused-result" +@@ -130,17 +117,6 @@ case $NJS_CC_NAME in + + NJS_CFLAGS="$NJS_CFLAGS -Wmissing-prototypes" + +- # Stop on warning. +- NJS_CFLAGS="$NJS_CFLAGS -Werror" +- +- # Debug. +- +- if [ "$NJS_SYSTEM_PLATFORM" != "powerpc" ]; then +- # "-g" flag causes the "unknown pseudo-op: `.cfi_sections'" +- # error on PowerPC Clang. +- NJS_CFLAGS="$NJS_CFLAGS -g" +- fi +- + if [ "$NJS_ADDRESS_SANITIZER" = "YES" ]; then + NJS_CFLAGS="$NJS_CFLAGS -fsanitize=address" + NJS_CFLAGS="$NJS_CFLAGS -fno-omit-frame-pointer" +diff --git a/auto/options b/auto/options +index 0a4dc6c7..c3399062 100644 +--- a/auto/options ++++ b/auto/options +@@ -3,8 +3,8 @@ + # Copyright (C) NGINX, Inc. + + +-NJS_CC_OPT=${NJS_CC_OPT:--O} +-NJS_LD_OPT=${NJS_CC_OPT:--O} ++NJS_CC_OPT= ++NJS_LD_OPT= + + NJS_DEBUG=NO + NJS_DEBUG_MEMORY=NO diff --git a/www-nginx/njs/files/njs-0.9.4-support-quickjs-ng.patch b/www-nginx/njs/files/njs-0.9.4-support-quickjs-ng.patch new file mode 100644 index 000000000000..90d1f686739d --- /dev/null +++ b/www-nginx/njs/files/njs-0.9.4-support-quickjs-ng.patch @@ -0,0 +1,88 @@ +Original proposal: https://github.com/nginx/njs/pull/988 +Enhanced version merged upstream in: https://github.com/nginx/njs/pull/989 +diff --git a/src/quickjs_compat.h b/src/quickjs_compat.h +index 3b7a618c7..7753086d3 100644 +--- a/src/quickjs_compat.h ++++ b/src/quickjs_compat.h +@@ -22,3 +22,7 @@ + #ifndef JS_BOOL + #define JS_BOOL bool + #endif ++ ++#ifdef QUICKJS_NG ++ #define JS_IsError(cx, val) JS_IsError(val) ++#endif + +diff --git a/auto/quickjs b/auto/quickjs +index 8d6b544f9..c574c83f3 100644 +--- a/auto/quickjs ++++ b/auto/quickjs +@@ -7,6 +7,10 @@ NJS_QUICKJS_LIB= + NJS_HAVE_QUICKJS=NO + NJS_QUICKJS_DEFAULT_INCS="src $NJS_BUILD_DIR" + ++# Alternative pkg-config binary can be supplied by setting the PKG_CONFIG ++# environment variable. ++: "${PKG_CONFIG:=pkg-config}" ++ + if [ $NJS_TRY_QUICKJS = YES ]; then + njs_found=no + +@@ -57,6 +61,20 @@ if [ $NJS_TRY_QUICKJS = YES ]; then + . auto/feature + fi + ++ if [ $njs_found = no ]; then ++ njs_feature="QuickJS-NG library via pkg-config" ++ ++ flags="$("${PKG_CONFIG}" --cflags-only-I quickjs-ng)" ++ # Trim the -I prefix from includes. ++ pkg_config_includes="$(printf "%s\n" "$flags" | sed 's|-I||g')" ++ pkg_config_libs="$("${PKG_CONFIG}" --libs quickjs-ng)" ++ ++ njs_feature_incs="$NJS_QUICKJS_DEFAULT_INCS ${pkg_config_includes}" ++ njs_feature_libs="-lm -ldl -lpthread ${pkg_config_libs}" ++ ++ . auto/feature ++ fi ++ + + if [ $njs_found = yes ]; then + +diff --git a/nginx/config b/nginx/config +index 3386dac08..0a74cd969 100644 +--- a/nginx/config ++++ b/nginx/config +@@ -26,6 +26,10 @@ NJS_QUICKJS_INC= + NJS_QUICKJS_DEFAULT_INCS="$ngx_addon_dir/../src $ngx_addon_dir/../build" + NJS_HAVE_QUICKJS= + ++# Alternative pkg-config binary can be supplied by setting the PKG_CONFIG ++# environment variable. ++: "${PKG_CONFIG:=pkg-config}" ++ + if [ $NJS_QUICKJS != NO ]; then + + ngx_feature="QuickJS library -lquickjs.lto" +@@ -71,6 +75,21 @@ if [ $NJS_QUICKJS != NO ]; then + . auto/feature + fi + ++ if [ $ngx_found = no ]; then ++ ngx_feature="QuickJS-NG library via pkg-config" ++ ++ flags="$("${PKG_CONFIG}" --cflags-only-I quickjs-ng)" ++ # Trim the -I prefix from includes. ++ pkg_config_includes="$(printf "%s\n" "$flags" | sed 's|-I||g')" ++ pkg_config_libs="$("${PKG_CONFIG}" --libs quickjs-ng)" ++ ++ ngx_feature_path="$NJS_QUICKJS_DEFAULT_INCS ${pkg_config_includes}" ++ ngx_feature_libs="-lm -ldl -lpthread ${pkg_config_libs}" ++ ++ . auto/feature ++ fi ++ ++ + if [ $ngx_found = yes ]; then + + ngx_feature="QuickJS JS_GetClassID()" diff --git a/www-nginx/njs/metadata.xml b/www-nginx/njs/metadata.xml new file mode 100644 index 000000000000..50a66e38039d --- /dev/null +++ b/www-nginx/njs/metadata.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person" proxied="yes"> + <email>[email protected]</email> + <name>Zurab Kvachadze</name> + </maintainer> + <maintainer type="project" proxied="proxy"> + <email>[email protected]</email> + <name>Proxy Maintainers</name> + </maintainer> + <use> + <flag name="tools">Build the command-line utility njs</flag> + </use> + <longdescription> + NGINX JavaScript, also known as NJS, is a dynamic module for NGINX that enables the + extension of built-in functionality using familiar JavaScript syntax. The NJS language is a + subset of JavaScript, compliant with ES5 (ECMAScript 5.1 Strict Variant) with some ES6 + (ECMAScript 6) and newer extensions. + </longdescription> + <upstream> + <bugs-to>https://github.com/nginx/njs/issues</bugs-to> + <remote-id type="github">nginx/njs</remote-id> + </upstream> +</pkgmetadata> diff --git a/www-nginx/njs/njs-0.9.4.ebuild b/www-nginx/njs/njs-0.9.4.ebuild new file mode 100644 index 000000000000..eafd31dbd027 --- /dev/null +++ b/www-nginx/njs/njs-0.9.4.ebuild @@ -0,0 +1,115 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +NGINX_MOD_CONFIG_DIR="nginx" + +inherit edo nginx-module toolchain-funcs + +DESCRIPTION="A subset of JavaScript language to use in NGINX" +HOMEPAGE="https://github.com/nginx/njs https://nginx.org/en/docs/njs/" +SRC_URI=" + https://github.com/nginx/njs/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz +" + +LICENSE="BSD-2" +SLOT="0" +KEYWORDS="~amd64" + +IUSE="tools +ssl +xml +zlib" + +RDEPEND=" + dev-libs/quickjs-ng:= + tools? ( + dev-libs/libpcre2:= + sys-libs/readline:= + ) + ssl? ( dev-libs/openssl:= ) + xml? ( + dev-libs/libxml2:= + dev-libs/libxslt:= + ) + zlib? ( virtual/zlib:= ) +" +DEPEND="${RDEPEND}" +BDEPEND="virtual/pkgconfig" + +PATCHES=( + # Note: drop on the next upgrade, has been merged upstream as PR 989. + "${FILESDIR}/${PN}-0.9.4-support-quickjs-ng.patch" + + "${FILESDIR}/${PN}-0.9.4-do-not-add-opt-debug-cflags.patch" +) + +src_configure() { + ## The core part, i.e. libnjs and libqjs. + local myargs=( + --build-dir=build + --cc="$(tc-getCC)" + --ld-opt="${LDFLAGS}" + --ar="$(tc-getAR)" + ) + + local nocliargs=( + --no-openssl + --no-libxml2 + --no-zlib + ) + + if use tools; then + use !ssl && myargs+=( '--no-openssl' ) + use !xml && myargs+=( '--no-libxml2' ) + use !zlib && myargs+=( '--no-zlib' ) + else + myargs+=( "${nocliargs[@]}" ) + fi + + pushd "${NGINX_MOD_S}" >/dev/null || die "pushd failed" + edo ./configure "${myargs[@]}" + popd >/dev/null || die "popd failed" + + ## The NGINX module part. + # Build the stream module unconditionally. + sed -i "s/\\\$STREAM/YES/" "${NGINX_MOD_S}/${NGINX_MOD_CONFIG_DIR}/config" || + die "sed failed" + + # Export PKG_CONFIG for pkg-config-based QuickJS-NG detection. + tc-export PKG_CONFIG + + if use ssl; then + # Because NGINX build system refuses to link OPENSSL and ZLIB normally + # like other libraries. + ngx_mod_link_lib openssl + else + local -x NJS_OPENSSL=NO + fi + + if use zlib; then + # Ditto. + ngx_mod_link_lib zlib + else + local -x NJS_ZLIB=NO + fi + + use !xml && local -x NJS_LIBXSLT=NO + + nginx-module_src_configure +} + +src_compile() { + # Build the core first. + if use tools; then + emake -C "${NGINX_MOD_S}" + else + emake -C "${NGINX_MOD_S}" libnjs libqjs + fi + + nginx-module_src_compile +} + +src_install() { + use tools && dobin "${NGINX_MOD_S}"/build/njs + + nginx-module_src_install +}
