Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 05 Dec 2000 03:47:19 +0900
From:      "Akinori MUSHA" <knu@iDaemons.org>
To:        Maxim Sobolev <sobomax@FreeBSD.org>
Cc:        Michael Haro <mharo@FreeBSD.org>, FreeBSD-ports <freebsd-ports@FreeBSD.org>
Subject:   Re: portlint update
Message-ID:  <86r93ovxag.wl@archon.local.idaemons.org>
In-Reply-To: <3A2BBF80.9CC69A1E@FreeBSD.org>
References:  <86u28kwghs.wl@archon.local.idaemons.org> <3A2B895D.D67E403A@FreeBSD.org> <86sno4w5g6.wl@archon.local.idaemons.org> <3A2BBF80.9CC69A1E@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
At Mon, 04 Dec 2000 18:00:00 +0200,
sobomax wrote:
> Maybe it would be better to add MASTER_SITES_ALL variable into bsd.sites.mk, which will contain all MASTER_SITE_*? Then it could be easily
> dumped with make -V MASTER_SITES_ALL, thus eliminating the need for parsing bsd.sites.mk directly.

Hmm.. is it really worth having it when it costs only three lines of
perl code to parse bsd.sites.mk?

Anyway, here's the complete list of updated/fixed features:

- Conform to the new port layout.

- Add "INSTALLS_SHLIB may be missing" checker which searches pkg-plist
for `*.so' and `*.so.<nn>'.

- Make it dynamically read bsd.sites.mk so that we no longer need to
keep it always in sync with bsd.sites.mk.  It now should recognize
`/%SUBDIR%/' part too.

- Fix "use ldconfig with ||/usr/bin/true" checker. (sobomax)

- Fix "include the country code in the module alias name" warning.
Besides, "country code" is corrected to "language code".

- Change `split(/\s+/, "blah blah blah")' to `qw(blah blah blah)'.

- Properly omit the checks against PORTNAME section etc. when the
testee is a slave port.

- Add some dummy comments that prevent Emacs' CPerl mode from
confusing.

- Add french and hebrew to the list of lang-specific categories.

- Add a condition "unless this is a master port" to the warnings that
are specific to master ports, because currently we can't know if a
port is a master port.


.. and a new patch, as attached.

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"We're only at home when we're on the run, on the wing, on the fly"

Index: Makefile
===================================================================
RCS file: /home/ncvs/ports/devel/portlint/Makefile,v
retrieving revision 1.41
diff -u -r1.41 Makefile
--- Makefile	2000/11/10 07:43:54	1.41
+++ Makefile	2000/12/04 17:52:00
@@ -8,7 +8,7 @@
 #
 
 PORTNAME=	portlint
-PORTVERSION=	2.2.3.1
+PORTVERSION=	2.2.4
 CATEGORIES=	devel
 MASTER_SITES=	# none
 DISTFILES=	# none
Index: src/portlint.1
===================================================================
RCS file: /home/ncvs/ports/devel/portlint/src/portlint.1,v
retrieving revision 1.5
diff -u -r1.5 portlint.1
--- src/portlint.1	2000/04/25 21:33:42	1.5
+++ src/portlint.1	2000/12/04 11:36:35
@@ -38,7 +38,7 @@
 Perform additional checks for extra files, such as
 .Pa scripts/*
 and
-.Pa pkg/* .
+.Pa pkg-* .
 .It Fl b
 Warn the use of
 .Pa $(VARIABLE) .
Index: src/portlint.pl
===================================================================
RCS file: /home/ncvs/ports/devel/portlint/src/portlint.pl,v
retrieving revision 1.23
diff -u -r1.23 portlint.pl
--- src/portlint.pl	2000/11/10 07:20:43	1.23
+++ src/portlint.pl	2000/12/04 18:40:12
@@ -22,6 +22,7 @@
 
 use vars qw/ $opt_a $opt_b $opt_c $opt_h $opt_t $opt_v $opt_M $opt_N $opt_B $opt_V /;
 use Getopt::Std;
+use IPC::Open2;
 #use strict;
 
 my ($err, $warn);
@@ -60,19 +61,25 @@
 my $manchapters = '123456789ln';
 my $localbase = '/usr/local';
 
-my @lang_cat = split(/\s+/, <<EOF);
-chinese german japanese korean russian vietnamese
-EOF
-my @lang_pref = split(/\s+/, <<EOF);
-de ja ko ru vi zh
-EOF
-my $re_lang_pref = '(' . join('|', @lang_pref) . ')';
+my %lang_pref = qw(
+	chinese		zh
+	french		fr
+	german		de
+	hebrew		iw
+	japanese	ja
+	korean		ko
+	russian		ru
+	vietnamese	vi
+);
+my @lang_cat = keys %lang_pref;
+my @lang_pref = values %lang_pref;
+my $re_lang_pref = '(' . join('|', @lang_pref) . ')-';
 
 my ($prog) = ($0 =~ /([^\/]+)$/);
 sub usage {
 	print STDERR <<EOF;
 usage: $prog [-abctvN] [-B#] [port_directory]
-	-a	additional check for scripts/* and pkg/*
+	-a	additional check for scripts/* and pkg-*
 	-b	warn \$(VARIABLE)
 	-c	committer mode
 	-v	verbose mode
@@ -146,17 +153,15 @@
 chdir "$portdir" || die "$portdir: $!";
 
 # get make vars
-my $cmd = "make $makeenv MASTER_SITE_BACKUP=''";
-my @varlist =  (split(/\s+/, <<EOF));
-PORTNAME PORTVERSION PORTREVISION PORTEPOCH PKGNAME PKGNAMEPREFIX
-PKGNAMESUFFIX DISTNAME DISTFILES CATEGORIES MASTERDIR MAINTAINER
-MASTER_SITES WRKDIR WRKSRC NO_WRKSUBDIR PATCHDIR SCRIPTDIR FILESDIR
-PKGDIR COMMENT DESCR PLIST MD5_FILE .CURDIR
-EOF
+my @varlist =  qw(
+	PORTNAME PORTVERSION PORTREVISION PORTEPOCH PKGNAME PKGNAMEPREFIX
+	PKGNAMESUFFIX DISTNAME DISTFILES CATEGORIES MASTERDIR MAINTAINER
+	MASTER_SITES WRKDIR WRKSRC NO_WRKSUBDIR PATCHDIR SCRIPTDIR FILESDIR
+	PKGDIR COMMENT DESCR PLIST MD5_FILE .CURDIR INSTALLS_SHLIB
+);
 
-for (@varlist) {
-	$cmd .= " -V $_";
-}
+my $cmd = join(' -V ', "make $makeenv MASTER_SITE_BACKUP=''", @varlist);
+
 my %makevar;
 my $i = 0;
 for (split(/\n/, `$cmd`)) {
@@ -176,170 +181,56 @@
 
 my %predefined = ();
 # historical, no longer in FreeBSD's bsd.sites.mk
-foreach my $i (split("\n", <<EOF)) {
-GNU 		ftp://prep.ai.mit.edu/pub/gnu/
-GNU		ftp://wuarchive.wustl.edu/systems/gnu/
-GNU		ftp://ftp.ecrc.net/pub/gnu/
-PERL_CPAN	ftp://ftp.cdrom.com/pub/perl/CPAN/modules/by-module/
-SUNSITE		ftp://sunsite.unc.edu/pub/Linux/
-SUNSITE		ftp://ftp.funet.fi/pub/mirrors/sunsite.unc.edu/pub/Linux/
-SUNSITE		ftp://ftp.infomagic.com/pub/mirrors/linux/sunsite/
-TEX_CTAN	ftp://ftp.cdrom.com/pub/tex/ctan/
-TEX_CTAN	ftp://ftp.tex.ac.uk/public/ctan/tex-archive/
-GNOME		ftp://ftp.cybertrails.com/pub/gnome/
-AFTERSTEP	ftp://ftp.alpha1.net/pub/mirrors/ftp.afterstep.org/
-AFTERSTEP	ftp://casper.yz.yamagata-u.ac.jp/pub/X11/apps/afterstep/
-WINDOWMAKER	ftp://ftp.io.com/pub/
+foreach my $i (split(/\n/, <<EOF)) {
+GNU 		ftp://prep.ai.mit.edu/pub/gnu/%SUBDIR%/
+GNU			ftp://wuarchive.wustl.edu/systems/gnu/%SUBDIR%/
+GNU			ftp://ftp.ecrc.net/pub/gnu/%SUBDIR%/
+PERL_CPAN	ftp://ftp.cdrom.com/pub/perl/CPAN/modules/by-module/%SUBDIR%/
+SUNSITE		ftp://sunsite.unc.edu/pub/Linux/%SUBDIR%/
+SUNSITE		ftp://ftp.funet.fi/pub/mirrors/sunsite.unc.edu/pub/Linux/%SUBDIR%/
+SUNSITE		ftp://ftp.infomagic.com/pub/mirrors/linux/sunsite/%SUBDIR%/
+TEX_CTAN	ftp://ftp.cdrom.com/pub/tex/ctan/%SUBDIR%/
+TEX_CTAN	ftp://ftp.tex.ac.uk/public/ctan/tex-archive/%SUBDIR%/
+GNOME		ftp://ftp.cybertrails.com/pub/gnome/%SUBDIR%/
+AFTERSTEP	ftp://ftp.alpha1.net/pub/mirrors/ftp.afterstep.org/%SUBDIR%/
+AFTERSTEP	ftp://casper.yz.yamagata-u.ac.jp/pub/X11/apps/afterstep/%SUBDIR%/
+WINDOWMAKER	ftp://ftp.io.com/pub/%SUBDIR%/
 EOF
 	my ($j, $k) = split(/\t+/, $i);
 	$predefined{$k} = $j;
 }
+
+# Read bsd.sites.mk
+$sites_mk = "$portsdir/Mk/bsd.sites.mk";
+open(MK, $sites_mk) || die "$sites_mk: $!";
+my @site_groups = grep($_ = /^MASTER_SITE_(\w+)/ && $1, <MK>);
+close(MK);
+
+my $cmd = join(' -V MASTER_SITE_', "make $makeenv -f - all", @site_groups);
+
+my $i = 0;
+
+open2(IN, OUT, $cmd);
 
-# This list should be in sync with bsd.sites.mk
-foreach my $i (split("\n", <<EOF)) {
-XCONTRIB	ftp://crl.dec.com/pub/X11/contrib/
-XCONTRIB	ftp://uiarchive.uiuc.edu/pub/X11/contrib/
-XCONTRIB	ftp://ftp.gwdg.de/pub/x11/x.org/contrib/
-XCONTRIB	ftp://ftp.duke.edu/pub/X11/contrib/
-XCONTRIB	ftp://ftp.x.org/contrib/
-XCONTRIB	ftp://ftp.sunet.se/pub/X11/contrib/
-XCONTRIB	ftp://ftp.kddlabs.co.jp/X11/contrib/
-XCONTRIB	ftp://mirror.xmission.com/X/contrib/
-XCONTRIB	ftp://ftp2.x.org/contrib/
-XCONTRIB	ftp://sunsite.sut.ac.jp/pub/archives/X11/contrib/
-XCONTRIB	ftp://ftp.is.co.za/x/contrib/
-XCONTRIB	ftp://ftp.sunet.se/pub/X11/contrib/
-XCONTRIB	ftp://ftp.huji.ac.il/mirror/X11/contrib/
-XFREE	ftp://ftp.xfree86.org/pub/XFree86/
-XFREE	ftp://ftp.freesoftware.com/pub/XFree86/
-XFREE	ftp://ftp.lip6.fr/pub/X11/XFree86/XFree86-
-XFREE	ftp://ftp.cs.tu-berlin.de/pub/X/XFree86/
-XFREE	ftp://sunsite.doc.ic.ac.uk/packages/XFree86/
-XFREE	http://ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.xfree86.org/XFree86/
-GNU	ftp://ftp.gnu.org/gnu/
-GNU	ftp://ftp.freesoftware.com/pub/gnu/
-GNU	ftp://ftp.digital.com/pub/GNU/
-GNU	ftp://ftp.uu.net/archive/systems/gnu/
-GNU	ftp://ftp.de.uu.net/pub/gnu/
-GNU	ftp://ftp.sourceforge.net/pub/mirrors/gnu/
-GNU	ftp://ftp.funet.fi/pub/gnu/prep/
-GNU	ftp://ftp.leo.org/pub/comp/os/unix/gnu/
-GNU	ftp://ftp.digex.net/pub/gnu/
-GNU	ftp://ftp.wustl.edu/systems/gnu/
-GNU	ftp://ftp.kddlabs.co.jp/pub/gnu/
-PERL_CPAN	ftp://ftp.digital.com/pub/plan/perl/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.cpan.org/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.freesoftware.com/pub/perl/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.sourceforge.net/pub/mirrors/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.funet.fi/pub/languages/perl/CPAN/modules/by-module/
-PERL_CPAN	ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/modules/by-module/
-PERL_CPAN	ftp://csociety-ftp.ecn.purdue.edu/archive0/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.kddlabs.co.jp/lang/perl/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.sunet.se/pub/lang/perl/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.auckland.ac.nz/pub/perl/CPAN/modules/by-module/
-PERL_CPAN	ftp://mirror.hiwaay.net/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.isu.net.sa/pub/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.bora.net/pub/CPAN/modules/by-module/
-PERL_CPAN	ftp://uiarchive.uiuc.edu/pub/lang/perl/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/modules/by-module/
-PERL_CPAN	http://www.cpan.dk/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.cs.colorado.edu/pub/perl/CPAN/modules/by-module/
-PERL_CPAN	ftp://cpan.pop-mg.com.br/pub/CPAN/modules/by-module/
-PERL_CPAN	ftp://ftp.is.co.za/programming/perl/CPAN/modules/by-module/
-TEX_CTAN	ftp://ftp.freesoftware.com/pub/tex/ctan/
-TEX_CTAN	ftp://wuarchive.wustl.edu/packages/TeX/
-TEX_CTAN	ftp://ftp.funet.fi/pub/TeX/CTAN/
-TEX_CTAN	ftp://ctan.unsw.edu.au/tex-archive/
-TEX_CTAN	ftp://ftp.cise.ufl.edu/tex-archive/
-TEX_CTAN	ftp://ftp.tex.ac.uk/tex-archive/
-TEX_CTAN	ftp://shadowmere.student.utwente.nl/pub/CTAN/
-TEX_CTAN	ftp://ftp.kddlabs.co.jp/CTAN/
-TEX_CTAN	ftp://sunsite.auc.dk/pub/tex/ctan/
-TEX_CTAN	ftp://ctan.tug.org/tex-archive/
-TEX_CTAN	ftp://ftp.chg.ru/pub/TeX/CTAN/
-TEX_CTAN	ftp://ftp.dante.de/tex-archive/
-SUNSITE	ftp://metalab.unc.edu/pub/Linux/
-SUNSITE	ftp://ftp.freesoftware.com/pub/linux/sunsite/
-SUNSITE	ftp://ftp.sourceforge.net/pub/mirrors/metalab/Linux/
-SUNSITE	ftp://ftp.sun.ac.za/pub/linux/sunsite/
-SUNSITE	ftp://ftp.nuri.net/pub/Linux/
-SUNSITE	ftp://ftp.kddlabs.co.jp//Linux/metalab.unc.edu/
-SUNSITE	ftp://ftp.jaring.my/pub/Linux/
-SUNSITE	ftp://ftp.funet.fi/pub/Linux/mirrors/metalab/
-SUNSITE	ftp://ftp.archive.de.uu.net/pub/systems/Linux/Mirror.SunSITE/
-SUNSITE	ftp://sunsite.doc.ic.ac.uk/packages/linux/sunsite.unc-mirror/
-SUNSITE	ftp://uiarchive.cso.uiuc.edu/pub/systems/linux/sunsite/
-SUNSITE	ftp://ftp.cs.umn.edu/pub/Linux/sunsite/
-KDE	ftp://ftp.us.kde.org/pub/kde/
-KDE	ftp://ftp.sourceforge.net/pub/sourceforge/kde/
-KDE	ftp://ftp.kde.org/pub/kde/
-KDE	ftp://ftp.tuniv.szczecin.pl/pub/kde/
-KDE	ftp://ftp.kddlabs.co.jp/X11/kde/
-KDE	ftp://ftp2.sinica.edu.tw/pub5/wmgrs/kde/
-KDE	ftp://ftp.chg.ru/pub/X11/kde/
-KDE	ftp://ftp.synesis.net/pub/mirrors/kde/
-KDE	ftp://gd.tuwien.ac.at/hci/kde/
-KDE	ftp://ftp.fu-berlin.de/pub/unix/X11/gui/kde/
-KDE	ftp://ftp.twoguys.org/pub/kde/
-KDE	ftp://ftp.dataplus.se/pub/linux/kde/
-KDE	ftp://ftp.fu-berlin.de/pub/unix/X11/gui/kde/
-COMP_SOURCES	ftp://gatekeeper.dec.com/pub/usenet/comp.sources.
-COMP_SOURCES	ftp://ftp.kddlabs.co.jp/Unix/com.sources.
-COMP_SOURCES	ftp://ftp.uu.net/usenet/comp.sources.
-COMP_SOURCES	ftp://ftp.funet.fi/pub/archive/comp.sources.
-COMP_SOURCES	ftp://rtfm.mit.edu/pub/usenet/comp.sources.
-GNOME	ftp://ftp.gnome.org/pub/GNOME/
-GNOME	ftp://download.sourceforge.net/pub/mirrors/gnome/
-GNOME	ftp://rpmfind.net/linux/gnome.org/
-GNOME	ftp://ftp.mirror.ac.uk/sites/ftp.gnome.org/pub/GNOME/
-GNOME	ftp://slave.opensource.captech.com/gnome/
-GNOME	ftp://ftp.snoopy.net/pub/mirrors/GNOME/
-GNOME	ftp://ftp.kddlabs.co.jp/X11/GNOME/
-GNOME	ftp://ftp.sunet.se/pub/X11/GNOME/
-GNOME	ftp://ftp.cybertrails.com/pub/gnome/
-GNOME	ftp://ftp2.sinica.edu.tw/pub5/gnome/
-GNOME	ftp://gnomeftp.blue-labs.org/pub/gnome/
-GNOME	ftp://ftp.informatik.uni-bonn.de/pub/os/unix/gnome/
-GNOME	ftp://ftp.tas.gov.au/gnome/
-AFTERSTEP	ftp://ftp.afterstep.org/
-AFTERSTEP	ftp://ftp.digex.net/pub/X11/window-managers/afterstep/
-AFTERSTEP	ftp://ftp.kddlabs.co.jp/X11/AfterStep/
-AFTERSTEP	ftp://ftp.math.uni-bonn.de/pub/mirror/ftp.afterstep.org/pub/
-AFTERSTEP	ftp://ftp.dti.ad.jp/pub/X/AfterStep/
-WINDOWMAKER	ftp://ftp.windowmaker.org/pub/
-WINDOWMAKER	ftp://ftp.goldweb.com.au/pub/WindowMaker/
-WINDOWMAKER	ftp://ftp.kddlabs.co.jp/X11/window_managers/windowmaker/
-WINDOWMAKER	ftp://ftp.ameth.org/pub/mirrors/ftp.windowmaker.org/
-WINDOWMAKER	ftp://ftp.minet.net/pub/windowmaker/
-WINDOWMAKER	ftp://ftp.dti.ad.jp/pub/X/WindowMaker/
-PORTS_JP	ftp://ports.jp.FreeBSD.org/pub/FreeBSD-jp/ports-jp/LOCAL_PORTS/
-PORTS_JP	ftp://ftp4.jp.FreeBSD.org/pub/FreeBSD-jp/ports-jp/LOCAL_PORTS/
-PORTS_JP	ftp://ftp.ics.es.osaka-u.ac.jp/pub/mirrors/FreeBSD-jp/ports-jp/LOCAL_PORTS/
-TCLTK	ftp://ftp.scriptics.com/pub/tcl/
-TCLTK	ftp://mirror.neosoft.com/pub/tcl/mirror/ftp.scriptics.com/
-TCLTK	ftp://sunsite.utk.edu/pub/tcl/
-TCLTK	ftp://ftp.funet.fi/pub/languages/tcl/tcl/
-TCLTK	ftp://ftp.uu.net/languages/tcl/
-TCLTK	ftp://ftp.kddlabs.co.jp/lang/tcl/ftp.scriptics.com/
-TCLTK	ftp://ftp.cs.tu-berlin.de/pub/tcl/distrib/
-TCLTK	ftp://ftp.srcc.msu.su/mirror/ftp.scriptics.com/pub/tcl/
-TCLTK	ftp://ftp.lip6.fr/pub/tcl/distrib/
-SOURCEFORGE	ftp://download.sourceforge.net/pub/sourceforge/
-SOURCEFORGE	http://download.sourceforge.net/
-SOURCEFORGE	ftp://ftp.kddlabs.co.jp/sourceforge/
-RUBY	ftp://ftp.netlab.co.jp/pub/lang/ruby/
-RUBY	ftp://ftp.TokyoNet.AD.JP/pub/misc/ruby/
-RUBY	ftp://ftp.iij.ad.jp/pub/lang/ruby/
-RUBY	ftp://blade.nagaokaut.ac.jp/pub/lang/ruby/
-RUBY	ftp://ftp.krnet.ne.jp/pub/ruby/
-RUBY	ftp://mirror.nucba.ac.jp/mirror/ruby/
-THEMES	ftp://ftp.themes.org/pub/themes/
-THEMES	ftp://ftp.tuwien.ac.at/opsys/linux/themes.org/
+print OUT <<EOF;
+all:
+	# do nothing
+
+.include "$sites_mk"
 EOF
-	my ($j, $k) = split(/\t+/, $i);
-	$predefined{$k} = $j;
+
+close(OUT);
+
+while (<IN>) {
+	my $g = $site_groups[$i];
+	for my $s (split()) {
+		$predefined{$s} = $g;
+	}
+	$i++;
 }
 
+close(IN);
+
 #
 # check for files.
 #
@@ -347,11 +238,11 @@
 my %checker = ($makevar{COMMENT}, 'checkdescr', $makevar{DESCR}, 'checkdescr',
 		'Makefile', 'checkmakefile', $makevar{MD5_FILE}, 'TRUE');
 if ($extrafile) {
-	foreach my $i ((<scripts/*>, <pkg/*>)) {
+	foreach my $i ((<scripts/*>, <pkg-*>)) {
 		next if (! -T $i);
 		next if (defined $checker{$i});
-		if ($i =~ /pkg\/PLIST$/
-		 || ($multiplist && $i =~ /pkg\/PLIST/)) {
+		if ($i =~ /pkg-plist$/
+		 || ($multiplist && $i =~ /pkg-plist/)) {
 			unshift(@checker, $i);
 			$checker{$i} = 'checkplist';
 		} else {
@@ -360,7 +251,7 @@
 		}
 	}
 }
-foreach my $i (<patches/patch-??>) {
+foreach my $i (<files/patch-*>) {
 	next if (! -T $i);
 	next if (defined $checker{$i});
 	push(@checker, $i);
@@ -373,7 +264,7 @@
 	} else {
 		my $proc = $checker{$i};
 		&$proc($i) || &perror("Cannot open the file $i\n");
-		if ($i !~ /^patches\//) {
+		if ($i !~ /^files\/patch-/) {
 			&checklastline($i)
 				|| &perror("Cannot open the file $i\n");
 		}
@@ -402,7 +293,7 @@
 exit $err;
 
 #
-# pkg/COMMENT, pkg/DESCR
+# pkg-comment, pkg-descr
 #
 sub checkdescr {
 	my($file) = @_;
@@ -434,7 +325,7 @@
 			"other local characters.  $file should be ".
 			"plain ascii file.");
 	}
-	if ($file =~ m/DESCR/ && $tmp =~ m,http://,) {
+	if ($file =~ m/pkg-descr/ && $tmp =~ m,http://,) {
 		my $has_url = 0;
 		my $has_www = 0;
 		foreach my $line (grep($_ =~ "http://", split(/\n+/, $tmp))) {
@@ -448,16 +339,16 @@
 			&perror("FATAL: $file: contains a URL but no WWW:");
 		}
 	}
-	if ($file =~ m/COMMENT/) {
-		if (($tmp !~ /^["0-9A-Z]/) || ($tmp =~ m/\.$/)) {
-			&perror("WARN: pkg/COMMENT should begin with a capital, and end without a period");
+	if ($file =~ m/pkg-comment/) {
+		if (($tmp !~ /^["0-9A-Z]/) || ($tmp =~ m/\.$/)) { #"
+			&perror("WARN: pkg-comment should begin with a capital, and end without a period");
 		}
 	}
 	close(IN);
 }
 
 #
-# pkg/PLIST
+# pkg-plist
 #
 sub checkplist {
 	my($file) = @_;
@@ -501,22 +392,27 @@
 				$inforemoveseen = $.;
 				push(@unexec_info, $1);
 			} elsif ($_ =~ /^\@(exec|unexec)/) {
-				if ($ldconfigwithtrue
-				 && /ldconfig/
-				 && !/\/usr\/bin\/true/) {
-					&perror("FATAL: $file $.: ldconfig ".
-						"must be used with ".
-						"\"||/usr/bin/true\".");
+				if (/ldconfig/) {
+					if ($ldconfigwithtrue
+					 && !/\/usr\/bin\/true/) {
+						&perror("FATAL: $file $.: ldconfig ".
+							"must be used with ".
+							"\"||/usr/bin/true\".");
+					}
+				&perror("WARN: $file $.: possible ".
+					"direct use of ldconfig ".
+					"in PLIST found. use ".
+					"INSTALLS_SHLIB instead.");
 				}
 			} elsif ($_ =~ /^\@(comment)/) {
 				$rcsidseen++ if (/\$$rcsidstr[:\$]/);
 			} elsif ($_ =~ /^\@(owner|group)\s/) {
-				&perror("WARN: \@$1 should not be needed in PLIST");
+				&perror("WARN: \@$1 should not be needed in pkg-plist");
 			} elsif ($_ =~ /^\@(dirrm|option)/) {
 				; # no check made
 			} else {
 				&perror("WARN: $file $.: ".
-					"unknown PLIST directive \"$_\"");
+					"unknown pkg-plist directive \"$_\"");
 			}
 			next;
 		}
@@ -531,6 +427,11 @@
 				"please use USE_LIBTOOL in Makefile if possible");
 		}
 
+		if ($_ =~ /\.so(\.\d+)?$/ && $makevar{INSTALLS_SHLIB} eq '') {
+			&perror("WARN: $file $.: installing shared libraries, ".
+				"please define INSTALLS_SHLIB as appropriate");
+		}
+
 		if ($_ =~ /^info\/.*info(-[0-9]+)?$/) {
 			$infoseen = $.;
 			$infoafterinstall++ if ($infoinstallseen);
@@ -591,10 +492,10 @@
 	foreach my $if (@infofile) {
 		next if ($if =~ m/info-/);
 		if ($exec_install !~ m/\%D\/\Q$if\E/) {
-			&perror("FATAL: you need an '\@exec install-info \%D/$if \%D/info/dir' line in your PLIST");
+			&perror("FATAL: you need an '\@exec install-info \%D/$if \%D/info/dir' line in your pkg-plist");
 		}
 		if ($unexec_install !~ m/\%D\/$if/) {
-			&perror("FATAL: you need an '\@unexec install-info --delete \%D/$if \%D/info/dir' line in your PLIST");
+			&perror("FATAL: you need an '\@unexec install-info --delete \%D/$if \%D/info/dir' line in your pkg-plist");
 		}
 	}
 
@@ -700,6 +601,7 @@
 	my($i, $j, $k, $l);
 	my @cat = ();
 	my $has_lang_cat = 0;
+	my $lang_pref = '';
 	my $tmp;
 	my $bogusdistfiles = 0;
 	my @varnames = ();
@@ -832,10 +734,10 @@
 	#
 	my %cmdnames = ();
 	print "OK: checking direct use of command names.\n" if ($verbose);
-	foreach my $i (split(/\s+/, <<EOF)) {
+	foreach my $i (qw(
 awk basename cat chmod chown cp echo expr false gmake grep gzcat
 ldconfig ln md5 mkdir mv patch rm rmdir sed sh touch tr which xmkmf
-EOF
+	)) {
 		$cmdnames{$i} = "\$\{\U$i\E\}";
 	}
 	$cmdnames{'env'} = '${SETENV}';
@@ -847,7 +749,7 @@
 	# note that we leave the command as is, since we need to check the
 	# use of echo itself.
 	$j = $whole;
-	$j =~ s/([ \t][\@-]?)(echo|\$[\{\(]ECHO[\}\)]|\$[\{\(]ECHO_MSG[\}\)])[ \t]+("(\\'|\\"|[^"])*"|'(\\'|\\"|[^'])*')[ \t]*[;\n]/$1$2;/;
+	$j =~ s/([ \t][\@-]?)(echo|\$[\{\(]ECHO[\}\)]|\$[\{\(]ECHO_MSG[\}\)])[ \t]+("(\\'|\\"|[^"])*"|'(\\'|\\"|[^'])*')[ \t]*[;\n]/$1$2;/; #"
 	foreach my $i (keys %cmdnames) {
 		if ($j =~ /[ \t\/]$i[ \t\n;]/
 		 && $j !~ /\n[A-Z]+_TARGET[?+]?=[^\n]+$i/) {
@@ -990,36 +892,32 @@
 	$tmp = $sections[$idx++];
 
 	# check the order of items.
-	&checkorder('PORTNAME', $tmp, split(/\s+/, <<EOF));
+	&checkorder('PORTNAME', $tmp, qw(
 PORTNAME PORTVERSION PORTREVISION PORTEPOCH CATEGORIES MASTER_SITES
 MASTER_SITE_SUBDIR PKGNAMEPREFIX PKGNAMESUFFIX DISTNAME EXTRACT_SUFX
 DISTFILES DIST_SUBDIR EXTRACT_ONLY
-EOF
+	));
 
 	# check the items that has to be there.
 	$tmp = "\n" . $tmp;
 	print "OK: checking PORTNAME/PORTVERSION.\n" if ($verbose);
 	if ($tmp !~ /\nPORTNAME(.)?=/) {
 		&perror("FATAL: PORTNAME has to be there.") unless ($slaveport && $makevar{PORTNAME} ne '');
-	}
-	if ($1 ne '') {
-		&perror("WARN: PORTNAME has to be set by \"=\", ".
+	} elsif ($1 ne '') {
+		&perror("WARN: unless this is a master port, PORTNAME has to be set by \"=\", ".
 			"not by \"$1=\".") unless ($masterport);
 	}
 	if ($tmp !~ /\nPORTVERSION(.)?=/) {
 		&perror("FATAL: PORTVERSION has to be there.") unless ($slaveport && $makevar{PORTVERSION} ne '');
-	}
-	if ($1 ne '') {
-		&perror("WARN: PORTVERSION has to be set by \"=\", ".
+	} elsif ($1 ne '') {
+		&perror("WARN: unless this is a master port, PORTVERSION has to be set by \"=\", ".
 			"not by \"$1=\".") unless ($masterport);
 	}
 	print "OK: checking CATEGORIES.\n" if ($verbose);
-	if ($tmp !~ /\nCATEGORIES(.)?=[ \t]*/) {
+	if ($tmp !~ /\nCATEGORIES(.)?=/) {
 		&perror("FATAL: CATEGORIES has to be there.") unless ($slaveport && $makevar{CATEGORIES} ne '');
-	}
-	$i = $1;
-	if ($i ne '' && $i =~ /[^?+]/) {
-		&perror("WARN: CATEGORIES should be set by \"=\", \"?=\", or \"+=\", ".
+	} elsif (($i = $1) ne '' && $i =~ /[^?+]/) {
+		&perror("WARN: unless this is a master port, CATEGORIES should be set by \"=\", \"?=\", or \"+=\", ".
 			"not by \"$i=\".") unless ($masterport);
 	}
 
@@ -1033,6 +931,7 @@
 	# skip the first category specification if it's a language specific one.
 	if (grep($_ eq $cat[0], @lang_cat)) {
 		$has_lang_cat = 1;
+		$lang_pref = $lang_pref{$cat[0]};
 		shift @cat;
 	}
 	
@@ -1061,8 +960,10 @@
 		shift @cat;
 	
 		# any language specific one after non language specific ones?
-		if (grep(do { my $cat = $_; grep($_ eq $cat, @cat) }, @lang_cat)) {
+		my $cat;
+		if (grep(do { $cat = $_; grep($_ eq $cat, @cat) }, @lang_cat)) {
 			$has_lang_cat = 1;
+			$lang_pref = $lang_pref{$cat};
 			&perror("WARN: when you specify multiple categories, ".
 			"language specific category should come first.");
 		}
@@ -1121,7 +1022,7 @@
 		&perror("WARN: DISTNAME is \${PORTNAME}-\${PORTVERSION} by default, ".
 			"you don't need to define DISTNAME.");
 	}
-	if ($portname =~ /^$re_lang_pref-/) {
+	if ($portname =~ /^$re_lang_pref/) {
 		&perror("FATAL: language prefix is automatically".
 			" set by PKGNAMEPREFIX.".
 			" you must remove it from PORTNAME.");
@@ -1181,7 +1082,7 @@
 
 	# additional checks for committer.
 	if ($committer && $has_lang_cat) {
-		&perror("WARN: be sure to include country code \"$1-\" ".
+		&perror("WARN: be sure to include language code \"$lang_pref-\" ".
 			"in the module alias name.");
 	}
 
@@ -1201,11 +1102,11 @@
 		}
 	}
 
-	push(@varnames, split(/\s+/, <<EOF));
+	push(@varnames, qw(
 PORTNAME PORTVERSION PORTREVISION PORTEPOCH CATEGORIES MASTER_SITES
 MASTER_SITE_SUBDIR PKGNAMEPREFIX PKGNAMESUFFIX DISTNAME EXTRACT_SUFX
 DISTFILES EXTRACT_ONLY
-EOF
+	));
 
 	#
 	# section 3: PATCH_SITES/PATCHFILES(optional)
@@ -1239,9 +1140,9 @@
 		$idx++;
 	}
 
-	push(@varnames, split(/\s+/, <<EOF));
+	push(@varnames, qw(
 PATCH_SITES PATCHFILES PATCH_DIST_STRIP
-EOF
+	));
 
 	#
 	# section 4: MAINTAINER
@@ -1271,9 +1172,10 @@
 	$tmp = $sections[$idx];
 
 	# NOTE: EXEC_DEPENDS is obsolete, so it should not be listed.
-	@linestocheck = split(/\s+/, <<EOF);
+	@linestocheck = qw(
 LIB_DEPENDS BUILD_DEPENDS RUN_DEPENDS FETCH_DEPENDS DEPENDS DEPENDS_TARGET
-EOF
+	);
+
 	if ($tmp =~ /(LIB_|BUILD_|RUN_|FETCH_)?DEPENDS/) {
 		&checkearlier($file, $tmp, @varnames);
 
@@ -1456,7 +1358,7 @@
 	# check MAN[1-9LN]
 	print "OK: checking MAN[0-9LN].\n" if ($verbose);
 	foreach my $i (keys %plistmanall) {
-		print "OK: PLIST MAN$i=$plistmanall{$i}\n" if ($verbose);
+		print "OK: pkg-plist MAN$i=$plistmanall{$i}\n" if ($verbose);
 	}
 	foreach my $i (split(//, $manchapters)) {
 		if ($tmp =~ /MAN\U$i\E=\s*([^\n]*)\n/) {
@@ -1476,16 +1378,16 @@
 					&perror("FATAL: duplicated manpage ".
 						"entry $j: content of ".
 						"MAN$i will be automatically ".
-						"added to PLIST.");
+						"added to pkg-plist.");
 				} elsif (!$automan && !grep($_ eq $j, @pman)) {
 					&perror("WARN: manpage $j in $file ".
-						"MAN$i but not in PLIST.");
+						"MAN$i but not in pkg-plist.");
 				}
 			}
 			foreach my $j (@pman) {
-				print "OK: checking $j (PLIST)\n" if ($verbose);
+				print "OK: checking $j (pkg-plist)\n" if ($verbose);
 				if (!grep($_ eq $j, @mman)) {
-					&perror("WARN: manpage $j in PLIST ".
+					&perror("WARN: manpage $j in pkg-plist ".
 						"but not in $file MAN$i.");
 				}
 			}
@@ -1641,13 +1543,13 @@
 	my($pre);
 
 	# ignore parameter string to echo command
-	$str =~ s/[ \t][\@-]?(echo|\$[\{\(]ECHO[\}\)]|\$[\{\(]ECHO_MSG[\}\)])[ \t]+("(\\'|\\"|[^"])*"|'(\\'|\\"|[^"])*')[ \t]*[;\n]//;
+	$str =~ s/[ \t][\@-]?(echo|\$[\{\(]ECHO[\}\)]|\$[\{\(]ECHO_MSG[\}\)])[ \t]+("(\\'|\\"|[^"])*"|'(\\'|\\"|[^"])*')[ \t]*[;\n]//; #'
 
 	print "OK: checking direct use of full pathnames in $file.\n"
 		if ($verbose);
 	foreach my $s (split(/\n+/, $str)) {
 		$i = '';
-		if ($s =~ /(^|[ \t\@'"-])(\/[\w\d])/) {
+		if ($s =~ /(^|[ \t\@'"-])(\/[\w\d])/) { #'
 			# suspected pathnames are recorded.
 			$i = $2 . $';
 			$pre = $` . $1;
@@ -1659,7 +1561,7 @@
 		}
 		if ($i ne '') {
 			$i =~ s/\s.*$//;
-			$i =~ s/['"].*$//;
+			$i =~ s/['"].*$//; #'
 			$i = substr($i, 0, 20) . '...' if (20 < length($i));
 			&perror("WARN: possible use of absolute pathname ".
 				"\"$i\", in $file.") unless ($i =~ m,^/compat/,);
@@ -1699,16 +1601,18 @@
 
 sub is_predefined {
 	my($url) = @_;
-	my($site);
-	my($subdir);
-	if ($site = (grep($url =~ $_, keys %predefined))[0]) {
-		$url =~ /$site/;
-		$subdir = $';
-		$subdir =~ s/\/$//;
-		&perror("WARN: how about using ".
-			"\${MASTER_SITE_$predefined{$site}} with ".
-			"\"MASTER_SITE_SUBDIR=$subdir\", instead of \"$url\?");
-		return &TRUE;
+	my($site, $site_re);
+	my $subdir_re = quotemeta quotemeta '/%SUBDIR%/';
+	for my $site (keys %predefined) {
+		$site_re = quotemeta $site;
+		$site_re =~ s,$subdir_re,/(.*)/,;
+
+		if ($url =~ /$site_re/) {
+			&perror("WARN: how about using ".
+				"\"\${MASTER_SITE_$predefined{$site}}\" with ".
+				"\"MASTER_SITE_SUBDIR=$1\", instead of \"$url\"?");
+			return &TRUE;
+		}
 	}
 	undef;
 }
@@ -1726,10 +1630,14 @@
 	&perror("FATAL: URL \"$url\" contains ".
 				"extra \":\".");
 	}
-	if ($osname == 'FreeBSD' && $url =~ m#(www.freebsd.org)/~.+/#i) {
+	if ($osname == 'FreeBSD' && $url =~ m#(www\.freebsd\.org)/~.+/#i) {
 		&perror("WARN: URL \"$url\", ".
 			"$1 should be ".
 			"people.FreeBSD.org");
 	}
 }
 sub TRUE {1;}
+
+# Local variables:
+# tab-width: 4
+# End:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86r93ovxag.wl>