Skip to content

Commit

Permalink
Add support for ldpaths detection on macOS via `DYLD_FALLBACK_LIBRA…
Browse files Browse the repository at this point in the history
…RY_PATH` (#417)
  • Loading branch information
mjsteinbaugh authored Aug 26, 2023
1 parent b6ff64b commit fb643c4
Showing 1 changed file with 28 additions and 15 deletions.
43 changes: 28 additions & 15 deletions radian/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,35 +75,48 @@ def main(cleanup=None):
if not r_home:
raise RuntimeError("Cannot find R binary. Expose it via the `PATH` variable.")

if sys.platform.startswith("linux"):
# respect R_ARCH variable?
if not sys.platform.startswith("win"):
libPath = os.path.join(r_home, "lib")
ldpaths = os.path.join(r_home, "etc", "ldpaths")
if "R_LD_LIBRARY_PATH" not in os.environ or libPath not in os.environ["R_LD_LIBRARY_PATH"]:
if (
"R_LD_LIBRARY_PATH" not in os.environ
or libPath not in os.environ["R_LD_LIBRARY_PATH"]
):
if os.path.exists(ldpaths):
R_LD_LIBRARY_PATH = subprocess.check_output(
". \"{}\"; echo $R_LD_LIBRARY_PATH".format(ldpaths),
shell=True
).decode("utf-8").strip()
R_LD_LIBRARY_PATH = (
subprocess.check_output(
'. "{}"; echo $R_LD_LIBRARY_PATH'.format(ldpaths),
shell=True,
)
.decode("utf-8")
.strip()
)
elif "R_LD_LIBRARY_PATH" in os.environ:
R_LD_LIBRARY_PATH = os.environ["R_LD_LIBRARY_PATH"]
else:
R_LD_LIBRARY_PATH = libPath

if libPath not in R_LD_LIBRARY_PATH:
R_LD_LIBRARY_PATH = "{}:{}".format(libPath, R_LD_LIBRARY_PATH)

os.environ['R_LD_LIBRARY_PATH'] = R_LD_LIBRARY_PATH

if "LD_LIBRARY_PATH" in os.environ:
LD_LIBRARY_PATH = "{}:{}".format(R_LD_LIBRARY_PATH, os.environ["LD_LIBRARY_PATH"])
os.environ["R_LD_LIBRARY_PATH"] = R_LD_LIBRARY_PATH
# respect R_ARCH variable?
if sys.platform == "darwin":
ld_library_var = "DYLD_FALLBACK_LIBRARY_PATH"
else:
ld_library_var = "LD_LIBRARY_PATH"
if ld_library_var in os.environ:
LD_LIBRARY_PATH = "{}:{}".format(
R_LD_LIBRARY_PATH, os.environ[ld_library_var]
)
else:
LD_LIBRARY_PATH = R_LD_LIBRARY_PATH
os.environ['LD_LIBRARY_PATH'] = LD_LIBRARY_PATH
os.environ[ld_library_var] = LD_LIBRARY_PATH
if sys.argv[0].endswith("radian"):
os.execv(sys.argv[0], sys.argv)
else:
os.execv(sys.executable, [sys.executable, "-m", "radian"] + sys.argv[1:])
os.execv(
sys.executable,
[sys.executable, "-m", "radian"] + sys.argv[1:],
)

RadianApplication(r_home, ver=__version__).run(options, cleanup=cleanup)

Expand Down

0 comments on commit fb643c4

Please sign in to comment.