git/perl/header_templates/runtime_prefix.template.pl
Dan Jacques 07d90eadb5 Makefile: add Perl runtime prefix support
Broaden the RUNTIME_PREFIX flag to configure Git's Perl scripts to
locate the Git installation's Perl support libraries by resolving
against the script's path, rather than hard-coding that path at
build-time. Hard-coding at build time worked on previous
RUNTIME_PREFIX configurations (i.e., Windows) because the Perl
scripts were run within a virtual filesystem whose paths were
consistent regardless of the location of the actual installation.
This will no longer be the case for non-Windows RUNTIME_PREFIX users.

When enabled, RUNTIME_PREFIX now requires Perl's system paths to be
expressed relative to a common installation directory in the Makefile,
and uses that relationship to locate support files based on the known
starting point of the script being executed, much like RUNTIME_PREFIX
does for the Git binary.

This change enables Git's Perl scripts to work when their Git installation
is relocated or moved to another system, even when they are not in a
virtual filesystem environment.

Signed-off-by: Dan Jacques <dnj@google.com>
Thanks-to: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Thanks-to: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-04-11 18:09:56 +09:00

42 lines
1.1 KiB
Perl

# BEGIN RUNTIME_PREFIX generated code.
#
# This finds our Git::* libraries relative to the script's runtime path.
sub __git_system_path {
my ($relpath) = @_;
my $gitexecdir_relative = '@@GITEXECDIR_REL@@';
# GIT_EXEC_PATH is supplied by `git` or the test suite.
my $exec_path;
if (exists $ENV{GIT_EXEC_PATH}) {
$exec_path = $ENV{GIT_EXEC_PATH};
} else {
# This can happen if this script is being directly invoked instead of run
# by "git".
require FindBin;
$exec_path = $FindBin::Bin;
}
# Trim off the relative gitexecdir path to get the system path.
(my $prefix = $exec_path) =~ s/\Q$gitexecdir_relative\E$//;
require File::Spec;
return File::Spec->catdir($prefix, $relpath);
}
BEGIN {
use lib split /@@PATHSEP@@/,
(
$ENV{GITPERLLIB} ||
do {
my $perllibdir = __git_system_path('@@PERLLIBDIR_REL@@');
(-e $perllibdir) || die("Invalid system path ($relpath): $path");
$perllibdir;
}
);
# Export the system locale directory to the I18N module. The locale directory
# is only installed if NO_GETTEXT is set.
$Git::I18N::TEXTDOMAINDIR = __git_system_path('@@LOCALEDIR_REL@@');
}
# END RUNTIME_PREFIX generated code.