Index: node-v21.7.1/addon-rpm.gypi =================================================================== --- /dev/null +++ node-v21.7.1/addon-rpm.gypi @@ -0,0 +1,35 @@ +{ + 'target_defaults': { + 'type': 'loadable_module', + 'product_prefix': '', + 'include_dirs': [ + '/usr/include/node21/', + '/usr/include/' + ], + + 'target_conditions': [ + ['_type=="loadable_module"', { + 'product_extension': 'node', + 'defines': [ 'BUILDING_NODE_EXTENSION' ], + }] + ], + + 'conditions': [ + [ 'OS=="mac"', { + 'libraries': [ '-undefined dynamic_lookup' ], + 'xcode_settings': { + 'DYLIB_INSTALL_NAME_BASE': '@rpath' + }, + }], + [ 'OS=="win"', { + 'libraries': [ '-l<(node_root_dir)/$(Configuration)/node.lib' ], + # warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent' + # needs to have dll-interface to be used by clients of class 'node::ObjectWrap' + 'msvs_disabled_warnings': [ 4251 ], + }], + [ 'OS=="freebsd" or OS=="openbsd" or OS=="solaris" or (OS=="linux" and target_arch!="ia32")', { + 'cflags': [ '-fPIC' ], + }] + ] + } +} Index: node-v21.7.1/deps/npm/node_modules/node-gyp/lib/configure.js =================================================================== --- node-v21.7.1.orig/deps/npm/node_modules/node-gyp/lib/configure.js +++ node-v21.7.1/deps/npm/node_modules/node-gyp/lib/configure.js @@ -36,10 +36,6 @@ async function configure (gyp, argv) { if ('v' + release.version !== process.version) { // if --target was given, then determine a target version to compile for log.verbose('get node dir', 'compiling against --target node version: %s', release.version) - } else { - // if no --target was specified then use the current host node version - log.verbose('get node dir', 'no --target version specified, falling back to host node version: %s', release.version) - } if (!release.semver) { // could not parse the version string with semver @@ -54,6 +50,12 @@ async function configure (gyp, argv) { log.verbose('get node dir', 'target node version installed:', release.versionDir) nodeDir = path.resolve(gyp.devDir, release.versionDir) + } else { + // if no --target was specified then use RPM-installed headers + log.verbose('get node dir', 'no --target version specified, falling back to RPM installed headers') + nodeDir = '/usr/include/node21' + createBuildDir() + } } return createBuildDir() @@ -201,8 +203,16 @@ async function configure (gyp, argv) { // this logic ported from the old `gyp_addon` python file const gypScript = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py') - const addonGypi = path.resolve(__dirname, '..', 'addon.gypi') - let commonGypi = path.resolve(nodeDir, 'include/node/common.gypi') + let addon_gypi_file = gyp.opts.target || gyp.opts.nodedir ? 'addon.gypi' : 'addon-rpm.gypi' + let addonGypi = path.resolve(__dirname, '..', addon_gypi_file) + let commonGypi = path.resolve(nodeDir, 'include/node21/common.gypi') + + try { + await fs.stat(commonGypi) + } catch (err) { + commonGypi = path.resolve(nodeDir, 'include/node/common.gypi') + } + try { await fs.stat(commonGypi) } catch (err) { Index: node-v21.7.1/deps/npm/node_modules/node-gyp/addon.gypi =================================================================== --- node-v21.7.1.orig/deps/npm/node_modules/node-gyp/addon.gypi +++ node-v21.7.1/deps/npm/node_modules/node-gyp/addon.gypi @@ -18,6 +18,7 @@ ], 'include_dirs': [ + '<(node_root_dir)/include/node21', '<(node_root_dir)/include/node', '<(node_root_dir)/src', '<(node_root_dir)/deps/openssl/config', Index: node-v21.7.1/tools/build_addons.py =================================================================== --- node-v21.7.1.orig/tools/build_addons.py +++ node-v21.7.1/tools/build_addons.py @@ -27,7 +27,7 @@ def generate_headers(headers_dir, instal def rebuild_addons(args): headers_dir = os.path.abspath(args.headers_dir) out_dir = os.path.abspath(args.out_dir) - node_bin = os.path.join(out_dir, 'node') + node_bin = os.path.join(out_dir, 'node21') if args.is_win: node_bin += '.exe'