nodejs20 package is retired on branch c10s for CS-2545
This commit is contained in:
parent
5946404cda
commit
f39fc2c5c9
@ -1 +0,0 @@
|
||||
1
|
10
.gitignore
vendored
10
.gitignore
vendored
@ -1,10 +0,0 @@
|
||||
*~
|
||||
*.swp
|
||||
/*.tar.gz
|
||||
/*.src.rpm
|
||||
/*.tgz
|
||||
/node-*/*
|
||||
/.build-*.log
|
||||
/noarch
|
||||
/x86_64
|
||||
/icu4c-*-data-bin-*.zip
|
@ -1,45 +0,0 @@
|
||||
From 6c472efbaa21e0ea57f98135f41c9000f4bf039a Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Gallagher <sgallagh@redhat.com>
|
||||
Date: Fri, 17 Apr 2020 12:59:44 +0200
|
||||
Subject: [PATCH] Remove unused OpenSSL config
|
||||
|
||||
The build process will try to create these config files, even when
|
||||
using the system OpenSSL and will thus fail since we strip this path
|
||||
from the tarball.
|
||||
|
||||
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
|
||||
---
|
||||
node.gyp | 17 -----------------
|
||||
1 file changed, 17 deletions(-)
|
||||
|
||||
diff --git a/node.gyp b/node.gyp
|
||||
index 49e39c3ce8b2e29871333cee99dfd9646358df56..fb5f587d258700ccc390c387bce138c58d2fb078 100644
|
||||
--- a/node.gyp
|
||||
+++ b/node.gyp
|
||||
@@ -739,23 +739,6 @@
|
||||
],
|
||||
},
|
||||
],
|
||||
- }, {
|
||||
- 'variables': {
|
||||
- 'opensslconfig_internal': '<(obj_dir)/deps/openssl/openssl.cnf',
|
||||
- 'opensslconfig': './deps/openssl/nodejs-openssl.cnf',
|
||||
- },
|
||||
- 'actions': [
|
||||
- {
|
||||
- 'action_name': 'reset_openssl_cnf',
|
||||
- 'inputs': [ '<(opensslconfig)', ],
|
||||
- 'outputs': [ '<(opensslconfig_internal)', ],
|
||||
- 'action': [
|
||||
- '<(python)', 'tools/copyfile.py',
|
||||
- '<(opensslconfig)',
|
||||
- '<(opensslconfig_internal)',
|
||||
- ],
|
||||
- },
|
||||
- ],
|
||||
}],
|
||||
],
|
||||
}, # node_core_target_name
|
||||
--
|
||||
2.41.0
|
||||
|
@ -1,128 +0,0 @@
|
||||
# Packaging Node.js
|
||||
These instructions are applicable as of 2023-04-27, following the
|
||||
implementation of https://www.fedoraproject.org/wiki/Changes/NodejsRepackaging
|
||||
|
||||
These instructions use Node.js 20 as an example, but should be applicable to
|
||||
any major version. Exceptions will be identified as needed.
|
||||
|
||||
|
||||
## Basic steps to update to a new release
|
||||
|
||||
1. Run the following command to automatically update the specfile and SOURCES:
|
||||
|
||||
```
|
||||
./nodejs-sources 20.1.0
|
||||
```
|
||||
|
||||
This will download the tarball from nodejs.org, strip out the bundled
|
||||
OpenSSL code, extract the versions of the bundled sources, pull down the
|
||||
ICU data files and update the spec file with this new information, also
|
||||
pushing the rebuilt tarball into the Fedora lookaside cache.
|
||||
|
||||
2. Verify that the patches still apply by running `fedpkg prep`. If they do
|
||||
not, follow the steps under "Resolving Patch Conflicts".
|
||||
|
||||
3. (Preferred) Perform a scratch-build on at least one architecture
|
||||
|
||||
```
|
||||
fedpkg scratch-build [--arch x86_64] --srpm
|
||||
```
|
||||
|
||||
Verify that it built successfully.
|
||||
|
||||
4. Commit the code locally and push it to all active Fedora branches.
|
||||
|
||||
```
|
||||
git commit -sam "Update to version 20.1.0"
|
||||
```
|
||||
|
||||
```
|
||||
git push origin rawhide rawhide:f38 rawhide:f37
|
||||
```
|
||||
|
||||
5. Build for all active Fedora branches
|
||||
|
||||
```
|
||||
for i in f37 f38 rawhide ; do fedpkg --release $i build --nowait ; done
|
||||
```
|
||||
|
||||
|
||||
## Basic steps to update the packaging
|
||||
|
||||
1. Make all changes in the `packaging/nodejs.spec.j2` file.
|
||||
|
||||
2. When finished, run
|
||||
|
||||
```
|
||||
./nodejs-sources 20.1.0 --no-push
|
||||
```
|
||||
|
||||
which will regenerate the nodejs20.spec file with the appropriate values.
|
||||
The `--no-push` argument is used to avoid uploading a new tarball to the
|
||||
lookaside cache.[^1]
|
||||
|
||||
3. (Preferred) Perform a scratch-build on at least one architecture
|
||||
|
||||
```
|
||||
fedpkg scratch-build [--arch x86_64] --srpm
|
||||
```
|
||||
|
||||
Verify that it built successfully.
|
||||
|
||||
4. Commit the code locally and push it to all active Fedora branches.
|
||||
|
||||
```
|
||||
git commit -sam "Update to version 20.1.0"
|
||||
```
|
||||
|
||||
```
|
||||
git push origin rawhide rawhide:f38 rawhide:f37
|
||||
```
|
||||
|
||||
5. Build for all active Fedora branches
|
||||
|
||||
```
|
||||
for i in f37 f38 rawhide ; do fedpkg --release $i build --nowait ; done
|
||||
```
|
||||
|
||||
|
||||
## Resolving Patch Conflicts
|
||||
|
||||
1. Clone the upstream Node.js repository
|
||||
|
||||
```
|
||||
git clone -o upstream git://github.com/nodejs/node.git nodejs-upstream
|
||||
```
|
||||
|
||||
2. Rebase the Fedora patches atop the latest release
|
||||
|
||||
```
|
||||
pushd nodejs-upstream
|
||||
```
|
||||
|
||||
```
|
||||
git checkout -b fedora-v20 v20.1.0
|
||||
```
|
||||
|
||||
```
|
||||
git am -3 ../nodejs-fedora/*.patch
|
||||
```
|
||||
|
||||
If the patches do not apply cleanly, resolve the merges appropriately. Once
|
||||
they have all been applied, output them again:
|
||||
|
||||
```
|
||||
git format-patch -M --patience --full-index -o ../nodejs20 v20.1.0..HEAD
|
||||
```
|
||||
|
||||
```
|
||||
popd
|
||||
```
|
||||
|
||||
3. Resume the basic process.
|
||||
|
||||
|
||||
[^1]: Due to non-deterministic behavior, stripping out the OpenSSL bits from
|
||||
the upstream tarball and recompressing it will result in a different
|
||||
checksum hash. This isn't harmful, but wastes bandwidth and storage space,
|
||||
so use `--no-push` when possible.
|
151
btest402.js
151
btest402.js
@ -1,151 +0,0 @@
|
||||
// Copyright (C) 2014 IBM Corporation and Others. All Rights Reserved.
|
||||
// This file is part of the Node.JS ICU enablement work
|
||||
// https://github.com/joyent/node/pull/7719
|
||||
// and is under the same license.
|
||||
//
|
||||
// This is a very, very, very basic test of es402
|
||||
//
|
||||
// URL: https://github.com/srl295/btest402
|
||||
// Author: Steven R. Loomis <srl@icu-project.org>
|
||||
//
|
||||
// for a complete test, see http://test262.ecmascript.org
|
||||
//
|
||||
// Usage: node btest402.js
|
||||
|
||||
try {
|
||||
console.log("You have console.log.");
|
||||
} catch(e) {
|
||||
// this works on d8
|
||||
console = { log: print };
|
||||
console.log("Now you have console.log.");
|
||||
}
|
||||
|
||||
function runbtest() {
|
||||
var summary = {};
|
||||
|
||||
try {
|
||||
var i = Intl;
|
||||
summary.haveIntl = true;
|
||||
console.log("+ Congrats, you have the Intl object.");
|
||||
} catch(e) {
|
||||
console.log("You don't have the Intl object: " + e);
|
||||
}
|
||||
|
||||
if(summary.haveIntl) {
|
||||
var locs = [ "en", "mt", "ja","tlh"];
|
||||
var d = new Date(196400000);
|
||||
for ( var n=0; n<locs.length; n++ ) {
|
||||
var loc = locs[n];
|
||||
var lsummary = summary[loc] = {};
|
||||
|
||||
console.log(loc+":");
|
||||
var sl=null;
|
||||
try {
|
||||
sl = Intl.DateTimeFormat.supportedLocalesOf([loc]);
|
||||
if( sl.length > 0 ) {
|
||||
lsummary.haveSlo = true;
|
||||
}
|
||||
} catch (e) {
|
||||
console.log("SLO err: " + e);
|
||||
}
|
||||
var dstr = "ERR";
|
||||
try {
|
||||
lsummary.dstr = d.toLocaleString(loc,{month: "long",day:"numeric",weekday:"long",year:"numeric"});
|
||||
console.log(" date: (supported:"+sl+") " + lsummary.dstr);
|
||||
} catch (e) {
|
||||
console.log(" Date Format err: " + e);
|
||||
}
|
||||
try {
|
||||
new Intl.v8BreakIterator();
|
||||
console.log(" Intl.v8BreakIterator:" +
|
||||
Intl.v8BreakIterator.supportedLocalesOf(loc) + " Supported, first()==" +
|
||||
new Intl.v8BreakIterator(loc).first() );
|
||||
lsummary.brkOk = true;
|
||||
} catch ( e) {
|
||||
console.log(" Intl.v8BreakIterator error (NOT part of EcmaScript402): " + e);
|
||||
}
|
||||
console.log();
|
||||
}
|
||||
}
|
||||
|
||||
// print summary
|
||||
console.log();
|
||||
console.log("--------- Analysis ---------");
|
||||
stxt = "";
|
||||
if( summary.haveIntl ) {
|
||||
console.log("* You have the 'Intl' object. Congratulations! You have the possibility of being EcmaScript 402 compliant.");
|
||||
stxt += "Have Intl, ";
|
||||
|
||||
if ( !summary.en.haveSlo ) {
|
||||
stxt += "Date:no EN, ";
|
||||
console.log("* English isn't a supported language by the date formatter. Perhaps the data isn't installed properly?");
|
||||
}
|
||||
if ( !summary.tlh.haveSlo ) {
|
||||
stxt += "Date:no 'tlh', ";
|
||||
console.log("* Klingon isn't a supported language by the date formatter. It is without honor!");
|
||||
}
|
||||
// now, what is it actually saying
|
||||
if( summary.en.dstr.indexOf("1970") == -1) {
|
||||
stxt += "Date:bad 'en', ";
|
||||
console.log("* the English date format text looks bad to me. Doesn't even have the year.");
|
||||
} else {
|
||||
if( summary.en.dstr.indexOf("Jan") == -1) {
|
||||
stxt += "Date:bad 'en', ";
|
||||
console.log("* The English date format text looks bad to me. Doesn't have the right month.");
|
||||
}
|
||||
}
|
||||
|
||||
if( summary.mt.dstr == summary.en.dstr ) {
|
||||
stxt += "Date:'mt'=='en', ";
|
||||
console.log("* The English and Maltese look the same to me. Probably a 'small' build.");
|
||||
} else if( summary.mt.dstr.indexOf("1970") == -1) {
|
||||
stxt += "Date:bad 'mt', ";
|
||||
console.log("* the Maltese date format text looks bad to me. Doesn't even have the year. (This data is missing from the Chromium ICU build)");
|
||||
} else {
|
||||
if( summary.mt.dstr.indexOf("Jann") == -1) {
|
||||
stxt += "Date:bad 'mt', ";
|
||||
console.log("* The Maltese date format text looks bad to me. Doesn't have the right month. (This data is missing from the Chromium ICU build)");
|
||||
}
|
||||
}
|
||||
|
||||
if ( !summary.ja.haveSlo ) {
|
||||
stxt += "Date:no 'ja', ";
|
||||
console.log("* Japanese isn't a supported language by the date formatter. Could be a 'small' build.");
|
||||
} else {
|
||||
if( summary.ja.dstr.indexOf("1970") == -1) {
|
||||
stxt += "Date:bad 'ja', ";
|
||||
console.log("* the Japanese date format text looks bad to me. Doesn't even have the year.");
|
||||
} else {
|
||||
if( summary.ja.dstr.indexOf("日") == -1) {
|
||||
stxt += "Date:bad 'ja', ";
|
||||
console.log("* The Japanese date format text looks bad to me.");
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( summary.en.brkOk ) {
|
||||
stxt += "FYI: v8Brk:have 'en', ";
|
||||
console.log("* You have Intl.v8BreakIterator support. (Note: not part of ES402.)");
|
||||
}
|
||||
} else {
|
||||
console.log("* You don't have the 'Intl' object. You aren't EcmaScript 402 compliant.");
|
||||
stxt += " NO Intl. ";
|
||||
}
|
||||
|
||||
// 1-liner.
|
||||
console.log();
|
||||
console.log("----------------");
|
||||
console.log( "SUMMARY:" + stxt );
|
||||
}
|
||||
|
||||
var dorun = true;
|
||||
|
||||
try {
|
||||
if(btest402_noautorun) {
|
||||
dorun = false;
|
||||
}
|
||||
} catch(e) {}
|
||||
|
||||
if(dorun) {
|
||||
console.log("Running btest..");
|
||||
runbtest();
|
||||
}
|
25
changelog
25
changelog
@ -1,25 +0,0 @@
|
||||
* Fri Jun 17 2022 Stephen Gallagher <sgallagh@redhat.com> - 1:18.4.0-1
|
||||
- Update to Node.js 18.4.0
|
||||
- https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V18.md#18.4.0
|
||||
|
||||
* Thu Jun 09 2022 Stephen Gallagher <sgallagh@redhat.com> - 1:18.3.0-2
|
||||
- Fix conflict between x86_64 and i686 installs of nodejs-devel
|
||||
|
||||
* Tue Jun 07 2022 Stephen Gallagher <sgallagh@redhat.com> - 1:18.3.0-1
|
||||
- Update to Node.js 18.3.0
|
||||
- https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V18.md#18.3.0
|
||||
|
||||
* Tue May 17 2022 Stephen Gallagher <sgallagh@redhat.com> - 1:18.2.0-1
|
||||
- Update to Node.js 18.2.0
|
||||
- https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V18.md#18.2.0
|
||||
|
||||
* Fri May 06 2022 Stephen Gallagher <sgallagh@redhat.com> - 1:18.1.0-2
|
||||
- Fix incorrect epoch in v8-devel dependency
|
||||
|
||||
* Thu May 05 2022 Stephen Gallagher <sgallagh@redhat.com> - 1:18.1.0-1
|
||||
- Update to Node.js 18.1.0
|
||||
- https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V18.md#18.1.0
|
||||
|
||||
* Thu Apr 28 2022 Stephen Gallagher <sgallagh@redhat.com> - 1:18.0.0-1
|
||||
- First release of Node.js 18.x
|
||||
|
1
dead.package
Normal file
1
dead.package
Normal file
@ -0,0 +1 @@
|
||||
nodejs20 package is retired on branch c10s for CS-2545
|
@ -1,6 +0,0 @@
|
||||
--- !Policy
|
||||
product_versions:
|
||||
- rhel-10
|
||||
decision_context: osci_compose_gate
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}
|
@ -1,33 +0,0 @@
|
||||
# nodejs binary
|
||||
%__nodejs %{_bindir}/node
|
||||
|
||||
# nodejs library directory
|
||||
%nodejs_sitelib %{_prefix}/lib/node_modules
|
||||
|
||||
#arch specific library directory
|
||||
#for future-proofing only; we don't do multilib
|
||||
%nodejs_sitearch %{nodejs_sitelib}
|
||||
|
||||
# currently installed nodejs version
|
||||
%nodejs_version %(%{__nodejs} -v | sed s/v//)
|
||||
|
||||
# symlink dependencies so `npm link` works
|
||||
# this should be run in every module's %%install section
|
||||
# pass --check to work in the current directory instead of the buildroot
|
||||
# pass --no-devdeps to ignore devDependencies when --check is used
|
||||
%nodejs_symlink_deps %{_rpmconfigdir}/nodejs-symlink-deps %{nodejs_sitelib}
|
||||
|
||||
# patch package.json to fix a dependency
|
||||
# see `man npm-json` for details on writing dependencies for package.json files
|
||||
# e.g. `%%nodejs_fixdep frobber` makes any version of frobber do
|
||||
# `%%nodejs_fixdep frobber '>1.0'` requires frobber > 1.0
|
||||
# `%%nodejs_fixdep -r frobber removes the frobber dep
|
||||
%nodejs_fixdep %{_rpmconfigdir}/nodejs-fixdep
|
||||
|
||||
# macro to filter unwanted provides from Node.js binary native modules
|
||||
%nodejs_default_filter %{expand: \
|
||||
%global __provides_exclude_from ^%{nodejs_sitearch}/.*\\.node$
|
||||
}
|
||||
|
||||
# no-op macro to allow spec compatibility with EPEL
|
||||
%nodejs_find_provides_and_requires %{nil}
|
@ -1,327 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Uses Argbash to generate command argument parsing. To update
|
||||
# arguments, make sure to call
|
||||
# `argbash nodejs-tarball.sh -o nodejs-tarball.sh`
|
||||
|
||||
# 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_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.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:-1}"
|
||||
test "${_PRINT_HELP:-no}" = yes && print_help >&2
|
||||
echo "$1" >&2
|
||||
exit "${_ret}"
|
||||
}
|
||||
|
||||
|
||||
begins_with_short_option()
|
||||
{
|
||||
local first_option all_short_options='h'
|
||||
first_option="${1:0:1}"
|
||||
test "$all_short_options" = "${all_short_options/$first_option/}" && return 1 || return 0
|
||||
}
|
||||
|
||||
# THE DEFAULTS INITIALIZATION - POSITIONALS
|
||||
_positionals=()
|
||||
_arg_version=
|
||||
# THE DEFAULTS INITIALIZATION - OPTIONALS
|
||||
_arg_push="on"
|
||||
_arg_debug="off"
|
||||
|
||||
|
||||
print_help()
|
||||
{
|
||||
printf '%s\n' "Tool to aid in Node.js packaging of new releases"
|
||||
printf 'Usage: %s [--(no-)push] [--(no-)debug] [-h|--help] <version>\n' "$0"
|
||||
printf '\t%s\n' "<version>: 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' "-h, --help: Prints help"
|
||||
}
|
||||
|
||||
|
||||
parse_commandline()
|
||||
{
|
||||
_positionals_count=0
|
||||
while test $# -gt 0
|
||||
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"
|
||||
;;
|
||||
-h|--help)
|
||||
print_help
|
||||
exit 0
|
||||
;;
|
||||
-h*)
|
||||
print_help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
_last_positional="$1"
|
||||
_positionals+=("$_last_positional")
|
||||
_positionals_count=$((_positionals_count + 1))
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
handle_passed_args_count()
|
||||
{
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
assign_positional_args()
|
||||
{
|
||||
local _positional_name _shift_for=$1
|
||||
_positional_names="_arg_version "
|
||||
|
||||
shift "$_shift_for"
|
||||
for _positional_name in ${_positional_names}
|
||||
do
|
||||
test $# -gt 0 || break
|
||||
eval "$_positional_name=\${1}" || die "Error during argument parsing, possibly an Argbash bug." 1
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
parse_commandline "$@"
|
||||
handle_passed_args_count
|
||||
assign_positional_args 1 "${_positionals[@]}"
|
||||
|
||||
# OTHER STUFF GENERATED BY Argbash
|
||||
|
||||
### END OF CODE GENERATED BY Argbash (sortof) ### ])
|
||||
# [ <-- needed because of Argbash
|
||||
|
||||
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
|
||||
sudo dnf -y install ${packages[@]}
|
||||
fi
|
||||
|
||||
set -e
|
||||
|
||||
version=$_arg_version
|
||||
|
||||
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
|
||||
|
||||
# Remove bundled OpenSSL
|
||||
# We will link to the system version
|
||||
rm -rf node-v${version}/deps/openssl
|
||||
tar -zcf node-v${version}-stripped.tar.gz node-v${version}
|
||||
|
||||
# Record the bundled cjs-module-lexer version
|
||||
LEXER_VERSION=$(jq -r '.version' node-v${version}/deps/cjs-module-lexer/package.json)
|
||||
|
||||
# Record the bundled undici version
|
||||
UNDICI_VERSION=$(jq -r '.version' node-v${version}/deps/undici/src/package.json)
|
||||
|
||||
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 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 "Included software versions"
|
||||
echo "-------------------------"
|
||||
echo
|
||||
echo "Node.js version"
|
||||
echo "========================="
|
||||
echo "${version}"
|
||||
echo
|
||||
echo "libnode shared object version"
|
||||
echo "========================="
|
||||
NODE_SOVERSION=$(grep -oP '(?<=#define NODE_MODULE_VERSION )\d+' node-v${version}/src/node_version.h)
|
||||
echo "${NODE_SOVERSION}"
|
||||
echo
|
||||
echo "V8"
|
||||
echo "========================="
|
||||
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 "========================="
|
||||
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 "========================="
|
||||
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 "========================="
|
||||
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 "========================="
|
||||
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 "========================="
|
||||
echo "${ICU_MAJOR}.${ICU_MINOR}"
|
||||
echo
|
||||
echo "punycode"
|
||||
echo "========================="
|
||||
PUNYCODE_VERSION=$(/usr/bin/node -e "console.log(require('punycode').version)")
|
||||
echo $PUNYCODE_VERSION
|
||||
echo
|
||||
echo "uvwasi"
|
||||
echo "========================="
|
||||
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 "========================="
|
||||
NPM_VERSION=$(jq -r .version ./node-v${version}/deps/npm/package.json)
|
||||
echo $NPM_VERSION
|
||||
echo
|
||||
echo "zlib"
|
||||
echo "========================="
|
||||
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
|
||||
echo "undici"
|
||||
echo "========================="
|
||||
echo "${UNDICI_VERSION}"
|
||||
echo
|
||||
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 <<EOF
|
||||
{
|
||||
"NODE_PKG_MAJOR": $NODE_PKG_MAJOR,
|
||||
"NODE_MAJOR": $NODE_MAJOR,
|
||||
"NODE_MINOR": $NODE_MINOR,
|
||||
"NODE_PATCH": $NODE_PATCH,
|
||||
"FEDORA_DEFAULT_RELEASE_LOW": $FEDORA_DEFAULT_RELEASE_LOW,
|
||||
"FEDORA_DEFAULT_RELEASE_HIGH": $FEDORA_DEFAULT_RELEASE_HIGH,
|
||||
"RHEL_DEFAULT_RELEASE": "$RHEL_DEFAULT_RELEASE",
|
||||
"NODE_SOVERSION": $NODE_SOVERSION,
|
||||
"V8_MAJOR": $V8_MAJOR,
|
||||
"V8_MINOR": $V8_MINOR,
|
||||
"V8_BUILD": $V8_BUILD,
|
||||
"V8_PATCH": $V8_PATCH,
|
||||
"C_ARES_VERSION": $C_ARES_VERSION,
|
||||
"LLHTTP_VERSION": $LLHTTP_VERSION,
|
||||
"LIBUV_VERSION": $LIBUV_VERSION,
|
||||
"NGHTTP2_VERSION": $NGHTTP2_VERSION,
|
||||
"ICU_MAJOR": $ICU_MAJOR,
|
||||
"ICU_MINOR": $ICU_MINOR,
|
||||
"PUNYCODE_VERSION": $PUNYCODE_VERSION,
|
||||
"UVWASI_VERSION": $UVWASI_VERSION,
|
||||
"NPM_VERSION": $NPM_VERSION,
|
||||
"ZLIB_VERSION": $ZLIB_VERSION,
|
||||
"LEXER_VERSION": $LEXER_VERSION,
|
||||
"UNDICI_VERSION": $UNDICI_VERSION,
|
||||
"ADA_VERSION": $ADA_VERSION,
|
||||
"PATCHES": $json_patchlist
|
||||
}
|
||||
EOF
|
||||
|
||||
echo ${template_json} | jinja2 ${SCRIPT_DIR}/packaging/nodejs.spec.j2 \
|
||||
> ${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
|
||||
fi
|
||||
|
||||
rm -rf node-v${version}
|
||||
# ] <-- needed because of Argbash
|
@ -1,9 +0,0 @@
|
||||
prefix=@PREFIX@
|
||||
includedir=@INCLUDEDIR@
|
||||
libdir=@LIBDIR@
|
||||
|
||||
Name: @PKGCONFNAME@
|
||||
Description: JavaScript Runtime
|
||||
Version: @NODEJS_VERSION@
|
||||
Libs: -L${libdir} -lnodejs
|
||||
Cflags: -I${includedir}/node
|
884
nodejs20.spec
884
nodejs20.spec
@ -1,884 +0,0 @@
|
||||
# Break circular dependencies
|
||||
%bcond bootstrap 0
|
||||
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
%bcond_without bundled_zlib
|
||||
%else
|
||||
%bcond_with bundled_zlib
|
||||
%endif
|
||||
|
||||
# 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}
|
||||
|
||||
# == Master Relase ==
|
||||
# This is used by both the nodejs package and the npm subpackage that
|
||||
# has a separate version - the name is special so that rpmdev-bumpspec
|
||||
# will bump this rather than adding .1 to the end.
|
||||
%global baserelease %autorelease
|
||||
|
||||
%{?!_pkgdocdir:%global _pkgdocdir %{_docdir}/%{name}-%{version}}
|
||||
|
||||
# == Node.js Version ==
|
||||
# Note: Fedora should only ship LTS versions of Node.js (currently expected
|
||||
# to be major versions with even numbers). The odd-numbered versions are new
|
||||
# feature releases that are only supported for nine months, which is shorter
|
||||
# than a Fedora release lifecycle.
|
||||
%global nodejs_epoch 1
|
||||
%global nodejs_major 20
|
||||
%global nodejs_minor 11
|
||||
%global nodejs_patch 0
|
||||
# nodejs_soversion - from NODE_MODULE_VERSION in src/node_version.h
|
||||
%global nodejs_soversion 115
|
||||
%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_pkg_major 20
|
||||
|
||||
%global nodejs_datadir %{_datarootdir}/node-%{nodejs_pkg_major}
|
||||
|
||||
# Determine if this should be the default version for this Fedora release
|
||||
# The default version will own /usr/bin/node and friends
|
||||
%if 0%{?fedora} == 39 || 0%{?fedora} == 40 || 0%{?rhel} < 10
|
||||
%global nodejs_default %{nodejs_pkg_major}
|
||||
%endif
|
||||
|
||||
%global nodejs_default_sitelib %{_prefix}/lib/node_modules
|
||||
%global nodejs_private_sitelib %{nodejs_default_sitelib}_%{nodejs_pkg_major}
|
||||
|
||||
|
||||
# == 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 3
|
||||
%global v8_major 11
|
||||
%global v8_minor 3
|
||||
%global v8_build 244
|
||||
%global v8_patch 8
|
||||
%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.13.1-motley
|
||||
|
||||
# c-ares - from deps/cares/include/ares_version.h
|
||||
# https://github.com/nodejs/node/pull/9332
|
||||
%global c_ares_version 1.20.1
|
||||
|
||||
# llhttp - from deps/llhttp/include/llhttp.h
|
||||
%global llhttp_version 8.1.1
|
||||
|
||||
# libuv - from deps/uv/include/uv/version.h
|
||||
%global libuv_version 1.46.0
|
||||
|
||||
# nghttp2 - from deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h
|
||||
%global nghttp2_version 1.58.0
|
||||
|
||||
# ICU - from tools/icu/current_ver.dep
|
||||
%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)")}
|
||||
# " this line just fixes syntax highlighting for vim that is confused by the above and continues literal
|
||||
|
||||
|
||||
# OpenSSL minimum version
|
||||
%global openssl11_minimum 1:1.1.1
|
||||
%global openssl30_minimum 1:3.0.2
|
||||
|
||||
# punycode - from lib/punycode.js
|
||||
# Note: this was merged into the mainline since 0.6.x
|
||||
# Note: this will be unmerged in an upcoming major release
|
||||
%global punycode_version 2.1.0
|
||||
|
||||
# npm - from deps/npm/package.json
|
||||
%global npm_epoch 1
|
||||
%global npm_version 10.2.4
|
||||
|
||||
# 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
|
||||
# to increment safely. Changing this can only be done during an update when the
|
||||
# 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.19
|
||||
|
||||
# histogram_c - assumed from timestamps
|
||||
%global histogram_version 0.9.7
|
||||
|
||||
|
||||
Name: nodejs%{nodejs_pkg_major}
|
||||
Epoch: %{nodejs_epoch}
|
||||
Version: %{nodejs_version}
|
||||
Release: %{nodejs_release}
|
||||
Summary: JavaScript runtime
|
||||
License: MIT and ASL 2.0 and ISC and BSD
|
||||
Group: Development/Languages
|
||||
URL: http://nodejs.org/
|
||||
|
||||
ExclusiveArch: %{nodejs_arches}
|
||||
|
||||
# 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
|
||||
Source0: node-v%{nodejs_version}-stripped.tar.gz
|
||||
Source1: npmrc
|
||||
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
|
||||
Source200: nodejs-sources.sh
|
||||
Source201: npmrc.builtin.in
|
||||
Source202: nodejs.pc.in
|
||||
Source203: v8.pc.in
|
||||
|
||||
Patch: 0001-Remove-unused-OpenSSL-config.patch
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
%global pkgname nodejs
|
||||
%package -n %{pkgname}
|
||||
Summary: JavaScript runtime
|
||||
%else
|
||||
%global pkgname nodejs20
|
||||
%endif
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: python%{python3_pkgversion}-devel
|
||||
BuildRequires: python%{python3_pkgversion}-setuptools
|
||||
BuildRequires: python%{python3_pkgversion}-jinja2
|
||||
%if 0%{?rhel} && 0%{?rhel} < 9
|
||||
BuildRequires: python-unversioned-command
|
||||
%endif
|
||||
%if %{with bundled_zlib}
|
||||
Provides: bundled(zlib) = %{zlib_version}
|
||||
%else
|
||||
BuildRequires: zlib-devel
|
||||
%endif
|
||||
BuildRequires: brotli-devel
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
BuildRequires: devtoolset-11-gcc
|
||||
BuildRequires: devtoolset-11-gcc-c++
|
||||
%else
|
||||
BuildRequires: gcc >= 8.3.0
|
||||
BuildRequires: gcc-c++ >= 8.3.0
|
||||
%endif
|
||||
|
||||
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: ninja-build
|
||||
BuildRequires: unzip
|
||||
|
||||
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
Provides: nodejs = %{nodejs_envr}
|
||||
# To keep the upgrade path clean, we Obsolete nodejsXX from the nodejs
|
||||
# package and nodejsXX-foo from individual subpackages.
|
||||
# Note that using Obsoletes without package version is not standard practice.
|
||||
# Here we assert that *any* version of the system's default interpreter is
|
||||
# preferable to an "extra" interpreter. For example, nodejs-20.5.0 will
|
||||
# replace nodejs20-20.6.0.
|
||||
%define unversioned_obsoletes_of_nodejsXX_if_default() %{expand:\
|
||||
Obsoletes: nodejs%{nodejs_pkg_major}%{?1:-%{1}}\
|
||||
}
|
||||
%else
|
||||
%define unversioned_obsoletes_of_nodejsXX_if_default() %{nil}
|
||||
%endif
|
||||
|
||||
%if %{with bundled}
|
||||
Provides: bundled(libuv) = %{libuv_version}
|
||||
%else
|
||||
BuildRequires: libuv-devel >= 1:%{libuv_version}
|
||||
Requires: libuv >= 1:%{libuv_version}
|
||||
%endif
|
||||
|
||||
# Node.js frequently bumps this faster than Fedora can follow,
|
||||
# so we will bundle it.
|
||||
Provides: bundled(nghttp2) = %{nghttp2_version}
|
||||
|
||||
# Temporarily bundle llhttp because the upstream doesn't
|
||||
# provide releases for it.
|
||||
Provides: bundled(llhttp) = %{llhttp_version}
|
||||
|
||||
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
BuildRequires: openssl11-devel >= %{openssl11_minimum}
|
||||
Requires: openssl11 >= %{openssl11_minimum}
|
||||
%global ssl_configure --shared-openssl --shared-openssl-includes=%{_includedir}/openssl11 --shared-openssl-libpath=%{_libdir}/openssl11
|
||||
%else
|
||||
|
||||
%if 0%{?fedora} >= 36
|
||||
BuildRequires: openssl >= %{openssl30_minimum}
|
||||
BuildRequires: openssl-devel >= %{openssl30_minimum}
|
||||
%global openssl_fips_configure --openssl-is-fips
|
||||
%else
|
||||
Requires: openssl >= %{openssl11_minimum}
|
||||
BuildRequires: openssl-devel >= %{openssl11_minimum}
|
||||
%global openssl_fips_configure %{nil}
|
||||
%endif
|
||||
|
||||
%global ssl_configure --shared-openssl --openssl-conf-name=openssl_conf %{openssl_fips_configure}
|
||||
%endif
|
||||
|
||||
|
||||
# dtrace is not supported on Node.js 19+
|
||||
%global dtrace_configure %{nil}
|
||||
|
||||
|
||||
# we need the system certificate store
|
||||
Requires: ca-certificates
|
||||
|
||||
Requires: %{pkgname}-libs%{?_isa} = %{nodejs_envr}
|
||||
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
# Pull in the docs and full-icu data by default
|
||||
Recommends: %{pkgname}-docs = %{nodejs_envr}
|
||||
Recommends: %{pkgname}-full-i18n%{?_isa} = %{nodejs_envr}
|
||||
Recommends: %{pkgname}-npm >= %{npm_envr}
|
||||
%endif
|
||||
|
||||
# we need ABI virtual provides where SONAMEs aren't enough/not present so deps
|
||||
# break when binary compatibility is broken
|
||||
Provides: nodejs(abi) = %{nodejs_abi}
|
||||
Provides: nodejs(abi%{nodejs_major}) = %{nodejs_abi}
|
||||
|
||||
# this corresponds to the "engine" requirement in package.json
|
||||
Provides: nodejs(engine) = %{nodejs_version}
|
||||
|
||||
# Node.js currently has a conflict with the 'node' package in Fedora
|
||||
# The ham-radio group has agreed to rename their binary for us, but
|
||||
# in the meantime, we're setting an explicit Conflicts: here
|
||||
Conflicts: node <= 0.3.2-12
|
||||
|
||||
# The punycode module was absorbed into the standard library in v0.6.
|
||||
# It still exists as a seperate package for the benefit of users of older
|
||||
# versions. Since we've never shipped anything older than v0.10 in Fedora,
|
||||
# we don't need the seperate nodejs-punycode package, so we Provide it here so
|
||||
# dependent packages don't need to override the dependency generator.
|
||||
# See also: RHBZ#11511811
|
||||
# UPDATE: punycode will be deprecated and so we should unbundle it in Node v8
|
||||
# and use upstream module instead
|
||||
# https://github.com/nodejs/node/commit/29e49fc286080215031a81effbd59eac092fff2f
|
||||
Provides: nodejs-punycode = %{punycode_version}
|
||||
Provides: npm(punycode) = %{punycode_version}
|
||||
|
||||
# Node.js has forked c-ares from upstream in an incompatible way, so we need
|
||||
# to carry the bundled version internally.
|
||||
# See https://github.com/nodejs/node/commit/766d063e0578c0f7758c3a965c971763f43fec85
|
||||
Provides: bundled(c-ares) = %{c_ares_version}
|
||||
|
||||
# Node.js is closely tied to the version of v8 that is used with it. It makes
|
||||
# sense to use the bundled version because upstream consistently breaks ABI
|
||||
# even in point releases. Node.js upstream has now removed the ability to build
|
||||
# against a shared system version entirely.
|
||||
# See https://github.com/nodejs/node/commit/d726a177ed59c37cf5306983ed00ecd858cfbbef
|
||||
Provides: bundled(v8) = %{v8_version}
|
||||
|
||||
# Node.js is bound to a specific version of ICU which may not match the OS
|
||||
# We cannot pin the OS to this version of ICU because every update includes
|
||||
# an ABI-break, so we'll use the bundled copy.
|
||||
Provides: bundled(icu) = %{icu_version}
|
||||
|
||||
# Upstream added new dependencies, but so far they are not available in Fedora
|
||||
# or there's no option to built it as a shared dependency, so we bundle them
|
||||
Provides: bundled(uvwasi) = %{uvwasi_version}
|
||||
Provides: bundled(histogram) = %{histogram_version}
|
||||
|
||||
# Upstream has added a new URL parser that has no option to build as a shared
|
||||
# library (19.7.0+)
|
||||
Provides: bundled(ada) = 2.7.4
|
||||
|
||||
|
||||
# undici and cjs-module-lexer ship with pre-built WASM binaries.
|
||||
%if %{with bootstrap}
|
||||
Provides: bundled(nodejs-cjs-module-lexer) = 1.2.2
|
||||
Provides: bundled(nodejs-undici) = 5.27.2
|
||||
%else
|
||||
BuildRequires: nodejs-cjs-module-lexer nodejs-undici
|
||||
Requires: nodejs-cjs-module-lexer nodejs-undici
|
||||
%endif
|
||||
|
||||
%unversioned_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.}
|
||||
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
%description -n %{pkgname}
|
||||
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.}
|
||||
%endif
|
||||
|
||||
|
||||
%package -n %{pkgname}-devel
|
||||
Summary: JavaScript runtime - development headers
|
||||
Group: Development/Languages
|
||||
Requires: %{pkgname}%{?_isa} = %{nodejs_envr}
|
||||
Requires: %{pkgname}-libs%{?_isa} = %{nodejs_envr}
|
||||
Requires: openssl-devel%{?_isa}
|
||||
%if !%{with bundled_zlib}
|
||||
Requires: zlib-devel%{?_isa}
|
||||
%endif
|
||||
Requires: brotli-devel%{?_isa}
|
||||
Requires: nodejs-packaging
|
||||
|
||||
%if %{without bundled}
|
||||
Requires: libuv-devel%{?_isa}
|
||||
%endif
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
Provides: nodejs-devel = %{nodejs_envr}
|
||||
%endif
|
||||
%unversioned_obsoletes_of_nodejsXX_if_default devel
|
||||
|
||||
Provides: nodejs-devel-pkg = %{nodejs_envr}
|
||||
Conflicts: nodejs-devel-pkg
|
||||
|
||||
|
||||
%description -n %{pkgname}-devel
|
||||
Development headers for the Node.js JavaScript runtime.
|
||||
|
||||
|
||||
%package -n %{pkgname}-libs
|
||||
Summary: Node.js and v8 libraries
|
||||
|
||||
# Compatibility for obsolete v8 package
|
||||
%if 0%{?__isa_bits} == 64
|
||||
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}
|
||||
%else
|
||||
# 32-bits
|
||||
Provides: libv8.so.%{v8_major} = %{v8_epoch}:%{v8_version}
|
||||
Provides: libv8_libbase.so.%{v8_major} = %{v8_epoch}:%{v8_version}
|
||||
Provides: libv8_libplatform.so.%{v8_major} = %{v8_epoch}:%{v8_version}
|
||||
%endif
|
||||
|
||||
Provides: v8 = %{v8_epoch}:%{v8_version}-%{nodejs_release}
|
||||
Provides: v8%{?_isa} = %{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 -n %{pkgname}-libs
|
||||
Libraries to support Node.js and provide stable v8 interfaces.
|
||||
|
||||
|
||||
%package -n %{pkgname}-full-i18n
|
||||
Summary: Non-English locale data for Node.js
|
||||
Requires: %{pkgname}%{?_isa} = %{nodejs_envr}
|
||||
|
||||
%unversioned_obsoletes_of_nodejsXX_if_default full-i18n
|
||||
|
||||
|
||||
%description -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-%{v8_major}.%{v8_minor}-devel
|
||||
Summary: v8 - development headers
|
||||
Epoch: %{v8_epoch}
|
||||
Version: %{v8_version}
|
||||
Release: %{v8_release}
|
||||
Requires: %{pkgname}-devel%{?_isa} = %{nodejs_envr}
|
||||
Requires: %{pkgname}-libs%{?_isa} = %{nodejs_envr}
|
||||
Provides: v8-devel = %{v8_epoch}:%{v8_version}-%{v8_release}
|
||||
|
||||
Conflicts: v8-devel
|
||||
Conflicts: v8-314-devel
|
||||
|
||||
|
||||
%description -n v8-%{v8_major}.%{v8_minor}-devel
|
||||
Development headers for the v8 runtime.
|
||||
|
||||
|
||||
%package -n %{pkgname}-npm
|
||||
Summary: Node.js Package Manager
|
||||
Epoch: %{npm_epoch}
|
||||
Version: %{npm_version}
|
||||
Release: %{npm_release}
|
||||
|
||||
# If we're using the companion NPM build, make sure to keep it in lock-step
|
||||
# with the Node version.
|
||||
Requires: %{pkgname} = %{nodejs_envr}
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
Recommends: %{pkgname}-docs = %{nodejs_envr}
|
||||
%endif
|
||||
|
||||
# Do not add epoch to the virtual NPM provides or it will break
|
||||
# the automatic dependency-generation script.
|
||||
Provides: npm(npm) = %{npm_version}
|
||||
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
# Satisfy dependency requests for "npm"
|
||||
Provides: npm = %{npm_envr}
|
||||
|
||||
# Obsolete the old 'npm' package
|
||||
Obsoletes: npm < 1:9
|
||||
%endif
|
||||
%unversioned_obsoletes_of_nodejsXX_if_default npm
|
||||
|
||||
|
||||
%description -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 -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
|
||||
|
||||
|
||||
%description -n %{pkgname}-docs
|
||||
The API documentation for the Node.js JavaScript runtime.
|
||||
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -n node-v%{nodejs_version}
|
||||
|
||||
# remove bundled dependencies that we aren't building
|
||||
%if !%{with bundled_zlib}
|
||||
rm -rf deps/zlib
|
||||
%endif
|
||||
|
||||
rm -rf deps/brotli
|
||||
rm -rf deps/v8/third_party/jinja2
|
||||
rm -rf tools/inspector_protocol/jinja2
|
||||
|
||||
%if %{without bootstrap}
|
||||
rm -rf deps/cjs-module-lexer
|
||||
rm -rf deps/undici
|
||||
%endif
|
||||
|
||||
# Replace any instances of unversioned python with python3
|
||||
pfiles=( $(grep -rl python) )
|
||||
%py3_shebang_fix ${pfiles[@]}
|
||||
|
||||
|
||||
%build
|
||||
|
||||
# Activate DevToolset 11 on EPEL 7
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
. /opt/rh/devtoolset-11/enable
|
||||
%endif
|
||||
|
||||
# When compiled on armv7hl this package generates an out of range
|
||||
# reference to the literal pool. This is most likely a GCC issue.
|
||||
%ifarch armv7hl
|
||||
%define _lto_cflags %{nil}
|
||||
%endif
|
||||
|
||||
# Decrease debuginfo verbosity to reduce memory consumption during final
|
||||
# library linking
|
||||
%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
|
||||
|
||||
export CC='%{__cc}'
|
||||
export CXX='%{__cxx}'
|
||||
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}"
|
||||
|
||||
# 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} \
|
||||
%{!?with_bootstrap:--shared-builtin-cjs_module_lexer/lexer-path %{nodejs_default_sitelib}/cjs-module-lexer/lexer.js} \
|
||||
%{!?with_bootstrap:--shared-builtin-cjs_module_lexer/dist/lexer-path %{nodejs_default_sitelib}/cjs-module-lexer/dist/lexer.js} \
|
||||
%{!?with_bootstrap:--shared-builtin-undici/undici-path %{nodejs_default_sitelib}/undici/loader.js} \
|
||||
--shared-brotli \
|
||||
--shared-libuv \
|
||||
--with-intl=small-icu \
|
||||
--with-icu-default-data-dir=%{icudatadir} \
|
||||
--without-corepack \
|
||||
--openssl-use-def-ca-store
|
||||
|
||||
%ninja_build -C out/Release
|
||||
|
||||
|
||||
%install
|
||||
|
||||
# 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}
|
||||
|
||||
|
||||
# own the sitelib directory
|
||||
mv %{buildroot}%{nodejs_default_sitelib} \
|
||||
%{buildroot}%{nodejs_private_sitelib}
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
ln -srf %{buildroot}%{nodejs_private_sitelib} \
|
||||
%{buildroot}%{nodejs_default_sitelib}
|
||||
%else
|
||||
rm -f %{buildroot}%{_datadir}/systemtap/tapset/node.stp
|
||||
%endif
|
||||
|
||||
|
||||
# Set the binary permissions properly
|
||||
chmod 0755 %{buildroot}/%{_bindir}/node
|
||||
chrpath --delete %{buildroot}%{_bindir}/node
|
||||
|
||||
# Rename the node binary
|
||||
mv %{buildroot}%{_bindir}/node %{buildroot}%{_bindir}/node-%{nodejs_pkg_major}
|
||||
|
||||
# Move the npm binary to npm-NODEJS_MAJOR
|
||||
rm -f %{buildroot}%{_bindir}/npm
|
||||
|
||||
# Set the hashbang to use the matching Node.js interpreter
|
||||
sed --in-place --regexp-extended \
|
||||
's;^#!/usr/bin/env node($|\ |\t)+;#!/usr/bin/node-%{nodejs_pkg_major};g' \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/bin/npm-cli.js
|
||||
|
||||
ln -srf %{buildroot}%{nodejs_private_sitelib}/npm/bin/npm-cli.js \
|
||||
%{buildroot}%{_bindir}/npm-%{nodejs_pkg_major}
|
||||
|
||||
# Move the npx binary to npx-NODEJS_MAJOR
|
||||
rm -f %{buildroot}%{_bindir}/npx
|
||||
|
||||
# Set the hashbang to use the matching Node.js interpreter
|
||||
sed --in-place --regexp-extended \
|
||||
's;^#!/usr/bin/env node($|\ |\t)+;#!/usr/bin/node-%{nodejs_pkg_major};g' \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/bin/npx-cli.js
|
||||
|
||||
ln -srf %{buildroot}%{nodejs_private_sitelib}/npm/bin/npx-cli.js \
|
||||
%{buildroot}%{_bindir}/npx-%{nodejs_pkg_major}
|
||||
|
||||
# Add the symlinks back for the default version
|
||||
%if 0%{?nodejs_default}
|
||||
ln -srf %{buildroot}%{_bindir}/node-%{nodejs_pkg_major} \
|
||||
%{buildroot}%{_bindir}/node
|
||||
|
||||
ln -srf %{buildroot}%{_bindir}/npm-%{nodejs_pkg_major} \
|
||||
%{buildroot}%{_bindir}/npm
|
||||
|
||||
ln -srf %{buildroot}%{_bindir}/npx-%{nodejs_pkg_major} \
|
||||
%{buildroot}%{_bindir}/npx
|
||||
%endif
|
||||
|
||||
# Install library symlink
|
||||
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 -sf ./node/${header} %{buildroot}%{_includedir}/${header}
|
||||
done
|
||||
ln -s ./node/cppgc %{buildroot}%{_includedir}/cppgc
|
||||
|
||||
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
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
ln -srf %{buildroot}%{_libdir}/libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/${soname}.so.%{v8_major}
|
||||
%endif
|
||||
done
|
||||
|
||||
# install documentation
|
||||
mkdir -p %{buildroot}%{_pkgdocdir}/html
|
||||
cp -pr doc/* %{buildroot}%{_pkgdocdir}/html
|
||||
rm -f %{buildroot}%{_pkgdocdir}/html/nodejs.1
|
||||
|
||||
# node-gyp needs common.gypi too
|
||||
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
|
||||
|
||||
mkdir -p %{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man1 \
|
||||
%{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man5 \
|
||||
%{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man7 \
|
||||
%{buildroot}%{nodejs_default_sitelib}/npm/man \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/man \
|
||||
%{buildroot}%{_pkgdocdir}/npm
|
||||
|
||||
# install manpage docs to mandir
|
||||
cp -pr deps/npm/man/* \
|
||||
%{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/
|
||||
rm -rf %{buildroot}%{nodejs_private_sitelib}/npm/man
|
||||
ln -srf %{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major} \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/man
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
for i in 1 5 7; do
|
||||
mkdir -p %{buildroot}%{_mandir}/man${i}
|
||||
for manpage in %{buildroot}%{nodejs_private_sitelib}/npm/man/man$i/*; do
|
||||
basename=$(basename ${manpage})
|
||||
ln -srf %{buildroot}%{nodejs_private_sitelib}/npm/man/man${i}/${basename} \
|
||||
%{buildroot}%{_mandir}/man${i}/${basename}
|
||||
done
|
||||
done
|
||||
%endif
|
||||
|
||||
# Install the node interpreter manpage
|
||||
mv %{buildroot}%{_mandir}/man1/node.1 \
|
||||
%{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man1/
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
ln -srf %{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man1/node.1 \
|
||||
%{buildroot}%{_mandir}/man1/
|
||||
%endif
|
||||
|
||||
# Install Gatsby HTML documentation to %%{_pkgdocdir}
|
||||
cp -pr deps/npm/docs %{buildroot}%{_pkgdocdir}/npm/
|
||||
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
|
||||
# do with them.
|
||||
rm -f %{buildroot}/%{_defaultdocdir}/node/lldb_commands.py \
|
||||
%{buildroot}/%{_defaultdocdir}/node/lldbinit
|
||||
|
||||
# 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}%{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}%{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
|
||||
|
||||
# Set the hashbang to use the matching Node.js interpreter
|
||||
sed --in-place --regexp-extended \
|
||||
's;^#!/usr/bin/env node($|\ |\t)+;#!/usr/bin/node-%{nodejs_pkg_major};g' \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/node_modules/node-gyp/bin/node-gyp.js
|
||||
|
||||
# Drop the NPM builtin configuration in place
|
||||
sed -e 's#@SYSCONFDIR@#%{_sysconfdir}#g' \
|
||||
%{SOURCE201} > %{buildroot}%{nodejs_private_sitelib}/npm/npmrc
|
||||
|
||||
# Drop the NPM default configuration in place
|
||||
%if 0%{?nodejs_default}
|
||||
mkdir -p %{buildroot}%{_sysconfdir}
|
||||
cp %{SOURCE1} %{buildroot}%{_sysconfdir}/npmrc
|
||||
%endif
|
||||
|
||||
# Install the full-icu data files
|
||||
mkdir -p %{buildroot}%{icudatadir}
|
||||
%if 0%{?little_endian}
|
||||
unzip -d %{buildroot}%{icudatadir} %{SOURCE4} icudt%{icu_major}l.dat
|
||||
%else
|
||||
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-%{nodejs_pkg_major}#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
|
||||
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} -e "require('assert').equal(process.versions.node, '%{nodejs_version}')"
|
||||
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} -e "require('assert').equal(process.versions.v8.replace(/-node\.\d+$/, ''), '%{v8_version}')"
|
||||
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} -e "require('assert').equal(process.versions.ares.replace(/-DEV$/, ''), '%{c_ares_version}')"
|
||||
|
||||
# Ensure we have punycode and that the version matches
|
||||
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} -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-%{nodejs_pkg_major} %{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}%{nodejs_private_sitelib}/npm/node_modules LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} --icu-data-dir=%{buildroot}%{icudatadir} %{SOURCE2}
|
||||
|
||||
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
%pretrans %{pkgname}-npm -p <lua>
|
||||
-- Remove all of the symlinks from the bundled npm node_modules directory
|
||||
base_path = "%{_prefix}/lib/node_modules/npm/node_modules/"
|
||||
d_st = posix.stat(base_path)
|
||||
if d_st then
|
||||
for f in posix.files(base_path) do
|
||||
path = base_path..f
|
||||
st = posix.stat(path)
|
||||
if st and st.type == "link" then
|
||||
os.remove(path)
|
||||
end
|
||||
end
|
||||
end
|
||||
%endif
|
||||
|
||||
# This can be removed once F37 is EOL
|
||||
%pretrans -n %{pkgname} -p <lua>
|
||||
path = "/usr/lib/node_modules"
|
||||
st = posix.stat(path)
|
||||
if st and st.type == "directory" then
|
||||
status = os.rename(path, path .. ".rpmmoved")
|
||||
if not status then
|
||||
suffix = 0
|
||||
while not status do
|
||||
suffix = suffix + 1
|
||||
status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix)
|
||||
end
|
||||
os.rename(path, path .. ".rpmmoved")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
%files -n %{pkgname}
|
||||
%doc CHANGELOG.md onboarding.md GOVERNANCE.md README.md
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
%{_bindir}/node
|
||||
%doc %{_mandir}/man1/node.1*
|
||||
%{nodejs_default_sitelib}
|
||||
|
||||
|
||||
%endif
|
||||
|
||||
%{_bindir}/node-%{nodejs_pkg_major}
|
||||
%dir %{nodejs_private_sitelib}
|
||||
|
||||
%doc %{_mandir}/nodejs-%{nodejs_pkg_major}/man1/node.1*
|
||||
|
||||
|
||||
%files -n %{pkgname}-devel
|
||||
%{_includedir}/node
|
||||
%{_libdir}/libnode.so
|
||||
%{nodejs_datadir}/common.gypi
|
||||
%{_pkgdocdir}/gdbinit
|
||||
%{_libdir}/pkgconfig/nodejs-%{nodejs_pkg_major}.pc
|
||||
|
||||
|
||||
%files -n %{pkgname}-full-i18n
|
||||
%dir %{icudatadir}
|
||||
%{icudatadir}/icudt%{icu_major}*.dat
|
||||
|
||||
|
||||
%files -n %{pkgname}-libs
|
||||
%license LICENSE
|
||||
%{_libdir}/libnode.so.%{nodejs_soversion}
|
||||
%{_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}/
|
||||
%if 0%{?nodejs_default}
|
||||
%{_libdir}/libv8.so.%{v8_major}
|
||||
%{_libdir}/libv8_libbase.so.%{v8_major}
|
||||
%{_libdir}/libv8_libplatform.so.%{v8_major}
|
||||
%endif
|
||||
|
||||
%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 -n %{pkgname}-npm
|
||||
%if 0%{?nodejs_default}
|
||||
%{_bindir}/npm
|
||||
%{_bindir}/npx
|
||||
%config(noreplace) %{_sysconfdir}/npmrc
|
||||
%ghost %{_sysconfdir}/npmignore
|
||||
|
||||
%doc %{_mandir}/man*/
|
||||
%exclude %doc %{_mandir}/man1/node.1*
|
||||
%endif
|
||||
|
||||
%{_bindir}/npm-%{nodejs_pkg_major}
|
||||
%{_bindir}/npx-%{nodejs_pkg_major}
|
||||
%{nodejs_private_sitelib}/npm
|
||||
|
||||
%doc %{_mandir}/nodejs-%{nodejs_pkg_major}/
|
||||
%exclude %doc %{_mandir}/nodejs-%{nodejs_pkg_major}/man1/node.1*
|
||||
|
||||
|
||||
%files -n %{pkgname}-docs
|
||||
%doc doc
|
||||
%dir %{_pkgdocdir}
|
||||
%{_pkgdocdir}/html
|
||||
%{_pkgdocdir}/npm/docs
|
||||
|
||||
|
||||
%changelog
|
||||
%autochangelog
|
@ -1,5 +0,0 @@
|
||||
# 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
|
@ -1,902 +0,0 @@
|
||||
# Break circular dependencies
|
||||
%bcond bootstrap 0
|
||||
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
%bcond_without bundled_zlib
|
||||
%else
|
||||
%bcond_with bundled_zlib
|
||||
%endif
|
||||
|
||||
# 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}
|
||||
|
||||
# == Master Relase ==
|
||||
# This is used by both the nodejs package and the npm subpackage that
|
||||
# has a separate version - the name is special so that rpmdev-bumpspec
|
||||
# will bump this rather than adding .1 to the end.
|
||||
%global baserelease %autorelease
|
||||
|
||||
%{?!_pkgdocdir:%global _pkgdocdir %{_docdir}/%{name}-%{version}}
|
||||
|
||||
# == Node.js Version ==
|
||||
# Note: Fedora should only ship LTS versions of Node.js (currently expected
|
||||
# to be major versions with even numbers). The odd-numbered versions are new
|
||||
# feature releases that are only supported for nine months, which is shorter
|
||||
# than a Fedora release lifecycle.
|
||||
%global nodejs_epoch 1
|
||||
%global nodejs_major {{ NODE_MAJOR }}
|
||||
%global nodejs_minor {{ NODE_MINOR }}
|
||||
%global nodejs_patch {{ NODE_PATCH }}
|
||||
# nodejs_soversion - from NODE_MODULE_VERSION in src/node_version.h
|
||||
%global nodejs_soversion {{ NODE_SOVERSION }}
|
||||
%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_pkg_major {{ NODE_PKG_MAJOR }}
|
||||
|
||||
%global nodejs_datadir %{_datarootdir}/node-%{nodejs_pkg_major}
|
||||
|
||||
# Determine if this should be the default version for this Fedora release
|
||||
# The default version will own /usr/bin/node and friends
|
||||
%if 0%{?fedora} == {{ FEDORA_DEFAULT_RELEASE_LOW }} || 0%{?fedora} == {{ FEDORA_DEFAULT_RELEASE_HIGH }}{{ RHEL_DEFAULT_RELEASE }}
|
||||
%global nodejs_default %{nodejs_pkg_major}
|
||||
%endif
|
||||
|
||||
%global nodejs_default_sitelib %{_prefix}/lib/node_modules
|
||||
%global nodejs_private_sitelib %{nodejs_default_sitelib}_%{nodejs_pkg_major}
|
||||
|
||||
|
||||
# == 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 3
|
||||
%global v8_major {{ V8_MAJOR }}
|
||||
%global v8_minor {{ V8_MINOR }}
|
||||
%global v8_build {{ V8_BUILD }}
|
||||
%global v8_patch {{ V8_PATCH }}
|
||||
%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 {{ ZLIB_VERSION }}
|
||||
|
||||
# c-ares - from deps/cares/include/ares_version.h
|
||||
# https://github.com/nodejs/node/pull/9332
|
||||
%global c_ares_version {{ C_ARES_VERSION }}
|
||||
|
||||
# llhttp - from deps/llhttp/include/llhttp.h
|
||||
%global llhttp_version {{ LLHTTP_VERSION }}
|
||||
|
||||
# libuv - from deps/uv/include/uv/version.h
|
||||
%global libuv_version {{ LIBUV_VERSION }}
|
||||
|
||||
# nghttp2 - from deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h
|
||||
%global nghttp2_version {{ NGHTTP2_VERSION }}
|
||||
|
||||
# ICU - from tools/icu/current_ver.dep
|
||||
%global icu_major {{ ICU_MAJOR }}
|
||||
%global icu_minor {{ ICU_MINOR }}
|
||||
%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)")}
|
||||
# " this line just fixes syntax highlighting for vim that is confused by the above and continues literal
|
||||
|
||||
|
||||
# OpenSSL minimum version
|
||||
%global openssl11_minimum 1:1.1.1
|
||||
%global openssl30_minimum 1:3.0.2
|
||||
|
||||
# punycode - from lib/punycode.js
|
||||
# Note: this was merged into the mainline since 0.6.x
|
||||
# Note: this will be unmerged in an upcoming major release
|
||||
%global punycode_version {{ PUNYCODE_VERSION }}
|
||||
|
||||
# npm - from deps/npm/package.json
|
||||
%global npm_epoch 1
|
||||
%global npm_version {{ NPM_VERSION }}
|
||||
|
||||
# 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
|
||||
# to increment safely. Changing this can only be done during an update when the
|
||||
# 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 {{ UVWASI_VERSION }}
|
||||
|
||||
# histogram_c - assumed from timestamps
|
||||
%global histogram_version 0.9.7
|
||||
|
||||
|
||||
Name: nodejs%{nodejs_pkg_major}
|
||||
Epoch: %{nodejs_epoch}
|
||||
Version: %{nodejs_version}
|
||||
Release: %{nodejs_release}
|
||||
Summary: JavaScript runtime
|
||||
License: MIT and ASL 2.0 and ISC and BSD
|
||||
Group: Development/Languages
|
||||
URL: http://nodejs.org/
|
||||
|
||||
ExclusiveArch: %{nodejs_arches}
|
||||
|
||||
# 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
|
||||
Source0: node-v%{nodejs_version}-stripped.tar.gz
|
||||
Source1: npmrc
|
||||
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
|
||||
Source200: nodejs-sources.sh
|
||||
Source201: npmrc.builtin.in
|
||||
Source202: nodejs.pc.in
|
||||
Source203: v8.pc.in
|
||||
|
||||
{% for patch in PATCHES -%}
|
||||
Patch: {{ patch }}
|
||||
{% endfor -%}
|
||||
{# #}
|
||||
%if 0%{?nodejs_default}
|
||||
%global pkgname nodejs
|
||||
%package -n %{pkgname}
|
||||
Summary: JavaScript runtime
|
||||
%else
|
||||
%global pkgname nodejs{{ NODE_PKG_MAJOR }}
|
||||
%endif
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: python%{python3_pkgversion}-devel
|
||||
BuildRequires: python%{python3_pkgversion}-setuptools
|
||||
BuildRequires: python%{python3_pkgversion}-jinja2
|
||||
%if 0%{?rhel} && 0%{?rhel} < 9
|
||||
BuildRequires: python-unversioned-command
|
||||
%endif
|
||||
%if %{with bundled_zlib}
|
||||
Provides: bundled(zlib) = %{zlib_version}
|
||||
%else
|
||||
BuildRequires: zlib-devel
|
||||
%endif
|
||||
BuildRequires: brotli-devel
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
BuildRequires: devtoolset-11-gcc
|
||||
BuildRequires: devtoolset-11-gcc-c++
|
||||
%else
|
||||
BuildRequires: gcc >= 8.3.0
|
||||
BuildRequires: gcc-c++ >= 8.3.0
|
||||
%endif
|
||||
|
||||
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: ninja-build
|
||||
BuildRequires: unzip
|
||||
|
||||
{% if NODE_MAJOR < 19 -%}
|
||||
BuildRequires: systemtap-sdt-devel
|
||||
{% endif %}
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
Provides: nodejs = %{nodejs_envr}
|
||||
# To keep the upgrade path clean, we Obsolete nodejsXX from the nodejs
|
||||
# package and nodejsXX-foo from individual subpackages.
|
||||
# Note that using Obsoletes without package version is not standard practice.
|
||||
# Here we assert that *any* version of the system's default interpreter is
|
||||
# preferable to an "extra" interpreter. For example, nodejs-20.5.0 will
|
||||
# replace nodejs20-20.6.0.
|
||||
%define unversioned_obsoletes_of_nodejsXX_if_default() %{expand:\
|
||||
Obsoletes: nodejs%{nodejs_pkg_major}%{?1:-%{1}}\
|
||||
}
|
||||
%else
|
||||
%define unversioned_obsoletes_of_nodejsXX_if_default() %{nil}
|
||||
%endif
|
||||
|
||||
%if %{with bundled}
|
||||
Provides: bundled(libuv) = %{libuv_version}
|
||||
%else
|
||||
BuildRequires: libuv-devel >= 1:%{libuv_version}
|
||||
Requires: libuv >= 1:%{libuv_version}
|
||||
%endif
|
||||
|
||||
# Node.js frequently bumps this faster than Fedora can follow,
|
||||
# so we will bundle it.
|
||||
Provides: bundled(nghttp2) = %{nghttp2_version}
|
||||
|
||||
# Temporarily bundle llhttp because the upstream doesn't
|
||||
# provide releases for it.
|
||||
Provides: bundled(llhttp) = %{llhttp_version}
|
||||
|
||||
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
BuildRequires: openssl11-devel >= %{openssl11_minimum}
|
||||
Requires: openssl11 >= %{openssl11_minimum}
|
||||
%global ssl_configure --shared-openssl --shared-openssl-includes=%{_includedir}/openssl11 --shared-openssl-libpath=%{_libdir}/openssl11
|
||||
%else
|
||||
|
||||
%if 0%{?fedora} >= 36
|
||||
BuildRequires: openssl >= %{openssl30_minimum}
|
||||
BuildRequires: openssl-devel >= %{openssl30_minimum}
|
||||
%global openssl_fips_configure --openssl-is-fips
|
||||
%else
|
||||
Requires: openssl >= %{openssl11_minimum}
|
||||
BuildRequires: openssl-devel >= %{openssl11_minimum}
|
||||
%global openssl_fips_configure %{nil}
|
||||
%endif
|
||||
|
||||
%global ssl_configure --shared-openssl --openssl-conf-name=openssl_conf %{openssl_fips_configure}
|
||||
%endif
|
||||
|
||||
{% if NODE_MAJOR < 19 -%}
|
||||
%if 0%{?nodejs_default}
|
||||
%global dtrace_configure --with-dtrace
|
||||
%else
|
||||
# dtrace is only installed for the default version
|
||||
%global dtrace_configure %{nil}
|
||||
%endif
|
||||
{% else %}
|
||||
# dtrace is not supported on Node.js 19+
|
||||
%global dtrace_configure %{nil}
|
||||
{% endif %}
|
||||
|
||||
# we need the system certificate store
|
||||
Requires: ca-certificates
|
||||
|
||||
Requires: %{pkgname}-libs%{?_isa} = %{nodejs_envr}
|
||||
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
# Pull in the docs and full-icu data by default
|
||||
Recommends: %{pkgname}-docs = %{nodejs_envr}
|
||||
Recommends: %{pkgname}-full-i18n%{?_isa} = %{nodejs_envr}
|
||||
Recommends: %{pkgname}-npm >= %{npm_envr}
|
||||
%endif
|
||||
|
||||
# we need ABI virtual provides where SONAMEs aren't enough/not present so deps
|
||||
# break when binary compatibility is broken
|
||||
Provides: nodejs(abi) = %{nodejs_abi}
|
||||
Provides: nodejs(abi%{nodejs_major}) = %{nodejs_abi}
|
||||
|
||||
# this corresponds to the "engine" requirement in package.json
|
||||
Provides: nodejs(engine) = %{nodejs_version}
|
||||
|
||||
# Node.js currently has a conflict with the 'node' package in Fedora
|
||||
# The ham-radio group has agreed to rename their binary for us, but
|
||||
# in the meantime, we're setting an explicit Conflicts: here
|
||||
Conflicts: node <= 0.3.2-12
|
||||
|
||||
# The punycode module was absorbed into the standard library in v0.6.
|
||||
# It still exists as a seperate package for the benefit of users of older
|
||||
# versions. Since we've never shipped anything older than v0.10 in Fedora,
|
||||
# we don't need the seperate nodejs-punycode package, so we Provide it here so
|
||||
# dependent packages don't need to override the dependency generator.
|
||||
# See also: RHBZ#11511811
|
||||
# UPDATE: punycode will be deprecated and so we should unbundle it in Node v8
|
||||
# and use upstream module instead
|
||||
# https://github.com/nodejs/node/commit/29e49fc286080215031a81effbd59eac092fff2f
|
||||
Provides: nodejs-punycode = %{punycode_version}
|
||||
Provides: npm(punycode) = %{punycode_version}
|
||||
|
||||
# Node.js has forked c-ares from upstream in an incompatible way, so we need
|
||||
# to carry the bundled version internally.
|
||||
# See https://github.com/nodejs/node/commit/766d063e0578c0f7758c3a965c971763f43fec85
|
||||
Provides: bundled(c-ares) = %{c_ares_version}
|
||||
|
||||
# Node.js is closely tied to the version of v8 that is used with it. It makes
|
||||
# sense to use the bundled version because upstream consistently breaks ABI
|
||||
# even in point releases. Node.js upstream has now removed the ability to build
|
||||
# against a shared system version entirely.
|
||||
# See https://github.com/nodejs/node/commit/d726a177ed59c37cf5306983ed00ecd858cfbbef
|
||||
Provides: bundled(v8) = %{v8_version}
|
||||
|
||||
# Node.js is bound to a specific version of ICU which may not match the OS
|
||||
# We cannot pin the OS to this version of ICU because every update includes
|
||||
# an ABI-break, so we'll use the bundled copy.
|
||||
Provides: bundled(icu) = %{icu_version}
|
||||
|
||||
# Upstream added new dependencies, but so far they are not available in Fedora
|
||||
# or there's no option to built it as a shared dependency, so we bundle them
|
||||
Provides: bundled(uvwasi) = %{uvwasi_version}
|
||||
Provides: bundled(histogram) = %{histogram_version}
|
||||
|
||||
{% if ADA_VERSION -%}
|
||||
# Upstream has added a new URL parser that has no option to build as a shared
|
||||
# library (19.7.0+)
|
||||
Provides: bundled(ada) = {{ ADA_VERSION }}
|
||||
{% endif %}
|
||||
|
||||
# undici and cjs-module-lexer ship with pre-built WASM binaries.
|
||||
%if %{with bootstrap}
|
||||
Provides: bundled(nodejs-cjs-module-lexer) = {{ LEXER_VERSION }}
|
||||
Provides: bundled(nodejs-undici) = {{ UNDICI_VERSION }}
|
||||
%else
|
||||
BuildRequires: nodejs-cjs-module-lexer nodejs-undici
|
||||
Requires: nodejs-cjs-module-lexer nodejs-undici
|
||||
%endif
|
||||
|
||||
%unversioned_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.}
|
||||
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
%description -n %{pkgname}
|
||||
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.}
|
||||
%endif
|
||||
|
||||
|
||||
%package -n %{pkgname}-devel
|
||||
Summary: JavaScript runtime - development headers
|
||||
Group: Development/Languages
|
||||
Requires: %{pkgname}%{?_isa} = %{nodejs_envr}
|
||||
Requires: %{pkgname}-libs%{?_isa} = %{nodejs_envr}
|
||||
Requires: openssl-devel%{?_isa}
|
||||
%if !%{with bundled_zlib}
|
||||
Requires: zlib-devel%{?_isa}
|
||||
%endif
|
||||
Requires: brotli-devel%{?_isa}
|
||||
Requires: nodejs-packaging
|
||||
|
||||
%if %{without bundled}
|
||||
Requires: libuv-devel%{?_isa}
|
||||
%endif
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
Provides: nodejs-devel = %{nodejs_envr}
|
||||
%endif
|
||||
%unversioned_obsoletes_of_nodejsXX_if_default devel
|
||||
|
||||
Provides: nodejs-devel-pkg = %{nodejs_envr}
|
||||
Conflicts: nodejs-devel-pkg
|
||||
|
||||
|
||||
%description -n %{pkgname}-devel
|
||||
Development headers for the Node.js JavaScript runtime.
|
||||
|
||||
|
||||
%package -n %{pkgname}-libs
|
||||
Summary: Node.js and v8 libraries
|
||||
|
||||
# Compatibility for obsolete v8 package
|
||||
%if 0%{?__isa_bits} == 64
|
||||
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}
|
||||
%else
|
||||
# 32-bits
|
||||
Provides: libv8.so.%{v8_major} = %{v8_epoch}:%{v8_version}
|
||||
Provides: libv8_libbase.so.%{v8_major} = %{v8_epoch}:%{v8_version}
|
||||
Provides: libv8_libplatform.so.%{v8_major} = %{v8_epoch}:%{v8_version}
|
||||
%endif
|
||||
|
||||
Provides: v8 = %{v8_epoch}:%{v8_version}-%{nodejs_release}
|
||||
Provides: v8%{?_isa} = %{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 -n %{pkgname}-libs
|
||||
Libraries to support Node.js and provide stable v8 interfaces.
|
||||
|
||||
|
||||
%package -n %{pkgname}-full-i18n
|
||||
Summary: Non-English locale data for Node.js
|
||||
Requires: %{pkgname}%{?_isa} = %{nodejs_envr}
|
||||
|
||||
%unversioned_obsoletes_of_nodejsXX_if_default full-i18n
|
||||
|
||||
|
||||
%description -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-%{v8_major}.%{v8_minor}-devel
|
||||
Summary: v8 - development headers
|
||||
Epoch: %{v8_epoch}
|
||||
Version: %{v8_version}
|
||||
Release: %{v8_release}
|
||||
Requires: %{pkgname}-devel%{?_isa} = %{nodejs_envr}
|
||||
Requires: %{pkgname}-libs%{?_isa} = %{nodejs_envr}
|
||||
Provides: v8-devel = %{v8_epoch}:%{v8_version}-%{v8_release}
|
||||
|
||||
Conflicts: v8-devel
|
||||
Conflicts: v8-314-devel
|
||||
|
||||
|
||||
%description -n v8-%{v8_major}.%{v8_minor}-devel
|
||||
Development headers for the v8 runtime.
|
||||
|
||||
|
||||
%package -n %{pkgname}-npm
|
||||
Summary: Node.js Package Manager
|
||||
Epoch: %{npm_epoch}
|
||||
Version: %{npm_version}
|
||||
Release: %{npm_release}
|
||||
|
||||
# If we're using the companion NPM build, make sure to keep it in lock-step
|
||||
# with the Node version.
|
||||
Requires: %{pkgname} = %{nodejs_envr}
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
Recommends: %{pkgname}-docs = %{nodejs_envr}
|
||||
%endif
|
||||
|
||||
# Do not add epoch to the virtual NPM provides or it will break
|
||||
# the automatic dependency-generation script.
|
||||
Provides: npm(npm) = %{npm_version}
|
||||
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
# Satisfy dependency requests for "npm"
|
||||
Provides: npm = %{npm_envr}
|
||||
|
||||
# Obsolete the old 'npm' package
|
||||
Obsoletes: npm < 1:9
|
||||
%endif
|
||||
%unversioned_obsoletes_of_nodejsXX_if_default npm
|
||||
|
||||
|
||||
%description -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 -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
|
||||
|
||||
|
||||
%description -n %{pkgname}-docs
|
||||
The API documentation for the Node.js JavaScript runtime.
|
||||
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -n node-v%{nodejs_version}
|
||||
|
||||
# remove bundled dependencies that we aren't building
|
||||
%if !%{with bundled_zlib}
|
||||
rm -rf deps/zlib
|
||||
%endif
|
||||
|
||||
rm -rf deps/brotli
|
||||
rm -rf deps/v8/third_party/jinja2
|
||||
rm -rf tools/inspector_protocol/jinja2
|
||||
|
||||
%if %{without bootstrap}
|
||||
rm -rf deps/cjs-module-lexer
|
||||
rm -rf deps/undici
|
||||
%endif
|
||||
|
||||
# Replace any instances of unversioned python with python3
|
||||
pfiles=( $(grep -rl python) )
|
||||
%py3_shebang_fix ${pfiles[@]}
|
||||
|
||||
|
||||
%build
|
||||
|
||||
# Activate DevToolset 11 on EPEL 7
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
. /opt/rh/devtoolset-11/enable
|
||||
%endif
|
||||
|
||||
# When compiled on armv7hl this package generates an out of range
|
||||
# reference to the literal pool. This is most likely a GCC issue.
|
||||
%ifarch armv7hl
|
||||
%define _lto_cflags %{nil}
|
||||
%endif
|
||||
|
||||
# Decrease debuginfo verbosity to reduce memory consumption during final
|
||||
# library linking
|
||||
%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
|
||||
|
||||
export CC='%{__cc}'
|
||||
export CXX='%{__cxx}'
|
||||
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}"
|
||||
|
||||
# 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} \
|
||||
%{!?with_bootstrap:--shared-builtin-cjs_module_lexer/lexer-path %{nodejs_default_sitelib}/cjs-module-lexer/lexer.js} \
|
||||
%{!?with_bootstrap:--shared-builtin-cjs_module_lexer/dist/lexer-path %{nodejs_default_sitelib}/cjs-module-lexer/dist/lexer.js} \
|
||||
%{!?with_bootstrap:--shared-builtin-undici/undici-path %{nodejs_default_sitelib}/undici/loader.js} \
|
||||
--shared-brotli \
|
||||
--shared-libuv \
|
||||
--with-intl=small-icu \
|
||||
--with-icu-default-data-dir=%{icudatadir} \
|
||||
--without-corepack \
|
||||
--openssl-use-def-ca-store
|
||||
|
||||
%ninja_build -C out/Release
|
||||
|
||||
|
||||
%install
|
||||
|
||||
# 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}
|
||||
|
||||
|
||||
# own the sitelib directory
|
||||
mv %{buildroot}%{nodejs_default_sitelib} \
|
||||
%{buildroot}%{nodejs_private_sitelib}
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
ln -srf %{buildroot}%{nodejs_private_sitelib} \
|
||||
%{buildroot}%{nodejs_default_sitelib}
|
||||
%else
|
||||
rm -f %{buildroot}%{_datadir}/systemtap/tapset/node.stp
|
||||
%endif
|
||||
|
||||
|
||||
# Set the binary permissions properly
|
||||
chmod 0755 %{buildroot}/%{_bindir}/node
|
||||
chrpath --delete %{buildroot}%{_bindir}/node
|
||||
|
||||
# Rename the node binary
|
||||
mv %{buildroot}%{_bindir}/node %{buildroot}%{_bindir}/node-%{nodejs_pkg_major}
|
||||
|
||||
# Move the npm binary to npm-NODEJS_MAJOR
|
||||
rm -f %{buildroot}%{_bindir}/npm
|
||||
|
||||
# Set the hashbang to use the matching Node.js interpreter
|
||||
sed --in-place --regexp-extended \
|
||||
's;^#!/usr/bin/env node($|\ |\t)+;#!/usr/bin/node-%{nodejs_pkg_major};g' \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/bin/npm-cli.js
|
||||
|
||||
ln -srf %{buildroot}%{nodejs_private_sitelib}/npm/bin/npm-cli.js \
|
||||
%{buildroot}%{_bindir}/npm-%{nodejs_pkg_major}
|
||||
|
||||
# Move the npx binary to npx-NODEJS_MAJOR
|
||||
rm -f %{buildroot}%{_bindir}/npx
|
||||
|
||||
# Set the hashbang to use the matching Node.js interpreter
|
||||
sed --in-place --regexp-extended \
|
||||
's;^#!/usr/bin/env node($|\ |\t)+;#!/usr/bin/node-%{nodejs_pkg_major};g' \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/bin/npx-cli.js
|
||||
|
||||
ln -srf %{buildroot}%{nodejs_private_sitelib}/npm/bin/npx-cli.js \
|
||||
%{buildroot}%{_bindir}/npx-%{nodejs_pkg_major}
|
||||
|
||||
# Add the symlinks back for the default version
|
||||
%if 0%{?nodejs_default}
|
||||
ln -srf %{buildroot}%{_bindir}/node-%{nodejs_pkg_major} \
|
||||
%{buildroot}%{_bindir}/node
|
||||
|
||||
ln -srf %{buildroot}%{_bindir}/npm-%{nodejs_pkg_major} \
|
||||
%{buildroot}%{_bindir}/npm
|
||||
|
||||
ln -srf %{buildroot}%{_bindir}/npx-%{nodejs_pkg_major} \
|
||||
%{buildroot}%{_bindir}/npx
|
||||
%endif
|
||||
|
||||
# Install library symlink
|
||||
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 -sf ./node/${header} %{buildroot}%{_includedir}/${header}
|
||||
done
|
||||
ln -s ./node/cppgc %{buildroot}%{_includedir}/cppgc
|
||||
|
||||
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
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
ln -srf %{buildroot}%{_libdir}/libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/${soname}.so.%{v8_major}
|
||||
%endif
|
||||
done
|
||||
|
||||
# install documentation
|
||||
mkdir -p %{buildroot}%{_pkgdocdir}/html
|
||||
cp -pr doc/* %{buildroot}%{_pkgdocdir}/html
|
||||
rm -f %{buildroot}%{_pkgdocdir}/html/nodejs.1
|
||||
|
||||
# node-gyp needs common.gypi too
|
||||
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
|
||||
|
||||
mkdir -p %{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man1 \
|
||||
%{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man5 \
|
||||
%{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man7 \
|
||||
%{buildroot}%{nodejs_default_sitelib}/npm/man \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/man \
|
||||
%{buildroot}%{_pkgdocdir}/npm
|
||||
|
||||
# install manpage docs to mandir
|
||||
cp -pr deps/npm/man/* \
|
||||
%{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/
|
||||
rm -rf %{buildroot}%{nodejs_private_sitelib}/npm/man
|
||||
ln -srf %{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major} \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/man
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
for i in 1 5 7; do
|
||||
mkdir -p %{buildroot}%{_mandir}/man${i}
|
||||
for manpage in %{buildroot}%{nodejs_private_sitelib}/npm/man/man$i/*; do
|
||||
basename=$(basename ${manpage})
|
||||
ln -srf %{buildroot}%{nodejs_private_sitelib}/npm/man/man${i}/${basename} \
|
||||
%{buildroot}%{_mandir}/man${i}/${basename}
|
||||
done
|
||||
done
|
||||
%endif
|
||||
|
||||
# Install the node interpreter manpage
|
||||
mv %{buildroot}%{_mandir}/man1/node.1 \
|
||||
%{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man1/
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
ln -srf %{buildroot}%{_mandir}/nodejs-%{nodejs_pkg_major}/man1/node.1 \
|
||||
%{buildroot}%{_mandir}/man1/
|
||||
%endif
|
||||
|
||||
# Install Gatsby HTML documentation to %%{_pkgdocdir}
|
||||
cp -pr deps/npm/docs %{buildroot}%{_pkgdocdir}/npm/
|
||||
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
|
||||
# do with them.
|
||||
rm -f %{buildroot}/%{_defaultdocdir}/node/lldb_commands.py \
|
||||
%{buildroot}/%{_defaultdocdir}/node/lldbinit
|
||||
|
||||
# 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}%{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}%{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
|
||||
|
||||
# Set the hashbang to use the matching Node.js interpreter
|
||||
sed --in-place --regexp-extended \
|
||||
's;^#!/usr/bin/env node($|\ |\t)+;#!/usr/bin/node-%{nodejs_pkg_major};g' \
|
||||
%{buildroot}%{nodejs_private_sitelib}/npm/node_modules/node-gyp/bin/node-gyp.js
|
||||
|
||||
# Drop the NPM builtin configuration in place
|
||||
sed -e 's#@SYSCONFDIR@#%{_sysconfdir}#g' \
|
||||
%{SOURCE201} > %{buildroot}%{nodejs_private_sitelib}/npm/npmrc
|
||||
|
||||
# Drop the NPM default configuration in place
|
||||
%if 0%{?nodejs_default}
|
||||
mkdir -p %{buildroot}%{_sysconfdir}
|
||||
cp %{SOURCE1} %{buildroot}%{_sysconfdir}/npmrc
|
||||
%endif
|
||||
|
||||
# Install the full-icu data files
|
||||
mkdir -p %{buildroot}%{icudatadir}
|
||||
%if 0%{?little_endian}
|
||||
unzip -d %{buildroot}%{icudatadir} %{SOURCE4} icudt%{icu_major}l.dat
|
||||
%else
|
||||
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-%{nodejs_pkg_major}#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
|
||||
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} -e "require('assert').equal(process.versions.node, '%{nodejs_version}')"
|
||||
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} -e "require('assert').equal(process.versions.v8.replace(/-node\.\d+$/, ''), '%{v8_version}')"
|
||||
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} -e "require('assert').equal(process.versions.ares.replace(/-DEV$/, ''), '%{c_ares_version}')"
|
||||
|
||||
# Ensure we have punycode and that the version matches
|
||||
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} -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-%{nodejs_pkg_major} %{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}%{nodejs_private_sitelib}/npm/node_modules LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node-%{nodejs_pkg_major} --icu-data-dir=%{buildroot}%{icudatadir} %{SOURCE2}
|
||||
|
||||
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
%pretrans %{pkgname}-npm -p <lua>
|
||||
-- Remove all of the symlinks from the bundled npm node_modules directory
|
||||
base_path = "%{_prefix}/lib/node_modules/npm/node_modules/"
|
||||
d_st = posix.stat(base_path)
|
||||
if d_st then
|
||||
for f in posix.files(base_path) do
|
||||
path = base_path..f
|
||||
st = posix.stat(path)
|
||||
if st and st.type == "link" then
|
||||
os.remove(path)
|
||||
end
|
||||
end
|
||||
end
|
||||
%endif
|
||||
|
||||
# This can be removed once F37 is EOL
|
||||
%pretrans -n %{pkgname} -p <lua>
|
||||
path = "/usr/lib/node_modules"
|
||||
st = posix.stat(path)
|
||||
if st and st.type == "directory" then
|
||||
status = os.rename(path, path .. ".rpmmoved")
|
||||
if not status then
|
||||
suffix = 0
|
||||
while not status do
|
||||
suffix = suffix + 1
|
||||
status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix)
|
||||
end
|
||||
os.rename(path, path .. ".rpmmoved")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
%files -n %{pkgname}
|
||||
%doc CHANGELOG.md onboarding.md GOVERNANCE.md README.md
|
||||
|
||||
%if 0%{?nodejs_default}
|
||||
%{_bindir}/node
|
||||
%doc %{_mandir}/man1/node.1*
|
||||
%{nodejs_default_sitelib}
|
||||
|
||||
{% if NODE_MAJOR < 19 -%}
|
||||
%dir %{_datadir}/systemtap
|
||||
%dir %{_datadir}/systemtap/tapset
|
||||
%{_datadir}/systemtap/tapset/node.stp
|
||||
%dir %{_usr}/lib/dtrace
|
||||
%{_usr}/lib/dtrace/node.d
|
||||
{% endif %}
|
||||
%endif
|
||||
|
||||
%{_bindir}/node-%{nodejs_pkg_major}
|
||||
%dir %{nodejs_private_sitelib}
|
||||
|
||||
%doc %{_mandir}/nodejs-%{nodejs_pkg_major}/man1/node.1*
|
||||
|
||||
|
||||
%files -n %{pkgname}-devel
|
||||
%{_includedir}/node
|
||||
%{_libdir}/libnode.so
|
||||
%{nodejs_datadir}/common.gypi
|
||||
%{_pkgdocdir}/gdbinit
|
||||
%{_libdir}/pkgconfig/nodejs-%{nodejs_pkg_major}.pc
|
||||
|
||||
|
||||
%files -n %{pkgname}-full-i18n
|
||||
%dir %{icudatadir}
|
||||
%{icudatadir}/icudt%{icu_major}*.dat
|
||||
|
||||
|
||||
%files -n %{pkgname}-libs
|
||||
%license LICENSE
|
||||
%{_libdir}/libnode.so.%{nodejs_soversion}
|
||||
%{_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}/
|
||||
%if 0%{?nodejs_default}
|
||||
%{_libdir}/libv8.so.%{v8_major}
|
||||
%{_libdir}/libv8_libbase.so.%{v8_major}
|
||||
%{_libdir}/libv8_libplatform.so.%{v8_major}
|
||||
%endif
|
||||
|
||||
%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 -n %{pkgname}-npm
|
||||
%if 0%{?nodejs_default}
|
||||
%{_bindir}/npm
|
||||
%{_bindir}/npx
|
||||
%config(noreplace) %{_sysconfdir}/npmrc
|
||||
%ghost %{_sysconfdir}/npmignore
|
||||
|
||||
%doc %{_mandir}/man*/
|
||||
%exclude %doc %{_mandir}/man1/node.1*
|
||||
%endif
|
||||
|
||||
%{_bindir}/npm-%{nodejs_pkg_major}
|
||||
%{_bindir}/npx-%{nodejs_pkg_major}
|
||||
%{nodejs_private_sitelib}/npm
|
||||
|
||||
%doc %{_mandir}/nodejs-%{nodejs_pkg_major}/
|
||||
%exclude %doc %{_mandir}/nodejs-%{nodejs_pkg_major}/man1/node.1*
|
||||
|
||||
|
||||
%files -n %{pkgname}-docs
|
||||
%doc doc
|
||||
%dir %{_pkgdocdir}
|
||||
%{_pkgdocdir}/html
|
||||
%{_pkgdocdir}/npm/docs
|
||||
|
||||
|
||||
%changelog
|
||||
%autochangelog
|
@ -1,10 +0,0 @@
|
||||
summary: Internal Tier1 tests plan
|
||||
discover:
|
||||
how: fmf
|
||||
filter: 'tier: 1'
|
||||
url: https://pkgs.devel.redhat.com/git/tests/nodejs
|
||||
execute:
|
||||
how: tmt
|
||||
adjust:
|
||||
enabled: false
|
||||
when: distro == centos-stream or distro == fedora
|
3
sources
3
sources
@ -1,3 +0,0 @@
|
||||
SHA512 (node-v20.11.0-stripped.tar.gz) = e17820f56e05f9a926876143a2fb75de6f6ecf49b1267d88309fba44e88f7bfcb84c37127feef30fb99d0b0035a3831e00bc0c12d78d70cfd0eaf957f2e447c9
|
||||
SHA512 (icu4c-73_2-data-bin-b.zip) = 8512947da7b2a927627abed6bd7e04218cd4fcd02d44eb72a82ffa87aedabfc3be5d3152e9fba33a769ef35e2db55764c2ab8f5bd65b4e89aa9c15b33392e078
|
||||
SHA512 (icu4c-73_2-data-bin-l.zip) = 420c2f5090927dab13f5449da3b0ec7bf86a91ea8723f177aca2907a8eea9bcb4c3475b66c54355ae320001813db57a00afdab00bd85b8c36d39adedcab80bfc
|
Loading…
Reference in New Issue
Block a user