aboutsummaryrefslogtreecommitdiff
path: root/ports-mgmt
diff options
context:
space:
mode:
authorJoe Marcus Clarke <marcus@FreeBSD.org>2014-10-26 18:34:52 +0000
committerJoe Marcus Clarke <marcus@FreeBSD.org>2014-10-26 18:34:52 +0000
commitf48db5d3707a5d7ef1b8d507f0545ad955777940 (patch)
treed67f4a56d48ca3ed21f6ec8c5e69b0cc9520195b /ports-mgmt
parent1284c16200002e21da13c5ebb4fcbfa0a723254e (diff)
downloadports-f48db5d3707a5d7ef1b8d507f0545ad955777940.tar.gz
ports-f48db5d3707a5d7ef1b8d507f0545ad955777940.zip
Notes
Diffstat (limited to 'ports-mgmt')
-rw-r--r--ports-mgmt/portlint/Makefile2
-rw-r--r--ports-mgmt/portlint/src/portlint.pl524
2 files changed, 136 insertions, 390 deletions
diff --git a/ports-mgmt/portlint/Makefile b/ports-mgmt/portlint/Makefile
index 652741d2d030..ab9a8119ce9a 100644
--- a/ports-mgmt/portlint/Makefile
+++ b/ports-mgmt/portlint/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= portlint
-PORTVERSION= 2.15.6
+PORTVERSION= 2.16.0
CATEGORIES= ports-mgmt
MASTER_SITES= # none
DISTFILES= # none
diff --git a/ports-mgmt/portlint/src/portlint.pl b/ports-mgmt/portlint/src/portlint.pl
index 4fca6af84eb4..39df8ec28fba 100644
--- a/ports-mgmt/portlint/src/portlint.pl
+++ b/ports-mgmt/portlint/src/portlint.pl
@@ -15,7 +15,7 @@
# was removed.
#
# $FreeBSD$
-# $MCom: portlint/portlint.pl,v 1.340 2014/10/13 05:52:02 marcus Exp $
+# $MCom: portlint/portlint.pl,v 1.342 2014/10/26 18:08:18 marcus Exp $
#
use strict;
@@ -28,7 +28,7 @@ use File::Basename;
use POSIX qw(strftime);
sub perror($$$$);
-our ($opt_a, $opt_A, $opt_b, $opt_C, $opt_c, $opt_g, $opt_h, $opt_m, $opt_t, $opt_v, $opt_M, $opt_N, $opt_B, $opt_V, @ALLOWED_FULL_PATHS, @MASTERSITES_WHITELIST);
+our ($opt_a, $opt_A, $opt_b, $opt_C, $opt_c, $opt_g, $opt_h, $opt_m, $opt_t, $opt_v, $opt_M, $opt_N, $opt_B, $opt_V, @ALLOWED_FULL_PATHS);
my ($err, $warn);
my ($extrafile, $parenwarn, $committer, $verbose, $usetabs, $newport,
@@ -46,33 +46,15 @@ $contblank = 1;
$portdir = '.';
@ALLOWED_FULL_PATHS = qw(/boot/loader.conf /compat/ /dev/null /etc/inetd.conf);
-@MASTERSITES_WHITELIST = qw(googlecode.com nodeload.github.com s3.amazonaws.com);
# version variables
my $major = 2;
-my $minor = 15;
-my $micro = 6;
-
-sub l { '[{(]'; }
-sub r { '[)}]'; }
-sub s { '[ \t]'; }
-
-my $l = &l;
-my $r = &r;
-my $s = &s;
+my $minor = 16;
+my $micro = 0;
# default setting - for FreeBSD
my $portsdir = '/usr/ports';
my $rcsidstr = 'FreeBSD';
-my $multiplist = 0;
-my $ldconfigwithtrue = 0;
-my $rcsidinplist = 0;
-my $mancompress = 1;
-my $manstrict = 0;
-my $newxdef = 1;
-my $automan = 1;
-my $autoinfo = 1;
-my $manchapters = '123456789ln';
my $localbase = '/usr/local';
my $numpitems = 6;
@@ -149,11 +131,6 @@ my $mfile_gids = "${portsdir}/GIDs";
if ($verbose) {
print "OK: config: portsdir: \"$portsdir\" ".
"rcsidstr: \"$rcsidstr\" ".
- "multiplist: $multiplist ".
- "ldconfigwithtrue: $ldconfigwithtrue ".
- "rcsidinplist: $rcsidinplist ".
- "mancompress: $mancompress ".
- "manstrict: $manstrict ".
"localbase: $localbase ".
"\n";
}
@@ -177,10 +154,10 @@ my @varlist = qw(
PKGDIR COMMENT DESCR PLIST PKGCATEGORY PKGINSTALL PKGDEINSTALL
PKGREQ PKGMESSAGE DISTINFO_FILE .CURDIR USE_LDCONFIG USE_AUTOTOOLS
USE_GNOME USE_PERL5 INDEXFILE PKGORIGIN CONFLICTS PKG_VERSION
- PKGINSTALLVER PLIST_FILES PLIST_DIRS PORTDOCS PORTEXAMPLES
+ PLIST_FILES PLIST_DIRS PORTDOCS PORTEXAMPLES
OPTIONS_DEFINE OPTIONS_RADIO OPTIONS_SINGLE OPTIONS_MULTI
OPTIONS_GROUP OPTIONS_SUB INSTALLS_OMF USE_RC_SUBR USES DIST_SUBDIR
- ALLFILES IGNOREFILES CHECKSUM_ALGORITHMS INSTALLS_ICONS GNU_CONFIGURE
+ ALLFILES CHECKSUM_ALGORITHMS INSTALLS_ICONS GNU_CONFIGURE
CONFIGURE_ARGS MASTER_SITE_SUBDIR LICENSE LICENSE_COMB NO_STAGE
DEVELOPER
);
@@ -198,10 +175,6 @@ for (split(/\n/, get_makevar(@varlist))) {
# variables for global checks.
#
my $sharedocused = 0;
-my %plistmanall = ();
-my %plistmangz = ();
-my %plistman = ();
-my %manlangs = ();
my %predefined = ();
@@ -258,8 +231,7 @@ if ($extrafile) {
foreach my $i (@files) {
next if (! -T $i);
next if (defined $checker{$i});
- if ($i =~ /\bpkg-plist$/
- || ($multiplist && $i =~ /\bpkg-plist/)) {
+ if ($i =~ /\bpkg-plist/) {
unshift(@checker, $i);
$checker{$i} = \&checkplist;
} else {
@@ -296,11 +268,6 @@ foreach my $i (@checker) {
}
}
-# Check to make sure there is no pkg-comment file anymore.
-if (-f 'pkg-comment') {
- &perror("FATAL", "", -1, "Use of pkg-comment is obsolete. Use the COMMENT macro within the port's Makefile instead.");
-}
-
if ($committer) {
sub find_proc {
return if /^\.\.?$/;
@@ -407,21 +374,13 @@ sub checkdistinfo {
my($file) = @_;
my($dist_subdir) = $makevar{DIST_SUBDIR};
my(@allfiles) = split (/\s+/, $makevar{ALLFILES});
- my %ignorefiles = ();
my %algorithms = ();
my %records = ();
- foreach my $i (split (/\s+/, $makevar{IGNOREFILES})) {
- $ignorefiles{$i} = 1;
- }
foreach my $i (split (/\s+/, uc ($makevar{CHECKSUM_ALGORITHMS}))) {
$algorithms{$i} = 1;
}
- if (scalar (%ignorefiles)) {
- &perror("WARN", "", -1, "Found IGNOREFILES. It is not recomended.");
- }
-
open(IN, "< $file") || return 0;
while (<IN>) {
if (/^\s*$/) {
@@ -450,7 +409,7 @@ sub checkdistinfo {
my $path = $f;
$path = "$dist_subdir/$f" if $dist_subdir;
- if (!defined($records{$path}{SIZE}) && !$ignorefiles{$f}) {
+ if (!defined($records{$path}{SIZE})) {
&perror("FATAL", $file, -1, "has no SIZE record for $path.");
}
my $n = 0;
@@ -562,16 +521,8 @@ sub checkdescr {
sub checkplist {
my($file) = @_;
my($curdir) = ($localbase);
- my($inforemoveseen, $infoinstallseen, $infoseen) = (0, 0, 0);
- my($infobeforeremove, $infoafterinstall) = (0, 0);
- my($infooverwrite) = (0);
my($rcsidseen) = (0);
- my(@exec_info) = ();
- my(@unexec_info) = ();
- my(@infofile) = ();
-
- my $seen_dirrm_docsdir = 0;
my $seen_special = 0;
my $item_count = 0;
@@ -644,8 +595,18 @@ sub checkplist {
"consult the porter's handbook.");
}
+ if (m'\@cwd') {
+ &perror("WARN", $file, $., "\@cwd is deprecated. Please use ".
+ "absolute pathnames instead.");
+ }
+
+ if (m'\@stopdaemon\s') {
+ &perror("WARN", $file, $., "\@stopdaemon is deprecated. The ".
+ "pkg(8) has a generic mechanism to provide the same function, ".
+ "see HANDLE_RC_SCRIPTS in pkg.conf(5).");
+ }
+
$seen_special++ if /[\%\@]/;
- $seen_dirrm_docsdir++ if /^(\%\%PORTDOCS\%\%)?\@dirrm\s+\%\%DOCSDIR\%\%/ || /^(\%\%PORTDOCS\%\%)?\@unexec\s+(\/bin\/)?rmdir\s+\%D\/\%\%DOCSDIR\%\%\s+2\>\s*\/dev\/null\s+\|\|\s+(\/usr\/bin\/)?true/;
if ($_ =~ /^\@/) {
if ($_ =~ /^\@(cwd|cd)[ \t]+(\S+)/) {
$curdir = $2;
@@ -666,26 +627,14 @@ sub checkplist {
}
&perror("WARN", $file, $., "use \"\@dirrmtry\" ".
"instead of \"\@unexec rmdir\".");
- } elsif (!$autoinfo && $_ =~ /^\@exec[ \t]+install-info\s+(.+)\s+(.+)$/) {
- $infoinstallseen = $.;
- push(@exec_info, $1);
- } elsif (!$autoinfo && $_ =~ /^\@unexec[ \t]+install-info[ \t]+--delete\s+(.+)\s+(.+)$/) {
- $inforemoveseen = $.;
- push(@unexec_info, $1);
- } elsif ($autoinfo && $_ =~ /^\@unexec[ \t]+install-info[ \t]+--delete\s+(.+)\s+(.+)$/) {
+ } elsif ($_ =~ /^\@unexec[ \t]+install-info[ \t]+--delete\s+(.+)\s+(.+)$/) {
&perror("WARN", $file, $., "\@unexec install-info is deprecated in favor of adding info files into the Makefile using the INFO macro.");
} elsif ($_ =~ /^\@(exec|unexec)/) {
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 ".
- "USE_LDCONFIG instead.");
+ &perror("WARN", $file, $., "possible ".
+ "direct use of ldconfig ".
+ "in PLIST found. use ".
+ "USE_LDCONFIG instead.");
}
if (/scrollkeeper/) {
&perror("WARN", $file, $., "possible ".
@@ -697,17 +646,11 @@ sub checkplist {
}
} elsif ($_ =~ /^\@(comment)/) {
$rcsidseen++ if (/\$$rcsidstr[:\$]/);
- } elsif ($_ =~ /^\@(owner|group|mode)\s/) {
- if ($makevar{NO_STAGE}) {
- &perror("WARN", $file, $., "\@$1 should not be needed");
- }
} elsif ($_ =~ m!^\@(dirrm|dirrmtry)\s+/!) {
&perror("WARN", $file, $., "Using \@$1 with absolute path ".
"will not work as you expected in most cases. Use ".
- "pkg-deinstall or \@unexec rmdir ... if you want to ".
- "remove a directory such as /var/\${PORTNAME}");
- } elsif ($_ =~ /^\@(dirrm|option|stopdaemon|rmtry)/) {
- ; # no check made
+ "\@dir... if you want to remove a directory such as ".
+ "/var/\${PORTNAME}");
} elsif ($_ eq "\@cwd") {
; # @cwd by itself means change directory back to the original
# PREFIX.
@@ -718,6 +661,8 @@ sub checkplist {
" file that does not end in ``.sample''. Sample".
" files must end in ``.sample''.");
}
+ } elsif ($_ =~ /^\@(dir|dirrm|dirrmtry|rmtry|option|stopdaemon|owner|group|mode|fc|fcfontsdir|fontsdir|info|shell)\b/) {
+ ; # no check made
} else {
&perror("WARN", $file, $.,
"unknown pkg-plist directive \"$_\"");
@@ -725,11 +670,6 @@ sub checkplist {
next;
}
- if ($_ =~ /^\//) {
- &perror("FATAL", $file, $., "use of full pathname ".
- "disallowed.");
- }
-
if ($_ =~ /charset\.alias$/ || $_ =~ /locale\.alias$/) {
&perror("WARN", $file, $., "installing charset.alias or locale.alias, ".
"please add USES[+]=gettext and use libintl from devel/gettext ".
@@ -791,30 +731,14 @@ sub checkplist {
"If possible, install this file with a different name.");
}
- if ($autoinfo && $_ =~ /\.info$/) {
+ if ($_ =~ /\.info$/) {
&perror("WARN", $file, $., "enumerating info files in the plist is deprecated in favor of adding info files into the Makefile using the INFO macro.");
}
- if ($autoinfo && $_ =~ /\.info-\d+$/) {
+ if ($_ =~ /\.info-\d+$/) {
&perror("FATAL", $file, $., "numbered info files are obsolete and not portable; add info files using the INFO macro in the Makefile.");
}
- if (!$autoinfo) {
- if ($_ =~ /^info\/.*info(-[0-9]+)?$/) {
- $infoseen = $.;
- $infoafterinstall++ if ($infoinstallseen);
- $infobeforeremove++ if (!$inforemoveseen);
- push(@infofile, $_);
- }
-
- if ($_ =~ /^info\/dir$/) {
- &perror("FATAL", $file, $., "\"info/dir\" should not be listed.".
- "Use install-info to add/remove ".
- "an entry.");
- $infooverwrite++;
- }
- }
-
if ($_ =~ /^(\%\%PORTDOCS\%\%)?share\/doc\//) {
&perror("WARN", $file, $., "If and only if your port is ".
"DOCSDIR-safe (that is, a user can override DOCSDIR ".
@@ -855,31 +779,14 @@ sub checkplist {
"accordingly.") unless ($check_xxxdir_ok{$3} eq $1);
}
- if ($_ =~ m#man/([^/]+/)?man([$manchapters])/([^\.]+\.[$manchapters])(\.gz)?$#) {
- if (!$4) {
- $plistman{$2} .= ' ' . $3;
- if ($mancompress) {
- &perror("FATAL", $file, $.,
- "unpacked man file $3 ".
- "listed. must be gzipped.");
- }
- } else {
- $plistmangz{$2} .= ' ' . $3;
- if (!$mancompress) {
- &perror("FATAL", $file, $.,
- "gzipped man file $3$4 ".
- "listed. unpacked one should ".
- "be installed.");
- }
- }
- $plistmanall{$2} .= ' ' . $3;
- if ($1) {
- $manlangs{substr($1, 0, length($1) - 1)}++;
+ if ($_ =~ m#man/([^/]+/)?man[1-9ln]/([^\.]+\.[1-9ln])(\.gz)?$#) {
+ if (!$3) {
+ &perror("FATAL", $file, $., "Unpacked man file $2 listed. ".
+ "Must be gzipped.");
}
}
- if ($curdir !~ m#^$localbase#
- && $curdir !~ m#^/usr/X11R6#) {
+ if ($curdir !~ m#^$localbase#) {
&perror("WARN", $file, $., "installing to ".
"directory $curdir discouraged. ".
"could you please avoid it?");
@@ -894,65 +801,10 @@ sub checkplist {
if (!$seen_special && $item_count < $numpitems) {
&perror("WARN", $file, -1, "There are only $item_count items in the plist. Consider using PLIST_FILES instead of pkg-plist when installing less than $numpitems items.");
-}
-
- if ($sharedocused && !$seen_dirrm_docsdir) {
- &perror("WARN", $file, -1, "Both ``\%\%PORTDOCS\%\%\@dirrm \%\%DOCSDIR\%\%'' and ``\%\%PORTDOCS\%\%\@unexec \%D/\%\%DOCSDIR\%\% 2>/dev/null || true'' are missing. At least one should be used.");
- }
-
- if (!$autoinfo) {
-# check that every infofile has an exec install-info and unexec install-info
- my $exec_install = join(" ", @exec_info);
- $exec_install .= ' ';
- my $unexec_install = join(" ", @unexec_info);
- $unexec_install .= ' ';
-
- foreach my $if (@infofile) {
- next if ($if =~ m/info-/);
- if ($exec_install !~ m/\%D\/\Q$if\E/) {
- &perror("FATAL", $file, -1, "you need an '\@exec install-info \%D/$if \%D/info/dir' line");
- }
- if ($unexec_install !~ m/\%D\/$if/) {
- &perror("FATAL", $file, -1, "you need an '\@unexec install-info --delete \%D/$if \%D/info/dir' line");
- }
- }
- }
-
- if ($rcsidinplist && !$rcsidseen) {
- &perror("FATAL", $file, -1, "RCS tag \"\$$rcsidstr\$\" must be present ".
- "as \@comment.")
- }
-
- if (((!$autoinfo && !$infoseen) || $autoinfo)) {
- close(IN);
- return 1;
- }
-
- if (!$autoinfo && $infoseen) {
- if (!$infoinstallseen) {
- if ($infooverwrite) {
- &perror("FATAL", $file, -1, "install-info must be used to ".
- "add/delete entries into \"info/dir\".");
- }
- &perror("FATAL", $file, -1, "\"\@exec install-info \%D/... \%D/info/dir\" must be placed ".
- "after all the info files.");
- } elsif ($infoafterinstall) {
- &perror("FATAL", $file, $infoinstallseen, "move ".
- "\"\@exec install-info\" line to make ".
- "sure that it is placed after all the info files.");
- }
- if (!$inforemoveseen) {
- &perror("FATAL", $file, -1, "\"\@unexec install-info --delete \%D/... \%D/info/dir\" must ".
- "be placed before any of the info files listed.");
- } elsif ($infobeforeremove) {
- &perror("FATAL", $file, $inforemoveseen, "move ".
- "\"\@exec install-info --delete\" ".
- "line to make sure ".
- "that it is placed before any of the info files. ");
- }
}
close(IN);
+ 1;
}
#
# ${PORTSDIR}/MOVED, UIDs, GIDs files
@@ -1140,11 +992,11 @@ sub check_depends_syntax {
"dir=\"$m{'dir'}\", tgt=\"$m{'tgt'}\"\n"
if ($verbose);
- # check USE_PERL5
+ # check USES=perl5
if ($m{'dep'} =~ /^perl5(\.\d+)?$/) {
&perror("WARN", $file, -1, "dependency to perl5 ".
"listed in $j. consider using ".
- "USE_PERL5.");
+ "USES[+]=perl5.");
}
# Check for ${SITE_PERL} in depends
@@ -1155,11 +1007,11 @@ sub check_depends_syntax {
" for more details.");
}
- # check USE_ICONV
+ # check USES=iconv
if ($m{'dep'} =~ /^(iconv\.\d+)$/) {
&perror("WARN", $file, -1, "dependency to $1 ".
"listed in $j. consider using ".
- "USE_ICONV.");
+ "USES[+]=iconv.");
}
# check USES=gettext
@@ -1170,7 +1022,7 @@ sub check_depends_syntax {
}
# check USES=gmake
- if ($m{'dep'} =~ /^(gmake|\${MAKE_CMD})$/) {
+ if ($m{'dep'} =~ /^(gmake|\${GMAKE})$/) {
&perror("WARN", $file, -1, "dependency to $1 ".
"listed in $j. consider using ".
"USES[+]=gmake.");
@@ -1413,6 +1265,36 @@ sub checkmakefile {
}
#
+ # whole file: use of :LU variable expansion modifiers
+ #
+ print "OK: checking for use of :LU variable expansion modifiers.\n" if ($verbose);
+ if ($whole =~ /\$\{[^}]+:[LU]/m) {
+ my $lineno = &linenumber($`);
+ &perror("FATAL", $file, $lineno, ":U and :L syntax is not supported ".
+ "anymore. Please use :tu and :tl instead.");
+ }
+
+ #
+ # whole file: use of IGNOREFILES
+ #
+ print "OK: checking for use of IGNOREFILES.\n" if ($verbose);
+ if ($whole =~ /\nIGNOREFILES.?=/m) {
+ my $lineno = &linenumber($`);
+ &perror("FATAL", $file, $lineno, "IGNOREFILES considered unsafe and ".
+ "not supported anymore.");
+ }
+
+ #
+ # whole file: use of PLIST_DIRSTRY
+ #
+ print "OK: checking for use of PLIST_DIRSTRY.\n" if ($verbose);
+ if ($whole =~ /\nPLIST_DIRSTRY.?=/m) {
+ my $lineno = &linenumber($`);
+ &perror("WARN", $file, $lineno, "PLIST_DIRSTRY is deprecated. Please ".
+ "use PLIST_DIRS instead.");
+ }
+
+ #
# whole file: PLIST_FILES and PLIST_DIRS
#
print "OK: checking PLIST_FILES and PLIST_DIRS.\n" if ($verbose);
@@ -1533,7 +1415,7 @@ sub checkmakefile {
while ($whole =~ /PORT_OPTIONS:M(\w+)/mg) {
push @mopt, $1;
my $lineno = &linenumber($`) + 1;
- &perror("FATAL", $file, $lineno, "option WITH(OUT)_$1 is used before ".
+ &perror("FATAL", $file, $lineno, "PORT_OPTIONS:M$1 is used before ".
"including bsd.port.pre.mk or bsd.port.options.mk.")
if ($optused && $lineno < $pre_mk_line &&
$lineno < $options_mk_line);
@@ -1654,16 +1536,6 @@ sub checkmakefile {
}
#
- # whole file: USE_SIZE
- #
- print "OK: checking USE_SIZE.\n" if ($verbose);
- if ($whole =~ /\nUSE_SIZE/) {
- my $lineno = &linenumber($`);
- &perror("WARN", $file, $lineno, "use of USE_SIZE is no longer ".
- "required.");
- }
-
- #
# whole file: MACHINE_ARCH
#
print "OK: checking MACHINE_ARCH.\n" if ($verbose);
@@ -1799,14 +1671,22 @@ sub checkmakefile {
$docsused++;
}
print "OK: checking for use of NOPORTDOCS.\n" if ($verbose);
- if ($whole =~ /NOPORTSDOC/) {
+ if ($whole =~ /defined\s*\(?NOPORTDOCS\)?/ ||
+ $whole =~ /def\s*\(?NOPORTDOCS\)?/) {
+ my $lineno = &linenumber($`);
+ &perror("WARN", $file, $lineno, "NOPORTDOCS is deprecated. Please ".
+ "use PORT_OPTIONS:MDOCS instead.");
+ }
+ print "OK: checking for use of NOPORTEXAMPLES.\n" if ($verbose);
+ if ($whole =~ /defined\s*\(?NOPORTEXAMPLES\)?/ ||
+ $whole =~ /def\s*\(?NOPORTEXAMPLES\)?/) {
my $lineno = &linenumber($`);
- &perror("WARN", $file, $lineno, "NOPORTSDOC found. Do you ".
- "mean NOPORTDOCS?");
+ &perror("WARN", $file, $lineno, "NOPORTEXAMPLES is deprecated. Please ".
+ "use PORT_OPTIONS:MEXAMPLES instead.");
}
if ($sharedocused && $whole !~ /defined\s*\(?NOPORTDOCS\)?/
&& $whole !~ /def\s*\(?NOPORTDOCS\)?/) {
- if ($makevar{NO_STAGE} && $docsused == 0
+ if ($docsused == 0
&& $whole !~ m#(\$[\{\(]PREFIX[\}\)]|$localbase)/share/doc/#) {
&perror("WARN", $file, -1, "use \".if \${PORT_OPTIONS:MDOCS}\" to wrap ".
"installation of files into $localbase/share/doc.");
@@ -1867,7 +1747,7 @@ sub checkmakefile {
if ($whole =~ / / || $whole =~ /:cntrl:/) {
my $lineno = &linenumber($`);
&perror("WARN", $file, $lineno, "Possible manual removal of DOS ".
- "line endings found. Consider defining USE_DOS2UNIX instead.");
+ "line endings found. Consider defining USES=dos2unix instead.");
}
#
@@ -1878,8 +1758,8 @@ sub checkmakefile {
foreach my $i (qw(
awk basename brandelf cat chmod chown cp cpio dialog dirname egrep expr
false file find gmake grep gzcat ldconfig ln md5 mkdir mv objcopy paste patch
-pax perl printf rm rmdir pkg_add pkg_delete pkg_info pkg_version
-ruby sed sdl-config sh sort sysctl touch tr which xargs xmkmf
+pax perl printf rm rmdir ruby sed sdl-config sh sort sysctl touch tr which
+xargs xmkmf
)) {
$cmdnames{$i} = "\$\{\U$i\E\}";
}
@@ -1992,19 +1872,6 @@ ruby sed sdl-config sh sort sysctl touch tr which xargs xmkmf
}
#
- # whole file: ldconfig must come with "true" command
- #
- print "OK: checking that ldconfig is properly checked.\n"
- if ($verbose);
- if ($ldconfigwithtrue
- && $j =~ /(ldconfig|\$[{(]LDCONFIG[)}])/
- && $j !~ /(\/usr\/bin\/true|\$[{(]TRUE[)}])/) {
- my $lineno = &linenumber($`);
- &perror("FATAL", $file, $lineno, "ldconfig must be used with ".
- "\"||\${TRUE}\".");
- }
-
- #
# whole file: ${GZIP_CMD} -9 (or any other number)
#
print "OK: checking for compression arguments passed to \${GZIP_CMD}.\n"
@@ -2016,27 +1883,26 @@ ruby sed sdl-config sh sort sysctl touch tr which xargs xmkmf
"sets the compression level.");
}
- if (!$makevar{NO_STAGE}) {
- #
- # whole file: ${CHMOD} used
- #
- print "OK: checking for \${CHMOD}.\n"
- if ($verbose);
- if ($j =~ /\n\s*\${CHMOD}/) {
- my $lineno = &linenumber($`);
- &perror("WARN", $file, $lineno, "possible use of \"\${CHMOD}\" ".
- "found. Use \@owner/\@group operators in pkg-plist instead.");
- }
- #
- # whole file: ${INSTALL} -o | -g used
- #
- print "OK: checking for \${INSTALL} -o | -g.\n"
- if ($verbose);
- if ($j =~ /\n\s*\${INSTALL}(.*-\b(o|g)\b.*)/) {
- my $lineno = &linenumber($`);
- &perror("WARN", $file, $lineno, "possible use of \"\${INSTALL} -o | -g\" ".
- "found. Use \@owner/\@group operators in pkg-plist instead.");
- }
+ #
+ # whole file: ${CHMOD} used
+ #
+ print "OK: checking for \${CHMOD}.\n" if ($verbose);
+ if ($j =~ /\n\s*\${CHMOD}/) {
+ my $lineno = &linenumber($`);
+ &perror("WARN", $file, $lineno, "possible use of \"\${CHMOD}\" ".
+ "found. Use @(owner,group,mode) syntax or \@owner/\@group ".
+ "operators in pkg-plist instead.");
+ }
+
+ #
+ # whole file: ${INSTALL} -o | -g used
+ #
+ print "OK: checking for \${INSTALL} -o | -g.\n" if ($verbose);
+ if ($j =~ /\n\s*\${INSTALL}(.*-\b(o|g)\b.*)/) {
+ my $lineno = &linenumber($`);
+ &perror("WARN", $file, $lineno, "possible use of \"\${INSTALL} -o | -g\" ".
+ "found. Use @(owner,group,mode) syntax or \@owner/\@group ".
+ "operators in pkg-plist instead.");
}
#
@@ -2115,15 +1981,7 @@ ruby sed sdl-config sh sort sysctl touch tr which xargs xmkmf
my $gcc_val = $1;
if ($gcc_val eq 'any' || $gcc_val eq 'yes') {
# Just accept these two.
- } elsif ($gcc_val =~ /3\.[234]\+/) {
- &perror("WARN", $file, $lineno, "USE_GCC=3.2+, USE_GCC=3.3+, ".
- "and USE_GCC=3.4+ are noops on all currently (and future) ".
- "supported versions of FreeBSD. Do not use them.");
- } elsif ($gcc_val eq "4.1+") {
- &perror("WARN", $file, $lineno, "USE_GCC=4.2+ is recommended ".
- "over USE_GCC=4.1+ since the former is the system compiler ".
- "for FreeBSD 7.X.");
- } elsif ($gcc_val !~ /\+/ && $gcc_val ne 'any') {
+ } elsif ($gcc_val !~ /\+/) {
&perror("WARN", $file, $lineno, "Setting a specific version for ".
"USE_GCC should only be done as a last resort. Unless you ".
"have confirmed this port does not build with later ".
@@ -2158,11 +2016,11 @@ ruby sed sdl-config sh sort sysctl touch tr which xargs xmkmf
}
#
- # whole file: check for USE_ANT and USE_MAKE_CMD both defined
+ # whole file: check for USE_ANT and USES=gmake both defined
#
- if ($use_ant && $whole =~ /^USE_MAKE_CMD[?:]?=\s*(.*)$/m) {
+ if ($use_ant && $makevar{USES} !~ /\bgmake\b/) {
&perror("WARN", $file, -1, "a port shall not define both USE_ANT ".
- "and USE_MAKE_CMD");
+ "and USES[+]=gmake");
}
#
@@ -2537,14 +2395,12 @@ DIST_SUBDIR EXTRACT_ONLY
}
# check x11 in CATEGORIES
- if ($newxdef) {
#MICHAEL: I don't understand this line
- if (2 <= @cat && $cat[1] eq "x11") {
- &perror("WARN", $file, -1, "only specific kind of apps should ".
- "specify \"x11\" in CATEGORIES. ".
- "Do you mean just USE_XORG? ".
- "Then remove \"x11\" from CATEGORIES.");
- }
+ if (2 <= @cat && $cat[1] eq "x11") {
+ &perror("WARN", $file, -1, "only specific kind of apps should ".
+ "specify \"x11\" in CATEGORIES. ".
+ "Do you mean just USE_XORG? ".
+ "Then remove \"x11\" from CATEGORIES.");
}
if (2 <= @cat) {
@@ -2595,8 +2451,6 @@ DIST_SUBDIR EXTRACT_ONLY
# check DISTFILES and related items.
$distfiles = $1 if ($tmp =~ /\nDISTFILES[+?]?=[ \t]*([^\n]+)\n/);
- #$portname = $1 if ($tmp =~ /\nPORTNAME[+?]?=[ \t]*([^\n]+)\n/);
- #$portversion = $1 if ($tmp =~ /\nPORTVERSION[+?]?=[ \t]*([^\n]+)\n/);
$portname = $makevar{PORTNAME};
$portversion = $makevar{PORTVERSION};
$distversionprefix = $makevar{DISTVERSIONPREFIX};
@@ -2612,9 +2466,15 @@ DIST_SUBDIR EXTRACT_ONLY
&perror("WARN", $file, -1, "no need to define EXTRACT_SUFX if ".
"DISTFILES is defined.");
}
- if ($extractsufx eq '.tar.gz') {
- &perror("WARN", $file, -1, "EXTRACT_SUFX is \".tar.gz.\" ".
- "by default. you don't need to specify it.");
+ if ($extractsufx =~ /^\.tar\.(bz2|lzma|xz|Z)$/) {
+ my $ext = $1;
+ $ext = 'bzip2' if ($ext eq 'bz2');
+ &perror("WARN", $file, -1, "EXTRACT_SUFX is \".tar.$ext\". ".
+ "Please use USES=tar:$ext instead.");
+ }
+ if ($extractsufx =~ /^\.(tgz|tbz|txz)$/) {
+ &perror("WARN", $file, -1, "EXTRACT_SUFX is \".$1\". ".
+ "Please use USES=tar:$1 instead.");
}
if ($extractsufx eq '.tar.bz2') {
&perror("WARN", $file, -1, "EXTRACT_SUFX is \".tar.bz2.\" ".
@@ -2622,7 +2482,7 @@ DIST_SUBDIR EXTRACT_ONLY
}
if ($extractsufx eq '.zip') {
&perror("WARN", $file, -1, "EXTRACT_SUFX is \".zip\" ".
- "You should use USE_ZIP instead.");
+ "You should use USES[+]=zip instead.");
}
} else {
print "OK: no EXTRACT_SUFX seen, using default value.\n"
@@ -2692,19 +2552,8 @@ DIST_SUBDIR EXTRACT_ONLY
if ($makevar{CONFLICTS}) {
print "OK: checking CONFLICTS.\n" if ($verbose);
foreach my $conflict (split ' ', $makevar{CONFLICTS}) {
- my $selfconflict;
- if ($makevar{PKGINSTALLVER} ne "" &&
- $makevar{PKGINSTALLVER} >= 20040125) {
- $selfconflict = !system($pkg_version, '-T',
- $makevar{PKGNAME}, $conflict);
- } else {
- my $conflictre = $conflict;
- $conflictre =~ s/[.+]/\\$&/g;
- $conflictre =~ s/\*/.*/g;
- $conflictre =~ s/\?/./g;
- $conflictre =~ s/\[!/[^/g;
- $selfconflict = ($makevar{PKGNAME} =~ /^$conflictre$/);
- }
+ `$pkg_version -T '$makevar{PKGNAME}' '$conflict'`;
+ my $selfconflict = !$?;
if ($conflict !~ /(?:[<>=]|[]?*]$)/) {
&perror("WARN", "", -1, "Conflict \"$conflict\" specified too narrow. ".
"You should end it with a wildcard (-[0-9]*).");
@@ -2791,22 +2640,6 @@ DIST_SUBDIR EXTRACT_ONLY
}
}
- if ($committer) {
- if (opendir(DIR, ".")) {
- my @tgz = grep(/\.tgz$/, readdir(DIR));
- closedir(DIR);
-
- if (@tgz) {
- my $tgz = (2 <= @tgz)
- ? '{' . join(',', @tgz) . '}'
- : $tgz[0];
-
- &perror("WARN", "", -1, "be sure to remove $portdir/$tgz ".
- "before committing the port.");
- }
- }
- }
-
push(@varnames, qw(
PORTNAME PORTVERSION PORTREVISION PORTEPOCH CATEGORIES MASTER_SITES
PKGNAMEPREFIX PKGNAMESUFFIX DISTNAME EXTRACT_SUFX
@@ -2970,7 +2803,6 @@ MAINTAINER COMMENT
"for more details.");
}
- # NOTE: EXEC_DEPENDS is obsolete, so it should not be listed.
@linestocheck = qw(
EXTRACT_DEPENDS LIB_DEPENDS PATCH_DEPENDS BUILD_DEPENDS RUN_DEPENDS
TEST_DEPENDS FETCH_DEPENDS DEPENDS_TARGET
@@ -3067,15 +2899,9 @@ TEST_DEPENDS FETCH_DEPENDS DEPENDS_TARGET
"ports/LEGAL.");
}
- # check NO_CONFIGURE/NO_PATCH
- print "OK: checking NO_CONFIGURE/NO_PATCH.\n" if ($verbose);
- if ($tmp =~ /\n(NO_CONFIGURE|NO_PATCH)[+?]?=/) {
- &perror("FATAL", $file, -1, "\"$1\" was obsoleted. remove this.");
- }
-
# check NO_STAGE
if ($makevar{NO_STAGE}) {
- &perror("WARN", $file, -1, "Consider adding STAGE support.");
+ &perror("FATAL", $file, -1, "STAGE support is missing.");
}
# various MAN'uals related checks
@@ -3085,95 +2911,15 @@ TEST_DEPENDS FETCH_DEPENDS DEPENDS_TARGET
"\"\${PREFIX}/lib/perl5/\${PERL_VERSION}\" ".
"when USE_PERL5=configure|modbuild|modbuildtiny is set. You do not need to specify it.");
}
- if ($makevar{NO_STAGE}) {
- # check MAN[1-9LN]
- print "OK: checking MAN[0-9LN].\n" if ($verbose);
- foreach my $i (keys %plistmanall) {
- print "OK: pkg-plist MAN$i=$plistmanall{$i}\n" if ($verbose);
- }
- foreach my $i (split(//, $manchapters)) {
- if ($tmp =~ /\nMAN\U$i\E[+?]=\s*([^\n]*)\n/ &&
- (!$makevar{NO_STAGE} || $makevar{NO_STAGE} eq '')) {
- &perror("FATAL", $file, -1, "when STAGE support is enabled ".
- "you must add your man pages directly to the plist ".
- "with a .gz extension.");
- } elsif ($tmp =~ /\nMAN\U$i\E[+?]=\s*([^\n]*)\n/) {
- print "OK: Makefile MAN\U$i\E=$1\n" if ($verbose);
- }
- }
- if ($tmp =~ /\nMANCOMPRESSED=\s*/ &&
- (!$makevar{NO_STAGE} || $makevar{NO_STAGE} eq '')) {
- &perror("WARN", $file, -1, "when STAGE support is enable, the ".
- "MANCOMPRESSED macro is not supported. The compress-man ".
- "target is able to only compress when it is needed.");
- }
- foreach my $i (split(//, $manchapters)) {
- next if ($i eq '');
- my @mansecs = grep(/^MAN\U$i\E=\s*(.*)/, split(/\n/, $tmp));
- if (scalar @mansecs > 1) {
- &perror("FATAL", $file, -1, "duplicate MAN$i macro. ".
- "Only the last MAN$i macro will be processed. Use ".
- "MAN$i+=... instead to append man pages.");
- }
- if ($tmp =~ /^MAN\U$i\E=\s*([^\n]*)\n/) {
- @mman = grep($_ !~ /^\s*$/, split(/\s+/, $1));
- @pman = grep($_ !~ /^\s*$/,
- split(/\s+/, $plistmanall{$i} // ''));
- foreach my $j (@mman) {
- print "OK: checking $j (Makefile)\n"
- if ($verbose);
- if ($automan && grep($_ eq $j, @pman)) {
- &perror("FATAL", $file, -1, "duplicated manpage ".
- "entry $j: content of ".
- "MAN\U$i\E will be automatically ".
- "added to pkg-plist.");
- } elsif (!$automan && !grep($_ eq $j, @pman)) {
- &perror("WARN", $file, -1, "manpage $j ".
- "MAN\U$i\E but not in pkg-plist.");
- }
- }
- foreach my $j (@pman) {
- print "OK: checking $j (pkg-plist)\n" if ($verbose);
- if (!grep($_ eq $j, @mman)) {
- &perror("WARN", $file, -1, "manpage $j in pkg-plist ".
- "but not in MAN\U$i\E.");
- }
- }
- } else {
- if ($plistmanall{$i}) {
- if ($manstrict) {
- &perror("FATAL", $file, -1, "manpage for chapter ".
- "$i must be listed in ".
- "MAN\U$i\E. ");
- } else {
- &perror("WARN", $file, -1, "manpage for chapter ".
- "$i should be listed in ".
- "MAN\U$i\E, ".
- "even if compression is ".
- "not necessary.");
- }
- }
- if ($mancompress && $plistman{$i}) {
- &perror("WARN", $file, -1, "MAN\U$i\E will help you ".
- "compressing manual page in chapter ".
- "\"$i\".");
- } elsif (!$mancompress && $plistmangz{$i}) {
- &perror("WARN", $file, -1, "MAN\U$i\E will help you ".
- "uncompressing manual page in chapter ".
- "\"$i\".");
- }
- }
- }
- }
- if ($tmp !~ /MANLANG/ && scalar(keys %manlangs)) {
- $i = (keys %manlangs)[0];
- &perror("WARN", $file, -1, "how about using MANLANG for ".
- "designating manual language, such as \"$i\"?");
+
+ if ($tmp =~ /\nMAN[1-9LN][?]?=/) {
+ &perror("FATAL", $file, -1, "MAN[1-9LN] macro is not supported anymore. ".
+ "Please list manpages in plist.");
}
# check INFO
print "OK: checking INFO.\n" if ($verbose);
- if ($autoinfo && $tmp =~ /\nINFO=\s*([^\n]*)\n/) {
+ if ($tmp =~ /\nINFO=\s*([^\n]*)\n/) {
my @minfo = grep($_ !~ /^\s*$/, split(/\s+/, $1));
if ($tmp =~ /[\/|\s]install-info\s/) {
&perror("FATAL", $file, -1, "install-info is automatically run ".
@@ -3185,7 +2931,7 @@ TEST_DEPENDS FETCH_DEPENDS DEPENDS_TARGET
"on files listed in the INFO macro.");
}
}
- } elsif ($autoinfo && $tmp =~ /[\/|\s]install-info\s/) {
+ } elsif ($tmp =~ /[\/|\s]install-info\s/) {
&perror("WARN", $file, -1, "do not call install-info directly. Use the ".
"INFO macro instead.");
}