ports/179338: [patch] ports-mgmt/portlint various improvements
Alex Kozlov
spam at rm-rf.kiev.ua
Wed Jun 5 18:10:00 UTC 2013
>Number: 179338
>Category: ports
>Synopsis: [patch] ports-mgmt/portlint various improvements
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed Jun 05 18:10:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Alex Kozlov
>Release: RELENG_10
>Organization:
private
>Environment:
>Description:
- Add check for misspelled (wrong) PORT_OPTIONS
- Change 'Use USE_PKGCONFIG instead.' to 'Use USES+= pkgconfig instead.'
- Add check for ${TRUE}/${FALSE} in DESKTOP_ENTRIES
- Remove CDRTOOLS check
- Remove USE_REINPLACE check, it was deprecated 6+ years ago
- Remove USE_GETOPT_LONG check, it was deprecated 6+ years ago
- Remove old OPTIONS support
- Modify USE_GETTEXT -> USES gettext
- Remove WITHOUT_NLS check
- Relax headers check for $FreeBSD$ + $MCom$ case
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
- Add check for misspelled (wrong) PORT_OPTIONS
- Change 'Use USE_PKGCONFIG instead.' to 'Use USES+= pkgconfig instead.'
- Add check for ${TRUE}/${FALSE} in DESKTOP_ENTRIES
- Remove CDRTOOLS check
- Remove USE_REINPLACE check, it was deprecated 6+ years ago
- Remove USE_GETOPT_LONG check, it was deprecated 6+ years ago
- Remove old OPTIONS support
- Modify USE_GETTEXT -> USES gettext
- Remove WITHOUT_NLS check
- Relax headers check for $FreeBSD$ + $MCom$ case
Index: portlint
@@ -196,7 +196,7 @@
PKGDIR COMMENT DESCR PLIST PKGCATEGORY PKGINSTALL PKGDEINSTALL
PKGREQ PKGMESSAGE DISTINFO_FILE .CURDIR USE_LDCONFIG USE_AUTOTOOLS
USE_GNOME INDEXFILE PKGORIGIN CONFLICTS PKG_VERSION PKGINSTALLVER
- PLIST_FILES OPTIONS OPTIONS_DEFINE INSTALLS_OMF USE_GETTEXT USE_RC_SUBR
+ PLIST_FILES OPTIONS_DEFINE INSTALLS_OMF USE_RC_SUBR USES
DIST_SUBDIR ALLFILES IGNOREFILES CHECKSUM_ALGORITHMS INSTALLS_ICONS
GNU_CONFIGURE CONFIGURE_ARGS MASTER_SITE_SUBDIR LICENSE LICENSE_COMB
);
@@ -705,7 +705,7 @@
if ($_ =~ /charset\.alias$/ || $_ =~ /locale\.alias$/) {
&perror("WARN", $file, $., "installing charset.alias or locale.alias, ".
- "please add USE_GETTEXT=yes and use libintl from devel/gettext ".
+ "please add USES[+]=gettext and use libintl from devel/gettext ".
"instead of from outdated bundled one if possible. ".
"See http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/71531 ".
"for more details.");
@@ -745,9 +745,9 @@
"for more details)");
}
- if ($_ =~ m|\.mo$| && $makevar{USE_GETTEXT} eq '') {
+ if ($_ =~ m|\.mo$| && $makevar{USES} !~ /\bgettext\b/) {
&perror("WARN", $file, $., "installing gettext translation files, ".
- "please define USE_GETTEXT as appropriate");
+ "please define USES[+]=gettext as appropriate.");
}
if ($_ =~ m|\.core$| && $_ !~ /^\@/) {
@@ -1128,11 +1128,11 @@
"USE_ICONV.");
}
- # check USE_GETTEXT
+ # check USES=gettext
if ($m{'dep'} =~ /^(intl\.\d+)$/) {
&perror("WARN", $file, -1, "dependency to $1 ".
"listed in $j. consider using ".
- "USE_GETTEXT.");
+ "USES[+]=gettext.");
}
# check USE_GMAKE
@@ -1156,13 +1156,6 @@
"USE_LIBLTDL.");
}
- # check CDRTOOLS
- if ($m{'dir'} =~ /(cdrtools|cdrtools-cjk)$/) {
- &perror("WARN", $file, -1, "dependency to $1 ".
- "listed in $j. consider using ".
- "USE_CDRTOOLS.");
- }
-
# check GHOSTSCRIPT
if ($m{'dep'} eq "gs") {
&perror("WARN", $file, -1, "dependency to gs ".
@@ -1245,7 +1238,6 @@
my($realwrksrc, $wrksrc, $nowrksubdir) = ('', '', '');
my(@mman, @pman);
my(@mopt, @oopt);
- my(@nmopt, @noopt);
my($pkg_version, $versiondir, $versionfile) = ('', '', '');
my $useindex = 0;
my %deprecated = ();
@@ -1254,8 +1246,7 @@
my $pre_mk_line = 0;
my $options_mk_line = 0;
my $docsused = 0;
- my $nlsused = 0;
- my $newoptused = 0;
+ my $desktop_entries = ();
open(IN, "< $file") || return 0;
$rawwhole = '';
@@ -1342,6 +1333,8 @@
#&perror("FATAL", $file, 3, "do not add extra ".
# "empty comments after header.");
}
+ # special case for $rcsidsrt\n$MCom$
+ } elsif ($lines[1] =~ /^# \$$rcsidstr[:\$]/ and $lines[2] =~ /^#\s+\$MCom[:\$]/ and $lines[3] =~ /^$/) {
} elsif ($lines[1] !~ /^# \$$rcsidstr[:\$]/ or $lines[2] !~ /^$/) {
&perror("FATAL", $file, 1, "incorrect header; ".
"use Created by: with a single space, then \$$rcsidstr\$.");
@@ -1430,7 +1423,6 @@
# whole file: USE_* and others variables used too late
#
my @options_early = qw(
- OPTIONS
OPTIONS_DEFAULT
OPTIONS_DEFINE
OPTIONS_EXCLUDE
@@ -1494,63 +1486,41 @@
}
}
+ @oopt = split(/\s+/, $makevar{OPTIONS_DEFINE});
pos($whole) = 0;
- if ($whole =~ /\nOPTIONS_DEFINE[+?]?=/) {
- $newoptused++;
- }
- @oopt = ($makevar{OPTIONS} =~ /(\w+)\s+\".*?\"\s+\w+/sg);
- @noopt = split(/\s+/, $makevar{OPTIONS_DEFINE});
- if (scalar(@oopt) && $newoptused) {
- &perror("FATAL", $file, -1, "Both old and new OPTIONS are found. ".
- "Remove one or another.");
- }
- if (scalar(@oopt)) {
- &perror("WARN", $file, -1, "Use of OPTIONS is obsolete. Use the ".
- "new options framework.");
- }
- pos($whole) = 0;
- while ($whole =~ /\(?\s*WITH(?:OUT)?_(\w+)\s*\)?/mg) {
+ 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, "option $1 is used before ".
"including bsd.port.pre.mk or bsd.port.options.mk.")
- if (scalar(@oopt) && $lineno < $pre_mk_line &&
- $lineno < $options_mk_line);
+ if (scalar(@oopt) && $lineno < $pre_mk_line &&
+ $lineno < $options_mk_line);
}
foreach my $i (@oopt) {
if (!grep(/^$i$/, @mopt)) {
- &perror("WARN", $file, -1, "$i is listed in OPTIONS, ".
- "but neither WITH_$i nor WITHOUT_$i appears.");
- }
- }
- if ($newoptused) {
- pos($whole) = 0;
- while ($whole =~ /PORT_OPTIONS:M(\w+)/mg) {
- push @nmopt, $1;
- my $lineno = &linenumber($`) + 1;
- &perror("FATAL", $file, $lineno, "option $1 is used before ".
- "including bsd.port.pre.mk or bsd.port.options.mk.")
- if ($newoptused && $lineno < $pre_mk_line &&
- $lineno < $options_mk_line);
- }
- foreach my $i (@noopt) {
- if (!grep(/^$i$/, @nmopt)) {
- &perror("WARN", $file, -1, "$i is listed in OPTIONS_DEFINE, ".
- "but no PORT_OPTIONS:M$i appears.");
- }
+ &perror("WARN", $file, -1, "$i is listed in OPTIONS_DEFINE, ".
+ "but no PORT_OPTIONS:M$i appears.");
}
}
foreach my $i (@mopt) {
- next if ($i eq 'NLS'); # skip WITHOUT_NLS
if (!grep(/^$i$/, @oopt)) {
- # XXX: disable temporarily.
- # OPTIONS is still "in flux"
- #&perror("WARN: $file: WITH_$i or WITHOUT_$i appears, ".
- # "consider using OPTIONS macro.");
+ # skip global options
+ next if ($i eq 'DOCS' or $i eq 'NLS' or $i eq 'EXAMPLES' or $i eq 'IPV6');
+ &perror("WARN", $file, -1, "$i is appears in PORT_OPTIONS:M, ".
+ "but not listed in OPTIONS_DEFINE." );
}
}
#
+ # whole file: check DESKTOP_ENTRIES for ${TRUE}/${FALSE}
+ #
+ print "OK: checking DESKTOP_ENTRIES for \${TRUE}/\${FALSE}.\n" if ($verbose);
+ $desktop_entries = &get_makevar_raw('DESKTOP_ENTRIES');
+ if ($desktop_entries =~ /\${TRUE}/ or $desktop_entries =~ /\${FALSE}/) {
+ &perror("FATAL", $file, -1, "Use true/false instead of \${TRUE}/\${FALSE} in DESKTOP_ENTRIES.");
+ }
+
+ #
# whole file: USE_* as a user-settable option
#
print "OK: checking for USE_* as a user-settable option.\n" if ($verbose);
@@ -1641,16 +1611,6 @@
}
#
- # whole file: USE_REINPLACE
- #
- print "OK: checking for USE_REINPLACE.\n" if ($verbose);
- if ($whole =~ /\nUSE_REINPLACE.?=/) {
- my $lineno = &linenumber($`);
- &perror("WARN", $file, $lineno, "USE_REINPLACE is now obsolete. ".
- "You can safely use REINPLACE_CMD without it.");
- }
-
- #
# whole file: MAKE_JOBS_[UN]SAFE
#
print "OK: checking for MAKE_JOBS_SAFE in combination with NO_BUILD.\n" if ($verbose);
@@ -1665,22 +1625,12 @@
}
#
- # whole file: USE_GETOPT_LONG
- #
- print "OK: checking for USE_GETOPT_LONG.\n" if ($verbose);
- if ($whole =~ /\nUSE_GETOPT_LONG.?=/) {
- my $lineno = &linenumber($`);
- &perror("WARN", $file, $lineno, "USE_GETOPT_LONG is now obsolete. ".
- "You can safely remove this macro from your Makefile.");
- }
-
- #
# whole file: USE_GNOME=pkgconfig
#
print "OK: checking for USE_GNOME=pkgconfig.\n" if ($verbose);
if ($makevar{USE_GNOME} =~ /pkgconfig/) {
&perror("WARN", $file, -1, "USE_GNOME=pkgconfig is now obsolete. ".
- "Use USE_PKGCONFIG instead.");
+ "Use USES[+]= pkgconfig instead.");
}
#
@@ -1740,28 +1690,16 @@
if ($whole =~ /NOPORTDOCS/) {
my $lineno = &linenumber($`);
&perror("WARN", $file, $lineno, "NOPORTDOCS found. Consider ".
- "using PORT_OPTIONS:MDOCS");
+ "using PORT_OPTIONS:MDOCS.");
}
#
- # whole file: check for USE_GETTEXT
+ # whole file: check for USES=gettext
#
- print "OK: checking for USE_GETTEXT without PORT_OPTIONS:MNLS.\n" if ($verbose);
- if ($whole =~ /\nUSE_GETTEXT/ && $whole =~ /PORT_OPTIONS:MNLS/) {
- $nlsused++;
- }
- print "OK: checking for USE_GETTEXT without WITHOUT_NLS.\n" if ($verbose);
- if ($whole =~ /\nUSE_GETTEXT/ && $whole !~ /def(?:ined)?\s*\(?WITHOUT_NLS\)?/) {
- if ($nlsused == 0) {
- &perror("WARN", $file, -1, "Consider adding support for a WITHOUT_NLS ".
- "knob to conditionally disable gettext support.");
- }
- } else {
- $nlsused++;
- }
- if ($nlsused > 1) {
- &perror("FATAL", $file, -1, "Both WITHOUT_NLS and PORT_OPTIONS:MNLS are found. ".
- "Remove one or another.");
+ print "OK: checking for USES=gettext without PORT_OPTIONS:MNLS.\n" if ($verbose);
+ if ($makevar{USES} =~ /\bgettext\b/ && $whole !~ /PORT_OPTIONS:MNLS/) {
+ &perror("WARN", $file, -1, "Consider adding support for a NLS ".
+ "knob to conditionally disable gettext support.");
}
#
@@ -3369,6 +3307,17 @@
return chomp $result;
}
+sub get_makevar_raw {
+ my($mvar) = @_;
+ my($cmd, $result);
+
+ $cmd = join(' -XV ', "make $makeenv MASTER_SITE_BACKUP=''", $mvar);
+ $result = `$cmd`;
+ chomp $result;
+
+ return $result;
+}
+
sub is_predefined {
my($url, $file) = @_;
my($site, $site_re);
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list