Commit 3b937043 authored by Wez Furlong's avatar Wez Furlong Committed by Facebook Github Bot

getdeps: move the guts of _compute_env to a helper in buildopts

Summary: I want to use this logic outside of a builder implementation

Reviewed By: pkaush

Differential Revision: D16101914

fbshipit-source-id: db3c9ac6c84a92ab84a18dddb931953b0a51f127
parent 6c84edde
...@@ -86,39 +86,7 @@ class BuilderBase(object): ...@@ -86,39 +86,7 @@ class BuilderBase(object):
def _compute_env(self, install_dirs): def _compute_env(self, install_dirs):
# CMAKE_PREFIX_PATH is only respected when passed through the # CMAKE_PREFIX_PATH is only respected when passed through the
# environment, so we construct an appropriate path to pass down # environment, so we construct an appropriate path to pass down
env = self.env.copy() return self.build_opts.compute_env_for_install_dirs(install_dirs, env=self.env)
lib_path = None
if self.build_opts.is_darwin():
lib_path = "DYLD_LIBRARY_PATH"
elif self.build_opts.is_linux():
lib_path = "LD_LIBRARY_PATH"
else:
lib_path = None
for d in install_dirs:
add_path_entry(env, "CMAKE_PREFIX_PATH", d)
pkgconfig = os.path.join(d, "lib/pkgconfig")
if os.path.exists(pkgconfig):
add_path_entry(env, "PKG_CONFIG_PATH", pkgconfig)
# Allow resolving shared objects built earlier (eg: zstd
# doesn't include the full path to the dylib in its linkage
# so we need to give it an assist)
if lib_path:
for lib in ["lib", "lib64"]:
libdir = os.path.join(d, lib)
if os.path.exists(libdir):
add_path_entry(env, lib_path, libdir)
# Allow resolving binaries (eg: cmake, ninja) and dlls
# built by earlier steps
bindir = os.path.join(d, "bin")
if os.path.exists(bindir):
add_path_entry(env, "PATH", bindir, append=False)
return env
class MakeBuilder(BuilderBase): class MakeBuilder(BuilderBase):
......
...@@ -16,7 +16,7 @@ import os ...@@ -16,7 +16,7 @@ import os
import subprocess import subprocess
import tempfile import tempfile
from .envfuncs import path_search from .envfuncs import Env, add_path_entry, path_search
from .platform import HostType, is_windows from .platform import HostType, is_windows
...@@ -190,6 +190,44 @@ class BuildOptions(object): ...@@ -190,6 +190,44 @@ class BuildOptions(object):
return {"build_dir": build_dir, "inst_dir": inst_dir, "hash": hash} return {"build_dir": build_dir, "inst_dir": inst_dir, "hash": hash}
def compute_env_for_install_dirs(self, install_dirs, env=None):
if env:
env = env.copy()
else:
env = Env()
lib_path = None
if self.is_darwin():
lib_path = "DYLD_LIBRARY_PATH"
elif self.is_linux():
lib_path = "LD_LIBRARY_PATH"
else:
lib_path = None
for d in install_dirs:
add_path_entry(env, "CMAKE_PREFIX_PATH", d)
pkgconfig = os.path.join(d, "lib/pkgconfig")
if os.path.exists(pkgconfig):
add_path_entry(env, "PKG_CONFIG_PATH", pkgconfig)
# Allow resolving shared objects built earlier (eg: zstd
# doesn't include the full path to the dylib in its linkage
# so we need to give it an assist)
if lib_path:
for lib in ["lib", "lib64"]:
libdir = os.path.join(d, lib)
if os.path.exists(libdir):
add_path_entry(env, lib_path, libdir)
# Allow resolving binaries (eg: cmake, ninja) and dlls
# built by earlier steps
bindir = os.path.join(d, "bin")
if os.path.exists(bindir):
add_path_entry(env, "PATH", bindir, append=False)
return env
def list_win32_subst_letters(): def list_win32_subst_letters():
output = subprocess.check_output(["subst"]).decode("utf-8") output = subprocess.check_output(["subst"]).decode("utf-8")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment