diff options
author | Daniel Moody <daniel.moody@mongodb.com> | 2020-07-23 15:14:08 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-07-24 18:00:25 +0000 |
commit | c71ff67d2c705a2ab6712a9176fe355025088912 (patch) | |
tree | 4e05c78c2ac54117cbf1c1c4bd2d04c991cd0503 | |
parent | 2e53c03231aca7b566d165bd8b2205a8a5d2bfa2 (diff) | |
download | mongo-c71ff67d2c705a2ab6712a9176fe355025088912.tar.gz |
SERVER-41970 update RPATH to use PREFIX values
-rw-r--r-- | SConstruct | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/SConstruct b/SConstruct index dcb3c6d507b..f1a43f33979 100644 --- a/SConstruct +++ b/SConstruct @@ -882,7 +882,7 @@ env_vars.Add('PKGDIR', env_vars.Add('PREFIX', help='Final installation location of files, will be made into a sub dir of $DESTDIR', - default='') + default='.') # Exposed to be able to cross compile Android/*nix from Windows without ending up with the .exe suffix. env_vars.Add('PROGSUFFIX', @@ -4152,13 +4152,28 @@ env.AddPackageNameAlias( name="mh-debugsymbols", ) +def rpath_generator(env, source, target, for_signature): + # If the PREFIX_LIBDIR has an absolute path, we will use that directly as + # RPATH because that indicates the final install destination of the libraries. + prefix_libdir = env.subst('$PREFIX_LIBDIR') + if os.path.isabs(prefix_libdir): + return ['$PREFIX_LIBDIR'] + + # If the PREFIX_LIBDIR is not an absolute path, we will use a relative path + # from the bin to the lib dir. + lib_rel = os.path.relpath(prefix_libdir, env.subst('$PREFIX_BINDIR')) + + if env['PLATFORM'] == 'posix':\ + return [env.Literal(f"\\$$ORIGIN/{lib_rel}")] + + if env['PLATFORM'] == 'darwin': + return [f"@loader_path/{lib_rel}",] + +env['RPATH_GENERATOR'] = rpath_generator + if env['PLATFORM'] == 'posix': env.AppendUnique( - RPATH=[ - # In the future when we want to improve dynamic builds - # we should set this to $PREFIX ideally - env.Literal('\\$$ORIGIN/../lib'), - ], + RPATH='$RPATH_GENERATOR', LINKFLAGS=[ # Most systems *require* -z,origin to make origin work, but android # blows up at runtime if it finds DF_ORIGIN_1 in DT_FLAGS_1. @@ -4173,11 +4188,15 @@ if env['PLATFORM'] == 'posix': ] ) elif env['PLATFORM'] == 'darwin': + # The darwin case uses a adhoc implementation of RPATH for SCons + # since SCons does not support RPATH directly for macOS: + # https://github.com/SCons/scons/issues/2127 + # so we setup RPATH and LINKFLAGS ourselves. + env['RPATHPREFIX'] = '-Wl,-rpath,' + env['RPATHSUFFIX'] = '' + env['RPATH'] = '$RPATH_GENERATOR' env.AppendUnique( - LINKFLAGS=[ - '-Wl,-rpath,@loader_path/../lib', - '-Wl,-rpath,@loader_path/../Frameworks' - ], + LINKFLAGS="${_concat(RPATHPREFIX, RPATH, RPATHSUFFIX, __env__)}", SHLINKFLAGS=[ "-Wl,-install_name,@rpath/${TARGET.file}", ], |