ProtHGT / postBuild
Erva Ulusoy
fix env building error
589e75e
#!/usr/bin/env bash
set -euo pipefail
# Some hardened environments (e.g., newer glibc / gVisor) refuse to dlopen()
# shared objects that request an executable stack. Certain PyTorch builds can
# ship with this flag set on libtorch_cpu.so. Clearing it fixes torch import.
python - <<'PY'
import os, site, glob
paths = []
for fn in (getattr(site, "getsitepackages", None), getattr(site, "getusersitepackages", None)):
if fn is None:
continue
try:
p = fn()
if isinstance(p, str):
paths.append(p)
else:
paths.extend(list(p))
except Exception:
pass
targets = []
for p in paths:
targets += glob.glob(os.path.join(p, "torch", "lib", "libtorch_cpu.so"))
targets += glob.glob(os.path.join(p, "torch", "lib", "libtorch_python.so"))
print("\n".join(sorted(set(targets))))
PY
TARGETS="$(python - <<'PY'
import os, site, glob
paths = []
for fn in (getattr(site, "getsitepackages", None), getattr(site, "getusersitepackages", None)):
if fn is None:
continue
try:
p = fn()
if isinstance(p, str):
paths.append(p)
else:
paths.extend(list(p))
except Exception:
pass
targets = []
for p in paths:
targets += glob.glob(os.path.join(p, "torch", "lib", "libtorch_cpu.so"))
targets += glob.glob(os.path.join(p, "torch", "lib", "libtorch_python.so"))
print(" ".join(sorted(set(targets))))
PY
)"
if [[ -z "${TARGETS}" ]]; then
echo "postBuild: no torch .so targets found yet (torch may not be installed)."
exit 0
fi
for so in ${TARGETS}; do
if [[ -f "${so}" ]]; then
echo "postBuild: clearing execstack on ${so}"
# If it fails (e.g. already clear), continue.
patchelf --clear-execstack "${so}" || true
fi
done