the PERL make variable...
Paul Chvostek
paul+fbsd at it.ca
Sun Feb 12 13:38:16 PST 2006
Quoting for context...
On Sun, Feb 12, 2006 at 03:05:32PM -0500, Paul Chvostek wrote:
>
> On a number of occasions when creating ports of Perl scripts, I've
> included a make target with something like:
>
> @${SED} '1s:^#!/usr/bin/perl:#!${PERL}:' < ${_DISTDIR}${DISTFILES} > ${WRKSRC}/...
>
> But the two new ports I submitted last week had this use of PERL removed
> upon commit.
On Sun, Feb 12, 2006 at 10:02:41PM +0100, Jean-Yves Lefort wrote:
>
> > # cd /usr/ports
> > # grep -lr '\${PERL' . | grep -c '/Makefile$'
> > 1933
> > # grep -lr '/usr/bin/perl' . | while read file; do grep -q '\${PERL' $file || echo $file; done | grep -c '/Makefile$'
> > 3
> >
> > Of these three hits, only one appears to assume that the perl binary
> > lives in /usr/bin/perl. (That would be sysutils/reoback.)
>
> # grep '#!/usr/bin/perl' /usr/bin/* /usr/local/bin/* /usr/X11R6/bin/*
...
> Of course, I only have 500 ports installed.
Jean-Yves, this only demonstrates that *your* PERL variable points at
/usr/bin/perl, not what those ports could potentially use. I think
you'll find that all the Perl scripts you've installed in /usr/local/bin
and /usr/X11R6/bin have shell magic controlled by the PERL variable, and
not by a static string. Unless one of them is reoback. :)
> > > It causes your script to break if a 4.x user removes his Perl port.
> >
> > That is expected. If you remove a dependency, the thing that depends on
> > it breaks. How can failing to use make variables improve this?
>
> It'll not break if you hardcode /usr/bin/perl.
It will if you're installing on a machine that has /usr/local/bin/perl.
On an older (4.9) machine I manage at work:
# grep -c '/usr/local/bin/perl' /usr/local/bin/* | awk -F:
'{a+=$2}END{print a}'
85
# grep '/usr/local/bin/perl' /usr/local/bin/* | head -10
Binary file /usr/local/bin/a2p matches
/usr/local/bin/c2ph:#!/usr/local/bin/perl
/usr/local/bin/c2ph: eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
/usr/local/bin/c2ph: #!/usr/local/bin/perl
/usr/local/bin/cpan:#!/usr/local/bin/perl
/usr/local/bin/cpan: eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
/usr/local/bin/crc32:#!/usr/local/bin/perl -w
/usr/local/bin/crc32:eval 'exec /usr/local/bin/perl -w -S $0 ${1+"$@"}'
/usr/local/bin/decode-base64:#!/usr/local/bin/perl
/usr/local/bin/decode-base64:eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
So who knows -- it may not even be only shell magic that needs ${PERL}.
p
--
Paul Chvostek <paul at it.ca>
Operations / Abuse / Whatever
it.canada, hosting and development http://www.it.ca/
More information about the freebsd-ports
mailing list