diff --git a/node.gyp b/node.gyp index 826543a9d17ce1..8e41cc053d4a78 100644 --- a/node.gyp +++ b/node.gyp @@ -260,6 +260,11 @@ }], ], }], + [ 'node_shared=="true"', { + 'xcode_settings': { + 'OTHER_LDFLAGS': [ '-Wl,-rpath,@loader_path', ], + }, + }], [ 'node_intermediate_lib_type=="shared_library" and OS=="win"', { # On Windows, having the same name for both executable and shared # lib causes filename collision. Need a different PRODUCT_NAME for @@ -416,6 +421,10 @@ 'conditions': [ [ 'node_shared=="true" and node_module_version!="" and OS!="win"', { 'product_extension': '<(shlib_suffix)', + 'xcode_settings': { + 'LD_DYLIB_INSTALL_NAME': + '@rpath/lib<(node_core_target_name).<(shlib_suffix)' + }, }], ['node_shared=="true" and OS=="aix"', { 'product_name': 'node_base', @@ -1130,6 +1139,9 @@ '<@(library_files)', 'common.gypi', ], + 'direct_dependent_settings': { + 'ldflags': [ '-Wl,-brtl' ], + }, }, ] }], # end aix section diff --git a/test/common/shared-lib-util.js b/test/common/shared-lib-util.js new file mode 100644 index 00000000000000..7ff7518ac31e6d --- /dev/null +++ b/test/common/shared-lib-util.js @@ -0,0 +1,29 @@ +/* eslint-disable required-modules */ +'use strict'; +const path = require('path'); + +// If node executable is linked to shared lib, need to take care about the +// shared lib path. +exports.addLibraryPath = function(env) { + if (!process.config.variables.node_shared) { + return; + } + + env = env || process.env; + + env.LD_LIBRARY_PATH = + (env.LD_LIBRARY_PATH ? env.LD_LIBRARY_PATH + path.delimiter : '') + + path.join(path.dirname(process.execPath), 'lib.target'); + // For AIX. + env.LIBPATH = + (env.LIBPATH ? env.LIBPATH + path.delimiter : '') + + path.join(path.dirname(process.execPath), 'lib.target'); + // For Mac OSX. + env.DYLD_LIBRARY_PATH = + (env.DYLD_LIBRARY_PATH ? env.DYLD_LIBRARY_PATH + path.delimiter : '') + + path.dirname(process.execPath); + // For Windows. + env.PATH = + (env.PATH ? env.PATH + path.delimiter : '') + + path.dirname(process.execPath); +}; diff --git a/test/parallel/test-child-process-fork-exec-path.js b/test/parallel/test-child-process-fork-exec-path.js index 42855cd663e826..8b94ef62a93bc8 100644 --- a/test/parallel/test-child-process-fork-exec-path.js +++ b/test/parallel/test-child-process-fork-exec-path.js @@ -28,6 +28,9 @@ const tmpdir = require('../common/tmpdir'); const msg = { test: 'this' }; const nodePath = process.execPath; const copyPath = path.join(tmpdir.path, 'node-copy.exe'); +const { addLibraryPath } = require('../common/shared-lib-util'); + +addLibraryPath(process.env); if (process.env.FORK) { assert(process.send); diff --git a/test/parallel/test-module-loading-globalpaths.js b/test/parallel/test-module-loading-globalpaths.js index e3c36cb21c202e..e82e6ad4b9dd45 100644 --- a/test/parallel/test-module-loading-globalpaths.js +++ b/test/parallel/test-module-loading-globalpaths.js @@ -6,6 +6,9 @@ const path = require('path'); const fs = require('fs'); const child_process = require('child_process'); const pkgName = 'foo'; +const { addLibraryPath } = require('../common/shared-lib-util'); + +addLibraryPath(process.env); if (process.argv[2] === 'child') { console.log(require(pkgName).string);