From: Bastien ROUCARIÈS Date: Wed, 1 Jan 2025 13:34:52 +0000 (+0100) Subject: Multiarch search path, arch triplet, DFHS path for modules X-Git-Tag: archive/raspbian/20.18.1+dfsg-2+rpi1^2~16 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=97b5d4b7fb576dc36b58aee71755f71d8fcbad27;p=nodejs.git 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 --- diff --git a/configure.py b/configure.py index 115c3d38e..5c4095b97 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}';`);