threads / patch / 29474

patchuse 'installsitelib' even with NO_PERL_MAKEMAKER

Subject: [PATCH] use 'installsitelib' even with NO_PERL_MAKEMAKER

## tl;dr

5 messages between Jan 30, 2012 and Feb 6, 2012. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

Nicholas Harteau· Jan 30, 2012, 10:51 UTC · lore

perl/Makefile installs Git.pm into $prefix/lib when ExtUtils::MakeMaker is not present. perl can't "use Git;" in that scenario, as $prefix/lib isn't in perl's include path.

This patch installs Git.pm into perl's 'installsitelib', generally $prefix/lib/perl5/site_perl, so that even when ExtUtils::MakeMaker isn't present, Git.pm gets installed in a location where 'use Git;' just works.

for some additional discussion, see:
https://github.com/mxcl/homebrew/pull/8643
https://github.com/mxcl/homebrew/issues/8620
---
 perl/Makefile |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Show changes to perl/Makefile +1 −1
diff --git a/perl/Makefile b/perl/Makefile
index b2977cd..2199eb1 100644
--- a/perl/Makefile
+++ b/perl/Makefile
@@ -21,7 +21,7 @@ clean:
 	$(RM) $(makfile).old
 
 ifdef NO_PERL_MAKEMAKER
-instdir_SQ = $(subst ','\'',$(prefix)/lib)
+instdir_SQ = $(subst ','\'',$(subst installsitelib=,'',$(shell $(PERL_PATH_SQ) -V:installsitelib)))
 $(makfile): ../GIT-CFLAGS Makefile
 	echo all: private-Error.pm Git.pm > $@
 	echo '	mkdir -p blib/lib' >> $@
-- 
1.7.8.3

--
nicholas harteau
nrh@spotify.com
Nicholas Harteau· Feb 6, 2012, 19:38 UTC · re: Nicholas Harteau · lore

Re: [PATCH] perl/Makefile: use 'installsitelib' even with NO_PERL_MAKEMAKER

This is a boring patch, I know, but it affects anyone doing a vanilla git installation on an os that bundles perl but not ExtUtils::MakeMaker, which is quite common.  Git's own utilities in perl can use Git.pm, but any other perl programs will fail to 'use Git;'
Any takers?
On Jan 30, 2012, at 11:51 AM, Nicholas Harteau wrote:
Show 39 quoted lines
> perl/Makefile installs Git.pm into $prefix/lib when ExtUtils::MakeMaker
> is not present.  perl can't "use Git;" in that scenario, as $prefix/lib
> isn't in perl's include path.
> 
> This patch installs Git.pm into perl's 'installsitelib', generally
> $prefix/lib/perl5/site_perl, so that even when ExtUtils::MakeMaker isn't
> present, Git.pm gets installed in a location where 'use Git;' just
> works.
> 
> for some additional discussion, see:
> https://github.com/mxcl/homebrew/pull/8643
> https://github.com/mxcl/homebrew/issues/8620
> ---
> perl/Makefile |    2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/perl/Makefile b/perl/Makefile
> index b2977cd..2199eb1 100644
> --- a/perl/Makefile
> +++ b/perl/Makefile
> @@ -21,7 +21,7 @@ clean:
> 	$(RM) $(makfile).old
> 
> ifdef NO_PERL_MAKEMAKER
> -instdir_SQ = $(subst ','\'',$(prefix)/lib)
> +instdir_SQ = $(subst ','\'',$(subst installsitelib=,'',$(shell $(PERL_PATH_SQ) -V:installsitelib)))
> $(makfile): ../GIT-CFLAGS Makefile
> 	echo all: private-Error.pm Git.pm > $@
> 	echo '	mkdir -p blib/lib' >> $@
> -- 
> 1.7.8.3
> 
> --
> nicholas harteau
> nrh@spotify.com
> 
> 
> 
> 

-- nicholas harteau nrh@spotify.com

Jeff King· Feb 6, 2012, 20:26 UTC · re: Nicholas Harteau · lore

Re: [PATCH] perl/Makefile: use 'installsitelib' even with NO_PERL_MAKEMAKER

On Mon, Feb 06, 2012 at 02:38:20PM -0500, Nicholas Harteau wrote:
Show 12 quoted lines
> > perl/Makefile installs Git.pm into $prefix/lib when ExtUtils::MakeMaker
> > is not present.  perl can't "use Git;" in that scenario, as $prefix/lib
> > isn't in perl's include path.
> > 
> > This patch installs Git.pm into perl's 'installsitelib', generally
> > $prefix/lib/perl5/site_perl, so that even when ExtUtils::MakeMaker isn't
> > present, Git.pm gets installed in a location where 'use Git;' just
> > works.
> [...]
> > ifdef NO_PERL_MAKEMAKER
> > -instdir_SQ = $(subst ','\'',$(prefix)/lib)
> > +instdir_SQ = $(subst ','\'',$(subst installsitelib=,'',$(shell $(PERL_PATH_SQ) -V:installsitelib)))

Isn't this a regression if I am a non-root user installing into $HOME/local or similar? With MakeMaker, I end up with this in my perl.mak:

  PREFIX = /home/peff/local
  ...
  SITEPREFIX = $(PREFIX)
  ...
  INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.14.2

which works great. Before your patch, without MakeMaker, git would install into /home/peff/local/lib, which is also OK. But with your patch, it will try:

  $ perl -V:installsitelib
  installsitelib='/usr/local/share/perl/5.14.2';
which is not writable by me, and the install will fail.

I know it's more convenient for some uses, because we know that installsitelib will be in perl's @INC. But git has always installed out of the box for non-root users, and I don't think we want to change that.

-Peff
Nicholas Harteau· Feb 6, 2012, 20:30 UTC · re: Jeff King · lore

Re: [PATCH] perl/Makefile: use 'installsitelib' even with NO_PERL_MAKEMAKER

On Feb 6, 2012, at 3:26 PM, Jeff King wrote:
Show 37 quoted lines
> On Mon, Feb 06, 2012 at 02:38:20PM -0500, Nicholas Harteau wrote:
> 
>>> perl/Makefile installs Git.pm into $prefix/lib when ExtUtils::MakeMaker
>>> is not present.  perl can't "use Git;" in that scenario, as $prefix/lib
>>> isn't in perl's include path.
>>> 
>>> This patch installs Git.pm into perl's 'installsitelib', generally
>>> $prefix/lib/perl5/site_perl, so that even when ExtUtils::MakeMaker isn't
>>> present, Git.pm gets installed in a location where 'use Git;' just
>>> works.
>> [...]
>>> ifdef NO_PERL_MAKEMAKER
>>> -instdir_SQ = $(subst ','\'',$(prefix)/lib)
>>> +instdir_SQ = $(subst ','\'',$(subst installsitelib=,'',$(shell $(PERL_PATH_SQ) -V:installsitelib)))
> 
> Isn't this a regression if I am a non-root user installing into
> $HOME/local or similar? With MakeMaker, I end up with this in my
> perl.mak:
> 
>  PREFIX = /home/peff/local
>  ...
>  SITEPREFIX = $(PREFIX)
>  ...
>  INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.14.2
> 
> which works great.  Before your patch, without MakeMaker, git would
> install into /home/peff/local/lib, which is also OK. But with your
> patch, it will try:
> 
>  $ perl -V:installsitelib
>  installsitelib='/usr/local/share/perl/5.14.2';
> 
> which is not writable by me, and the install will fail.
> 
> I know it's more convenient for some uses, because we know that
> installsitelib will be in perl's @INC. But git has always installed out
> of the box for non-root users, and I don't think we want to change that.
Totally correct - let me re-think the non-root case.  Thanks.

-- Nicholas Harteau nrh@spotify.com

Jeff King· Feb 6, 2012, 20:34 UTC · re: Nicholas Harteau · lore

Re: [PATCH] perl/Makefile: use 'installsitelib' even with NO_PERL_MAKEMAKER

On Mon, Feb 06, 2012 at 03:30:54PM -0500, Nicholas Harteau wrote:
Show 10 quoted lines
> >>> ifdef NO_PERL_MAKEMAKER
> >>> -instdir_SQ = $(subst ','\'',$(prefix)/lib)
> >>> +instdir_SQ = $(subst ','\'',$(subst installsitelib=,'',$(shell $(PERL_PATH_SQ) -V:installsitelib)))
> > 
> > Isn't this a regression if I am a non-root user installing into
> > $HOME/local or similar? With MakeMaker, I end up with this in my
> > perl.mak:
> [...]
> 
> Totally correct - let me re-think the non-root case.  Thanks.

I just read the github PR you linked to. It sounds like it might work to just add a knob that the homebrew recipe could tweak to enable this behavior (with the knob off by default).

-Peff

← back to recent threads