07d90eadb5
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>
43 lines
1.1 KiB
Perl
43 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.
|