Browse Source

new package

Ralf S. Engelschall 8 years ago
parent
commit
147a857207
3 changed files with 576 additions and 0 deletions
  1. 29 0
      node9/node.c
  2. 349 0
      node9/node9.patch
  3. 198 0
      node9/node9.spec

+ 29 - 0
node9/node.c

@@ -0,0 +1,29 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#define NAME  "node8"
+
+#define WRAP  PREFIX "/bin/" NAME
+#define REAL  PREFIX "/libexec/" NAME "/node"
+
+int main(int argn, char **argv)
+{
+    char *path;
+
+    argv[0] = REAL;
+    if ((path = getenv("NODE")) != NULL)
+        if (strcmp(path, NAME) != 0 && strcmp(path, WRAP) != 0)
+            argv[0] = path;
+
+    if (execvp(argv[0], argv) == -1) {
+        fprintf(stderr, "node: ERROR: failed to execute \"%s\": %s\n", argv[0], strerror(errno));
+        exit(1);
+    }
+
+    return 0;
+}
+

+ 349 - 0
node9/node9.patch

@@ -0,0 +1,349 @@
+Index: common.gypi
+--- common.gypi.orig	2017-04-14 00:05:07.000000000 +0200
++++ common.gypi	2017-04-15 18:34:09.741881000 +0200
+@@ -283,7 +283,7 @@
+         'ldflags': [ '-pthread' ],
+       }],
+       [ 'OS in "linux freebsd openbsd solaris android aix"', {
+-        'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', ],
++        'cflags': [ '-Wno-unused-parameter', ],
+         'cflags_cc': [ '-fno-rtti', '-fno-exceptions', '-std=gnu++0x' ],
+         'ldflags': [ '-rdynamic' ],
+         'target_conditions': [
+@@ -374,10 +374,7 @@
+             '-fno-strict-aliasing',
+           ],
+           'WARNING_CFLAGS': [
+-            '-Wall',
+-            '-Wendif-labels',
+-            '-W',
+-            '-Wno-unused-parameter',
++            '-Wno-unused-parameter'
+           ],
+         },
+         'target_conditions': [
+Index: deps/uv/uv.gyp
+--- deps/uv/uv.gyp.orig	2017-04-14 00:05:14.000000000 +0200
++++ deps/uv/uv.gyp	2017-04-15 18:34:09.742197000 +0200
+@@ -167,7 +167,7 @@
+             'src/unix/udp.c',
+           ],
+           'link_settings': {
+-            'libraries': [ '-lm' ],
++            'libraries': [ '-lz', '-lm' ],
+             'conditions': [
+               ['OS=="solaris"', {
+                 'ldflags': [ '-pthreads' ],
+Index: deps/v8/gypfiles/toolchain.gypi
+--- deps/v8/gypfiles/toolchain.gypi.orig	2017-04-14 00:05:14.000000000 +0200
++++ deps/v8/gypfiles/toolchain.gypi	2017-04-15 18:34:09.742615000 +0200
+@@ -1099,12 +1099,6 @@
+       ['OS=="solaris"', {
+         'defines': [ '__C99FEATURES__=1' ],  # isinf() etc.
+       }],
+-      ['OS=="freebsd" or OS=="openbsd"', {
+-        'cflags': [ '-I/usr/local/include' ],
+-      }],
+-      ['OS=="netbsd"', {
+-        'cflags': [ '-I/usr/pkg/include' ],
+-      }],
+       ['OS=="aix"', {
+         'defines': [
+           # Support for malloc(0)
+Index: deps/v8/src/base/platform/platform-freebsd.cc
+--- deps/v8/src/base/platform/platform-freebsd.cc.orig	2017-04-14 00:05:14.000000000 +0200
++++ deps/v8/src/base/platform/platform-freebsd.cc	2017-04-15 18:34:09.742861000 +0200
+@@ -25,6 +25,7 @@
+ #include <strings.h>    // index
+ 
+ #include <cmath>
++#include <cstdio>
+ 
+ #undef MAP_TYPE
+ 
+Index: deps/v8/src/log-utils.cc
+--- deps/v8/src/log-utils.cc.orig	2017-04-14 00:05:16.000000000 +0200
++++ deps/v8/src/log-utils.cc	2017-04-15 18:34:09.743084000 +0200
+@@ -2,6 +2,9 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+ 
++#include <stdio.h>
++#include <stdlib.h>
++
+ #include "src/log-utils.h"
+ 
+ #include "src/assert-scope.h"
+Index: deps/v8/src/log-utils.h
+--- deps/v8/src/log-utils.h.orig	2017-04-14 00:05:16.000000000 +0200
++++ deps/v8/src/log-utils.h	2017-04-15 18:34:09.743281000 +0200
+@@ -9,6 +9,7 @@
+ 
+ #include <cstdarg>
+ 
++#include <stdarg.h>
+ #include "src/allocation.h"
+ #include "src/base/compiler-specific.h"
+ #include "src/base/platform/mutex.h"
+Index: deps/v8/src/runtime/runtime-i18n.cc
+--- deps/v8/src/runtime/runtime-i18n.cc.orig	2017-04-14 00:05:17.000000000 +0200
++++ deps/v8/src/runtime/runtime-i18n.cc	2017-04-15 18:34:09.743647000 +0200
+@@ -44,6 +44,7 @@
+ #include "unicode/unistr.h"
+ #include "unicode/unum.h"
+ #include "unicode/uversion.h"
++#include "unicode/ustring.h"
+ 
+ 
+ namespace v8 {
+Index: deps/v8/src/v8.gyp
+--- deps/v8/src/v8.gyp.orig	2017-04-14 00:05:17.000000000 +0200
++++ deps/v8/src/v8.gyp	2017-04-15 18:34:09.744250000 +0200
+@@ -1983,7 +1983,7 @@
+         ['OS=="freebsd"', {
+             'link_settings': {
+               'libraries': [
+-                '-L/usr/local/lib -lexecinfo',
++                '-lexecinfo',
+             ]},
+             'sources': [
+               'base/debug/stack_trace_posix.cc',
+@@ -1995,7 +1995,7 @@
+         ['OS=="openbsd"', {
+             'link_settings': {
+               'libraries': [
+-                '-L/usr/local/lib -lexecinfo',
++                '-lexecinfo',
+             ]},
+             'sources': [
+               'base/platform/platform-openbsd.cc',
+@@ -2006,7 +2006,7 @@
+         ['OS=="netbsd"', {
+             'link_settings': {
+               'libraries': [
+-                '-L/usr/pkg/lib -Wl,-R/usr/pkg/lib -lexecinfo',
++                '-lexecinfo',
+             ]},
+             'sources': [
+               'base/debug/stack_trace_posix.cc',
+Index: deps/v8/src/wasm/wasm-result.cc
+--- deps/v8/src/wasm/wasm-result.cc.orig	2017-04-14 00:05:17.000000000 +0200
++++ deps/v8/src/wasm/wasm-result.cc	2017-04-15 18:46:22.019032000 +0200
+@@ -2,6 +2,8 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+ 
++#include <cstdarg>
++
+ #include "src/wasm/wasm-result.h"
+ 
+ #include "src/factory.h"
+Index: lib/dns.js
+--- lib/dns.js.orig	2017-04-14 00:05:31.000000000 +0200
++++ lib/dns.js	2017-04-15 18:34:09.744497000 +0200
+@@ -179,6 +179,10 @@
+   req.hostname = hostname;
+   req.oncomplete = all ? onlookupall : onlookup;
+ 
++  /*  FreeBSD getaddrinfo(3) knows AI_V4MAPPED, but dislikes it  */
++  if (process.platform === "freebsd")
++      hints &= ~(exports.V4MAPPED);
++
+   var err = cares.getaddrinfo(req, hostname, family, hints);
+   if (err) {
+     callback(errnoException(err, 'getaddrinfo', hostname));
+Index: lib/module.js
+--- lib/module.js.orig	2017-04-14 00:05:32.000000000 +0200
++++ lib/module.js	2017-04-15 18:34:09.744755000 +0200
+@@ -664,7 +664,10 @@
+   } else {
+     prefixDir = path.resolve(process.execPath, '..', '..');
+   }
+-  var paths = [path.resolve(prefixDir, 'lib', 'node')];
++  var paths = [
++      path.resolve(prefixDir, '..', 'lib', 'node', 'usr'),
++      path.resolve(prefixDir, '..', 'lib', 'node', 'pkg')
++  ];
+ 
+   if (homeDir) {
+     paths.unshift(path.resolve(homeDir, '.node_libraries'));
+Index: src/inspector_socket_server.cc
+--- src/inspector_socket_server.cc.orig	2017-04-14 00:05:32.000000000 +0200
++++ src/inspector_socket_server.cc	2017-04-15 18:34:09.745029000 +0200
+@@ -14,7 +14,7 @@
+ 
+ namespace {
+ 
+-static const uint8_t PROTOCOL_JSON[] = {
++static uint8_t PROTOCOL_JSON[] = {
+   #include "v8_inspector_protocol_json.h"  // NOLINT(build/include_order)
+ };
+ 
+Index: src/node_constants.cc
+--- src/node_constants.cc.orig	2017-04-14 00:05:32.000000000 +0200
++++ src/node_constants.cc	2017-04-15 18:34:09.745324000 +0200
+@@ -37,10 +37,10 @@
+ #include <limits>
+ 
+ #if HAVE_OPENSSL
+-# include <openssl/ec.h>
+-# include <openssl/ssl.h>
++# include "openssl/ec.h"
++# include "openssl/ssl.h"
+ # ifndef OPENSSL_NO_ENGINE
+-#  include <openssl/engine.h>
++#  include "openssl/engine.h"
+ # endif  // !OPENSSL_NO_ENGINE
+ #endif
+ 
+Index: src/node_crypto.cc
+--- src/node_crypto.cc.orig	2017-04-14 00:05:32.000000000 +0200
++++ src/node_crypto.cc	2017-04-15 18:34:09.746270000 +0200
+@@ -50,6 +50,8 @@
+ #include <stdlib.h>
+ #include <string.h>
+ 
++#include <cmath>
++
+ #define THROW_AND_RETURN_IF_NOT_STRING_OR_BUFFER(val, prefix)                  \
+   do {                                                                         \
+     if (!Buffer::HasInstance(val) && !val->IsString()) {                       \
+@@ -5512,7 +5514,7 @@
+   }
+ 
+   raw_keylen = args[3]->NumberValue();
+-  if (raw_keylen < 0.0 || isnan(raw_keylen) || isinf(raw_keylen) ||
++  if (raw_keylen < 0.0 || std::isnan(raw_keylen) || std::isinf(raw_keylen) ||
+       raw_keylen > INT_MAX) {
+     type_error = "Bad key length";
+     goto err;
+Index: src/node_crypto.h
+--- src/node_crypto.h.orig	2017-04-14 00:05:32.000000000 +0200
++++ src/node_crypto.h	2017-04-15 18:34:09.746542000 +0200
+@@ -38,20 +38,20 @@
+ 
+ #include "v8.h"
+ 
+-#include <openssl/ssl.h>
+-#include <openssl/ec.h>
+-#include <openssl/ecdh.h>
++#include "openssl/ssl.h"
++#include "openssl/ec.h"
++#include "openssl/ecdh.h"
+ #ifndef OPENSSL_NO_ENGINE
+-# include <openssl/engine.h>
++# include "openssl/engine.h"
+ #endif  // !OPENSSL_NO_ENGINE
+-#include <openssl/err.h>
+-#include <openssl/evp.h>
+-#include <openssl/pem.h>
+-#include <openssl/x509.h>
+-#include <openssl/x509v3.h>
+-#include <openssl/hmac.h>
+-#include <openssl/rand.h>
+-#include <openssl/pkcs12.h>
++#include "openssl/err.h"
++#include "openssl/evp.h"
++#include "openssl/pem.h"
++#include "openssl/x509.h"
++#include "openssl/x509v3.h"
++#include "openssl/hmac.h"
++#include "openssl/rand.h"
++#include "openssl/pkcs12.h"
+ 
+ #define EVP_F_EVP_DECRYPTFINAL 101
+ 
+Index: src/node_internals.h
+--- src/node_internals.h.orig	2017-04-14 00:05:32.000000000 +0200
++++ src/node_internals.h	2017-04-15 18:34:09.746749000 +0200
+@@ -150,6 +150,7 @@
+ # define ROUND_UP(a, b) ((a) % (b) ? ((a) + (b)) - ((a) % (b)) : (a))
+ #endif
+ 
++# undef MUST_USE_RESULT
+ #ifdef __GNUC__
+ # define MUST_USE_RESULT __attribute__((warn_unused_result))
+ #else
+Index: src/tls_wrap.h
+--- src/tls_wrap.h.orig	2017-04-14 00:05:33.000000000 +0200
++++ src/tls_wrap.h	2017-04-15 18:34:09.746949000 +0200
+@@ -33,7 +33,7 @@
+ #include "util.h"
+ #include "v8.h"
+ 
+-#include <openssl/ssl.h>
++#include "openssl/ssl.h"
+ 
+ namespace node {
+ 
+Index: src/util.h
+--- src/util.h.orig	2017-04-14 00:05:33.000000000 +0200
++++ src/util.h	2017-04-15 18:34:09.747203000 +0200
+@@ -84,9 +84,11 @@
+ 
+ template <typename T> using remove_reference = std::remove_reference<T>;
+ 
++#undef  FIXED_ONE_BYTE_STRING
+ #define FIXED_ONE_BYTE_STRING(isolate, string)                                \
+   (node::OneByteString((isolate), (string), sizeof(string) - 1))
+ 
++#undef DISALLOW_COPY_AND_ASSIGN
+ #define DISALLOW_COPY_AND_ASSIGN(TypeName)                                    \
+   void operator=(const TypeName&) = delete;                                   \
+   void operator=(TypeName&&) = delete;                                        \
+@@ -132,12 +134,19 @@
+ #define CHECK assert
+ #endif
+ 
++#undef ASSERT
+ #ifdef NDEBUG
+ #define ASSERT(expr)
+ #else
+ #define ASSERT(expr) CHECK(expr)
+ #endif
+ 
++#undef ASSERT_EQ
++#undef ASSERT_GE
++#undef ASSERT_GT
++#undef ASSERT_LE
++#undef ASSERT_LT
++#undef ASSERT_NE
+ #define ASSERT_EQ(a, b) ASSERT((a) == (b))
+ #define ASSERT_GE(a, b) ASSERT((a) >= (b))
+ #define ASSERT_GT(a, b) ASSERT((a) > (b))
+@@ -145,13 +154,20 @@
+ #define ASSERT_LT(a, b) ASSERT((a) < (b))
+ #define ASSERT_NE(a, b) ASSERT((a) != (b))
+ 
++#undef  CHECK_EQ
+ #define CHECK_EQ(a, b) CHECK((a) == (b))
++#undef  CHECK_GE
+ #define CHECK_GE(a, b) CHECK((a) >= (b))
++#undef  CHECK_GT
+ #define CHECK_GT(a, b) CHECK((a) > (b))
++#undef  CHECK_LE
+ #define CHECK_LE(a, b) CHECK((a) <= (b))
++#undef  CHECK_LT
+ #define CHECK_LT(a, b) CHECK((a) < (b))
++#undef  CHECK_NE
+ #define CHECK_NE(a, b) CHECK((a) != (b))
+ 
++#undef  UNREACHABLE
+ #define UNREACHABLE() ABORT()
+ 
+ #define ASSIGN_OR_RETURN_UNWRAP(ptr, obj, ...)                                \
+Index: tools/install.py
+--- tools/install.py.orig	2017-04-14 00:05:40.000000000 +0200
++++ tools/install.py	2017-04-15 18:34:09.747417000 +0200
+@@ -136,10 +136,7 @@
+   action(['deps/v8/tools/lldbinit'], 'share/doc/node/')
+   action(['deps/v8/tools/lldb_commands.py'], 'share/doc/node/')
+ 
+-  if 'freebsd' in sys.platform or 'openbsd' in sys.platform:
+-    action(['doc/node.1'], 'man/man1/')
+-  else:
+-    action(['doc/node.1'], 'share/man/man1/')
++  action(['doc/node.1'], 'man/man1/')
+ 
+   if 'true' == variables.get('node_install_npm'): npm_files(action)
+ 

+ 198 - 0
node9/node9.spec

@@ -0,0 +1,198 @@
+##
+##  node9.spec -- OpenPKG RPM Package Specification
+##  Copyright (c) 2000-2017 OpenPKG Foundation e.V. <http://openpkg.net/>
+##
+##  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_snap_base  9.0.0
+%define       V_snap_type  nightly
+%define       V_snap_date  20170602
+%define       V_snap_hash  1609899142
+%define       V_opkg       %{V_snap_base}.%{V_snap_date}
+%define       V_dist       %{V_snap_base}-%{V_snap_type}%{V_snap_date}%{V_snap_hash}
+
+#   package information
+Name:         node9
+Summary:      Node JavaScript Run-Time (V9)
+URL:          http://nodejs.org/
+Vendor:       Node Foundation
+Packager:     OpenPKG Foundation e.V.
+Distribution: OpenPKG Community
+Class:        PLUS
+Group:        Web
+License:      MIT/BSD
+Version:      %{V_opkg}
+Release:      20170603
+
+#   package options
+%option       with_icu   yes
+%option       with_node  no
+
+#   list of sources
+Source0:      https://nodejs.org/download/%{V_snap_type}/v%{V_dist}/node-v%{V_dist}.tar.xz
+Source1:      node.c
+Patch0:       node9.patch
+
+#   build information
+BuildPreReq:  OpenPKG, openpkg >= 20160101, make, gcc >= 5.2, gcc::with_cxx = yes, python, pkgconfig
+PreReq:       OpenPKG, openpkg >= 20160101
+BuildPreReq:  openssl >= 1.0.2, libexecinfo, zlib, ares, http-parser
+PreReq:       openssl >= 1.0.2, libexecinfo, zlib, ares, http-parser
+%if "%{with_icu}" == "yes"
+BuildPreReq:  icu
+PreReq:       icu
+%endif
+%if "%{with_node}" == "yes"
+Provides:     node = %{version}
+%endif
+
+%description
+    Node.js (V9) 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 5.8.283.41.
+
+%track
+    prog node9:base = {
+        version   = %{V_snap_base}
+        url       = https://nodejs.org/download/%{V_snap_type}/
+        regex     = v(\d+\.\d+\.\d+)-%{V_snap_type}\d{8}[\da-f]{10}/
+    }
+    prog node9:date = {
+        version   = %{V_snap_date}
+        url       = https://nodejs.org/download/%{V_snap_type}/
+        regex     = v\d+\.\d+\.\d+-%{V_snap_type}(\d{8})[\da-f]{10}/
+    }
+    prog node9:hash = {
+        version   = %{V_snap_hash}
+        url       = https://nodejs.org/download/%{V_snap_type}/
+        regex     = v\d+\.\d+\.\d+-%{V_snap_type}\d{8}([\da-f]{10})/
+    }
+
+%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
+    includes="-I`pwd`/deps/v8_inspector -I`pwd`/deps/v8_inspector/include"
+    includes="$includes -I`pwd`/deps/v8 -I`pwd`/deps/v8/include"
+    includes="$includes %{l_cppflags}"
+    mkdir tool
+    for tool in gcc g++ c%{l_nil}c c++; do
+        ( echo "#!/bin/sh"
+          echo "exec %{l_prefix}/bin/$tool $includes \${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-http-parser \
+        --shared-http-parser-includes=%{l_prefix}/include \
+        --shared-http-parser-libpath=%{l_prefix}/lib \
+        --shared-http-parser-libname="http_parser" \
+        --shared-cares \
+        --shared-cares-includes=%{l_prefix}/include \
+        --shared-cares-libpath=%{l_prefix}/lib \
+        --shared-cares-libname="ares" \
+%if "%{with_icu}" == "yes"
+        --with-intl=system-icu \
+%else
+        --with-intl=small-icu \
+%endif
+        --without-npm
+
+    #   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
+    %{l_make} %{l_mflags} install DESTDIR=$RPM_BUILD_ROOT
+
+    #   install wrapper
+    %{l_shtool} mkdir -f -p -m 755 \
+        $RPM_BUILD_ROOT%{l_prefix}/libexec/node9
+    mv  $RPM_BUILD_ROOT%{l_prefix}/bin/node \
+        $RPM_BUILD_ROOT%{l_prefix}/libexec/node9/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/node9
+    mv  $RPM_BUILD_ROOT%{l_prefix}/include/node \
+        $RPM_BUILD_ROOT%{l_prefix}/include/node9
+    mv  $RPM_BUILD_ROOT%{l_prefix}/man/man1/node.1 \
+        $RPM_BUILD_ROOT%{l_prefix}/man/man1/node9.1
+
+%if "%{with_node}" == "yes"
+    #   shim as Node
+    ln -s node9   $RPM_BUILD_ROOT%{l_prefix}/bin/node
+    ln -s node9   $RPM_BUILD_ROOT%{l_prefix}/include/node
+    ln -s node9.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
+