[Pkg-javascript-devel] Bug#901474: [nodejs][RFC] Multiarch and /usr/local search path
Bastien ROUCARIÈS
roucaries.bastien at gmail.com
Wed Jun 13 21:09:52 BST 2018
Package: nodejs
Version: 10.4.0~dfsg-2
Severity: important
tags: patch
Hi,
In order to get search path in multiarch path and in /usr/local I use the following patch
/usr/local part will allow to satisfy policy 9.1.2 and the other part to get node package multiarch like perl or python.
I think this patch could be upstreamed if needed
search order is :
usr/local/lib/$(DEB_HOST_MULTIARCH)/nodejs:/usr/local/share/nodejs:/usr/local/lib/nodejs:/usr/lib/$(DEB_HOST_MULTIARCH)/nodejs:/usr/share/nodejs:/usr/lib/nodejs
note that /usr/lib/nodejs will tested last.
You could check the patch by doing require('os').constants and see
ARCH_TRIPLET: 'x86_64-linux-gnu',
GLOBAL_NODE_PATH:
'/usr/local/lib/x86_64-linux-gnu/nodejs:/usr/local/share/nodejs:/usr/local/lib/nodejs:/usr/lib/x86_64-linux-gnu/nodejs:/usr/share/nodejs:/usr/lib/nodejs',
then checking the load path by:
require('module')
and see the array globalPaths:
lobalPaths:
[ '/home/bastien/.node_modules',
'/home/bastien/.node_libraries',
'/usr/local/lib/x86_64-linux-gnu/nodejs',
'/usr/local/share/nodejs',
'/usr/local/lib/nodejs',
'/usr/lib/x86_64-linux-gnu/nodejs',
'/usr/share/nodejs',
'/usr/lib/nodejs' ],
I have also added arch triplet because some module will need it.
Bastien
diff --git a/debian/patches/pass-arch-dir-to-constants b/debian/patches/pass-arch-dir-to-constants
new file mode 100644
index 00000000..b12f0f4e
--- /dev/null
+++ b/debian/patches/pass-arch-dir-to-constants
@@ -0,0 +1,51 @@
+Index: nodejs/src/node_constants.cc
+===================================================================
+--- nodejs.orig/src/node_constants.cc
++++ nodejs/src/node_constants.cc
+@@ -1309,6 +1309,15 @@ void DefineConstants(v8::Isolate* isolat
+ NODE_DEFINE_CONSTANT(fs_constants, UV_FS_COPYFILE_FICLONE);
+ NODE_DEFINE_CONSTANT(fs_constants, UV_FS_COPYFILE_FICLONE_FORCE);
+
++ // Define arch triplet
++#ifdef DEBIAN_ARCH_TRIPLET
++ NODE_DEFINE_STRING_CONSTANT(os_constants, "ARCH_TRIPLET", DEBIAN_ARCH_TRIPLET);
++#endif
++
++#ifdef DEBIAN_GLOBAL_NODE_PATH
++ NODE_DEFINE_STRING_CONSTANT(os_constants, "GLOBAL_NODE_PATH", DEBIAN_GLOBAL_NODE_PATH);
++#endif
++
+ os_constants->Set(OneByteString(isolate, "dlopen"), dlopen_constants);
+ os_constants->Set(OneByteString(isolate, "errno"), err_constants);
+ os_constants->Set(OneByteString(isolate, "signals"), sig_constants);
+Index: nodejs/lib/internal/modules/cjs/loader.js
+===================================================================
+--- nodejs.orig/lib/internal/modules/cjs/loader.js
++++ nodejs/lib/internal/modules/cjs/loader.js
+@@ -26,6 +26,7 @@ const util = require('util');
+ const vm = require('vm');
+ const assert = require('assert').ok;
+ const fs = require('fs');
++const GLOBAL_NODE_PATH = (require("os").constants).GLOBAL_NODE_PATH;
+ const internalFS = require('internal/fs/utils');
+ const path = require('path');
+ const {
+@@ -768,7 +769,17 @@ Module._initPaths = function() {
+ } else {
+ prefixDir = path.resolve(process.execPath, '..', '..');
+ }
+- var paths = [path.resolve(prefixDir, 'lib', 'nodejs')];
++ var paths = [];
++ // prefer /usr/local over /usr and arch over all
++
++ if (GLOBAL_NODE_PATH) {
++ paths = GLOBAL_NODE_PATH.split(path.delimiter).filter(function pathsFilterCB(path) {
++ return !!path;
++ }).concat(paths);
++ }
++ else {
++ paths.push(path.resolve('/usr','lib','nodejs'));
++ }
+
+ if (homeDir) {
+ paths.unshift(path.resolve(homeDir, '.node_libraries'));
diff --git a/debian/patches/series b/debian/patches/series
index cd794b90..b35d3b3e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -8,3 +8,4 @@ build-doc-using-js-yaml.patch
test_ci_buildd.patch
fix_disable_cctest.patch
benchmark_without_alice.patch
+pass-arch-dir-to-constants
diff --git a/debian/rules b/debian/rules
index a9014f81..c0f3a53b 100755
--- a/debian/rules
+++ b/debian/rules
@@ -188,6 +188,13 @@ CPPFLAGS+=-fPIC
CFLAGS+=-g
CPPFLAGS+=-g
CXXFLAGS+=$(CPPFLAGS)
+
+GLOBAL_NODE_PATH= /usr/local/lib/$(DEB_HOST_MULTIARCH)/nodejs:/usr/local/share/nodejs:/usr/local/lib/nodejs
+GLOBAL_NODE_PATH:= $(GLOBAL_NODE_PATH):/usr/lib/$(DEB_HOST_MULTIARCH)/nodejs:/usr/share/nodejs:/usr/lib/nodejs
+
+CFLAGS+=-DDEBIAN_ARCH_TRIPLET=\"$(DEB_HOST_MULTIARCH)\" -DDEBIAN_GLOBAL_NODE_PATH=\"$(GLOBAL_NODE_PATH)\"
+CPPFLAGS+=-DDEBIAN_ARCH_TRIPLET=\"$(DEB_HOST_MULTIARCH)\" -DDEBIAN_GLOBAL_NODE_PATH=\"$(GLOBAL_NODE_PATH)\"
+CXXFLAGS+=-DDEBIAN_ARCH_TRIPLET=\"$(DEB_HOST_MULTIARCH)\" -DDEBIAN_GLOBAL_NODE_PATH=\"$(GLOBAL_NODE_PATH)\"
export CPPFLAGS
export CXXFLAGS
export CFLAGS
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <http://alioth-lists.debian.net/pipermail/pkg-javascript-devel/attachments/20180613/2b4f9316/attachment.sig>
More information about the Pkg-javascript-devel
mailing list