nodejs/SPECS/nodejs.spec
2025-11-05 08:05:34 +00:00

542 lines
21 KiB
RPMSpec
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# This should be moved to rpm-redhat-config or similar as soon as feasible
# NOTE: %%SOURCE macros are not yet defined, so explicit path is needed
%{load:%{_sourcedir}/nodejs.srpm.macros}
# === Versions of any software shipped in the main nodejs tarball
%nodejs_define_version node 1:24.4.1-1%{?dist} -p
# The following ones are generated via script;
# expect anything between the markers to be overwritten on any update.
# BEGIN automatic-version-macros # DO NOT REMOVE THIS LINE!
# Version from node-v24.4.1/src/node_version.h
%global node_soversion 137
# Version from node-v24.4.1/deps/ada/ada.h
%nodejs_define_version ada 3.2.4
# Version from node-v24.4.1/deps/brotli/c/common/version.h
%nodejs_define_version brotli 1.1.0
# Version from node-v24.4.1/deps/cares/include/ares_version.h
%nodejs_define_version c_ares 1.34.5
# Version from node-v24.4.1/deps/histogram/include/hdr/hdr_histogram_version.h
%nodejs_define_version histogram 0.11.8
# Version from node-v24.4.1/tools/icu/current_ver.dep
%nodejs_define_version icu 77.1 -p
# Version from node-v24.4.1/deps/uv/include/uv/version.h
%nodejs_define_version libuv 1.51.0
# Version from node-v24.4.1/deps/llhttp/include/llhttp.h
%nodejs_define_version llhttp 9.3.0
# Version from node-v24.4.1/deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h
%nodejs_define_version nghttp2 1.66.0
# Version from node-v24.4.1/deps/ngtcp2/nghttp3/lib/includes/nghttp3/version.h
%nodejs_define_version nghttp3 1.6.0
# Version from node-v24.4.1/deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h
%nodejs_define_version ngtcp2 1.11.0
# Version from node-v24.4.1/deps/cjs-module-lexer/src/package.json
%nodejs_define_version nodejs-cjs-module-lexer 2.1.0
# Version from node-v24.4.1/lib/punycode.js
%nodejs_define_version nodejs-punycode 2.1.0
# Version from node-v24.4.1/deps/undici/src/package.json
%nodejs_define_version nodejs-undici 7.11.0
# Version from node-v24.4.1/deps/npm/package.json
%nodejs_define_version npm 1:11.4.2
# Version from node-v24.4.1/deps/sqlite/sqlite3.h
%nodejs_define_version sqlite 3.50.2
# Version from node-v24.4.1/deps/uvwasi/include/uvwasi.h
%nodejs_define_version uvwasi 0.0.21
# Version from node-v24.4.1/deps/v8/include/v8-version.h
%nodejs_define_version v8 3:13.6.233.10 -p
# Version from node-v24.4.1/deps/zlib/zlib.h
%nodejs_define_version zlib 1.3.1
# END automatic-version-macros # DO NOT REMOVE THIS LINE!
# Special release for sub-packages with their own version string.
# The complex release string ensures that the subpackage release is always increasing,
# even in the event that the main package version changes
# while the sub-package version stays the same.
%global nodejs_subpackage_release %{node_epoch}.%{node_version}.%{node_release}
# === Conditional build global options
# Use all vendored dependencies when bootstrapping
%if %{with bootstrap}
%bcond_without all_deps_bundled
%else
%bcond_with all_deps_bundled
%endif
# === Distro-wide build configuration adjustments ===
# v8 cannot be built with LTO enabled;
# the rest of the build should be LTO enabled via the configure script
%global _lto_cflags %{nil}
# This NodeJS streams need at least python 3.8
%global __python3 /usr/bin/python3.8
# === Additional definitions ===
# Architecture-dependent suffix for requiring/providing .so names
%if 0%{?__isa_bits} == 64
%global _so_arch_suffix ()(64bit)
%endif
# place for data files
%global nodejs_datadir %{_datarootdir}/node-%{node_version_major}
# place for (npm) packages used by multiple streams and/or that are stream-agnostic (do not care)
%global nodejs_common_sitelib %{_prefix}/lib/node_modules
# place for (npm) packages specific to this stream
%global nodejs_private_sitelib %{_prefix}/lib/node_modules_%{node_version_major}
Name: nodejs
Epoch: %{node_epoch}
Version: %{node_version}
Release: %{node_release}
Summary: JavaScript runtime
License: Apache-2.0 AND Artistic-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BlueOak-1.0.0 AND CC-BY-3.0 AND CC0-1.0 AND ISC AND MIT
URL: https://nodejs.org
ExclusiveArch: %{nodejs_arches}
# v8 does not build on i686 any more
ExcludeArch: %{ix86}
# SPEC tools additiona macros, dependency generators, and utilities
BuildRequires: chrpath
BuildRequires: git-core
BuildRequires: jq
BuildRequires: nodejs-packaging
# Build system and supporting tools
BuildRequires: gcc-toolset-12
BuildRequires: pkgconf, ninja-build
BuildRequires: python38-devel
BuildRequires: python3.8dist(setuptools), python3.8dist(jinja2)
# Additional libraries, either system or vendored ones
BuildRequires: pkgconfig(openssl) >= 1.1.1
%nodejs_declare_bundled -a ada
%nodejs_declare_bundled -a brotli -plibbrotlidec,libbrotlienc
%nodejs_declare_bundled -a c-ares
%nodejs_declare_bundled -a histogram
%nodejs_declare_bundled -a icu
%nodejs_declare_bundled -a libuv
%nodejs_declare_bundled -a llhttp
%nodejs_declare_bundled -a nghttp2
%nodejs_declare_bundled -a nghttp3
%nodejs_declare_bundled -a ngtcp2
%nodejs_declare_bundled -a nodejs-cjs-module-lexer
%nodejs_declare_bundled -a nodejs-punycode -npunycode
%nodejs_declare_bundled -a nodejs-undici
%nodejs_declare_bundled -a sqlite -psqlite3
%nodejs_declare_bundled -a uvwasi
%nodejs_declare_bundled -a v8
%nodejs_declare_bundled -a zlib -p
# Run-time dependencies of the main package
Requires: ca-certificates
# Required and/or recommended sub-packages
Requires: %{name}-libs%{?_isa} = %{node_evr}
Recommends: %{name}-docs = %{node_evr}
Recommends: %{name}-full-i18n%{?_isa} = %{node_evr}
Recommends: npm >= %{npm_epoch}:%{npm_version}-%{nodejs_subpackage_release}
# Virtual provides
Provides: nodejs(abi) = %{node_soversion}, nodejs(abi%{node_version_major}) = %{node_soversion}
Provides: nodejs(engine) = %{node_version}
# Main source tarball; see packaging/make-nodejs-tarball.sh on how it is created
Source: node-v%{node_version}-stripped.tar.gz
# Sources 001-099: reserved for additional sources to be installed
# - Full ICU database data
Source001: https://github.com/unicode-org/icu/releases/download/release-%{icu_version_major}-%{icu_version_minor}/icu4c-%{icu_version_major}_%{icu_version_minor}-data-bin-b.zip
Source002: https://github.com/unicode-org/icu/releases/download/release-%{icu_version_major}-%{icu_version_minor}/icu4c-%{icu_version_major}_%{icu_version_minor}-data-bin-l.zip
# - Downstream/distribution configuration files
Source003: nodejs.pc.in
Source004: v8.pc.in
Source005: npmrc.in
# - Check section tests
Source010: test-runner.sh
Source011: test-should-pass.txt
Source020: i18n-btest402.js
# Source 100+: Packaging support files that won't be installed
# - Packaging supports scripts and Makefile, used to semi-automate RPM updates. See the Makefile in the tarball on how this is created.
Source100: packaging-scripts.tar.gz
# - Additional SRPM macros
Source101: nodejs.srpm.macros
Patch0001: 0001-Remove-unused-OpenSSL-config.patch
Patch0002: 0002-fips-disable-options.patch
Patch0005: 0005-v8-highway-Fix-for-GCC-15-compiler-error-on-PPC8-PPC.patch
%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.
%package devel
Summary: JavaScript runtime development headers
Requires: nodejs%{?_isa} = %{node_evr}
Requires: nodejs-libs%{?_isa} = %{node_evr}
Requires: nodejs-packaging
Requires: openssl-devel%{?_isa}
%{!?with_bundled_brotli:Requires: brotli-devel%{?_isa}}
%{!?with_bundled_libuv:Requires: libuv-devel%{?_isa}}
%{!?with_bundled_zlib:Requires: zlib-devel%{?_isa}}
# Note: -devel sub-packages of the various streams conflict with each other,
# as the headers cannot be easily namespaced (would break at lease node-gyp search path).
# Hence the Provides: in place of metapackage.
Provides: nodejs-devel = %{node_evr}
%description devel
Development headers for the Node.js JavaScript runtime.
%package -n v8-%{v8_version_major}.%{v8_version_minor}-devel
Summary: v8 development headers
Epoch: %{v8_epoch}
Version: %{v8_version}
Release: %{nodejs_subpackage_release}
Requires: nodejs-devel%{?_isa} = %{node_evr}
Requires: nodejs-libs%{?_isa} = %{node_evr}
Provides: v8-devel = %{v8_epoch}:%{v8_version}-%{nodejs_subpackage_release}
Obsoletes: v8-devel <= 2:10.2.154, v8-314-devel <= 2:3.14
%description -n v8-%{v8_version_major}.%{v8_version_minor}-devel
Development headers for the v8 runtime.
%package libs
Summary: Node.js and v8 libraries
# v8 used to be a separate package; keep providing it virtually
Provides: v8 = %{v8_epoch}:%{v8_version}-%{nodejs_subpackage_release}
Provides: v8%{?_isa} = %{v8_epoch}:%{v8_version}-%{nodejs_subpackage_release}
Obsoletes: v8 < 1:6.7.17-10
Provides: libv8.so.%{v8_version_major}%{?_so_arch_suffix} = %{v8_epoch}:%{v8_version}
Provides: libv8_libbase.so.%{v8_version_major}%{?_so_arch_suffix} = %{v8_epoch}:%{v8_version}
Provides: libv8_libplatform.so.%{v8_version_major}%{?_so_arch_suffix} = %{v8_epoch}:%{v8_version}
%description libs
Libraries to support Node.js and provide stable v8 interfaces.
%package full-i18n
Summary: Non-English locale data for Node.js
Requires: nodejs%{?_isa} = %{node_evr}
%description 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 docs
Summary: Node.js API documentation
BuildArch: noarch
# Rough equivalent of more modern Requires(meta): nodejs = %%{node_evr}
Conflicts: nodejs < %{node_evr}
Conflicts: nodejs > %{node_evr}
%description docs
The API documentation for the Node.js JavaScript runtime.
%package -n npm
Summary: Node.js Package Manager
Epoch: %{npm_epoch}
Version: %{npm_version}
Release: %{nodejs_subpackage_release}
BuildArch: noarch
Requires: nodejs = %{node_evr}
Recommends: nodejs-docs = %{node_evr}
Provides: npm(npm) = %{npm_version}
%description -n 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.
%prep
%autosetup -n node-v%{node_version} -S git_am
# clean the archive of the de-vendored dependencies, ensuring they are not used
readonly -a devendored_paths=(
deps/v8/third_party/jinja2 tools/inspector_protocol/jinja2
%{?!with_bundled_brotli:deps/brotli}
%{?!with_bundled_c_ares:deps/cares}
%{?!with_bundled_libuv:deps/uv}
%{?!with_bundled_nodejs_cjs_module_lexer:deps/cjs-module-lexer}
%{?!with_bundled_nodejs_undici:deps/undici}
%{?!with_bundled_sqlite:deps/sqlite}
%{?!with_bundled_zlib:deps/zlib}
)
rm -rf "${devendored_paths[@]}"
# use system python throughout the whole sources
readonly -a potential_python_scripts=(
$(grep --recursive --files-with-matches --max-count=1 python)
)
%py3_shebang_fix "${potential_python_scripts[@]}"
%build
# activate gcc-toolset-12
# - disable annobin watermarking
# https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/developing_c_and_cpp_applications_in_rhel_9/assembly_additional-toolsets-for-development-rhel-9_developing-applications#ref_specifics-of-annobin-in-gcc-toolset-12_gcc-toolset-12
. /opt/rh/gcc-toolset-12/enable
%undefine _annotated_build
# additional build flags
readonly -a extra_cflags=(
# Decrease debuginfo verbosity; otherwise,
# the linker will run out of memory when linking v8
-g1
# For i686 compatibility, build with defines from libuv (rhbz#892601)
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
# Do not use OpenSSL Engine API (RHEL-33743)
-DOPENSSL_NO_ENGINE
# 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.
-O3
# v8 segfaults when Identical Code Folding is enabled
# - https://github.com/nodejs/node/issues/47865
-fno-ipa-icf
)
# configuration flags
readonly -a configure_flags=(
# Basic build options
--verbose --ninja
# Use FHS and build separate libnode.so
--prefix=%{_prefix} --shared --libdir=%{_lib}
# Use system OpenSSL
--shared-openssl
--shared-openssl-includes='%{_includedir}/openssl11'
--shared-openssl-libpath='%{_libdir}/openssl11'
--openssl-is-fips
--openssl-conf-name=openssl_conf
--openssl-use-def-ca-store
# Link with system libraries where appropriate
%{?!with_bundled_brotli:--shared-brotli}
%{?!with_bundled_c_ares:--shared-cares}
%{?!with_bundled_libuv:--shared-libuv}
%{?!with_bundled_sqlite:--shared-sqlite}
%{?!with_bundled_zlib:--shared-zlib}
%if %{without bundled_nodejs_cjs_module_lexer}
--shared-builtin-cjs_module_lexer/lexer-path=%{nodejs_common_sitelib}/cjs-module-lexer/lexer.js
--shared-builtin-cjs_module_lexer/dist/lexer-path=%{nodejs_common_sitelib}/cjs-module-lexer/dist/lexer.js
%endif
%if %{without bundled_nodejs_undici}
--shared-builtin-undici/undici-path=%{nodejs_common_sitelib}/undici/loader.js
%endif
# Enable LTO where possible
--enable-lto
# Compile with small icu, extendable via full-i18n subpackage
--with-intl=small-icu --with-icu-default-data-dir=%{nodejs_datadir}/icudata
# Do not ship corepack
--without-corepack
# Use local headers for native addons when available
--use-prefix-to-find-headers
)
export CFLAGS="${CFLAGS} ${extra_cflags[*]}" CXXFLAGS="${CXXFLAGS} ${extra_cflags[*]}"
%python3 configure.py "${configure_flags[@]}"
%ninja_build -C out/Release
%install
# Fill in values in configuration file templates
# usage: mkconfig [additional sed options] <template.in >config_file
mkconfig() {
local -ra replace_opts=(
-e 's;@INCLUDEDIR@;%{_includedir};g'
-e 's;@LIBDIR@;%{_libdir};g'
-e 's;@NODEJS_VERSION@;%{node_version};g'
-e 's;@PREFIX@;%{_prefix};g'
-e 's;@PYTHON3@;%{python3};g'
-e 's;@SYSCONFDIR@;%{_sysconfdir};g'
-e 's;@V8_VERSION@;%{v8_version};g'
)
sed --regexp-extended "${replace_opts[@]}" "$@"
}
# === Base installation
%{python3} tools/install.py install --dest-dir="${RPM_BUILD_ROOT}" --prefix="%{_prefix}"
# Correct the main binary permissions and remove RPATH
chmod 0755 "${RPM_BUILD_ROOT}%{_bindir}/node"
chrpath --delete "${RPM_BUILD_ROOT}%{_bindir}/node"
# Provide library symlinks
pushd "${RPM_BUILD_ROOT}%{_libdir}"
# - devel symlink for libnode.so
ln -srf libnode.so.%{node_soversion} libnode.so
# - compatibility symlinks for libv8
for soname in libv8{,_libbase,_libplatform}; do
ln -srf libnode.so.%{node_soversion} "${soname}.so.%{v8_version_major}.%{v8_version_minor}"
ln -srf libnode.so.%{node_soversion} "${soname}.so"
done
popd # from ${RPM_BUILD_ROOT}%%{_libdir}
# Massage includedir
pushd "${RPM_BUILD_ROOT}%{_includedir}"
# - provide compatibility symlinks for libv8
for header in node/libplatform node/v8*.h node/cppgc; do
ln -srf "${header}" "$(basename "${header}")"
done
# - config.gypi is platform-dependent and would conflict between arches
mv node/config.gypi node/config-%{_arch}.gypi
popd # ${RPM_BUILD_ROOT}%%{_includedir}
# Install node-gyp configuration files
install -p -Dt "${RPM_BUILD_ROOT}%{nodejs_datadir}" common.gypi
# Create pkg-config files
readonly PKGCONFDIR="${RPM_BUILD_ROOT}%{_libdir}/pkgconfig"
mkdir -p "${PKGCONFDIR}"
mkconfig -e 's;@PKGCONFNAME@;nodejs;g' \
<%{SOURCE3} >"${PKGCONFDIR}/nodejs.pc"
mkconfig -e 's;@PKGCONFNAME@;v8-%{v8_version_major}.%{v8_version_minor};g' \
<%{SOURCE4} >"${PKGCONFDIR}/v8-%{v8_version_major}.%{v8_version_minor}.pc"
# Install documentation
mkdir -p "${RPM_BUILD_ROOT}%{_pkgdocdir}/html"
cp -pr doc/* "${RPM_BUILD_ROOT}%{_pkgdocdir}/html"
rm -f "${RPM_BUILD_ROOT}%{_pkgdocdir}/html/node.1"
# Some debugger support files from v8 are provided as documentation from upstream;
# move them to the correct directory (according to us).
pushd "${RPM_BUILD_ROOT}%{_defaultdocdir}"
mv -t "${RPM_BUILD_ROOT}%{_pkgdocdir}" node/gdbinit node/lldb_commands.py
popd # from ${RPM_BUILD_ROOT}%%{_defaultdocdir}
# === Full ICU data installation
# Unzip the data themselves, and make the appropriate documentation available for %%doc
if test "$(%{python3} -Ic 'import sys; print(sys.byteorder)')" = "little"; then
readonly icu_source='%{SOURCE2}' icu_data_file='icudt%{icu_version_major}l.dat'
else
readonly icu_source='%{SOURCE1}' icu_data_file='icudt%{icu_version_major}b.dat'
fi
readonly icu_data_dir="${RPM_BUILD_ROOT}%{nodejs_datadir}/icudata"
readonly icu_doc_dir="full-icu"
unzip -od "${icu_data_dir}" "${icu_source}" "${icu_data_file}"
unzip -od "${icu_doc_dir}" "${icu_source}" -x "${icu_data_file}"
# === NPM installation and tweaks
# Correct permissions in provided scripts
# - There are executable scripts for Windows PowerShell; RPM would try to pull it as a dependency
# - Not all executable bits should be removed; the -not -path lines are the ones that will be kept untouched
declare NPM_DIR="${RPM_BUILD_ROOT}%{nodejs_common_sitelib}/npm"
find "${NPM_DIR}" \
-not -path "${NPM_DIR}/bin/*" \
-not -path "${NPM_DIR}/node_modules/node-gyp/bin/node-gyp.js" \
-not -path "${NPM_DIR}/node_modules/@npmcli/run-script/lib/node-gyp-bin/node-gyp" \
-type f -executable \
-execdir chmod -x '{}' +
# Remove (empty) project-specific .npmrc from npm itself,
# to avoid confusion with the distro-wide configuration below
rm -f "${NPM_DIR}/.npmrc"
# Create distribution-wide configuration file
mkconfig <%{SOURCE5} >"${NPM_DIR}/npmrc"
# Install HTML documentation to %%_pkgdocdir
mkdir -p "${RPM_BUILD_ROOT}%{_pkgdocdir}/npm/"
cp -prt "${RPM_BUILD_ROOT}%{_pkgdocdir}/npm/" deps/npm/docs
# - replace the docs in $NPM_DIR with symlink to the doc dir
rm -rf "${NPM_DIR}/docs"
ln -srf "${RPM_BUILD_ROOT}%{_pkgdocdir}/npm/docs" "${NPM_DIR}/docs"
# Install man pages to %%_mandir
mkdir -p "${RPM_BUILD_ROOT}%{_mandir}"
cp -prt "${RPM_BUILD_ROOT}%{_mandir}" deps/npm/man/*
# replace man pages in $NPM_DIR with symlinks to the man dir
rm -rf "${NPM_DIR}/man"
ln -srf "${RPM_BUILD_ROOT}%{_mandir}" "${NPM_DIR}/man"
%check
# === Common test environment
export LD_LIBRARY_PATH="${RPM_BUILD_ROOT}%{_libdir}:${LD_LIBRARY_PATH}"
# "aliases" to the just-build binaries
node() {
"${RPM_BUILD_ROOT}%{_bindir}/node" \
--icu-data-dir="${RPM_BUILD_ROOT}%{nodejs_datadir}/icudata" \
"$@"
}
npm() {
node "${RPM_BUILD_ROOT}%{_bindir}/npm" "$@"
}
# === Sanity check for important versions
node -e 'require("assert").equal(process.versions.node, "%{node_version}")'
node -e 'require("assert").equal(process.versions.v8.replace(/-node\.\d+$/, ""), "%{v8_version}")'
node -e 'require("assert").equal(process.versions.ares.replace(/-DEV$/, ""), "%{c_ares_version}")'
node --no-deprecation -e 'require("assert").equal(require("punycode").version, "%{nodejs_punycode_version}")'
npm version --json | jq --exit-status '.npm == "%{npm_version}"'
# === Custom and/or devendored parts sanity checks
# - full i18n support is available
node '%{SOURCE20}'
# - npm update notifier is disabled
npm config list --json | jq --exit-status '.["update-notifier"] == false'
# === Upstream test suite
# Informational for now; differences in OpenSSL versions are expected to break some tests
bash '%{SOURCE10}' "${RPM_BUILD_ROOT}%{_bindir}/node" test/ '%{SOURCE11}' || :
%files
%doc README.md CHANGELOG.md GOVERNANCE.md onboarding.md
%license LICENSE
%dir %{nodejs_datadir}/
%dir %{nodejs_common_sitelib}/
%{_bindir}/node
%{_mandir}/man1/node.1*
%files libs
%license LICENSE
%{_libdir}/libnode.so.%{node_soversion}
%{_libdir}/libv8.so.%{v8_version_major}.%{v8_version_minor}
%{_libdir}/libv8_libbase.so.%{v8_version_major}.%{v8_version_minor}
%{_libdir}/libv8_libplatform.so.%{v8_version_major}.%{v8_version_minor}
%files devel
%license LICENSE
%dir %{nodejs_datadir}/
%{_includedir}/node/
%{_libdir}/libnode.so
%{_libdir}/pkgconfig/nodejs.pc
%{_pkgdocdir}/gdbinit
%{_pkgdocdir}/lldb_commands.py
%{nodejs_datadir}/common.gypi
%files -n v8-%{v8_version_major}.%{v8_version_minor}-devel
%license LICENSE
%{_includedir}/cppgc
%{_includedir}/libplatform
%{_includedir}/v8*.h
%{_libdir}/libv8.so
%{_libdir}/libv8_libbase.so
%{_libdir}/libv8_libplatform.so
%{_libdir}/pkgconfig/v8-%{v8_version_major}.%{v8_version_minor}.pc
%files full-i18n
%doc full-icu/icu4c-%{icu_version_major}_%{icu_version_minor}-data-bin-?-README.md
%license full-icu/LICENSE
%dir %{nodejs_datadir}/
%{nodejs_datadir}/icudata/
%files -n npm
%doc deps/npm/README.md
%license deps/npm/LICENSE
%dir %{nodejs_datadir}/
%dir %{nodejs_common_sitelib}/
%{_bindir}/npm
%{_bindir}/npx
%{_mandir}/
%{nodejs_common_sitelib}/npm/
%exclude %{_mandir}/man1/node*.1*
%files docs
%doc doc/README.md
%license LICENSE
%dir %{_pkgdocdir}
%{_pkgdocdir}/html/
%{_pkgdocdir}/npm/
%changelog
* Thu Sep 04 2025 Jan Staněk <jstanek@redhat.com> - 1:24.4.1-1
- Initial import of nodejs:24