git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Dan Jacques <dnj@google.com>
Cc: git@vger.kernel.org, gitster@pobox.com, Johannes.Schindelin@gmx.de
Subject: Re: [PATCH v4 3/4] Makefile: add Perl runtime prefix support
Date: Wed, 29 Nov 2017 22:00:23 +0100	[thread overview]
Message-ID: <87k1y8vlzs.fsf@evledraar.booking.com> (raw)
In-Reply-To: <20171129155637.89075-4-dnj@google.com>


On Wed, Nov 29 2017, Dan Jacques jotted:

> Add a new Makefile flag, RUNTIME_PREFIX_PERL, which, when enabled,
> configures 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.
> [...]
> diff --git a/perl/header_runtime_prefix.pl.template b/perl/header_runtime_prefix.pl.template
> new file mode 100644
> index 000000000..fb9a9924d
> --- /dev/null
> +++ b/perl/header_runtime_prefix.pl.template
> @@ -0,0 +1,24 @@
> +# BEGIN RUNTIME_PREFIX_PERL generated code.
> +#
> +# This finds our Git::* libraries relative to the script's runtime path.
> +BEGIN {
> +	use lib split /@@PATHSEP@@/,
> +	(
> +		$ENV{GITPERLLIB}
> +		||
> +		do {
> +			require FindBin;
> +			require File::Spec;
> +			my $gitexecdir_relative = '@@GITEXECDIR@@';
> +			my $perllibdir_relative = '@@PERLLIBDIR@@';
> +
> +			($FindBin::Bin =~ m=${gitexecdir_relative}$=) ||
> +			    die('Unrecognized runtime path.');
> +			my $prefix = substr($FindBin::Bin, 0, -length($gitexecdir_relative));
> +			my $perllibdir = File::Spec->catdir($prefix, $perllibdir_relative);
> +			(-e $perllibdir) || die("Invalid library path: $perllibdir");
> +			$perllibdir;
> +		}
> +	);
> +}
> +# END RUNTIME_PREFIX_PERL generated code.

Ah, I see. To answer my own question in
<87lgiovokg.fsf@evledraar.booking.com> you're making this stuff a
relative path so you can use it here later on. I.e. we $FindBin::Bin,
and then go from there. Makes sense.

We could use $ENV{GIT_EXEC_PATH} instead of FindBin here though, I
missed that the first time. But that's just a nano-optimization. I just
wondered whether git wasn't already passing us this info.

There is one remaining bug here. Git::I18N isn't doing the right thing,
I installed in /tmp/git and moved to /tmp/git2, and it has:

    our $TEXTDOMAINDIR = $ENV{GIT_TEXTDOMAINDIR} || '/tmp/git/share/locale';

And GIT_TEXTDOMAINDIR is not passed by git (it's only used for the tests
IIRC). Would need a similar treatment as this. Easiest to just set the
path we find here in $Git::Whatever and pick it up in $Git::I18N later,
it's not like anyone uses it outside of git.git.

But that does raise a more general concern for me. Isn't there some way
we can run the test suite against an installed git (don't remember),
then build, install, move the dir, and run the tests from the moved dir.

That would have caught this bug, and anything else that may be lurking
still.

  reply	other threads:[~2017-11-29 21:00 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-29 15:56 [PATCH v4 0/4] RUNTIME_PREFIX relocatable Git Dan Jacques
2017-11-29 15:56 ` [PATCH v4 1/4] Makefile: generate Perl header from template file Dan Jacques
2017-12-01 16:59   ` Johannes Sixt
2017-12-01 17:13     ` Johannes Schindelin
2017-12-01 17:25       ` Johannes Sixt
2017-12-01 18:18         ` Dan Jacques
2017-12-01 18:52           ` Andreas Schwab
2017-12-05 20:54         ` Johannes Sixt
2017-12-05 21:17           ` Junio C Hamano
2017-12-05 21:26           ` Dan Jacques
2017-12-05 21:35             ` Junio C Hamano
2017-12-06 18:25               ` Johannes Sixt
2017-12-06 18:47                 ` Junio C Hamano
2017-12-06 18:56                   ` Daniel Jacques
2017-12-06 19:01                     ` Ævar Arnfjörð Bjarmason
2017-12-08 21:15                       ` Ævar Arnfjörð Bjarmason
2018-04-23 23:23                 ` [PATCH dj/runtime-prefix 0/2] Handle $IFS in $INSTLIBDIR Jonathan Nieder
2018-04-23 23:24                   ` [PATCH 1/2] Makefile: remove unused @@PERLLIBDIR@@ substitution variable Jonathan Nieder
2018-04-24  2:11                     ` Junio C Hamano
2018-04-23 23:25                   ` [PATCH 2/2] Makefile: quote $INSTLIBDIR when passing it to sed Jonathan Nieder
2018-04-24  0:53                     ` Junio C Hamano
2018-04-24  2:18                       ` [PATCH 2/2 v2] " Jonathan Nieder
2018-04-24  2:56                         ` Daniel Jacques
2017-12-03  5:26     ` [PATCH v4 1/4] Makefile: generate Perl header from template file Junio C Hamano
2017-12-03  9:26       ` Ævar Arnfjörð Bjarmason
2017-11-29 15:56 ` [PATCH v4 2/4] Makefile: add support for "perllibdir" Dan Jacques
2017-11-29 20:04   ` Ævar Arnfjörð Bjarmason
2017-11-29 15:56 ` [PATCH v4 3/4] Makefile: add Perl runtime prefix support Dan Jacques
2017-11-29 21:00   ` Ævar Arnfjörð Bjarmason [this message]
2017-12-02 15:47     ` [PATCH v4 3/4] RUNTIME_PREFIX relocatable Git Dan Jacques
2017-11-29 21:04   ` [PATCH v4 3/4] Makefile: add Perl runtime prefix support Ævar Arnfjörð Bjarmason
2017-11-29 15:56 ` [PATCH v4 4/4] exec_cmd: RUNTIME_PREFIX on some POSIX systems Dan Jacques
2017-11-29 21:12 ` [PATCH v4 0/4] RUNTIME_PREFIX relocatable Git Ævar Arnfjörð Bjarmason
2017-11-29 22:38   ` Dan Jacques

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87k1y8vlzs.fsf@evledraar.booking.com \
    --to=avarab@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=dnj@google.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).