Browse Source

Move computation of absolute paths from Makefile to runtime (in preparation for RUNTIME_PREFIX)

This commit prepares the Makefile for relocatable binaries (called
RUNTIME_PREFIX).  Such binaries will be able to be moved together
with the system configuration files to a different directory,
requiring to compute the prefix at runtime.

In a first step, we make all paths relative in the Makefile and
teach system_path() to add the prefix instead.  We used to compute
absolute paths in the Makefile and passed them to C as defines.  We
now pass relative paths to C and call system_path() to add the
prefix at runtime.

Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Acked-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Steffen Prohaska 16 years ago committed by Junio C Hamano
parent
commit
026fa0d5ad
  1. 42
      Makefile
  2. 4
      builtin-help.c
  3. 13
      exec_cmd.c

42
Makefile

@ -179,28 +179,32 @@ STRIP ?= strip
# Among the variables below, these: # Among the variables below, these:
# gitexecdir # gitexecdir
# template_dir # template_dir
# mandir
# infodir
# htmldir # htmldir
# ETC_GITCONFIG (but not sysconfdir) # ETC_GITCONFIG (but not sysconfdir)
# can be specified as a relative path ../some/where/else (which must begin # can be specified as a relative path some/where/else;
# with ../); this is interpreted as relative to $(bindir) and "git" at # this is interpreted as relative to $(prefix) and "git" at
# runtime figures out where they are based on the path to the executable. # runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way. # This can help installing the suite in a relocatable way.


prefix = $(HOME) prefix = $(HOME)
bindir = $(prefix)/bin bindir_relative = bin
mandir = $(prefix)/share/man bindir = $(prefix)/$(bindir_relative)
infodir = $(prefix)/share/info mandir = share/man
gitexecdir = $(prefix)/libexec/git-core infodir = share/info
gitexecdir = libexec/git-core
sharedir = $(prefix)/share sharedir = $(prefix)/share
template_dir = $(sharedir)/git-core/templates template_dir = share/git-core/templates
htmldir=$(sharedir)/doc/git-doc htmldir = share/doc/git-doc
ifeq ($(prefix),/usr) ifeq ($(prefix),/usr)
sysconfdir = /etc sysconfdir = /etc
ETC_GITCONFIG = $(sysconfdir)/gitconfig
else else
sysconfdir = $(prefix)/etc sysconfdir = $(prefix)/etc
ETC_GITCONFIG = etc/gitconfig
endif endif
lib = lib lib = lib
ETC_GITCONFIG = $(sysconfdir)/gitconfig
# DESTDIR= # DESTDIR=


# default configuration for gitweb # default configuration for gitweb
@ -1086,6 +1090,7 @@ ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))


DESTDIR_SQ = $(subst ','\'',$(DESTDIR)) DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir)) bindir_SQ = $(subst ','\'',$(bindir))
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
mandir_SQ = $(subst ','\'',$(mandir)) mandir_SQ = $(subst ','\'',$(mandir))
infodir_SQ = $(subst ','\'',$(infodir)) infodir_SQ = $(subst ','\'',$(infodir))
gitexecdir_SQ = $(subst ','\'',$(gitexecdir)) gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
@ -1251,7 +1256,12 @@ git.o git.spec \
$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $< $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<


exec_cmd.o: exec_cmd.c GIT-CFLAGS exec_cmd.o: exec_cmd.c GIT-CFLAGS
$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' $< $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \
'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
'-DBINDIR="$(bindir_relative_SQ)"' \
'-DPREFIX="$(prefix_SQ)"' \
$<

builtin-init-db.o: builtin-init-db.c GIT-CFLAGS builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $< $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<


@ -1407,17 +1417,17 @@ remove-dashes:


### Installation rules ### Installation rules


ifeq ($(firstword $(subst /, ,$(template_dir))),..) ifeq ($(abspath $(template_dir)),$(template_dir))
template_instdir = $(bindir)/$(template_dir)
else
template_instdir = $(template_dir) template_instdir = $(template_dir)
else
template_instdir = $(prefix)/$(template_dir)
endif endif
export template_instdir export template_instdir


ifeq ($(firstword $(subst /, ,$(gitexecdir))),..) ifeq ($(abspath $(gitexecdir)),$(gitexecdir))
gitexec_instdir = $(bindir)/$(gitexecdir)
else
gitexec_instdir = $(gitexecdir) gitexec_instdir = $(gitexecdir)
else
gitexec_instdir = $(prefix)/$(gitexecdir)
endif endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir)) gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir export gitexec_instdir

4
builtin-help.c

@ -329,7 +329,7 @@ static void setup_man_path(void)
* old_path, the ':' at the end will let 'man' to try * old_path, the ':' at the end will let 'man' to try
* system-wide paths after ours to find the manual page. If * system-wide paths after ours to find the manual page. If
* there is old_path, we need ':' as delimiter. */ * there is old_path, we need ':' as delimiter. */
strbuf_addstr(&new_path, GIT_MAN_PATH); strbuf_addstr(&new_path, system_path(GIT_MAN_PATH));
strbuf_addch(&new_path, ':'); strbuf_addch(&new_path, ':');
if (old_path) if (old_path)
strbuf_addstr(&new_path, old_path); strbuf_addstr(&new_path, old_path);
@ -375,7 +375,7 @@ static void show_man_page(const char *git_cmd)
static void show_info_page(const char *git_cmd) static void show_info_page(const char *git_cmd)
{ {
const char *page = cmd_to_page(git_cmd); const char *page = cmd_to_page(git_cmd);
setenv("INFOPATH", GIT_INFO_PATH, 1); setenv("INFOPATH", system_path(GIT_INFO_PATH), 1);
execlp("info", "info", "gitman", page, NULL); execlp("info", "info", "gitman", page, NULL);
} }



13
exec_cmd.c

@ -9,11 +9,14 @@ static const char *argv0_path;


const char *system_path(const char *path) const char *system_path(const char *path)
{ {
if (!is_absolute_path(path) && argv0_path) { static const char *prefix = PREFIX;
struct strbuf d = STRBUF_INIT; struct strbuf d = STRBUF_INIT;
strbuf_addf(&d, "%s/%s", argv0_path, path);
path = strbuf_detach(&d, NULL); if (is_absolute_path(path))
} return path;

strbuf_addf(&d, "%s/%s", prefix, path);
path = strbuf_detach(&d, NULL);
return path; return path;
} }



Loading…
Cancel
Save