## ## node16.spec -- OpenPKG RPM Package Specification ## Copyright (c) 2000-2022 OpenPKG Project ## ## 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 16.13.2 %define V_dist 16.13.2 # package information Name: node16 Summary: Node JavaScript Run-Time (V16) 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: node16.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 (V16) 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 9.4.146.24. %track prog node16 = { version = %{V_dist} url = https://nodejs.org/download/release/ regex = v(16\.\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/v8/include" cflags="$cflags -I`pwd`/deps/uv/include" cflags="$cflags -I`pwd`/deps/cares/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 openssl11 .}" \ LDFLAGS="%{l_ldflags openssl11 .}" \ LIBS="$libs" \ %{l_prefix}/bin/python ./configure \ --prefix=%{l_prefix} \ --shared-openssl \ --shared-openssl-includes=%{l_prefix}/include/openssl11 \ --shared-openssl-libpath=%{l_prefix}/lib/openssl11 \ --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/node16 mv $RPM_BUILD_ROOT%{l_prefix}/bin/node \ $RPM_BUILD_ROOT%{l_prefix}/libexec/node16/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/node16 mv $RPM_BUILD_ROOT%{l_prefix}/include/node \ $RPM_BUILD_ROOT%{l_prefix}/include/node16 mv $RPM_BUILD_ROOT%{l_prefix}/man/man1/node.1 \ $RPM_BUILD_ROOT%{l_prefix}/man/man1/node16.1 %if "%{with_node}" == "yes" # shim as Node ln -s node16 $RPM_BUILD_ROOT%{l_prefix}/bin/node ln -s node16 $RPM_BUILD_ROOT%{l_prefix}/include/node ln -s node16.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