diff --git a/exec_cmd.c b/exec_cmd.c
index 23f4873b2becf3fd992b60d06b3046b1eac8ad01..217c12577f52b8ff9d535a086ec75d54107ee01c 100644 (file)
--- a/exec_cmd.c
+++ b/exec_cmd.c
const char *system_path(const char *path)
{
+#ifdef RUNTIME_PREFIX
+ static const char *prefix;
+#else
static const char *prefix = PREFIX;
+#endif
struct strbuf d = STRBUF_INIT;
if (is_absolute_path(path))
return path;
+#ifdef RUNTIME_PREFIX
+ assert(argv0_path);
+ assert(is_absolute_path(argv0_path));
+
+ if (!prefix &&
+ !(prefix = strip_path_suffix(argv0_path, GIT_EXEC_PATH)) &&
+ !(prefix = strip_path_suffix(argv0_path, BINDIR)) &&
+ !(prefix = strip_path_suffix(argv0_path, "git"))) {
+ prefix = PREFIX;
+ fprintf(stderr, "RUNTIME_PREFIX requested, "
+ "but prefix computation failed. "
+ "Using static fallback '%s'.\n", prefix);
+ }
+#endif
+
strbuf_addf(&d, "%s/%s", prefix, path);
path = strbuf_detach(&d, NULL);
return path;