diff options
author | Ben Caimano <ben.caimano@10gen.com> | 2020-02-24 17:18:04 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-02-24 22:37:41 +0000 |
commit | 3aea7a5bc17d86cf14a1abf417d029f0356ee05e (patch) | |
tree | 9264ecddc5faeb45217739da2a9d6acf0d333934 | |
parent | e95d5f5508384ff84de2f51952cb237fe04ab401 (diff) | |
download | mongo-3aea7a5bc17d86cf14a1abf417d029f0356ee05e.tar.gz |
Revert "SERVER-45785 Make PREFIX, PREFIX_*DIR, and DESTDIR work more like regular SCons expansions"
This reverts commit eae0b5ee0dabf2cc01008c3e4eb1c82ced80f629.
-rw-r--r-- | SConstruct | 2 | ||||
-rw-r--r-- | site_scons/site_tools/auto_install_binaries.py | 47 |
2 files changed, 40 insertions, 9 deletions
diff --git a/SConstruct b/SConstruct index 685eb3e2889..398f278e2f4 100644 --- a/SConstruct +++ b/SConstruct @@ -4449,7 +4449,7 @@ if has_option("cache"): addNoCacheEmitter(env['BUILDERS']['LoadableModule']) -resmoke_install_dir = env.subst("$DESTDIR/$PREFIX_BINDIR") if get_option("install-mode") == "hygienic" else env.Dir("#").abspath +resmoke_install_dir = env.subst("$PREFIX_BINDIR") if get_option("install-mode") == "hygienic" else env.Dir("#").abspath resmoke_install_dir = os.path.normpath(resmoke_install_dir).replace("\\", r"\\") # Much blood sweat and tears were shed getting to this point. Any version of diff --git a/site_scons/site_tools/auto_install_binaries.py b/site_scons/site_tools/auto_install_binaries.py index 1caaf2d285b..fcc67fe4001 100644 --- a/site_scons/site_tools/auto_install_binaries.py +++ b/site_scons/site_tools/auto_install_binaries.py @@ -487,12 +487,44 @@ def add_suffix_mapping(env, suffix, role=None): env[SUFFIX_MAP].update({env.subst(key): value for key, value in suffix.items()}) -def suffix_mapping(env, directory="", default_role=False): +def suffix_mapping(env, directory=False, default_role=False): """Generate a SuffixMap object from source and target.""" - directory = "$DESTDIR/" + directory return SuffixMap(directory=directory, default_role=default_role) +def dest_dir_generator(initial_value=None): + """Memoized dest_dir_generator""" + dd = (None, None) + + def generator(source, target, env, for_signature): + nonlocal dd + + # SCons does not perform substitution for "sub" Dir calls on a + # Dir Node. Additionally we need to determine if it's an + # absolute path here because if it is the sub Dir call will + # not expand correctly. + prefix = env.subst("$PREFIX") + if prefix and prefix[0] == "/": + prefix = prefix[1:] + + if dd[1] is not None and dd[0] == prefix: + return dd[1] + + if initial_value is None: + dest_dir = env.Dir("#install") + elif isinstance(initial_value, str): + dest_dir = env.Dir(initial_value) + elif isinstance(initial_value, SCons.Node.FS.Dir): + dest_dir = initial_value + else: + raise Exception("initial DESTDIR value must be string or Dir") + + dd = (prefix, dest_dir.Dir(prefix)) + return dd[1] + + return generator + + def get_auto_installed_files(env, node): return getattr(node.attributes, INSTALLED_FILES, []) @@ -541,13 +573,12 @@ def generate(env): # pylint: disable=too-many-statements # Matches the autoconf documentation: # https://www.gnu.org/prep/standards/html_node/Directory-Variables.html - env["DESTDIR"] = env.Dir(env.get("DESTDIR", "#install")) - env["PREFIX"] = env.get("PREFIX", "") - env["PREFIX_BINDIR"] = env.get("PREFIX_BINDIR", "$PREFIX/bin") - env["PREFIX_LIBDIR"] = env.get("PREFIX_LIBDIR", "$PREFIX/lib") - env["PREFIX_SHAREDIR"] = env.get("PREFIX_SHAREDIR", "$PREFIX/share") + env["DESTDIR"] = dest_dir_generator(env.get("DESTDIR", None)) + env["PREFIX_BINDIR"] = env.get("PREFIX_BINDIR", "$DESTDIR/bin") + env["PREFIX_LIBDIR"] = env.get("PREFIX_LIBDIR", "$DESTDIR/lib") + env["PREFIX_SHAREDIR"] = env.get("PREFIX_SHAREDIR", "$DESTDIR/share") env["PREFIX_DOCDIR"] = env.get("PREFIX_DOCDIR", "$PREFIX_SHAREDIR/doc") - env["PREFIX_INCLUDEDIR"] = env.get("PREFIX_INCLUDEDIR", "$PREFIX/include") + env["PREFIX_INCLUDEDIR"] = env.get("PREFIX_INCLUDEDIR", "$DESTDIR/include") env[SUFFIX_MAP] = {} env[ALIAS_MAP] = defaultdict(dict) |