import grp
import os
import pwd
+import re
import shutil
import stat
import sys
DEVMODEMSG = '*** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH ***'
+def add_to_ld_path(path_name, path):
+ paths = re.split('[ :]', os.environ.get(path_name, ''))
+ if path in paths:
+ return 0
+ else:
+ paths.insert(0, path)
+ os.environ[path_name] = ':'.join(paths)
+ return 1
+
+
def respawn_in_path(lib_path, pybind_path, pythonlib_path, asan_lib_path):
execv_cmd = []
if 'CEPH_DBG' in os.environ:
lib_path_var = "LD_LIBRARY_PATH"
execv_cmd += sys.argv
+ ld_paths_changed = 0
if asan_lib_path:
- os.environ['LD_PRELOAD'] = asan_lib_path
- if lib_path_var in os.environ:
- if lib_path not in os.environ[lib_path_var]:
- os.environ[lib_path_var] += ':' + lib_path
- if "CEPH_DEV" not in os.environ:
- print(DEVMODEMSG, file=sys.stderr)
- os.execvp(execv_cmd[0], execv_cmd)
- else:
- os.environ[lib_path_var] = lib_path
+ ld_paths_changed += add_to_ld_path('LD_PRELOAD', asan_lib_path)
+ if add_to_ld_path(lib_path_var, lib_path) > 0:
if "CEPH_DEV" not in os.environ:
print(DEVMODEMSG, file=sys.stderr)
+ ld_paths_changed += 1
+ if ld_paths_changed > 0:
os.execvp(execv_cmd[0], execv_cmd)
- sys.path.insert(0, pybind_path)
- sys.path.insert(0, pythonlib_path)
+ else:
+ sys.path.insert(0, pybind_path)
+ sys.path.insert(0, pythonlib_path)
def get_pythonlib_dir():