diff --git a/0001-Disable-running-gyp-on-shared-deps.patch b/0001-Disable-running-gyp-on-shared-deps.patch index ce6d5903b57a9927c4593a315998606bf136b7bb..bbad30b8453ac101be3faa534ea1bdb62d76cc31 100644 --- a/0001-Disable-running-gyp-on-shared-deps.patch +++ b/0001-Disable-running-gyp-on-shared-deps.patch @@ -1,32 +1,19 @@ -From c30f7d6e470a9ef8eafb10b2997889231180754e Mon Sep 17 00:00:00 2001 -From: Zuzana Svetlikova -Date: Fri, 17 Apr 2020 12:59:44 +0200 -Subject: [PATCH 1/2] Disable running gyp on shared deps - -Signed-off-by: rpm-build ---- - Makefile | 2 +- - node.gyp | 17 ----------------- - 2 files changed, 1 insertion(+), 18 deletions(-) - -diff --git a/Makefile b/Makefile -index 9c01f8f244ee1904f223d01e31ecfeffc03ea191..133a3d0fcbd22c2dde85a092f84708ddabf8b5f3 100644 ---- a/Makefile -+++ b/Makefile -@@ -148,7 +148,7 @@ with-code-cache test-code-cache: +diff -Nurw node-v18.18.2/Makefile node-v18.18.2_new/Makefile +--- node-v18.18.2/Makefile 2023-10-13 22:42:13.000000000 +0800 ++++ node-v18.18.2_new/Makefile 2024-01-26 17:34:25.946457272 +0800 +@@ -169,7 +169,7 @@ $(warning '$@' target is a noop) out/Makefile: config.gypi common.gypi node.gyp \ - deps/uv/uv.gyp deps/llhttp/llhttp.gyp deps/zlib/zlib.gyp \ + deps/llhttp/llhttp.gyp \ + deps/simdutf/simdutf.gyp deps/ada/ada.gyp \ tools/v8_gypfiles/toolchain.gypi tools/v8_gypfiles/features.gypi \ tools/v8_gypfiles/inspector.gypi tools/v8_gypfiles/v8.gyp - $(PYTHON) tools/gyp_node.py -f make -diff --git a/node.gyp b/node.gyp -index 347d82d2e1e100227e750934532dce29775f1fdf..2419dc739ea0b1d7efaf5096f86383def4162e3c 100644 ---- a/node.gyp -+++ b/node.gyp -@@ -429,23 +429,6 @@ +diff -Nurw node-v18.18.2/node.gyp node-v18.18.2_new/node.gyp +--- node-v18.18.2/node.gyp 2023-10-13 22:42:17.000000000 +0800 ++++ node-v18.18.2_new/node.gyp 2024-01-26 17:39:39.083805880 +0800 +@@ -431,23 +431,6 @@ ], }, ], @@ -41,7 +28,7 @@ index 347d82d2e1e100227e750934532dce29775f1fdf..2419dc739ea0b1d7efaf5096f86383de - 'inputs': [ '<(opensslconfig)', ], - 'outputs': [ '<(opensslconfig_internal)', ], - 'action': [ -- 'python', 'tools/copyfile.py', +- '<(python)', 'tools/copyfile.py', - '<(opensslconfig)', - '<(opensslconfig_internal)', - ], @@ -50,6 +37,3 @@ index 347d82d2e1e100227e750934532dce29775f1fdf..2419dc739ea0b1d7efaf5096f86383de }], ], }, # node_core_target_name --- -2.37.3 - diff --git a/cjs-module-lexer-1.2.2-stripped.tar.gz b/cjs-module-lexer-1.2.2-stripped.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..2e5eaf31fe31b0ca68817df6c84486147f20a519 Binary files /dev/null and b/cjs-module-lexer-1.2.2-stripped.tar.gz differ diff --git a/download b/download index feebf35ab9c89e14e15e83aa09162bd8fe31f038..298ddb2757d5f15d6a449085186f9433c5adfc07 100644 --- a/download +++ b/download @@ -1 +1 @@ -a0c8e7810edca10baaa911f3c8b1c8af node-v18.12.1-stripped.tar.gz +0fdf41047ac8d717e00445cc7bcf467f node-v18.18.2-stripped.tar.gz diff --git a/icu4c-71_1-data-bin-l.zip b/icu4c-73_2-data-bin-b.zip similarity index 57% rename from icu4c-71_1-data-bin-l.zip rename to icu4c-73_2-data-bin-b.zip index 37a858021113e1dffdcaaaea8467dd0071cb1a46..316285c87e2ec20e0e091cbe8716e7790b396d68 100644 Binary files a/icu4c-71_1-data-bin-l.zip and b/icu4c-73_2-data-bin-b.zip differ diff --git a/icu4c-71_1-data-bin-b.zip b/icu4c-73_2-data-bin-l.zip similarity index 59% rename from icu4c-71_1-data-bin-b.zip rename to icu4c-73_2-data-bin-l.zip index f74cb154d08dfadc2227e001488f04c4bb913d5f..d1ba2e734b16b5cddd89ad84b2b33a418ce572b0 100644 Binary files a/icu4c-71_1-data-bin-b.zip and b/icu4c-73_2-data-bin-l.zip differ diff --git a/nodejs-sources.sh b/nodejs-sources.sh index 211a880c2e39f4cb534b54e25d9e8e0f49cda2cf..885d9e533080b8db24c379e4da020bbaaf6b029e 100755 --- a/nodejs-sources.sh +++ b/nodejs-sources.sh @@ -3,23 +3,25 @@ # arguments, make sure to call # `argbash nodejs-tarball.sh -o nodejs-tarball.sh` -# ARG_POSITIONAL_SINGLE([version],[Node.js release version],[""]) +# ARG_POSITIONAL_SINGLE([version],[Node.js release version]) +# ARG_OPTIONAL_BOOLEAN([push],[],[Whether to upload to the lookaside cache],[on]) +# ARG_OPTIONAL_BOOLEAN([debug],[],[Print all commands],[off]) +# ARG_OPTIONAL_SINGLE([undici-wasi-sdk-version],[],[Override the wasi-sdk version for undici]) # ARG_DEFAULTS_POS([]) # ARG_HELP([Tool to aid in Node.js packaging of new releases]) # ARGBASH_GO() # needed because of Argbash --> m4_ignore([ -### START OF CODE GENERATED BY Argbash v2.8.1 one line above ### +### START OF CODE GENERATED BY Argbash v2.10.0 one line above ### # Argbash is a bash code generator used to get arguments parsing right. # Argbash is FREE SOFTWARE, see https://argbash.io for more info die() { - local _ret=$2 - test -n "$_ret" || _ret=1 - test "$_PRINT_HELP" = yes && print_help >&2 + local _ret="${2:-1}" + test "${_PRINT_HELP:-no}" = yes && print_help >&2 echo "$1" >&2 - exit ${_ret} + exit "${_ret}" } @@ -32,15 +34,21 @@ begins_with_short_option() # THE DEFAULTS INITIALIZATION - POSITIONALS _positionals=() -_arg_version="" +_arg_version= # THE DEFAULTS INITIALIZATION - OPTIONALS +_arg_push="on" +_arg_debug="off" +_arg_undici_wasi_sdk_version= print_help() { printf '%s\n' "Tool to aid in Node.js packaging of new releases" - printf 'Usage: %s [-h|--help] []\n' "$0" - printf '\t%s\n' ": Node.js release version (default: '""')" + printf 'Usage: %s [--(no-)push] [--(no-)debug] [--undici-wasi-sdk-version ] [-h|--help] \n' "$0" + printf '\t%s\n' ": Node.js release version" + printf '\t%s\n' "--push, --no-push: Whether to upload to the lookaside cache (on by default)" + printf '\t%s\n' "--debug, --no-debug: Print all commands (off by default)" + printf '\t%s\n' "--undici-wasi-sdk-version: Override the wasi-sdk version for undici (no default)" printf '\t%s\n' "-h, --help: Prints help" } @@ -52,6 +60,22 @@ parse_commandline() do _key="$1" case "$_key" in + --no-push|--push) + _arg_push="on" + test "${1:0:5}" = "--no-" && _arg_push="off" + ;; + --no-debug|--debug) + _arg_debug="on" + test "${1:0:5}" = "--no-" && _arg_debug="off" + ;; + --undici-wasi-sdk-version) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_undici_wasi_sdk_version="$2" + shift + ;; + --undici-wasi-sdk-version=*) + _arg_undici_wasi_sdk_version="${_key##--undici-wasi-sdk-version=}" + ;; -h|--help) print_help exit 0 @@ -73,7 +97,9 @@ parse_commandline() handle_passed_args_count() { - test "${_positionals_count}" -le 1 || _PRINT_HELP=yes die "FATAL ERROR: There were spurious positional arguments --- we expect between 0 and 1, but got ${_positionals_count} (the last one was: '${_last_positional}')." 1 + local _required_args_string="'version'" + test "${_positionals_count}" -ge 1 || _PRINT_HELP=yes die "FATAL ERROR: Not enough positional arguments - we require exactly 1 (namely: $_required_args_string), but got only ${_positionals_count}." 1 + test "${_positionals_count}" -le 1 || _PRINT_HELP=yes die "FATAL ERROR: There were spurious positional arguments --- we expect exactly 1 (namely: $_required_args_string), but got ${_positionals_count} (the last one was: '${_last_positional}')." 1 } @@ -100,7 +126,15 @@ assign_positional_args 1 "${_positionals[@]}" ### END OF CODE GENERATED BY Argbash (sortof) ### ]) # [ <-- needed because of Argbash -packages=("jq" "wget" "tar" "fedpkg" "grep" "sed") +if [ $_arg_debug = 'on' ]; then + set -x +fi + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +alias wget='wget --quiet' + +packages=("jq" "wget" "tar" "fedpkg" "grep" "sed" "python3-jinja2-cli" "nodejs") rpm -q ${packages[@]} >/dev/null if [ $? -ne 0 ]; then @@ -109,20 +143,37 @@ fi set -e -echo $_arg_version +version=$_arg_version -if [ x$_arg_version != x ]; then - version=$_arg_version -else - version=$(rpm -q --specfile --qf='%{version}\n' nodejs.spec | head -n1) +NODE_MAJOR=$(echo $version | cut -d. -f1) +NODE_MINOR=$(echo $version | cut -d. -f2) +NODE_PATCH=$(echo $version | cut -d. -f3) + +# Treat odd-numbered major releases as pre-releases for the +# next LTS release. +if [[ $((NODE_MAJOR % 2)) -eq 0 ]]; + then NODE_PKG_MAJOR=${NODE_MAJOR}; + else NODE_PKG_MAJOR=$((NODE_MAJOR + 1)); +fi + +FEDORA_DEFAULT_RELEASE_LOW=$((NODE_PKG_MAJOR + 19)) +FEDORA_DEFAULT_RELEASE_HIGH=$((NODE_PKG_MAJOR + 20)) + +if [[ $((NODE_PKG_MAJOR)) -eq 20 ]] + then RHEL_DEFAULT_RELEASE=" || 0%{?rhel} == 10" fi rm -rf node-v${version}.tar.gz \ node-v${version}-stripped.tar.gz \ node-v${version}/ \ + wasi-sdk-* \ + cjs-module-lexer* \ + undici* \ SHASUMS256.txt +echo Downloading node-v${version}.tar.gz wget http://nodejs.org/dist/v${version}/node-v${version}.tar.gz \ http://nodejs.org/dist/v${version}/SHASUMS256.txt +echo Validating sha256sum sha256sum -c SHASUMS256.txt --ignore-missing rm -f SHASUMS256.txt tar -zxf node-v${version}.tar.gz @@ -132,56 +183,102 @@ tar -zxf node-v${version}.tar.gz rm -rf node-v${version}/deps/openssl tar -zcf node-v${version}-stripped.tar.gz node-v${version} +# Download the cjs-module-lexer sources +LEXER_VERSION=$(jq -r '.version' node-v${version}/deps/cjs-module-lexer/package.json) +wget https://github.com/nodejs/cjs-module-lexer/archive/refs/tags/${LEXER_VERSION}.tar.gz +tar -zxf ${LEXER_VERSION}.tar.gz +rm -f cjs-module-lexer-${LEXER_VERSION}/lib/lexer.wasm +tar -zcf cjs-module-lexer-${LEXER_VERSION}-stripped.tar.gz cjs-module-lexer-${LEXER_VERSION}/ +rm -f ${LEXER_VERSION}.tar.gz + +# Download the WASI compiler used to build cjs-module-lexer +LEXER_WASI_MAJOR=$(grep -oP '(?<=^\W../wasi-sdk-)\d+\.\d+' cjs-module-lexer-${LEXER_VERSION}/Makefile | cut -d'.' -f1) +LEXER_WASI_MINOR=$(grep -oP '(?<=^\W../wasi-sdk-)\d+\.\d+' cjs-module-lexer-${LEXER_VERSION}/Makefile | cut -d'.' -f2) +wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${LEXER_WASI_MAJOR}/wasi-sdk-${LEXER_WASI_MAJOR}.${LEXER_WASI_MINOR}-linux.tar.gz +rm -rf cjs-module-lexer-${LEXER_VERSION}/ + +# Download the undici sources +UNDICI_VERSION=$(jq -r '.version' node-v${version}/deps/undici/src/package.json) +wget https://github.com/nodejs/undici/archive/refs/tags/v${UNDICI_VERSION}.tar.gz +tar -zxf v${UNDICI_VERSION}.tar.gz +rm -f undici-${UNDICI_VERSION}/lib/llhttp/llhttp*.wasm* +tar -zcf undici-${UNDICI_VERSION}-stripped.tar.gz undici-${UNDICI_VERSION}/ +rm -f v${UNDICI_VERSION}.tar.gz + +# Download the WASI compiler used to build undici +if [ -z $_arg_undici_wasi_sdk_version ]; then + UNDICI_WASI_MAJOR=$(grep -oP '(?<=WASI_SDK_VERSION_MAJOR=).*' undici-${UNDICI_VERSION}/build/Dockerfile) + UNDICI_WASI_MINOR=$(grep -oP '(?<=WASI_SDK_VERSION_MINOR=).*' undici-${UNDICI_VERSION}/build/Dockerfile) +else + OIFS=$IFS + IFS="." + UNDICI_WASI_VERSION=($_arg_undici_wasi_sdk_version) + UNDICI_WASI_MAJOR=${UNDICI_WASI_VERSION[0]} + UNDICI_WASI_MINOR=${UNDICI_WASI_VERSION[1]} + IFS=$OIFS +fi + +wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${UNDICI_WASI_MAJOR}/wasi-sdk-${UNDICI_WASI_MAJOR}.${UNDICI_WASI_MINOR}-linux.tar.gz +rm -rf undici-${UNDICI_VERSION}/ + ICU_MAJOR=$(jq -r '.[0].url' node-v${version}/tools/icu/current_ver.dep | sed --expression='s/.*release-\([[:digit:]]\+\)-\([[:digit:]]\+\).*/\1/g') ICU_MINOR=$(jq -r '.[0].url' node-v${version}/tools/icu/current_ver.dep | sed --expression='s/.*release-\([[:digit:]]\+\)-\([[:digit:]]\+\).*/\2/g') # Download the ICU binary data files rm -Rf icu4c-${ICU_MAJOR}_${ICU_MINOR}-data-bin-*.zip -wget $(grep Source3 nodejs.spec | sed --expression="s/.*http/http/g" --expression="s/\(\%{icu_major}\)/${ICU_MAJOR}/g" --expression="s/\(\%{icu_minor}\)/${ICU_MINOR}/g") -wget $(grep Source4 nodejs.spec | sed --expression="s/.*http/http/g" --expression="s/\(\%{icu_major}\)/${ICU_MAJOR}/g" --expression="s/\(\%{icu_minor}\)/${ICU_MINOR}/g") - -fedpkg new-sources node-v${version}-stripped.tar.gz icu4c-${ICU_MAJOR}_${ICU_MINOR}-data-bin-*.zip +wget $(grep Source3 packaging/nodejs.spec.j2 | sed --expression="s/.*http/http/g" --expression="s/\(\%{icu_major}\)/${ICU_MAJOR}/g" --expression="s/\(\%{icu_minor}\)/${ICU_MINOR}/g") +wget $(grep Source4 packaging/nodejs.spec.j2 | sed --expression="s/.*http/http/g" --expression="s/\(\%{icu_major}\)/${ICU_MAJOR}/g" --expression="s/\(\%{icu_minor}\)/${ICU_MINOR}/g") rm -f node-v${version}.tar.gz set +e # Determine the bundled versions of the various packages -echo "Bundled software versions" +echo "Included software versions" echo "-------------------------" echo +echo "Node.js version" +echo "=========================" +echo "${version}" +echo echo "libnode shared object version" echo "=========================" -grep "define NODE_MODULE_VERSION" node-v${version}/src/node_version.h +NODE_SOVERSION=$(grep -oP '(?<=#define NODE_MODULE_VERSION )\d+' node-v${version}/src/node_version.h) +echo "${NODE_SOVERSION}" echo echo "V8" echo "=========================" -grep "define V8_MAJOR_VERSION" node-v${version}/deps/v8/include/v8-version.h -grep "define V8_MINOR_VERSION" node-v${version}/deps/v8/include/v8-version.h -grep "define V8_BUILD_NUMBER" node-v${version}/deps/v8/include/v8-version.h -grep "define V8_PATCH_LEVEL" node-v${version}/deps/v8/include/v8-version.h +V8_MAJOR=$(grep -oP '(?<=#define V8_MAJOR_VERSION )\d+' node-v${version}/deps/v8/include/v8-version.h) +V8_MINOR=$(grep -oP '(?<=#define V8_MINOR_VERSION )\d+' node-v${version}/deps/v8/include/v8-version.h) +V8_BUILD=$(grep -oP '(?<=#define V8_BUILD_NUMBER )\d+' node-v${version}/deps/v8/include/v8-version.h) +V8_PATCH=$(grep -oP '(?<=#define V8_PATCH_LEVEL )\d+' node-v${version}/deps/v8/include/v8-version.h) +echo "${V8_MAJOR}.${V8_MINOR}.${V8_BUILD}.${V8_PATCH}" echo echo "c-ares" echo "=========================" -grep "define ARES_VERSION_MAJOR" node-v${version}/deps/cares/include/ares_version.h -grep "define ARES_VERSION_MINOR" node-v${version}/deps/cares/include/ares_version.h -grep "define ARES_VERSION_PATCH" node-v${version}/deps/cares/include/ares_version.h +C_ARES_VERSION=$(grep -oP '(?<=#define ARES_VERSION_STR ).*\"' node-v${version}/deps/cares/include/ares_version.h |sed -e 's/^"//' -e 's/"$//') +echo $C_ARES_VERSION echo echo "llhttp" echo "=========================" -grep "define LLHTTP_VERSION_MAJOR" node-v${version}/deps/llhttp/include/llhttp.h -grep "define LLHTTP_VERSION_MINOR" node-v${version}/deps/llhttp/include/llhttp.h -grep "define LLHTTP_VERSION_PATCH" node-v${version}/deps/llhttp/include/llhttp.h +LLHTTP_MAJOR=$(grep -oP '(?<=#define LLHTTP_VERSION_MAJOR )\d+' node-v${version}/deps/llhttp/include/llhttp.h) +LLHTTP_MINOR=$(grep -oP '(?<=#define LLHTTP_VERSION_MINOR )\d+' node-v${version}/deps/llhttp/include/llhttp.h) +LLHTTP_PATCH=$(grep -oP '(?<=#define LLHTTP_VERSION_PATCH )\d+' node-v${version}/deps/llhttp/include/llhttp.h) +LLHTTP_VERSION="${LLHTTP_MAJOR}.${LLHTTP_MINOR}.${LLHTTP_PATCH}" +echo $LLHTTP_VERSION echo echo "libuv" echo "=========================" -grep "define UV_VERSION_MAJOR" node-v${version}/deps/uv/include/uv/version.h -grep "define UV_VERSION_MINOR" node-v${version}/deps/uv/include/uv/version.h -grep "define UV_VERSION_PATCH" node-v${version}/deps/uv/include/uv/version.h +UV_MAJOR=$(grep -oP '(?<=#define UV_VERSION_MAJOR )\d+' node-v${version}/deps/uv/include/uv/version.h) +UV_MINOR=$(grep -oP '(?<=#define UV_VERSION_MINOR )\d+' node-v${version}/deps/uv/include/uv/version.h) +UV_PATCH=$(grep -oP '(?<=#define UV_VERSION_PATCH )\d+' node-v${version}/deps/uv/include/uv/version.h) +LIBUV_VERSION="${UV_MAJOR}.${UV_MINOR}.${UV_PATCH}" +echo $UV_VERSION echo echo "nghttp2" echo "=========================" -grep "define NGHTTP2_VERSION " node-v${version}/deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h +NGHTTP2_VERSION=$(grep -oP '(?<=#define NGHTTP2_VERSION ).*\"' node-v${version}/deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h |sed -e 's/^"//' -e 's/"$//') +echo $NGHTTP2_VERSION echo echo "ICU" echo "=========================" @@ -189,23 +286,95 @@ echo "${ICU_MAJOR}.${ICU_MINOR}" echo echo "punycode" echo "=========================" -grep "'version'" node-v${version}/lib/punycode.js +PUNYCODE_VERSION=$(/usr/bin/node -e "console.log(require('punycode').version)") +echo $PUNYCODE_VERSION echo echo "uvwasi" echo "=========================" -grep "define UVWASI_VERSION_MAJOR" node-v${version}/deps/uvwasi/include/uvwasi.h -grep "define UVWASI_VERSION_MINOR" node-v${version}/deps/uvwasi/include/uvwasi.h -grep "define UVWASI_VERSION_PATCH" node-v${version}/deps/uvwasi/include/uvwasi.h +UVWASI_MAJOR=$(grep -oP '(?<=#define UVWASI_VERSION_MAJOR )\d+' node-v${version}/deps/uvwasi/include/uvwasi.h) +UVWASI_MINOR=$(grep -oP '(?<=#define UVWASI_VERSION_MINOR )\d+' node-v${version}/deps/uvwasi/include/uvwasi.h) +UVWASI_PATCH=$(grep -oP '(?<=#define UVWASI_VERSION_PATCH )\d+' node-v${version}/deps/uvwasi/include/uvwasi.h) +UVWASI_VERSION="${UVWASI_MAJOR}.${UVWASI_MINOR}.${UVWASI_PATCH}" +echo $UVWASI_VERSION echo echo "npm" echo "=========================" -grep "\"version\":" node-v${version}/deps/npm/package.json +NPM_VERSION=$(jq -r .version ./node-v${version}/deps/npm/package.json) +echo $NPM_VERSION echo echo "zlib" echo "=========================" -grep "define ZLIB_VERSION" node-v${version}/deps/zlib/zlib.h +ZLIB_VERSION=$(grep -oP '(?<=#define ZLIB_VERSION ).*\"' node-v${version}/deps/zlib/zlib.h |sed -e 's/^"//' -e 's/"$//') +echo $ZLIB_VERSION +echo +echo "cjs-module-lexer" +echo "=========================" +echo "${LEXER_VERSION}" +echo "WASI-SDK: ${LEXER_WASI_MAJOR}.${LEXER_WASI_MINOR}" +echo +echo "undici" +echo "=========================" +echo "${UNDICI_VERSION}" +echo "WASI-SDK: ${UNDICI_WASI_MAJOR}.${UNDICI_WASI_MINOR}" echo -echo "Make sure these versions match what is in the RPM spec file" +echo "ada" +echo "=========================" +ADA_VERSION=$(grep -osP '(?<=#define ADA_VERSION ).*\"' node-v${version}/deps/ada/ada.h |sed -e 's/^"//' -e 's/"$//') +ADA_VERSION=${ADA_VERSION:-0} +echo "${ADA_VERSION}" +echo +echo "Applying versions to spec template" + +# Get the list of patches we need to add to the specfile +readarray -t patchlist < <(git ls-files |grep '^[0-9]\{4\}-.*\.patch') +json_patchlist=$(jq --compact-output --null-input '$ARGS.positional' --args -- "${patchlist[@]}") + +IFS='' read -r -d '' template_json < ${SCRIPT_DIR}/nodejs${NODE_PKG_MAJOR}.spec + +if [ $_arg_push = 'on' ]; then + fedpkg new-sources node-v${version}-stripped.tar.gz \ + icu4c-${ICU_MAJOR}_${ICU_MINOR}-data-bin-*.zip \ + cjs-module-lexer-${LEXER_VERSION}-stripped.tar.gz \ + wasi-sdk-${LEXER_WASI_MAJOR}.${LEXER_WASI_MINOR}-linux.tar.gz \ + undici-${UNDICI_VERSION}-stripped.tar.gz \ + wasi-sdk-${UNDICI_WASI_MAJOR}.${UNDICI_WASI_MINOR}-linux.tar.gz +fi rm -rf node-v${version} # ] <-- needed because of Argbash diff --git a/nodejs.pc.in b/nodejs.pc.in new file mode 100644 index 0000000000000000000000000000000000000000..a699363223ba6614c6d8d8ee646794492c55cc00 --- /dev/null +++ b/nodejs.pc.in @@ -0,0 +1,9 @@ +prefix=@PREFIX@ +includedir=@INCLUDEDIR@ +libdir=@LIBDIR@ + +Name: @PKGCONFNAME@ +Description: JavaScript Runtime +Version: @NODEJS_VERSION@ +Libs: -L${libdir} -lnodejs +Cflags: -I${includedir}/node diff --git a/nodejs.spec b/nodejs.spec index c516549954a8caccb57b24db9e11a89d83070160..7f6c67ee5f710c894c354b8f59cb16b38a418ad4 100644 --- a/nodejs.spec +++ b/nodejs.spec @@ -1,33 +1,13 @@ %define anolis_release 1 -# The following macros control the usage of dependencies bundled from upstream. -# -# When to use what: -# - Regular (presumably non-modular) build: use neither (the default in Fedora) -# - Early bootstrapping build that is not intended to be shipped: -# use --with=bootstrap; this will bundle deps and add `~bootstrap` release suffix -# - Build with some dependencies not avalaible in necessary versions (i.e. module build): -# use --with=bundled; will bundle deps, but do not add the suffix -# -# create bootstrapping build with bundled deps and extra release suffix -%bcond_with bootstrap -# bundle dependencies that are not available in Fedora modules -%if %{with bootstrap} -%bcond_without bundled -%else -%bcond_with bundled -%endif - -%bcond_with python3_fixup %bcond_with bundled_zlib - # LTO is currently broken on Node.js builds %define _lto_cflags %{nil} # Heavy-handed approach to avoiding issues with python # bytecompiling files in the node_modules/ directory -%global __python %{__python3} +%global __python %{python3} # == Master Relase == # This is used by both the nodejs package and the npm subpackage that @@ -44,55 +24,64 @@ # than a Fedora release lifecycle. %global nodejs_epoch 1 %global nodejs_major 18 -%global nodejs_minor 12 -%global nodejs_patch 1 -%global nodejs_abi %{nodejs_major}.%{nodejs_minor} +%global nodejs_minor 18 +%global nodejs_patch 2 # nodejs_soversion - from NODE_MODULE_VERSION in src/node_version.h %global nodejs_soversion 108 +%global nodejs_abi %{nodejs_soversion} %global nodejs_version %{nodejs_major}.%{nodejs_minor}.%{nodejs_patch} %global nodejs_release %{baserelease} +%global nodejs_envr %{nodejs_epoch}:%{nodejs_version}-%{nodejs_release} + %global nodejs_datadir %{_datarootdir}/nodejs +# Determine if this should be the default version for this Fedora release +# The default version will own /usr/bin/node and friends + +%global nodejs_default_sitelib %{_prefix}/lib/node_modules +%global nodejs_private_sitelib %{nodejs_default_sitelib} + + # == Bundled Dependency Versions == # v8 - from deps/v8/include/v8-version.h # Epoch is set to ensure clean upgrades from the old v8 package -%global v8_epoch 2 +%global v8_epoch 3 %global v8_major 10 %global v8_minor 2 %global v8_build 154 -%global v8_patch 15 +%global v8_patch 26 %global v8_version %{v8_major}.%{v8_minor}.%{v8_build}.%{v8_patch} %global v8_release %{nodejs_epoch}.%{nodejs_major}.%{nodejs_minor}.%{nodejs_patch}.%{nodejs_release} # zlib - from deps/zlib/zlib.h -%global zlib_version 1.2.11 +%global zlib_version 1.2.13.1-motley # c-ares - from deps/cares/include/ares_version.h # https://github.com/nodejs/node/pull/9332 -%global c_ares_version 1.18.1 +%global c_ares_version 1.19.1 # llhttp - from deps/llhttp/include/llhttp.h -%global llhttp_version 6.0.10 +%global llhttp_version 6.0.11 # libuv - from deps/uv/include/uv/version.h -%global libuv_version 1.43.0 +%global libuv_version 1.44.2 # nghttp2 - from deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h -%global nghttp2_version 1.47.0 +%global nghttp2_version 1.57.0 # ICU - from tools/icu/current_ver.dep -%global icu_major 71 -%global icu_minor 1 +%global icu_major 73 +%global icu_minor 2 %global icu_version %{icu_major}.%{icu_minor} %global icudatadir %{nodejs_datadir}/icudata -%{!?little_endian: %global little_endian %(%{__python3} -c "import sys;print (0 if sys.byteorder=='big' else 1)")} +%{!?little_endian: %global little_endian %(%{python3} -c "import sys;print (0 if sys.byteorder=='big' else 1)")} # " this line just fixes syntax highlighting for vim that is confused by the above and continues literal # OpenSSL minimum version -%global openssl_minimum 1:3.0.2 +%global openssl30_minimum 1:3.0.2 # punycode - from lib/punycode.js # Note: this was merged into the mainline since 0.6.x @@ -101,7 +90,7 @@ # npm - from deps/npm/package.json %global npm_epoch 1 -%global npm_version 8.19.2 +%global npm_version 9.8.1 # In order to avoid needing to keep incrementing the release version for the # main package forever, we will just construct one for npm that is guaranteed @@ -109,12 +98,15 @@ # base npm version number is increasing. %global npm_release %{nodejs_epoch}.%{nodejs_major}.%{nodejs_minor}.%{nodejs_patch}.%{nodejs_release} +%global npm_envr %{npm_epoch}:%{npm_version}-%{npm_release} + # uvwasi - from deps/uvwasi/include/uvwasi.h -%global uvwasi_version 0.0.13 +%global uvwasi_version 0.0.18 # histogram_c - assumed from timestamps %global histogram_version 0.9.7 + Name: nodejs Epoch: %{nodejs_epoch} Version: %{nodejs_version} @@ -124,7 +116,6 @@ License: MIT and ASL 2.0 and ISC and BSD Group: Development/Languages URL: http://nodejs.org/ - # nodejs bundles openssl, but we use the system version in Fedora # because openssl contains prohibited code, we remove openssl completely from # the tarball, using the script in Source100 @@ -134,23 +125,29 @@ Source2: btest402.js # The binary data that icu-small can use to get icu-full capability Source3: https://github.com/unicode-org/icu/releases/download/release-%{icu_major}-%{icu_minor}/icu4c-%{icu_major}_%{icu_minor}-data-bin-b.zip Source4: https://github.com/unicode-org/icu/releases/download/release-%{icu_major}-%{icu_minor}/icu4c-%{icu_major}_%{icu_minor}-data-bin-l.zip -Source100: nodejs-sources.sh +Source200: nodejs-sources.sh +Source201: npmrc.builtin.in +Source202: nodejs.pc.in +Source203: v8.pc.in + +# These are full sources for dependencies included as WASM blobs in the source of Node itself. +# Note: These sources would also include pre-compiled WASM blobs… so they are adjusted not to. +# Recipes for creating these blobs are included in the sources. +# These are generated by nodejs-sources.sh +Source101: cjs-module-lexer-1.2.2-stripped.tar.gz +Source102: wasi-sdk-11.0-linux.tar.gz +Source111: undici-5.26.3-stripped.tar.gz +Source112: wasi-sdk-20.0-linux.tar.gz -# The native module Requires generator remains in the nodejs SRPM, so it knows -# the nodejs and v8 versions. The remainder has migrated to the -# nodejs-packaging SRPM. -Source7: nodejs_native.attr +Patch: 0001-Disable-running-gyp-on-shared-deps.patch -# Disable running gyp on bundled deps we don't use -Patch1: 0001-Disable-running-gyp-on-shared-deps.patch +%global pkgname nodejs BuildRequires: make BuildRequires: python%{python3_pkgversion}-devel BuildRequires: python%{python3_pkgversion}-setuptools BuildRequires: python%{python3_pkgversion}-jinja2 -%if !%{with python3_fixup} BuildRequires: python-unversioned-command -%endif %if %{with bundled_zlib} Provides: bundled(zlib) = %{zlib_version} %else @@ -160,16 +157,24 @@ BuildRequires: brotli-devel BuildRequires: gcc >= 8.3.0 BuildRequires: gcc-c++ >= 8.3.0 +BuildRequires: pkgconf BuildRequires: jq + # needed to generate bundled provides for npm dependencies # https://src.fedoraproject.org/rpms/nodejs/pull-request/2 # https://pagure.io/nodejs-packaging/pull-request/10 BuildRequires: nodejs-packaging + BuildRequires: chrpath BuildRequires: libatomic -BuildRequires: systemtap-sdt-devel +BuildRequires: ninja-build BuildRequires: unzip +BuildRequires: systemtap-sdt-devel + + +#%%define unversioned_obsoletes_of_nodejsXX_if_default() %{nil} + %if %{with bundled} Provides: bundled(libuv) = %{libuv_version} %else @@ -185,17 +190,24 @@ Provides: bundled(nghttp2) = %{nghttp2_version} # provide releases for it. Provides: bundled(llhttp) = %{llhttp_version} -BuildRequires: openssl-devel >= %{openssl_minimum} -Requires: openssl >= %{openssl_minimum} -%global ssl_configure --shared-openssl + +BuildRequires: openssl >= %{openssl30_minimum} +BuildRequires: openssl-devel >= %{openssl30_minimum} +%global openssl_fips_configure --openssl-is-fips + +%global ssl_configure --shared-openssl --openssl-conf-name=openssl_conf %{openssl_fips_configure} + +%global dtrace_configure %{nil} # we need the system certificate store Requires: ca-certificates -Requires: nodejs-libs = %{nodejs_epoch}:%{version}-%{release} +Requires: %{pkgname}-libs = %{nodejs_envr} -# Pull in the full-icu data by default -Recommends: nodejs-full-i18n = %{nodejs_epoch}:%{version}-%{release} +# Pull in the docs and full-icu data by default +Recommends: %{pkgname}-docs = %{nodejs_envr} +Recommends: %{pkgname}-full-i18n = %{nodejs_envr} +Recommends: %{pkgname}-npm >= %{npm_envr} # we need ABI virtual provides where SONAMEs aren't enough/not present so deps # break when binary compatibility is broken @@ -244,42 +256,52 @@ Provides: bundled(icu) = %{icu_version} Provides: bundled(uvwasi) = %{uvwasi_version} Provides: bundled(histogram) = %{histogram_version} -# Make sure we keep NPM up to date when we update Node.js -Recommends: npm >= %{npm_epoch}:%{npm_version}-%{npm_release}%{?dist} -Conflicts: npm < %{npm_epoch}:%{npm_version}-%{npm_release}%{?dist} +# Upstream has added a new URL parser that has no option to build as a shared +# library (19.7.0+) +Provides: bundled(ada) = 2.6.0 + + +#%%aunversioned_obsoletes_of_nodejsXX_if_default %description -Node.js is a platform built on Chrome's JavaScript runtime -for easily building fast, scalable network applications. -Node.js uses an event-driven, non-blocking I/O model that -makes it lightweight and efficient, perfect for data-intensive -real-time applications that run across distributed devices. +Node.js is a platform built on Chrome's JavaScript runtime \ +for easily building fast, scalable network applications. \ +Node.js uses an event-driven, non-blocking I/O model that \ +makes it lightweight and efficient, perfect for data-intensive \ +real-time applications that run across distributed devices.} %package devel +#-n %{pkgname}-devel Summary: JavaScript runtime - development headers Group: Development/Languages -Requires: %{name} = %{epoch}:%{nodejs_version}-%{nodejs_release}%{?dist} -Requires: %{name}-libs = %{epoch}:%{nodejs_version}-%{nodejs_release}%{?dist} +Requires: %{pkgname} = %{nodejs_envr} +Requires: %{pkgname}-libs = %{nodejs_envr} Requires: openssl-devel %if !%{with bundled_zlib} Requires: zlib-devel %endif Requires: brotli-devel +Requires: nodejs-packaging %if %{without bundled} Requires: libuv-devel %endif -# Make it conflict with any other version of nodejs-devel -Conflicts: %{name}-devel +#%%unversioned_obsoletes_of_nodejsXX_if_default devel + +Provides: nodejs-devel-pkg = %{nodejs_envr} +Conflicts: nodejs-devel-pkg + %description devel +#-n %{pkgname}-devel Development headers for the Node.js JavaScript runtime. %package libs +#-n %{pkgname}-libs Summary: Node.js and v8 libraries # Compatibility for obsolete v8 package @@ -287,69 +309,87 @@ Provides: libv8.so.%{v8_major}()(64bit) = %{v8_epoch}:%{v8_version} Provides: libv8_libbase.so.%{v8_major}()(64bit) = %{v8_epoch}:%{v8_version} Provides: libv8_libplatform.so.%{v8_major}()(64bit) = %{v8_epoch}:%{v8_version} -Provides: v8 = %{v8_epoch}:%{v8_version}-%{nodejs_release}%{?dist} +Provides: v8 = %{v8_epoch}:%{v8_version}-%{nodejs_release} Obsoletes: v8 < 1:6.7.17-10 +Provides: nodejs-libs = %{nodejs_envr} +#%%unversioned_obsoletes_of_nodejsXX_if_default libs + %description libs +#-n %{pkgname}-libs Libraries to support Node.js and provide stable v8 interfaces. %package full-i18n +#-n %{pkgname}-full-i18n Summary: Non-English locale data for Node.js -Requires: %{name} = %{nodejs_epoch}:%{nodejs_version}-%{nodejs_release}%{?dist} +Requires: %{pkgname} = %{nodejs_envr} + +#%%unversioned_obsoletes_of_nodejsXX_if_default full-i18n + %description full-i18n +#-n %{pkgname}-full-i18n Optional data files to provide full-icu support for Node.js. Remove this package to save space if non-English locales are not needed. -%package -n v8-devel +%package -n v8-%{v8_major}.%{v8_minor}-devel Summary: v8 - development headers Epoch: %{v8_epoch} Version: %{v8_version} -Release: %{v8_release}%{?dist} -Requires: %{name}-devel = %{nodejs_epoch}:%{nodejs_version}-%{nodejs_release}%{?dist} -Requires: %{name}-libs = %{nodejs_epoch}:%{nodejs_version}-%{nodejs_release}%{?dist} +Release: %{v8_release} +Requires: %{pkgname}-devel = %{nodejs_envr} +Requires: %{pkgname}-libs = %{nodejs_envr} +Provides: v8-devel = %{v8_epoch}:%{v8_version}-%{v8_release} + +Conflicts: v8-devel Conflicts: v8-314-devel -%description -n v8-devel + +%description -n v8-%{v8_major}.%{v8_minor}-devel Development headers for the v8 runtime. -%package -n npm +%package npm +#-n %{pkgname}-npm Summary: Node.js Package Manager Epoch: %{npm_epoch} Version: %{npm_version} Release: %{npm_release}%{?dist} -# We used to ship npm separately, but it is so tightly integrated with Node.js -# (and expected to be present on all Node.js systems) that we ship it bundled -# now. -Obsoletes: npm < 0:3.5.4-6 -Requires: nodejs = %{nodejs_epoch}:%{nodejs_version}-%{nodejs_release}%{?dist} -Recommends: nodejs-docs = %{nodejs_epoch}:%{nodejs_version}-%{nodejs_release}%{?dist} +# If we're using the companion NPM build, make sure to keep it in lock-step +# with the Node version. +Requires: %{pkgname} = %{nodejs_envr} +Recommends: %{pkgname}-docs = %{nodejs_envr} # Do not add epoch to the virtual NPM provides or it will break # the automatic dependency-generation script. Provides: npm(npm) = %{npm_version} -%description -n npm + +#%%unversioned_obsoletes_of_nodejsXX_if_default npm + + +%description npm +#-n %{pkgname}-npm npm is a package manager for node.js. You can use it to install and publish your node programs. It manages dependencies and does other cool stuff. %package docs +#-n %{pkgname}-docs Summary: Node.js API documentation Group: Documentation BuildArch: noarch +Requires(meta): %{pkgname} = %{nodejs_envr} + +Provides: nodejs-docs = %{nodejs_envr} +#%%unversioned_obsoletes_of_nodejsXX_if_default docs -# We don't require that the main package be installed to -# use the docs, but if it is installed, make sure the -# version always matches -Conflicts: %{name} > %{nodejs_epoch}:%{nodejs_version}-%{nodejs_release}%{?dist} -Conflicts: %{name} < %{nodejs_epoch}:%{nodejs_version}-%{nodejs_release}%{?dist} %description docs +#-n %{pkgname}-docs The API documentation for the Node.js JavaScript runtime. @@ -365,15 +405,25 @@ rm -rf deps/brotli rm -rf deps/v8/third_party/jinja2 rm -rf tools/inspector_protocol/jinja2 -# Replace any instances of unversioned python' with python3 -%if %{with python3_fixup} -pathfix.py -i %{__python3} -pn $(find -type f ! -name "*.js") -find . -type f -exec sed -i "s~/usr\/bin\/env python~/usr/bin/python3~" {} \; -find . -type f -exec sed -i "s~/usr\/bin\/python\W~/usr/bin/python3~" {} \; -sed -i "s~usr\/bin\/python2~usr\/bin\/python3~" ./deps/v8/tools/gen-inlining-tests.py -sed -i "s~usr\/bin\/python.*$~usr\/bin\/python3~" ./deps/v8/tools/mb/mb_unittest.py -find . -type f -exec sed -i "s~python -c~python3 -c~" {} \; -%endif +# check for correct versions of dependencies we are bundling +check_wasm_dep() { + local -r name="$1" source="$2" packagejson="$3" + local -r expected_version="$(jq -r '.version' "${packagejson}")" + + if ls "${source}"|grep -q --fixed-strings "${expected_version}"; then + printf '%s version matches\n' "${name}" >&2 + else + printf '%s version MISMATCH: %s !~ %s\n' "${name}" "${expected_version}" "${source}" >&2 + return 1 + fi +} + +check_wasm_dep cjs-module-lexer '%{SOURCE101}' deps/cjs-module-lexer/package.json +check_wasm_dep undici '%{SOURCE111}' deps/undici/src/package.json + +# Replace any instances of unversioned python with python3 +pfiles=( $(grep -rl python) ) +%py3_shebang_fix ${pfiles[@]} %build @@ -383,80 +433,99 @@ find . -type f -exec sed -i "s~python -c~python3 -c~" {} \; # When compiled on armv7hl this package generates an out of range # reference to the literal pool. This is most likely a GCC issue. -%ifarch %{arm} # Decrease debuginfo verbosity to reduce memory consumption during final # library linking %global optflags %(echo %{optflags} | sed 's/-g /-g1 /') -%endif export CC='%{__cc}' export CXX='%{__cxx}' -%if %{with python3_fixup} -export NODE_GYP_FORCE_PYTHON=%{__python3} -%endif +export NODE_GYP_FORCE_PYTHON=%{python3} # build with debugging symbols and add defines from libuv (#892601) # Node's v8 breaks with GCC 6 because of incorrect usage of methods on # NULL objects. We need to pass -fno-delete-null-pointer-checks +# 2022-07-14: There's a bug in either torque or gcc that causes a +# segmentation fault on ppc64le and s390x if compiled with -O2. Things +# run fine on -O1 and -O3, so we'll just go with -O3 (like upstream) +# while this gets sorted out. extra_cflags=( -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DZLIB_CONST -fno-delete-null-pointer-checks + -O3 + -fno-ipa-icf ) export CFLAGS="%{optflags} ${extra_cflags[*]}" CXXFLAGS="%{optflags} ${extra_cflags[*]}" export LDFLAGS="%{build_ldflags}" -%{__python3} configure.py --prefix=%{_prefix} \ +# Fake up the unversioned python executable because gyp calls it from the PATH +mkdir .bin +cwd=$(pwd) +ln -srf /usr/bin/python3 ./.bin/python +export PATH="${cwd}/.bin:$PATH" + +%{python3} configure.py \ + --verbose \ + --ninja \ + --enable-lto \ + --prefix=%{_prefix} \ --shared \ --libdir=%{_lib} \ %{ssl_configure} \ + %{dtrace_configure} \ %{!?with_bundled_zlib:--shared-zlib} \ --shared-brotli \ - %{!?with_bundled:--shared-libuv} \ - %{?with_bundled:--without-dtrace}%{!?with_bundled:--with-dtrace} \ + --shared-libuv \ --with-intl=small-icu \ --with-icu-default-data-dir=%{icudatadir} \ --without-corepack \ --openssl-use-def-ca-store -%make_build BUILDTYPE=Release +%ninja_build -C out/Release %install -rm -rf %{buildroot} +# The ninja build does not put the shared library in the expected location, so +# we will move it. +mv out/Release/lib/libnode.so.%{nodejs_soversion} out/Release/ ./tools/install.py install %{buildroot} %{_prefix} +rm -f %{buildroot}%{_datadir}/systemtap/tapset/node.stp + # Set the binary permissions properly chmod 0755 %{buildroot}/%{_bindir}/node chrpath --delete %{buildroot}%{_bindir}/node +# Move the npm binary to npm-NODEJS_MAJOR +rm -f %{buildroot}%{_bindir}/npm + +ln -srf %{buildroot}%{nodejs_private_sitelib}/npm/bin/npm-cli.js \ + %{buildroot}%{_bindir}/npm + +# Move the npx binary to npx-NODEJS_MAJOR +rm -f %{buildroot}%{_bindir}/npx + +ln -srf %{buildroot}%{nodejs_private_sitelib}/npm/bin/npx-cli.js \ + %{buildroot}%{_bindir}/npx + # Install library symlink -ln -s libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/libnode.so +ln -srf %{buildroot}%{_libdir}/libnode.so.%{nodejs_soversion} \ + %{buildroot}%{_libdir}/libnode.so # Install v8 compatibility symlinks for header in %{buildroot}%{_includedir}/node/libplatform %{buildroot}%{_includedir}/node/v8*.h; do header=$(basename ${header}) - ln -s ./node/${header} %{buildroot}%{_includedir}/${header} + ln -sf ./node/${header} %{buildroot}%{_includedir}/${header} done ln -s ./node/cppgc %{buildroot}%{_includedir}/cppgc -for soname in libv8 libv8_libbase libv8_libplatform; do - ln -s libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/${soname}.so - ln -s libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/${soname}.so.%{v8_major} -done -# own the sitelib directory -mkdir -p %{buildroot}%{_prefix}/lib/node_modules +for soname in libv8 libv8_libbase libv8_libplatform; do + ln -srf %{buildroot}%{_libdir}/libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/${soname}.so.%{v8_major}.%{v8_minor} + ln -srf %{buildroot}%{_libdir}/libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/${soname}.so -# ensure Requires are added to every native module that match the Provides from -# the nodejs build in the buildroot -install -Dpm0644 %{SOURCE7} %{buildroot}%{_rpmconfigdir}/fileattrs/nodejs_native.attr -cat << EOF > %{buildroot}%{_rpmconfigdir}/nodejs_native.req -#!/bin/sh -echo 'nodejs(abi%{nodejs_major}) >= %nodejs_abi' -EOF -chmod 0755 %{buildroot}%{_rpmconfigdir}/nodejs_native.req +done # install documentation mkdir -p %{buildroot}%{_pkgdocdir}/html @@ -464,25 +533,37 @@ cp -pr doc/* %{buildroot}%{_pkgdocdir}/html rm -f %{buildroot}%{_pkgdocdir}/html/nodejs.1 # node-gyp needs common.gypi too -mkdir -p %{buildroot}%{_datadir}/node -cp -p common.gypi %{buildroot}%{_datadir}/node +mkdir -p %{buildroot}%{nodejs_datadir} +cp -p common.gypi %{buildroot}%{nodejs_datadir} + +# The config.gypi file is platform-dependent, so rename it to not conflict +mv %{buildroot}%{_includedir}/node/config.gypi \ + %{buildroot}%{_includedir}/node/config-%{_arch}.gypi # Install the GDB init tool into the documentation directory mv %{buildroot}/%{_datadir}/doc/node/gdbinit %{buildroot}/%{_pkgdocdir}/gdbinit -# install NPM docs to mandir -mkdir -p %{buildroot}%{_mandir} \ +mkdir -p %{buildroot}%{_mandir}/nodejs/man1 \ + %{buildroot}%{_mandir}/nodejs/man5 \ + %{buildroot}%{_mandir}/nodejs/man7 \ + %{buildroot}%{nodejs_default_sitelib}/npm/man \ %{buildroot}%{_pkgdocdir}/npm -cp -pr deps/npm/man/* %{buildroot}%{_mandir}/ -rm -rf %{buildroot}%{_prefix}/lib/node_modules/npm/man -ln -sf %{_mandir} %{buildroot}%{_prefix}/lib/node_modules/npm/man +# install manpage docs to mandir +cp -pr deps/npm/man/* \ + %{buildroot}%{_mandir}/nodejs/ +rm -rf %{buildroot}%{nodejs_private_sitelib}/npm/man +ln -srf %{buildroot}%{_mandir}/nodejs \ + %{buildroot}%{nodejs_private_sitelib}/npm/man + +# Install the node interpreter manpage +mv %{buildroot}%{_mandir}/man1/node.1 \ + %{buildroot}%{_mandir}/nodejs/man1/ # Install Gatsby HTML documentation to %%{_pkgdocdir} cp -pr deps/npm/docs %{buildroot}%{_pkgdocdir}/npm/ -rm -rf %{buildroot}%{_prefix}/lib/node_modules/npm/docs - -ln -sf %{_pkgdocdir}/npm %{buildroot}%{_prefix}/lib/node_modules/npm/docs +rm -rf %{buildroot}%{nodejs_private_sitelib}/npm/docs +ln -srf %{buildroot}%{_pkgdocdir}/npm %{buildroot}%{nodejs_private_sitelib}/npm/docs # Node tries to install some python files into a documentation directory # (and not the proper one). Remove them for now until we figure out what to @@ -493,23 +574,23 @@ rm -f %{buildroot}/%{_defaultdocdir}/node/lldb_commands.py \ # Some NPM bundled deps are executable but should not be. This causes # unnecessary automatic dependencies to be added. Make them not executable. # Skip the npm bin directory or the npm binary will not work. -find %{buildroot}%{_prefix}/lib/node_modules/npm \ - -not -path "%{buildroot}%{_prefix}/lib/node_modules/npm/bin/*" \ +find %{buildroot}%{nodejs_private_sitelib}/npm \ + -not -path "%{buildroot}%{nodejs_private_sitelib}/npm/bin/*" \ -executable -type f \ -exec chmod -x {} \; # The above command is a little overzealous. Add a few permissions back. -chmod 0755 %{buildroot}%{_prefix}/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node-gyp -chmod 0755 %{buildroot}%{_prefix}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js +chmod 0755 %{buildroot}%{nodejs_private_sitelib}/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node-gyp +chmod 0755 %{buildroot}%{nodejs_private_sitelib}/npm/node_modules/node-gyp/bin/node-gyp.js -# Drop the NPM default configuration in place -mkdir -p %{buildroot}%{_sysconfdir} -cp %{SOURCE1} %{buildroot}%{_sysconfdir}/npmrc +# Set the hashbang to use the matching Node.js interpreter +sed --in-place --regexp-extended \ + 's;^#!/usr/bin/env node($|\ |\t)+;#!/usr/bin/node;g' \ + %{buildroot}%{nodejs_private_sitelib}/npm/node_modules/node-gyp/bin/node-gyp.js -# NPM upstream expects it to be in /usr/etc/npmrc, so we'll put a symlink here -# This is done in the interests of keeping /usr read-only. -mkdir -p %{buildroot}%{_prefix}/etc -ln -s %{_sysconfdir}/npmrc %{buildroot}%{_prefix}/etc/npmrc +# Drop the NPM builtin configuration in place +sed -e 's#@SYSCONFDIR@#%{_sysconfdir}#g' \ + %{SOURCE201} > %{buildroot}%{nodejs_private_sitelib}/npm/npmrc # Install the full-icu data files mkdir -p %{buildroot}%{icudatadir} @@ -519,6 +600,22 @@ unzip -d %{buildroot}%{icudatadir} %{SOURCE4} icudt%{icu_major}l.dat unzip -d %{buildroot}%{icudatadir} %{SOURCE3} icudt%{icu_major}b.dat %endif +# Add pkg-config files +mkdir -p %{buildroot}%{_libdir}/pkgconfig +sed -e 's#@PREFIX@#%{_prefix}#g' \ + -e 's#@INCLUDEDIR@#%{_includedir}#g' \ + -e 's#@LIBDIR@#%{_libdir}#g' \ + -e 's#@PKGCONFNAME@#nodejs#g' \ + -e 's#@NODEJS_VERSION@#%{nodejs_version}#g' \ + %{SOURCE202} > %{buildroot}%{_libdir}/pkgconfig/nodejs-%{nodejs_pkg_major}.pc + +sed -e 's#@PREFIX@#%{_prefix}#g' \ + -e 's#@INCLUDEDIR@#%{_includedir}#g' \ + -e 's#@LIBDIR@#%{_libdir}#g' \ + -e 's#@PKGCONFVERSION@#v8-%{v8_major}.%{v8_minor}#g' \ + -e 's#@V8_VERSION@#%{v8_version}#g' \ + %{SOURCE203} > %{buildroot}%{_libdir}/pkgconfig/v8-%{v8_major}.%{v8_minor}.pc + %check # Fail the build if the versions don't match @@ -530,74 +627,68 @@ LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node -e "require( LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node -e "require(\"assert\").equal(require(\"punycode\").version, '%{punycode_version}')" # Ensure we have npm and that the version matches -LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}%{_bindir}/node %{buildroot}%{_bindir}/npm version --json |jq -e '.npm == "%{npm_version}"' +LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}%{_bindir}/node %{buildroot}%{_bindir}/npm-%{nodejs_pkg_major} version --json |jq -e '.npm == "%{npm_version}"' # Make sure i18n support is working -NODE_PATH=%{buildroot}%{_prefix}/lib/node_modules:%{buildroot}%{_prefix}/lib/node_modules/npm/node_modules LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node --icu-data-dir=%{buildroot}%{icudatadir} %{SOURCE2} +NODE_PATH=%{buildroot}%{_prefix}/lib/node_modules:%{buildroot}%{nodejs_private_sitelib}/npm/node_modules LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node --icu-data-dir=%{buildroot}%{icudatadir} %{SOURCE2} +%files +#-n %{pkgname} +%doc CHANGELOG.md onboarding.md GOVERNANCE.md README.md -%files %{_bindir}/node -%dir %{_prefix}/lib/node_modules -%dir %{_datadir}/node -%dir %{_datadir}/systemtap -%dir %{_datadir}/systemtap/tapset -%{_datadir}/systemtap/tapset/node.stp - -%if %{without bundled} -%dir %{_usr}/lib/dtrace -%{_usr}/lib/dtrace/node.d -%endif +%{nodejs_private_sitelib} -%{_rpmconfigdir}/fileattrs/nodejs_native.attr -%{_rpmconfigdir}/nodejs_native.req -%doc AUTHORS CHANGELOG.md onboarding.md GOVERNANCE.md README.md -%doc %{_mandir}/man1/node.1* +%doc %{_mandir}/nodejs/man1/node.1* %files devel +#-n %{pkgname}-devel %{_includedir}/node %{_libdir}/libnode.so -%{_datadir}/node/common.gypi +%{nodejs_datadir}/common.gypi %{_pkgdocdir}/gdbinit +%{_libdir}/pkgconfig/nodejs-%{nodejs_pkg_major}.pc %files full-i18n +#-n %{pkgname}-full-i18n %dir %{icudatadir} %{icudatadir}/icudt%{icu_major}*.dat %files libs +#-n %{pkgname}-libs %license LICENSE %{_libdir}/libnode.so.%{nodejs_soversion} -%{_libdir}/libv8.so.%{v8_major} -%{_libdir}/libv8_libbase.so.%{v8_major} -%{_libdir}/libv8_libplatform.so.%{v8_major} +%{_libdir}/libv8.so.%{v8_major}.%{v8_minor} +%{_libdir}/libv8_libbase.so.%{v8_major}.%{v8_minor} +%{_libdir}/libv8_libplatform.so.%{v8_major}.%{v8_minor} %dir %{nodejs_datadir}/ - -%files -n v8-devel +%files -n v8-%{v8_major}.%{v8_minor}-devel %{_includedir}/libplatform %{_includedir}/v8*.h %{_includedir}/cppgc %{_libdir}/libv8.so %{_libdir}/libv8_libbase.so %{_libdir}/libv8_libplatform.so +%{_libdir}/pkgconfig/v8-%{v8_major}.%{v8_minor}.pc + +%files npm +#-n %{pkgname}-npm -%files -n npm %{_bindir}/npm %{_bindir}/npx -%{_prefix}/lib/node_modules/npm -%config(noreplace) %{_sysconfdir}/npmrc -%{_prefix}/etc/npmrc -%ghost %{_sysconfdir}/npmignore -%doc %{_mandir}/man*/ -%exclude %doc %{_mandir}/man1/node.1* +%{nodejs_private_sitelib}/npm +%doc %{_mandir}/nodejs/ +%exclude %doc %{_mandir}/nodejs/man1/node.1* %files docs +#-n %{pkgname}-docs %doc doc %dir %{_pkgdocdir} %{_pkgdocdir}/html @@ -605,6 +696,9 @@ NODE_PATH=%{buildroot}%{_prefix}/lib/node_modules:%{buildroot}%{_prefix}/lib/nod %changelog +* Mon Oct 16 2023 Stephen Gallagher - 1:18.18.2-1 +- Update to 18.18.2 + * Wed Sep 13 2023 Chunmei Xu - 1:18.12.1-1 - udpate to 18.12.1 diff --git a/npmrc.builtin.in b/npmrc.builtin.in new file mode 100644 index 0000000000000000000000000000000000000000..739a57d4a2ba25fb6a76206be9840f4906fa6a10 --- /dev/null +++ b/npmrc.builtin.in @@ -0,0 +1,5 @@ +# This is the distibution-level configuration file for npm. +# To configure NPM on a system level, use the globalconfig below (defaults to @SYSCONFDIR@/npmrc). +# vim:set filetype=dosini: + +globalconfig=@SYSCONFDIR@/npmrc diff --git a/undici-5.26.3-stripped.tar.gz b/undici-5.26.3-stripped.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..93c5fb30f9270b55724b7e5615ae31775497c2e2 Binary files /dev/null and b/undici-5.26.3-stripped.tar.gz differ diff --git a/v8.pc.in b/v8.pc.in new file mode 100644 index 0000000000000000000000000000000000000000..6b63094c8c4eaa94c525bef3e515c6d0646cd44b --- /dev/null +++ b/v8.pc.in @@ -0,0 +1,9 @@ +prefix=@PREFIX@ +includedir=@INCLUDEDIR@ +libdir=@LIBDIR@ + +Name: v8-@PKGCONFVERSION@ +Description: JavaScript Runtime +Version: @V8_VERSION@ +Libs: -L${libdir} -lv8 +Cflags: -I${includedir} diff --git a/wasi-sdk-11.0-linux.tar.gz b/wasi-sdk-11.0-linux.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..006a6575c1db6df0d973fd9ea137817dd66ab74c Binary files /dev/null and b/wasi-sdk-11.0-linux.tar.gz differ diff --git a/wasi-sdk-20.0-linux.tar.gz b/wasi-sdk-20.0-linux.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..64a5ee4c868ffa924198266ffa2a6f9d537d8ed3 Binary files /dev/null and b/wasi-sdk-20.0-linux.tar.gz differ