git: fa93fdc383c1 - main - Framework: Rewrite nodejs.mk and reorganize www/{node,npm,yarn}
Date: Mon, 30 Jan 2023 14:25:50 UTC
The branch main has been updated by sunpoet:
URL: https://cgit.FreeBSD.org/ports/commit/?id=fa93fdc383c190569821ae224413c848c19d9a7c
commit fa93fdc383c190569821ae224413c848c19d9a7c
Author: Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2023-01-30 14:20:38 +0000
Commit: Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2023-01-30 14:20:38 +0000
Framework: Rewrite nodejs.mk and reorganize www/{node,npm,yarn}
The current USES=nodejs has the following issues:
- www/node is not the default version while www/node16 is.
- It also means inconsistent naming of node ports.
- www/npm duplicates with www/npm-node16.
- www/yarn duplicates with www/yarn-node16.
The notable changes are introduced to fix the above issues:
- Rewrite Mk/Uses/nodejs.mk.
- Add new LTS version of nodejs (www/noe18).
- Add new current version of nodejs (www/node19).
- Change default nodejs version from 16 to 18 (latest LTS).
- Use consistent naming for all supported node versions.
- Convert www/node, www/npm and www/yarn to meta ports.
After this commit:
- All supported node versions are named as node{14,16,18,19}
- www/node is a meta port which depends on the default version (e.g. www/node18)
- www/npm is a meta port which depends on the default version (e.g. www/npm-node18)
- www/yarn is a meta port which depends on the default version (e.g. www/yarn-node18)
- Bump PORTREVISION of dependent ports for dependency change (from www/node16 to www/node18)
Discussed with: jrm, otis, pizzamig
---
Mk/Uses/nodejs.mk | 78 +-
Mk/bsd.default-versions.mk | 2 +-
devel/node-thrift/Makefile | 2 +-
devel/purescript-language-server/Makefile | 1 +
devel/rubygem-execjs/Makefile | 2 +-
devel/sonar-scanner-cli/Makefile | 2 +-
games/wipeclean/Makefile | 1 +
lang/coffeescript/Makefile | 1 +
textproc/write-good/Makefile | 1 +
www/csso/Makefile | 2 +-
www/node/Makefile | 96 +-
www/node/pkg-descr | 8 +-
www/node14/Makefile | 2 +-
www/node16/Makefile | 2 +-
www/node18/Makefile | 102 +
www/{node => node18}/distinfo | 0
www/{node => node18}/files/extra-patch-common.gypi | 0
...l_config_archs_linux-elf_no-asm_openssl-cl.gypi | 0
...nssl_config_archs_linux-elf_no-asm_openssl.gypi | 0
.../patch-deps_openssl_openssl-cl__no__asm.gypi | 0
.../files/patch-deps_openssl_openssl__no__asm.gypi | 0
...h-deps_v8_src_base_platform_platform-freebsd.cc | 0
.../files/patch-deps_v8_src_codegen_arm_cpu-arm.cc | 0
.../patch-deps_v8_src_codegen_ppc_constants-ppc.h | 0
.../files/patch-deps_v8_src_libsampler_sampler.cc | 0
www/{node => node18}/files/patch-node.gypi | 0
www/{node => node18}/files/patch-src_cares__wrap.h | 0
.../files/patch-tools_v8__gypfiles_v8.gyp | 0
www/node18/pkg-descr | 4 +
www/{node => node18}/pkg-message | 0
www/{node => node18}/pkg-plist | 0
www/node19/Makefile | 91 +
www/node19/distinfo | 3 +
www/node19/files/extra-patch-common.gypi | 13 +
...l_config_archs_linux-elf_no-asm_openssl-cl.gypi | 11 +
...nssl_config_archs_linux-elf_no-asm_openssl.gypi | 11 +
.../patch-deps_openssl_openssl-cl__no__asm.gypi | 17 +
.../files/patch-deps_openssl_openssl__no__asm.gypi | 11 +
...h-deps_v8_src_base_platform_platform-freebsd.cc | 13 +
.../files/patch-deps_v8_src_codegen_arm_cpu-arm.cc | 18 +
.../patch-deps_v8_src_codegen_ppc_constants-ppc.h | 20 +
.../files/patch-deps_v8_src_libsampler_sampler.cc | 13 +
www/node19/files/patch-node.gypi | 12 +
www/node19/files/patch-src_cares__wrap.h | 11 +
www/node19/files/patch-tools_v8__gypfiles_v8.gyp | 11 +
www/node19/pkg-descr | 4 +
www/node19/pkg-message | 7 +
www/node19/pkg-plist | 2332 ++++++++++++++++++++
www/npm-node14/Makefile | 8 +-
www/npm-node16/Makefile | 8 +-
www/npm-node18/Makefile | 43 +-
www/{npm => npm-node18}/distinfo | 0
www/npm-node18/pkg-descr | 2 +
www/{npm => npm-node18}/pkg-plist | 0
www/npm-node19/Makefile | 5 +
www/npm/Makefile | 34 +-
www/yarn-node14/Makefile | 6 +-
www/yarn-node16/Makefile | 6 +-
www/yarn-node18/Makefile | 52 +-
www/{yarn => yarn-node18}/distinfo | 0
www/{yarn => yarn-node18}/files/patch-lib_cli.js | 0
www/yarn-node18/pkg-descr | 4 +
www/{yarn => yarn-node18}/pkg-plist | 0
www/yarn-node19/Makefile | 5 +
www/yarn/Makefile | 49 +-
65 files changed, 2878 insertions(+), 248 deletions(-)
diff --git a/Mk/Uses/nodejs.mk b/Mk/Uses/nodejs.mk
index 02571bf596ef..751d95dfe443 100644
--- a/Mk/Uses/nodejs.mk
+++ b/Mk/Uses/nodejs.mk
@@ -1,58 +1,60 @@
-# Provide support for NodeJS
+# Provide support for Node.js
#
-# Feature: nodejs
-# Usage: USES=nodejs or USES=nodejs:args
-# Valid ARGS: build and/or run <version>
-# version: lts, current, 14, 16, 18
-# Default is: build,run
-# Note: if you define a version, you must provide run and/or build
+# Feature: nodejs
#
-# MAINTAINER: ports@FreeBSD.org
+# Usage: USES=nodejs[:args]
+# Valid args:
+# - build use node as build-time dependency
+# - run use node as runtime dependency
+# - env set the environment (NODEJS_VERSION and NODEJS_SUFFIX)
+# - version available version: lts, current, 14, 16, 18, 19
+#
+# Note:
+# - The supported versions follow upstream release schedule
+# https://github.com/nodejs/Release/blob/main/README.md#release-schedule
+# - lts is 18 now
+# - current is 19 now
+# - USES=nodejs means USES=nodejs:build,run
+# - If you define a version, you must provide run and/or build
+#
+# MAINTAINER: sunpoet@FreeBSD.org
.if !defined(_INCLUDE_USES_NODEJS_MK)
_INCLUDE_USES_NODEJS_MK= yes
-_VALID_NODEJS_VERSION= 14 16 18 lts current
-_NODEJS_VERSION_SUFFIX= ${NODEJS_DEFAULT}
+_VALID_NODEJS_VERSIONS= 14 16 18 19 current lts
+
+. if ! ${_VALID_NODEJS_VERSIONS:M${NODEJS_DEFAULT}}
+IGNORE= Invalid default nodejs version ${NODEJS_DEFAULT}; valid versions are ${_VALID_NODEJS_VERSIONS}
+. endif
-. if ! ${_VALID_NODEJS_VERSION:M${_NODEJS_VERSION_SUFFIX}}
-IGNORE= Invalid nodejs default version ${_NODEJS_VERSION_SUFFIX}; valid versions are ${_VALID_NODEJS_VERSION}
+. if !empty(${nodejs_ARGS:Nbuild:Nrun:Nlts:Ncurrent:N14:N16:N18:N19})
+IGNORE= USES=nodejs has invalid arguments ${nodejs_ARGS}.
. endif
. if empty(nodejs_ARGS)
nodejs_ARGS= build,run
. endif
-. if ${nodejs_ARGS:M14}
-_NODEJS_VERSION_SUFFIX= 14
-. elif ${nodejs_ARGS:M16}
-_NODEJS_VERSION_SUFFIX= 16
-. elif ${nodejs_ARGS:Mlts}
-_NODEJS_VERSION_SUFFIX= lts
-. elif ${nodejs_ARGS:M18}
-_NODEJS_VERSION_SUFFIX= 18
-. elif ${nodejs_ARGS:Mcurrent}
-_NODEJS_VERSION_SUFFIX= current
-. elif defined(NODEJS_DEFAULT)
-. endif
+.undef _NODEJS_VER
+. for version in ${_VALID_NODEJS_VERSIONS}
+. if ${nodejs_ARGS:M${version}}
+_NODEJS_VER= ${version}
+. endif
+. endfor
-# The nodejs 18 version is named www/node
-. if ${_NODEJS_VERSION_SUFFIX:Mcurrent}
-_NODEJS_VERSION_SUFFIX=
-. endif
-. if ${_NODEJS_VERSION_SUFFIX:M18}
-_NODEJS_VERSION_SUFFIX=
-. endif
-# The nodejs LTS is version 16
-. if ${_NODEJS_VERSION_SUFFIX:Mlts}
-_NODEJS_VERSION_SUFFIX= 16
+. if !defined(_NODEJS_VER)
+_NODEJS_VER= ${NODEJS_DEFAULT}
. endif
-. if ${nodejs_ARGS:M*run*}
-RUN_DEPENDS+= node:www/node${_NODEJS_VERSION_SUFFIX}
-. endif
+NODEJS_VERSION= ${_NODEJS_VER:S|current|19|:S|lts|18|}
+NODEJS_SUFFIX= -node${NODEJS_VERSION}
+
. if ${nodejs_ARGS:M*build*}
-BUILD_DEPENDS+= node:www/node${_NODEJS_VERSION_SUFFIX}
+BUILD_DEPENDS+= node:www/node${NODEJS_VERSION}
+. endif
+. if ${nodejs_ARGS:M*run*}
+RUN_DEPENDS+= node:www/node${NODEJS_VERSION}
. endif
.endif
diff --git a/Mk/bsd.default-versions.mk b/Mk/bsd.default-versions.mk
index a1d2bec65aa5..12481dd983d2 100644
--- a/Mk/bsd.default-versions.mk
+++ b/Mk/bsd.default-versions.mk
@@ -93,7 +93,7 @@ MONO_DEFAULT= 5.10
MYSQL_DEFAULT?= 5.7
# Possible values: ninja, samurai
NINJA_DEFAULT?= ninja
-# Possible value: 14, 16, 18, lts, current
+# Possible value: 14, 16, 18, 19, current, lts (Note: current = 19 and lts = 18)
NODEJS_DEFAULT?= lts
# Possible values: 5.32, 5.34, 5.36, devel
. if !exists(${LOCALBASE}/bin/perl) || (!defined(_PORTS_ENV_CHECK) && \
diff --git a/devel/node-thrift/Makefile b/devel/node-thrift/Makefile
index 2b2eb2ccf2c7..051dd420098b 100644
--- a/devel/node-thrift/Makefile
+++ b/devel/node-thrift/Makefile
@@ -1,6 +1,6 @@
PORTNAME= thrift
PORTVERSION= ${THRIFT_PORTVERSION}
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= devel
MASTER_SITES= APACHE/thrift/${PORTVERSION}
PKGNAMEPREFIX= node-
diff --git a/devel/purescript-language-server/Makefile b/devel/purescript-language-server/Makefile
index 076934c6af01..0bcda3f69077 100644
--- a/devel/purescript-language-server/Makefile
+++ b/devel/purescript-language-server/Makefile
@@ -1,5 +1,6 @@
PORTNAME= purescript-language-server
PORTVERSION= 0.17.1
+PORTREVISION= 1
CATEGORIES= devel textproc
MASTER_SITES= https://github.com/nwolverson/${PORTNAME}/releases/download/v${PORTVERSION}/
DISTNAME= ${PORTNAME}.js
diff --git a/devel/rubygem-execjs/Makefile b/devel/rubygem-execjs/Makefile
index 8b98e931c300..55d93660927b 100644
--- a/devel/rubygem-execjs/Makefile
+++ b/devel/rubygem-execjs/Makefile
@@ -1,6 +1,6 @@
PORTNAME= execjs
PORTVERSION= 2.8.1
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= devel rubygems
MASTER_SITES= RG
diff --git a/devel/sonar-scanner-cli/Makefile b/devel/sonar-scanner-cli/Makefile
index b529244cf66f..b4e9c7f8f7f5 100644
--- a/devel/sonar-scanner-cli/Makefile
+++ b/devel/sonar-scanner-cli/Makefile
@@ -1,6 +1,6 @@
PORTNAME= sonar-scanner-cli
DISTVERSION= 4.4.0.2170
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= devel security www java
MASTER_SITES= https://binaries.sonarsource.com/Distribution/${PORTNAME}/
diff --git a/games/wipeclean/Makefile b/games/wipeclean/Makefile
index 04864a0d1439..e093ebca1968 100644
--- a/games/wipeclean/Makefile
+++ b/games/wipeclean/Makefile
@@ -1,5 +1,6 @@
PORTNAME= wipeclean
PORTVERSION= 1.1.2
+PORTREVISION= 1
PORTEPOCH= 1
CATEGORIES= games
MASTER_SITES= LOCAL/ehaupt
diff --git a/lang/coffeescript/Makefile b/lang/coffeescript/Makefile
index 835a2bc43b51..4514e5495a42 100644
--- a/lang/coffeescript/Makefile
+++ b/lang/coffeescript/Makefile
@@ -1,5 +1,6 @@
PORTNAME= coffeescript
DISTVERSION= 2.7.0
+PORTREVISION= 1
CATEGORIES= lang
MAINTAINER= egypcio@FreeBSD.org
diff --git a/textproc/write-good/Makefile b/textproc/write-good/Makefile
index 6fa213987a3d..dd76b24c0f0f 100644
--- a/textproc/write-good/Makefile
+++ b/textproc/write-good/Makefile
@@ -1,6 +1,7 @@
PORTNAME= write-good
DISTVERSIONPREFIX= v
DISTVERSION= 1.0.8
+PORTREVISION= 1
CATEGORIES= textproc
MASTER_SITES= LOCAL/0mp/:npm
DISTFILES= ${_NPM_DISTFILES}
diff --git a/www/csso/Makefile b/www/csso/Makefile
index d5b5817d8611..4aef64bb76e0 100644
--- a/www/csso/Makefile
+++ b/www/csso/Makefile
@@ -1,7 +1,7 @@
PORTNAME= csso
PORTVERSION= 1.3.9
DISTVERSIONPREFIX= v
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= www
MASTER_SITES= http://nivit.altervista.org/FreeBSD/ports/distfiles/
diff --git a/www/node/Makefile b/www/node/Makefile
index 3036858e8355..e8cdab80177b 100644
--- a/www/node/Makefile
+++ b/www/node/Makefile
@@ -1,100 +1,12 @@
PORTNAME= node
PORTVERSION= 18.12.1
-DISTVERSIONPREFIX= v
CATEGORIES= www
-MASTER_SITES= https://nodejs.org/dist/v${PORTVERSION}/
MAINTAINER= sunpoet@FreeBSD.org
-COMMENT= V8 JavaScript for client and server
-WWW= https://nodejs.org/
+COMMENT= V8 JavaScript for client and server (meta port)
+WWW= https://nodejs.org/ \
+ https://github.com/nodejs/node
-LICENSE= MIT
-LICENSE_FILE= ${WRKSRC}/LICENSE
-
-BROKEN_SSL= libressl libressl-devel
-BROKEN_SSL_REASON= Node.js ${PORTVERSION:R:R}.x requires OpenSSL 1.1.x or the BUNDLED_SSL option enabled
-ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 powerpc64 powerpc64le
-
-BUILD_DEPENDS= brotli>=1.0.9,1:archivers/brotli \
- c-ares>=1.17.2:dns/c-ares \
- libnghttp2>=1.45.1:www/libnghttp2 \
- libuv>=1.42.0:devel/libuv \
- objdump:devel/binutils
-LIB_DEPENDS= libbrotlidec.so:archivers/brotli \
- libcares.so:dns/c-ares \
- libnghttp2.so:www/libnghttp2 \
- libuv.so:devel/libuv
-
-USES= compiler:c++11-lib gmake localbase pkgconfig python:3.6-3.10,build shebangfix
-
-CONFIGURE_ARGS= --prefix=${PREFIX:S|^${DESTDIR}||} \
- --shared-brotli \
- --shared-cares \
- --shared-libuv \
- --shared-nghttp2 \
- --shared-zlib \
- --without-npm
-HAS_CONFIGURE= yes
-MAKE_ENV= CC.host="${CC}" \
- CFLAGS.host="${CFLAGS}" \
- CXX.host="${CXX}" \
- CXXFLAGS.host="${CXXFLAGS}" \
- LDFLAGS.host="${LDFLAGS}" \
- LINK.host="${CXX}"
-REINPLACE_ARGS= -i ''
-
-CONFLICTS_INSTALL= node[0-9][0-9]
-
-SHEBANG_FILES= deps/v8/third_party/inspector_protocol/*.py \
- deps/v8/tools/*.py \
- tools/*.py \
- tools/inspector_protocol/*.py
-
-OPTIONS_DEFINE= BUNDLED_SSL DOCS DTRACE NLS
-OPTIONS_DEFAULT=DTRACE
-.if !exists(/usr/sbin/dtrace)
-OPTIONS_EXCLUDE+= DTRACE
-.endif
-OPTIONS_EXCLUDE_aarch64= DTRACE
-# dt_modtext:/usr/src/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c(820): arm not implemented
-OPTIONS_EXCLUDE_armv6= DTRACE
-OPTIONS_EXCLUDE_armv7= DTRACE
-OPTIONS_EXCLUDE_powerpc64= DTRACE
-OPTIONS_EXCLUDE_powerpc64le= DTRACE
-OPTIONS_SUB= yes
-BUNDLED_SSL_DESC= Use bundled OpenSSL implementation from node.js
-
-BUNDLED_SSL_CONFIGURE_OFF= --shared-openssl --openssl-use-def-ca-store
-BUNDLED_SSL_RUN_DEPENDS_OFF= ca_root_nss>=0:security/ca_root_nss
-BUNDLED_SSL_USES_OFF= ssl
-DTRACE_CONFIGURE_ON= --with-dtrace
-NLS_BUILD_DEPENDS= icu>=69.1:devel/icu
-NLS_CONFIGURE_ON= --with-intl=system-icu
-NLS_LIB_DEPENDS= libicui18n.so:devel/icu
-
-.include <bsd.port.options.mk>
-
-.if (defined(PPC_ABI) && ${PPC_ABI} == ELFv2) || ${ARCH} == powerpc64le
-EXTRA_PATCHES= ${PATCHDIR}/extra-patch-common.gypi
-.endif
-
-.if ${PORT_OPTIONS:MBUNDLED_SSL} && ${ARCH} != amd64
-CONFIGURE_ARGS+=--openssl-no-asm
-.endif
-
-post-patch:
- @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' ${WRKSRC}/tools/v8_gypfiles/v8.gyp
-
-post-configure:
- # Post-process Makefile and *.mk files created by node-gyp and remove
- # all occurrences of -I${LOCALBASE}/include. C*FLAGS include this
- # before all -I../deps/* for bundled code. This can cause build
- # breakages if the dependency is installed in ${LOCALBASE}. The
- # USES+=localbase # above will ensure that we pick up includes for real
- # external dependencies.
- ${FIND} ${WRKSRC}/out -type f -print0 | ${XARGS} -0 ${REINPLACE_CMD} -e "s|-I${LOCALBASE}/include||g"
-
-post-install:
- ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/node
+USES= metaport nodejs:run
.include <bsd.port.mk>
diff --git a/www/node/pkg-descr b/www/node/pkg-descr
index 68a2ca8a2b32..4920df91f200 100644
--- a/www/node/pkg-descr
+++ b/www/node/pkg-descr
@@ -1,4 +1,4 @@
-Node.js is a JavaScript runtime built on Chrome's V8 JavaScript
-engine. Node.js uses an event-driven, non-blocking I/O model that
-makes it lightweight and efficient. Node.js' package ecosystem,
-npm, is the largest ecosystem of open source libraries in the world.
+Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js
+uses an event-driven, non-blocking I/O model that makes it lightweight and
+efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open
+source libraries in the world.
diff --git a/www/node14/Makefile b/www/node14/Makefile
index ef25b61bbac5..037b8e969e62 100644
--- a/www/node14/Makefile
+++ b/www/node14/Makefile
@@ -49,7 +49,7 @@ MAKE_ENV+= CC.host=${CC} \
TEST_ARGS= -i
TEST_TARGET= test-only
-CONFLICTS_INSTALL= node node10 node16
+CONFLICTS_INSTALL= node[0-9][0-9]
PREFIX_RELDEST= ${PREFIX:S,^${DESTDIR},,}
REINPLACE_ARGS= -i ''
diff --git a/www/node16/Makefile b/www/node16/Makefile
index fd7ed9545b2c..fdec6b049e4e 100644
--- a/www/node16/Makefile
+++ b/www/node16/Makefile
@@ -50,7 +50,7 @@ COREPACK_CONFIGURE_OFF= --without-corepack
HAS_CONFIGURE= yes
-CONFLICTS_INSTALL= node10 node14 node
+CONFLICTS_INSTALL= node[0-9][0-9]
CONFIGURE_ARGS= --prefix=${PREFIX_RELDEST} \
--without-npm \
diff --git a/www/node18/Makefile b/www/node18/Makefile
new file mode 100644
index 000000000000..c5494376f263
--- /dev/null
+++ b/www/node18/Makefile
@@ -0,0 +1,102 @@
+PORTNAME= node
+PORTVERSION= 18.12.1
+DISTVERSIONPREFIX= v
+CATEGORIES= www
+MASTER_SITES= https://nodejs.org/dist/v${PORTVERSION}/
+PKGNAMESUFFIX= 18
+
+MAINTAINER= sunpoet@FreeBSD.org
+COMMENT= V8 JavaScript for client and server
+WWW= https://nodejs.org/ \
+ https://github.com/nodejs/node
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BROKEN_SSL= libressl libressl-devel
+BROKEN_SSL_REASON= Node.js ${PORTVERSION:R:R}.x requires OpenSSL 1.1.x or the BUNDLED_SSL option enabled
+ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 powerpc64 powerpc64le
+
+BUILD_DEPENDS= brotli>=1.0.9,1:archivers/brotli \
+ c-ares>=1.17.2:dns/c-ares \
+ libnghttp2>=1.45.1:www/libnghttp2 \
+ libuv>=1.42.0:devel/libuv \
+ objdump:devel/binutils
+LIB_DEPENDS= libbrotlidec.so:archivers/brotli \
+ libcares.so:dns/c-ares \
+ libnghttp2.so:www/libnghttp2 \
+ libuv.so:devel/libuv
+
+USES= compiler:c++11-lib gmake localbase pkgconfig python:3.6-3.10,build shebangfix
+
+CONFIGURE_ARGS= --prefix=${PREFIX:S|^${DESTDIR}||} \
+ --shared-brotli \
+ --shared-cares \
+ --shared-libuv \
+ --shared-nghttp2 \
+ --shared-zlib \
+ --without-npm
+HAS_CONFIGURE= yes
+MAKE_ENV= CC.host="${CC}" \
+ CFLAGS.host="${CFLAGS}" \
+ CXX.host="${CXX}" \
+ CXXFLAGS.host="${CXXFLAGS}" \
+ LDFLAGS.host="${LDFLAGS}" \
+ LINK.host="${CXX}"
+REINPLACE_ARGS= -i ''
+
+CONFLICTS_INSTALL= node[0-9][0-9]
+
+SHEBANG_FILES= deps/v8/third_party/inspector_protocol/*.py \
+ deps/v8/tools/*.py \
+ tools/*.py \
+ tools/inspector_protocol/*.py
+
+OPTIONS_DEFINE= BUNDLED_SSL DOCS DTRACE NLS
+OPTIONS_DEFAULT=DTRACE
+.if !exists(/usr/sbin/dtrace)
+OPTIONS_EXCLUDE+= DTRACE
+.endif
+OPTIONS_EXCLUDE_aarch64= DTRACE
+# dt_modtext:/usr/src/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c(820): arm not implemented
+OPTIONS_EXCLUDE_armv6= DTRACE
+OPTIONS_EXCLUDE_armv7= DTRACE
+OPTIONS_EXCLUDE_powerpc64= DTRACE
+OPTIONS_EXCLUDE_powerpc64le= DTRACE
+OPTIONS_SUB= yes
+BUNDLED_SSL_DESC= Use bundled OpenSSL implementation from node.js
+
+BUNDLED_SSL_CONFIGURE_OFF= --shared-openssl --openssl-use-def-ca-store
+BUNDLED_SSL_RUN_DEPENDS_OFF= ca_root_nss>=0:security/ca_root_nss
+BUNDLED_SSL_USES_OFF= ssl
+DTRACE_CONFIGURE_ON= --with-dtrace
+NLS_BUILD_DEPENDS= icu>=69.1:devel/icu
+NLS_CONFIGURE_ON= --with-intl=system-icu
+NLS_LIB_DEPENDS= libicui18n.so:devel/icu
+
+.include <bsd.port.options.mk>
+
+.if (defined(PPC_ABI) && ${PPC_ABI} == ELFv2) || ${ARCH} == powerpc64le
+EXTRA_PATCHES= ${PATCHDIR}/extra-patch-common.gypi
+.endif
+
+.if ${PORT_OPTIONS:MBUNDLED_SSL} && ${ARCH} != amd64
+CONFIGURE_ARGS+=--openssl-no-asm
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' ${WRKSRC}/tools/v8_gypfiles/v8.gyp
+
+post-configure:
+ # Post-process Makefile and *.mk files created by node-gyp and remove
+ # all occurrences of -I${LOCALBASE}/include. C*FLAGS include this
+ # before all -I../deps/* for bundled code. This can cause build
+ # breakages if the dependency is installed in ${LOCALBASE}. The
+ # USES+=localbase # above will ensure that we pick up includes for real
+ # external dependencies.
+ ${FIND} ${WRKSRC}/out -type f -print0 | ${XARGS} -0 ${REINPLACE_CMD} -e "s|-I${LOCALBASE}/include||g"
+
+post-install:
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/node
+
+.include <bsd.port.mk>
diff --git a/www/node/distinfo b/www/node18/distinfo
similarity index 100%
rename from www/node/distinfo
rename to www/node18/distinfo
diff --git a/www/node/files/extra-patch-common.gypi b/www/node18/files/extra-patch-common.gypi
similarity index 100%
rename from www/node/files/extra-patch-common.gypi
rename to www/node18/files/extra-patch-common.gypi
diff --git a/www/node/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi b/www/node18/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi
similarity index 100%
rename from www/node/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi
rename to www/node18/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi
diff --git a/www/node/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi b/www/node18/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi
similarity index 100%
rename from www/node/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi
rename to www/node18/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi
diff --git a/www/node/files/patch-deps_openssl_openssl-cl__no__asm.gypi b/www/node18/files/patch-deps_openssl_openssl-cl__no__asm.gypi
similarity index 100%
rename from www/node/files/patch-deps_openssl_openssl-cl__no__asm.gypi
rename to www/node18/files/patch-deps_openssl_openssl-cl__no__asm.gypi
diff --git a/www/node/files/patch-deps_openssl_openssl__no__asm.gypi b/www/node18/files/patch-deps_openssl_openssl__no__asm.gypi
similarity index 100%
rename from www/node/files/patch-deps_openssl_openssl__no__asm.gypi
rename to www/node18/files/patch-deps_openssl_openssl__no__asm.gypi
diff --git a/www/node/files/patch-deps_v8_src_base_platform_platform-freebsd.cc b/www/node18/files/patch-deps_v8_src_base_platform_platform-freebsd.cc
similarity index 100%
rename from www/node/files/patch-deps_v8_src_base_platform_platform-freebsd.cc
rename to www/node18/files/patch-deps_v8_src_base_platform_platform-freebsd.cc
diff --git a/www/node/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc b/www/node18/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc
similarity index 100%
rename from www/node/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc
rename to www/node18/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc
diff --git a/www/node/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h b/www/node18/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h
similarity index 100%
rename from www/node/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h
rename to www/node18/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h
diff --git a/www/node/files/patch-deps_v8_src_libsampler_sampler.cc b/www/node18/files/patch-deps_v8_src_libsampler_sampler.cc
similarity index 100%
rename from www/node/files/patch-deps_v8_src_libsampler_sampler.cc
rename to www/node18/files/patch-deps_v8_src_libsampler_sampler.cc
diff --git a/www/node/files/patch-node.gypi b/www/node18/files/patch-node.gypi
similarity index 100%
rename from www/node/files/patch-node.gypi
rename to www/node18/files/patch-node.gypi
diff --git a/www/node/files/patch-src_cares__wrap.h b/www/node18/files/patch-src_cares__wrap.h
similarity index 100%
rename from www/node/files/patch-src_cares__wrap.h
rename to www/node18/files/patch-src_cares__wrap.h
diff --git a/www/node/files/patch-tools_v8__gypfiles_v8.gyp b/www/node18/files/patch-tools_v8__gypfiles_v8.gyp
similarity index 100%
rename from www/node/files/patch-tools_v8__gypfiles_v8.gyp
rename to www/node18/files/patch-tools_v8__gypfiles_v8.gyp
diff --git a/www/node18/pkg-descr b/www/node18/pkg-descr
new file mode 100644
index 000000000000..4920df91f200
--- /dev/null
+++ b/www/node18/pkg-descr
@@ -0,0 +1,4 @@
+Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js
+uses an event-driven, non-blocking I/O model that makes it lightweight and
+efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open
+source libraries in the world.
diff --git a/www/node/pkg-message b/www/node18/pkg-message
similarity index 100%
rename from www/node/pkg-message
rename to www/node18/pkg-message
diff --git a/www/node/pkg-plist b/www/node18/pkg-plist
similarity index 100%
rename from www/node/pkg-plist
rename to www/node18/pkg-plist
diff --git a/www/node19/Makefile b/www/node19/Makefile
new file mode 100644
index 000000000000..11e6131f95a6
--- /dev/null
+++ b/www/node19/Makefile
@@ -0,0 +1,91 @@
+PORTNAME= node
+PORTVERSION= 19.2.0
+DISTVERSIONPREFIX= v
+CATEGORIES= www
+MASTER_SITES= https://nodejs.org/dist/v${PORTVERSION}/
+PKGNAMESUFFIX= 19
+
+MAINTAINER= sunpoet@FreeBSD.org
+COMMENT= V8 JavaScript for client and server
+WWW= https://nodejs.org/ \
+ https://github.com/nodejs/node
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BROKEN_SSL= libressl libressl-devel
+BROKEN_SSL_REASON= Node.js ${PORTVERSION:R:R}.x requires OpenSSL 1.1.x or the BUNDLED_SSL option enabled
+ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 powerpc64 powerpc64le
+
+BUILD_DEPENDS= brotli>=1.0.9,1:archivers/brotli \
+ c-ares>=1.17.2:dns/c-ares \
+ libnghttp2>=1.45.1:www/libnghttp2 \
+ libuv>=1.42.0:devel/libuv \
+ objdump:devel/binutils
+LIB_DEPENDS= libbrotlidec.so:archivers/brotli \
+ libcares.so:dns/c-ares \
+ libnghttp2.so:www/libnghttp2 \
+ libuv.so:devel/libuv
+
+USES= compiler:c++11-lib gmake localbase pkgconfig python:3.6-3.10,build shebangfix
+
+CONFIGURE_ARGS= --prefix=${PREFIX:S|^${DESTDIR}||} \
+ --shared-brotli \
+ --shared-cares \
+ --shared-libuv \
+ --shared-nghttp2 \
+ --shared-zlib \
+ --without-npm
+HAS_CONFIGURE= yes
+MAKE_ENV= CC.host="${CC}" \
+ CFLAGS.host="${CFLAGS}" \
+ CXX.host="${CXX}" \
+ CXXFLAGS.host="${CXXFLAGS}" \
+ LDFLAGS.host="${LDFLAGS}" \
+ LINK.host="${CXX}"
+REINPLACE_ARGS= -i ''
+
+CONFLICTS_INSTALL= node[0-9][0-9]
+
+SHEBANG_FILES= deps/v8/third_party/inspector_protocol/*.py \
+ deps/v8/tools/*.py \
+ tools/*.py \
+ tools/inspector_protocol/*.py
+
+OPTIONS_DEFINE= BUNDLED_SSL DOCS NLS
+OPTIONS_SUB= yes
+BUNDLED_SSL_DESC= Use bundled OpenSSL implementation from node.js
+
+BUNDLED_SSL_CONFIGURE_OFF= --shared-openssl --openssl-use-def-ca-store
+BUNDLED_SSL_RUN_DEPENDS_OFF= ca_root_nss>=0:security/ca_root_nss
+BUNDLED_SSL_USES_OFF= ssl
+NLS_BUILD_DEPENDS= icu>=69.1:devel/icu
+NLS_CONFIGURE_ON= --with-intl=system-icu
+NLS_LIB_DEPENDS= libicui18n.so:devel/icu
+
+.include <bsd.port.options.mk>
+
+.if (defined(PPC_ABI) && ${PPC_ABI} == ELFv2) || ${ARCH} == powerpc64le
+EXTRA_PATCHES= ${PATCHDIR}/extra-patch-common.gypi
+.endif
+
+.if ${PORT_OPTIONS:MBUNDLED_SSL} && ${ARCH} != amd64
+CONFIGURE_ARGS+=--openssl-no-asm
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' ${WRKSRC}/tools/v8_gypfiles/v8.gyp
+
+post-configure:
+ # Post-process Makefile and *.mk files created by node-gyp and remove
+ # all occurrences of -I${LOCALBASE}/include. C*FLAGS include this
+ # before all -I../deps/* for bundled code. This can cause build
+ # breakages if the dependency is installed in ${LOCALBASE}. The
+ # USES+=localbase # above will ensure that we pick up includes for real
+ # external dependencies.
+ ${FIND} ${WRKSRC}/out -type f -print0 | ${XARGS} -0 ${REINPLACE_CMD} -e "s|-I${LOCALBASE}/include||g"
+
+post-install:
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/node
+
+.include <bsd.port.mk>
diff --git a/www/node19/distinfo b/www/node19/distinfo
new file mode 100644
index 000000000000..c00d7db42d0d
--- /dev/null
+++ b/www/node19/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1669824538
+SHA256 (node-v19.2.0.tar.gz) = aac9d1a366fb57d68f4639f9204d1de5d6387656959a97ed929a5ba9e62c033a
+SIZE (node-v19.2.0.tar.gz) = 84099370
diff --git a/www/node19/files/extra-patch-common.gypi b/www/node19/files/extra-patch-common.gypi
new file mode 100644
index 000000000000..8e817a2959c9
--- /dev/null
+++ b/www/node19/files/extra-patch-common.gypi
@@ -0,0 +1,13 @@
+--- common.gypi.orig 2019-10-01 15:32:40.000000000 +0200
++++ common.gypi 2019-10-16 12:47:09.236138000 +0200
+@@ -390,8 +390,8 @@
+ 'ldflags': [ '-m32' ],
+ }],
+ [ 'target_arch=="ppc64" and OS!="aix"', {
+- 'cflags': [ '-m64', '-mminimal-toc' ],
+- 'ldflags': [ '-m64' ],
++ 'cflags': [ '-m64' ],
++ 'ldflags': [ '-m64' ],
+ }],
+ [ 'target_arch=="s390x"', {
+ 'cflags': [ '-m64', '-march=z196' ],
diff --git a/www/node19/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi b/www/node19/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi
new file mode 100644
index 000000000000..f637cc2e3ee9
--- /dev/null
+++ b/www/node19/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi
@@ -0,0 +1,11 @@
+--- deps/openssl/config/archs/linux-elf/no-asm/openssl-cl.gypi.orig 2021-10-19 00:48:28 UTC
++++ deps/openssl/config/archs/linux-elf/no-asm/openssl-cl.gypi
+@@ -13,7 +13,7 @@
+ '-Wall -O3 -fomit-frame-pointer',
+ ],
+ 'openssl_ex_libs_linux-elf': [
+- '-ldl -pthread',
++ '-pthread',
+ ],
+ 'openssl_cli_srcs_linux-elf': [
+ 'openssl/apps/lib/cmp_mock_srv.c',
diff --git a/www/node19/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi b/www/node19/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi
new file mode 100644
index 000000000000..271bebf2f6b0
--- /dev/null
+++ b/www/node19/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi
@@ -0,0 +1,11 @@
+--- deps/openssl/config/archs/linux-elf/no-asm/openssl.gypi.orig 2021-10-19 00:48:28 UTC
++++ deps/openssl/config/archs/linux-elf/no-asm/openssl.gypi
+@@ -980,7 +980,7 @@
+ '-Wall -O3 -fomit-frame-pointer',
+ ],
+ 'openssl_ex_libs_linux-elf': [
+- '-ldl -pthread',
++ '-pthread',
+ ],
+ },
+ 'include_dirs': [
diff --git a/www/node19/files/patch-deps_openssl_openssl-cl__no__asm.gypi b/www/node19/files/patch-deps_openssl_openssl-cl__no__asm.gypi
new file mode 100644
index 000000000000..c2508ad0064f
--- /dev/null
+++ b/www/node19/files/patch-deps_openssl_openssl-cl__no__asm.gypi
@@ -0,0 +1,17 @@
+--- deps/openssl/openssl-cl_no_asm.gypi.orig 2022-07-26 14:30:08 UTC
++++ deps/openssl/openssl-cl_no_asm.gypi
+@@ -1,4 +1,5 @@
+ {
++ 'defines': ['OPENSSL_NO_ASM'],
+ 'conditions': [
+ ['target_arch=="ppc64" and OS=="aix"', {
+ 'includes': ['config/archs/aix64-gcc-as/no-asm/openssl-cl.gypi'],
+@@ -43,7 +44,7 @@
+ 'includes': ['config/archs/linux64-riscv64/no-asm/openssl-cl.gypi'],
+ }, {
+ # Other architectures don't use assembly
+- 'includes': ['config/archs/linux-x86_64/no-asm/openssl-cl.gypi'],
++ 'includes': ['config/archs/linux-elf/no-asm/openssl-cl.gypi'],
+ }],
+ ],
+ }
diff --git a/www/node19/files/patch-deps_openssl_openssl__no__asm.gypi b/www/node19/files/patch-deps_openssl_openssl__no__asm.gypi
new file mode 100644
index 000000000000..1fef0c4ca71f
--- /dev/null
+++ b/www/node19/files/patch-deps_openssl_openssl__no__asm.gypi
@@ -0,0 +1,11 @@
+--- deps/openssl/openssl_no_asm.gypi.orig 2020-09-08 12:17:11 UTC
++++ deps/openssl/openssl_no_asm.gypi
+@@ -48,7 +48,7 @@
+ 'includes': ['config/archs/linux64-mips64/no-asm/openssl.gypi'],
+ }, {
+ # Other architectures don't use assembly
+- 'includes': ['config/archs/linux-x86_64/no-asm/openssl.gypi'],
++ 'includes': ['config/archs/linux-elf/no-asm/openssl.gypi'],
+ }],
+ ],
+ }
diff --git a/www/node19/files/patch-deps_v8_src_base_platform_platform-freebsd.cc b/www/node19/files/patch-deps_v8_src_base_platform_platform-freebsd.cc
new file mode 100644
index 000000000000..3e173b2811f3
--- /dev/null
+++ b/www/node19/files/patch-deps_v8_src_base_platform_platform-freebsd.cc
@@ -0,0 +1,13 @@
+--- deps/v8/src/base/platform/platform-freebsd.cc.orig 2020-06-30 17:49:16 UTC
++++ deps/v8/src/base/platform/platform-freebsd.cc
+@@ -82,8 +82,8 @@ std::vector<OS::SharedLibraryAddress> OS::GetSharedLib
+ lib_name = std::string(path);
+ }
+ result.push_back(SharedLibraryAddress(
+- lib_name, reinterpret_cast<uintptr_t>(map->kve_start),
+- reinterpret_cast<uintptr_t>(map->kve_end)));
++ lib_name, static_cast<uintptr_t>(map->kve_start),
++ static_cast<uintptr_t>(map->kve_end)));
+ }
+
+ start += ssize;
diff --git a/www/node19/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc b/www/node19/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc
new file mode 100644
index 000000000000..4bbfd3df2781
--- /dev/null
+++ b/www/node19/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc
@@ -0,0 +1,18 @@
+--- deps/v8/src/codegen/arm/cpu-arm.cc.orig 2022-04-19 16:03:40 UTC
++++ deps/v8/src/codegen/arm/cpu-arm.cc
+@@ -2,12 +2,15 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
++#include "include/v8config.h"
++
+ // CPU specific code for arm independent of OS goes here.
+ #ifdef __arm__
+ #ifdef __QNXNTO__
+ #include <sys/mman.h> // for cache flushing.
+ #undef MAP_TYPE
+ #elif V8_OS_FREEBSD
++#include <sys/cdefs.h>
+ #include <machine/sysarch.h> // for cache flushing
+ #include <sys/types.h>
+ #elif V8_OS_STARBOARD
diff --git a/www/node19/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h b/www/node19/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h
new file mode 100644
index 000000000000..449278ef9271
--- /dev/null
+++ b/www/node19/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h
@@ -0,0 +1,20 @@
+--- deps/v8/src/codegen/ppc/constants-ppc.h.orig 2020-06-30 17:49:17 UTC
++++ deps/v8/src/codegen/ppc/constants-ppc.h
+@@ -36,7 +36,7 @@
+ #endif
+
+ #if !(V8_HOST_ARCH_PPC || V8_HOST_ARCH_PPC64) || !V8_TARGET_ARCH_PPC64 || \
+- V8_TARGET_LITTLE_ENDIAN || (defined(_CALL_ELF) && _CALL_ELF == 2)
++ (defined(_CALL_ELF) && _CALL_ELF == 2)
+ #define ABI_RETURNS_OBJECT_PAIRS_IN_REGS 1
+ #else
+ #define ABI_RETURNS_OBJECT_PAIRS_IN_REGS 0
+@@ -44,7 +44,7 @@
+
+ #if !(V8_HOST_ARCH_PPC || V8_HOST_ARCH_PPC64) || \
+ (V8_TARGET_ARCH_PPC64 && \
+- (V8_TARGET_LITTLE_ENDIAN || (defined(_CALL_ELF) && _CALL_ELF == 2)))
++ (defined(_CALL_ELF) && _CALL_ELF == 2))
+ #define ABI_CALL_VIA_IP 1
+ #else
+ #define ABI_CALL_VIA_IP 0
diff --git a/www/node19/files/patch-deps_v8_src_libsampler_sampler.cc b/www/node19/files/patch-deps_v8_src_libsampler_sampler.cc
new file mode 100644
index 000000000000..4a1f24a4a3c4
--- /dev/null
+++ b/www/node19/files/patch-deps_v8_src_libsampler_sampler.cc
@@ -0,0 +1,13 @@
+--- deps/v8/src/libsampler/sampler.cc.orig 2021-10-19 00:48:30 UTC
++++ deps/v8/src/libsampler/sampler.cc
+@@ -497,6 +497,10 @@ void SignalHandler::FillRegisterState(void* context, R
+ state->pc = reinterpret_cast<void*>(mcontext.__gregs[_REG_PC]);
+ state->sp = reinterpret_cast<void*>(mcontext.__gregs[_REG_SP]);
+ state->fp = reinterpret_cast<void*>(mcontext.__gregs[_REG_FP]);
++#elif V8_TARGET_ARCH_PPC64
++ state->pc = reinterpret_cast<void*>(mcontext.mc_srr0);
++ state->sp = reinterpret_cast<void*>(mcontext.mc_frame[1]);
++ state->fp = reinterpret_cast<void*>(mcontext.mc_frame[31]);
+ #endif // V8_HOST_ARCH_*
+ #elif V8_OS_NETBSD
+ #if V8_HOST_ARCH_IA32
diff --git a/www/node19/files/patch-node.gypi b/www/node19/files/patch-node.gypi
new file mode 100644
index 000000000000..f48b5b1091cb
--- /dev/null
+++ b/www/node19/files/patch-node.gypi
@@ -0,0 +1,12 @@
+--- node.gypi.orig 2021-10-19 00:48:32 UTC
++++ node.gypi
+@@ -319,6 +319,9 @@
+ [ 'node_use_openssl=="true"', {
+ 'defines': [ 'HAVE_OPENSSL=1' ],
+ 'conditions': [
++ ['openssl_no_asm==1', {
++ 'defines': [ 'OPENSSL_NO_ASM' ],
++ }],
+ [ 'node_shared_openssl=="false"', {
+ 'defines': [ 'OPENSSL_API_COMPAT=0x10100000L', ],
+ 'dependencies': [
diff --git a/www/node19/files/patch-src_cares__wrap.h b/www/node19/files/patch-src_cares__wrap.h
new file mode 100644
index 000000000000..7f57f6d8b333
--- /dev/null
+++ b/www/node19/files/patch-src_cares__wrap.h
@@ -0,0 +1,11 @@
+--- src/cares_wrap.h.orig 2021-08-18 22:13:12 UTC
++++ src/cares_wrap.h
+@@ -22,7 +22,7 @@
+ # include <netdb.h>
+ #endif // __POSIX__
+
+-# include <ares_nameser.h>
++# include <arpa/nameser.h>
+
+ namespace node {
+ namespace cares_wrap {
diff --git a/www/node19/files/patch-tools_v8__gypfiles_v8.gyp b/www/node19/files/patch-tools_v8__gypfiles_v8.gyp
new file mode 100644
index 000000000000..a37d30b37981
--- /dev/null
+++ b/www/node19/files/patch-tools_v8__gypfiles_v8.gyp
@@ -0,0 +1,11 @@
+--- tools/v8_gypfiles/v8.gyp.orig 2022-11-14 02:26:08 UTC
++++ tools/v8_gypfiles/v8.gyp
+@@ -975,7 +975,7 @@
+ }],
+ # Platforms that don't have Compare-And-Swap (CAS) support need to link atomic library
+ # to implement atomic memory access
+- ['v8_current_cpu in ["mips64", "mips64el", "ppc", "arm", "riscv64", "loong64"]', {
++ ['v8_current_cpu in ["mips64", "mips64el", "ppc", "riscv64", "loong64"]', {
+ 'link_settings': {
+ 'libraries': ['-latomic', ],
+ },
diff --git a/www/node19/pkg-descr b/www/node19/pkg-descr
new file mode 100644
index 000000000000..4920df91f200
--- /dev/null
+++ b/www/node19/pkg-descr
@@ -0,0 +1,4 @@
+Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js
+uses an event-driven, non-blocking I/O model that makes it lightweight and
+efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open
+source libraries in the world.
*** 2702 LINES SKIPPED ***