Multiarch search path, arch triplet, DFHS path for modules
authorBastien ROUCARIÈS <roucaries.bastien@gmail.com>
Fri, 6 Jan 2023 20:15:20 +0000 (20:15 +0000)
committerJérémy Lal <kapouer@melix.org>
Fri, 6 Jan 2023 20:15:20 +0000 (20:15 +0000)
Last-Update: 2018-09-30
Last-Update: 2020-03-04
Forwarded: https://github.com/nodejs/node/issues/22745
Reviewed-By: Xavier Guimard <yadd@debian.org>
Gbp-Pq: Topic dfsg
Gbp-Pq: Name multilib_modules.patch

configure.py
lib/internal/modules/cjs/loader.js
test/parallel/test-module-loading-globalpaths.js

index 29437179ccc8f40a9a3d019c30739d023a9da9f7..1f504c388e28fb6e3bd9af9eb7b166d2c793bf71 100755 (executable)
@@ -95,6 +95,12 @@ parser.add_argument('--coverage',
     default=None,
     help='Build node with code coverage enabled')
 
+parser.add_argument('--arch-triplet',
+    action='store',
+    dest='arch_triplet',
+    default=None,
+    help='arch triplet used by distro')
+
 parser.add_argument('--debug',
     action='store_true',
     dest='debug',
@@ -142,6 +148,13 @@ parser.add_argument('--gdb',
     default=None,
     help='add gdb support')
 
+parser.add_argument('--node-relative-path',
+    action='store',
+    dest='node_relative_path',
+    default=None,
+    help='Node path(s) used by require, resolved relative to prefix dir.')
+
+
 parser.add_argument('--no-ifaddrs',
     action='store_true',
     dest='no_ifaddrs',
@@ -1477,6 +1490,17 @@ def configure_napi(output):
   version = getnapibuildversion.get_napi_version()
   output['variables']['napi_build_version'] = version
 
+def configure_debian(output):
+  if options.arch_triplet:
+    output['variables']['arch_triplet'] = options.arch_triplet
+  else:
+    output['variables']['arch_triplet'] = 'unknown-unknown-unknown'
+
+  if options.node_relative_path:
+    output['variables']['node_relative_path'] = options.node_relative_path
+  else:
+    output['variables']['node_relative_path']= ''
+
 def configure_library(lib, output, pkgname=None):
   shared_lib = 'shared_' + lib
   output['variables']['node_' + shared_lib] = b(getattr(options, shared_lib))
@@ -2053,6 +2077,7 @@ flavor = GetFlavor(flavor_params)
 configure_node(output)
 configure_node_lib_files(output)
 configure_napi(output)
+configure_debian(output)
 configure_library('zlib', output)
 configure_library('http_parser', output)
 configure_library('libuv', output)
index 33bc7f28a41c6c40face8f493d07d3c0061608a7..0a36fb913064b7114b9e5c428bc1025a83bca208 100644 (file)
@@ -1346,6 +1346,7 @@ Module.createRequire = createRequire;
 Module._initPaths = function() {
   const homeDir = isWindows ? process.env.USERPROFILE : safeGetenv('HOME');
   const nodePath = isWindows ? process.env.NODE_PATH : safeGetenv('NODE_PATH');
+  const relativePaths = process.config.variables.node_relative_path;
 
   // process.execPath is $PREFIX/bin/node except on Windows where it is
   // $PREFIX\node.exe where $PREFIX is the root of the Node.js installation.
@@ -1353,7 +1354,18 @@ Module._initPaths = function() {
     path.resolve(process.execPath, '..') :
     path.resolve(process.execPath, '..', '..');
 
-  const paths = [path.resolve(prefixDir, 'lib', 'node')];
+  const postDirs = [];
+  if (relativePaths) {
+    relativePaths.split(path.delimiter).map(path => {
+      if (path) postDirs.push(path);
+    });
+  } else {
+    postDirs.push(path.join('lib', 'node'));
+  }
+
+  const paths = postDirs.map(postDir => {
+    return path.resolve(prefixDir, postDir);
+  });
 
   if (homeDir) {
     ArrayPrototypeUnshift(paths, path.resolve(homeDir, '.node_libraries'));
index 5d6a104f29c9d719a17028f09f06717eb1aaaa56..198cacbbaab63b15104f11f8d2843743433a4e53 100644 (file)
@@ -71,12 +71,12 @@ if (process.argv[2] === 'child') {
   env.HOME = env.USERPROFILE = bothHomeDir;
   runTest('$HOME/.node_modules', env);
 
-  // Test module in $PREFIX/lib/node.
-  // Write module into $PREFIX/lib/node.
-  const expectedString = '$PREFIX/lib/node';
-  const prefixLibPath = path.join(prefixPath, 'lib');
+  // Test module in $PREFIX/share/node.
+  // Write module into $PREFIX/share/node.
+  const expectedString = '$PREFIX/share/nodejs';
+  const prefixLibPath = path.join(prefixPath, 'share');
   fs.mkdirSync(prefixLibPath);
-  const prefixLibNodePath = path.join(prefixLibPath, 'node');
+  const prefixLibNodePath = path.join(prefixLibPath, 'nodejs');
   fs.mkdirSync(prefixLibNodePath);
   const pkgPath = path.join(prefixLibNodePath, `${pkgName}.js`);
   fs.writeFileSync(pkgPath, `exports.string = '${expectedString}';`);