Re: [PATCH] Allow PERL_PATH="/usr/bin/env perl"
From: Bryan Larsen <hidden>
Date: 2016-06-15 22:43:08
Shawn O. Pearce wrote:
Bryan Larsen [off-list ref] wrote:quoted
The perl scripts start with "#!/usr/bin/perl". There is a mechanism PERL_PATH in the Makefile to change this, but it currently doesn't work with PERL_PATH="/usr/bin/env perl". This is causing problems in MacPorts, where we wish to work with the MacPorts perl if it is installed, but fall back to the system perl if it isn't. Signed-off-by: Bryan Larsen <redacted> --- perl/Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)diff --git a/perl/Makefile b/perl/Makefile index 17d004e..2832cb4 100644 --- a/perl/Makefile +++ b/perl/Makefile@@ -33,7 +33,7 @@ $(makfile): ../GIT-CFLAGS Makefile echo ' echo $(instdir_SQ)' >> $@ else $(makfile): Makefile.PL ../GIT-CFLAGS - '$(PERL_PATH_SQ)' $< PREFIX='$(prefix_SQ)' + $(PERL_PATH_SQ) $< PREFIX='$(prefix_SQ)' endifThis will break if someone actually had ' in their PERL_PATH: PERL_PATH="/path'to'perl" as PERL_PATH_SQ tries to close the single quoted string you don't open anymore. That is because it is defined to be PERL_PATH, but with all ' replaced by '\''.
Actually, we should just use $(PERL_PATH) with no _SQ and no quotes. The user is passing in something that is designed to go in a shebang line: their funny characters are going to be interpreted by the interactive shell to load the perl interpreter; we want "make" to do the same thing.
This change also breaks for anyone who had spaces in their PERL_PATH.
Actually a space didn't work before, but with my patch it works like you'd expect in a shebang line, as the delimiter between the command and it's arguments.
Can I ask why you can't just supply a small wrapper shellscript with MacPorts cat >perl <<EOF #!/bin/sh exec env perl "$@" EOF chmod a+x perl ? Or better yet, supply Git the correct Perl path? If/when we ever go to native Perl libraries again a Git Perl library compiled for the system perl may not work later when the user installs a newer MacPorts perl. Switching automatically to the MacPorts perl without recompiling the native extensions is a little evil...
At that point we just add a single line "depends_lib port:perl5.8" to the Portfile and everything magically works for the user. Right now it's only in the git-svnimport part of the Portfile, which is nice: the user doesn't get multiple megabytes worth of perl unless we also need to install p5-svn-simple. An even better fix can be to drop PERL_PATH from the Makefile and replace the shebang line with "#!/usr/bin/env perl". Much simpler, and the right thing to do, in my opinion. cheers, Bryan