From bbb06de7f7c4e3223688bda188d3280353b4e110 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bastien=20ROUCARI=C3=88S?= Date: Fri, 8 Nov 2024 20:05:21 +0100 Subject: [PATCH] Multiarch search path, arch triplet, DFHS path for modules Last-Update: 2018-09-30 Last-Update: 2020-03-04 Forwarded: https://github.com/nodejs/node/issues/22745 Reviewed-By: Xavier Guimard Gbp-Pq: Topic dfsg Gbp-Pq: Name multilib_modules.patch --- configure.py | 25 +++++++++++++++++++ lib/internal/modules/cjs/loader.js | 14 ++++++++++- .../test-module-loading-globalpaths.js | 10 ++++---- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/configure.py b/configure.py index e6b17d9a2..8f25668c0 100755 --- a/configure.py +++ b/configure.py @@ -96,6 +96,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', @@ -149,6 +155,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', @@ -1552,6 +1565,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)) @@ -2135,6 +2159,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) diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index c284b39b1..4a15ed34a 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -1643,6 +1643,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. @@ -1650,7 +1651,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')); diff --git a/test/parallel/test-module-loading-globalpaths.js b/test/parallel/test-module-loading-globalpaths.js index a7b846019..0ee40644f 100644 --- a/test/parallel/test-module-loading-globalpaths.js +++ b/test/parallel/test-module-loading-globalpaths.js @@ -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}';`); -- 2.30.2