You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

198 lines
6.4 KiB

##
## node14.spec -- OpenPKG RPM Package Specification
## Copyright (c) 2000-2022 OpenPKG Project <http://openpkg.org/>
##
## Permission to use, copy, modify, and distribute this software for
## any purpose with or without fee is hereby granted, provided that
## the above copyright notice and this permission notice appear in all
## copies.
##
## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##
# package version
%define V_opkg 14.18.3
%define V_dist 14.18.3
# package information
Name: node14
Summary: Node JavaScript Run-Time (V14)
URL: http://nodejs.org/
Vendor: Node Foundation
Packager: OpenPKG Project
Distribution: OpenPKG Community
Class: PLUS
Group: Web
License: MIT/BSD
Version: %{V_opkg}
Release: 20220111
# package options
%option with_icu yes
%option with_node no
# list of sources
Source0: https://nodejs.org/download/release/v%{V_dist}/node-v%{V_dist}.tar.xz
Source1: node.c
Patch0: node14.patch
# build information
BuildPreReq: OpenPKG, openpkg >= 20160101, make, gcc, gcc::with_cxx = yes, python, pkgconfig
PreReq: OpenPKG, openpkg >= 20160101
BuildPreReq: openssl, libexecinfo, zlib, libuv, nghttp2
PreReq: openssl, libexecinfo, zlib, libuv, nghttp2
%if "%{with_icu}" == "yes"
BuildPreReq: icu
PreReq: icu
%endif
%if "%{with_node}" == "yes"
Provides: node = %{version}
%endif
%description
Node.js (V14) provides an easy way to build scalable network
servers in JavaScript. It is an event-driven I/O environment based
on Google V8 JavaScript virtual machine version 8.4.371.23.
%track
prog node14 = {
version = %{V_dist}
url = https://nodejs.org/download/release/
regex = v(14\.\d+\.\d+)/
}
%prep
%setup -q -n node-v%{V_dist}
%patch -p0
%build
# provide local tool wrapper scripts as we cannot
# reliably pass the includes via configure variables
cflags="-I`pwd`/deps/v8"
cflags="$cflags -I`pwd`/deps/uv/include"
cflags="$cflags -I`pwd`/deps/v8/include"
%if "%{with_icu}" != "yes"
cflags="$cflags -I`pwd`/deps/icu-small/source/common"
%endif
cflags="$cflags -I`pwd`/deps/llhttp/include"
cflags="$cflags -I`pwd`/deps/http_parser"
cflags="$cflags -I`pwd`/deps/cares"
cflags="$cflags -I`pwd`/deps/cares/include"
cflags="$cflags -I`pwd`/deps/cares/src/lib"
cflags="$cflags %{l_cppflags}"
ldflags="%{l_ldflags}"
mkdir tool
for tool in gcc g++ c%{l_nil}c c++; do
( echo "#!/bin/sh"
echo "exec %{l_prefix}/bin/$tool $cflags $ldflags \${1+\"\$@\"}"
) >tool/$tool
chmod a+x tool/$tool
done
PATH="`pwd`/tool:$PATH"
# configure program
libs="-lexecinfo -lz"
case "%{l_platform -t} " in
*-linux* ) libs="$libs -ldl" ;;
esac
CC="gcc" \
CXX="g++" \
CFLAGS="%{l_cflags -O}" \
CXXFLAGS="%{l_cxxflags -O} -Wno-deprecated-declarations" \
CPPFLAGS="%{l_cppflags}" \
LDFLAGS="%{l_ldflags}" \
LIBS="$libs" \
%{l_prefix}/bin/python ./configure \
--prefix=%{l_prefix} \
--shared-openssl \
--shared-openssl-includes=%{l_prefix}/include \
--shared-openssl-libpath=%{l_prefix}/lib \
--shared-openssl-libname="ssl,crypto" \
--shared-zlib \
--shared-zlib-includes=%{l_prefix}/include \
--shared-zlib-libpath=%{l_prefix}/lib \
--shared-zlib-libname="z" \
--shared-libuv \
--shared-libuv-includes=%{l_prefix}/include \
--shared-libuv-libpath=%{l_prefix}/lib \
--shared-libuv-libname="uv" \
--shared-nghttp2 \
--shared-nghttp2-includes=%{l_prefix}/include \
--shared-nghttp2-libpath=%{l_prefix}/lib \
--shared-nghttp2-libname="nghttp2" \
%if "%{with_icu}" == "yes"
--with-intl=system-icu \
%else
--with-intl=small-icu \
%endif
--with-snapshot \
--without-npm \
--download=none
# build program
%{l_make} %{l_mflags -O}
# build wrapper
%{l_cc} %{l_cflags -O} %{l_cppflags} -DPREFIX="\"%{l_prefix}\"" %{l_ldflags} \
-o node-wrapper %{SOURCE node.c}
%install
# install program
( PATH="`pwd`/tool:$PATH"
%{l_make} %{l_mflags} install DESTDIR=$RPM_BUILD_ROOT
) || exit $?
# install wrapper
%{l_shtool} mkdir -f -p -m 755 \
$RPM_BUILD_ROOT%{l_prefix}/libexec/node14
mv $RPM_BUILD_ROOT%{l_prefix}/bin/node \
$RPM_BUILD_ROOT%{l_prefix}/libexec/node14/node
%{l_shtool} install -c -s -m 755 \
node-wrapper $RPM_BUILD_ROOT%{l_prefix}/bin/node
# post-installation strip-down
strip $RPM_BUILD_ROOT%{l_prefix}/bin/* >/dev/null 2>&1 || true
rm -rf $RPM_BUILD_ROOT%{l_prefix}/lib/dtrace
rm -rf $RPM_BUILD_ROOT%{l_prefix}/share/systemtap
rm -rf $RPM_BUILD_ROOT%{l_prefix}/share/doc
%if "%{with_node}" == "yes"
# create NPM package installation areas
%{l_shtool} mkdir -f -p -m 755 \
$RPM_BUILD_ROOT%{l_prefix}/lib/node/usr \
$RPM_BUILD_ROOT%{l_prefix}/lib/node/pkg
%endif
# post-adjust installation
mv $RPM_BUILD_ROOT%{l_prefix}/bin/node \
$RPM_BUILD_ROOT%{l_prefix}/bin/node14
mv $RPM_BUILD_ROOT%{l_prefix}/include/node \
$RPM_BUILD_ROOT%{l_prefix}/include/node14
mv $RPM_BUILD_ROOT%{l_prefix}/man/man1/node.1 \
$RPM_BUILD_ROOT%{l_prefix}/man/man1/node14.1
%if "%{with_node}" == "yes"
# shim as Node
ln -s node14 $RPM_BUILD_ROOT%{l_prefix}/bin/node
ln -s node14 $RPM_BUILD_ROOT%{l_prefix}/include/node
ln -s node14.1 $RPM_BUILD_ROOT%{l_prefix}/man/man1/node.1
%endif
# determine installation files
%{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT %{l_files_std}
%files -f files
%clean