Subject: Re: pkg/21197: several packages install #!/usr/bin/perl scripts
To: None <>
From: Soren Jacobsen <>
List: tech-pkg
Date: 04/15/2003 23:26:17
On Tue, Apr 15, 2003 at 04:17:00PM -0400, wrote:
> Poking around for useful SMB tools after installing samba, I
> tried to run /usr/pkg/bin/findsmb, only to discover that it is a
> script that starts with "#!/usr/bin/perl". Since perl is installed in
> /usr/pkg/bin/perl, the script doesn't work.
> Here is the set of offenders I found by grepping for /usr/bin/perl in
> /usr/pkg/*bin:
> audio/nas-1.6nb1:		/usr/pkg/bin/auscope
> audio/kdemultimedia-3.1:        /usr/pkg/bin/
> editors/emacs-21.3nb1: 		/usr/pkg/bin/emacs-grep-changelog
> graphics/libungif-  	/usr/pkg/bin/gifburst
> net/kdenetwork-3.1: 		/usr/pkg/bin/dsirc
> net/samba-2.2.8a:   		/usr/pkg/bin/findsmb
> print/ghostscript-6.01nb4:  	/usr/pkg/bin/
> x11/kdebase-3.1: 		/usr/pkg/bin/filesharelist
> 			     	/usr/pkg/bin/fileshareset
> x11/kdelibs-3.1:        	/usr/pkg/bin/preparetips

I've been annoyed by this in the past as well.

How does this solution look? Packages can define PERL_SCRIPTS as
whatever perl scripts they may contain, and they'll be taken care of
accordingly. This is (or should be) a fairly commonly done thing, as
many packages contain perl scripts, and it would make sense to have a
standard way of giving them proper interpreters.

If accepted, I have patches to address the packages Nathan mentioned,
and I'll submit them for other packages (there are a bunch of offending
packages in the mere 240 that I have installed locally) soon after.

RCS file: /cvsroot/pkgsrc/lang/perl5/,v
retrieving revision 1.4
diff -b -u -r1.4
---	2002/09/05 20:43:19	1.4
+++	2003/04/16 06:14:21
@@ -28,4 +28,21 @@
 perl-buildlink: _BUILDLINK_USE
+# PERL_SCRIPTS is defined by packages, and is a list of files, relative to
+# WRKSRC, that will have their interpreter transformed into the correct one.
+.if defined(PERL_SCRIPTS)
+_PERL_SED_COMMAND=	-e "1s|^\#!.*perl|\#!${PERL5}|"
+.for F in ${PERL_SCRIPTS}
+	cd ${WRKSRC};							\
+	${SED} ${_PERL_SED_COMMAND} ${F} > ${F}.new;			\
+	if [ -x ${F} ]; then						\
+		${CHMOD} +x ${F}.new;					\
+	fi;								\
+	${MV} -f ${F}.new ${F}
+post-patch: perl-patch-interpreter
 .endif  # PERL5_BUILDLINK2_MK

Soren Jacobsen