pkgtools/pkglint4: remove more unreliable or outdated checks
CFLAGS and LDFLAGS had been checked for GCC-style flags only. This didn't make sense since wrong flags would be detected on the exotic platforms anyway. The experimental --autofix has been removed. The check for "# used by" comments in Makefile.common has been removed. Especially the --autofix could damage files. The warnings for ICON_THEMES have been removed since they appear in groups of thousands, and the old pkglint cannot issue warnings "once per file" simply.
This commit is contained in:
parent
2d92ac45af
commit
167f4e9d9c
7 changed files with 43 additions and 358 deletions
|
@ -1,12 +1,10 @@
|
|||
# $NetBSD: FileUtil.pm,v 1.1 2015/11/25 16:42:21 rillig Exp $
|
||||
# $NetBSD: FileUtil.pm,v 1.2 2019/10/06 11:45:05 rillig Exp $
|
||||
#
|
||||
# Subroutines for loading and saving line-oriented files.
|
||||
# The load_file() subroutine loads a file completely into memory,
|
||||
# optionally handling continuation line folding. The load_lines() subrou-
|
||||
# tine is an abbreviation for the common case of loading files without
|
||||
# continuation lines. The save_autofix_changes() subroutine examines an
|
||||
# array of lines if some of them have changed. It then saves the modified
|
||||
# files.
|
||||
# continuation lines.
|
||||
#
|
||||
package PkgLint::FileUtil;
|
||||
|
||||
|
@ -19,7 +17,6 @@ BEGIN {
|
|||
@ISA = qw(Exporter);
|
||||
@EXPORT_OK = qw(
|
||||
load_file load_lines
|
||||
save_autofix_changes
|
||||
);
|
||||
|
||||
import PkgLint::Util qw(
|
||||
|
@ -128,39 +125,3 @@ sub load_file($) {
|
|||
|
||||
return load_lines($fname, false);
|
||||
}
|
||||
|
||||
sub save_autofix_changes($) {
|
||||
my ($lines) = @_;
|
||||
|
||||
my (%changed, %physlines);
|
||||
|
||||
foreach my $line (@{$lines}) {
|
||||
if ($line->is_changed) {
|
||||
$changed{$line->fname}++;
|
||||
}
|
||||
push(@{$physlines{$line->fname}}, @{$line->physlines});
|
||||
}
|
||||
|
||||
foreach my $fname (sort(keys(%changed))) {
|
||||
my $new = "${fname}.pkglint.tmp";
|
||||
my $f;
|
||||
|
||||
if (!open($f, ">", $new)) {
|
||||
log_error($new, NO_LINE_NUMBER, "$!");
|
||||
next;
|
||||
}
|
||||
foreach my $physline (@{$physlines{$fname}}) {
|
||||
print $f ($physline->[1]);
|
||||
}
|
||||
if (!close($f)) {
|
||||
log_error($new, NO_LINE_NUMBER, "$!");
|
||||
next;
|
||||
}
|
||||
|
||||
if (!rename($new, $fname)) {
|
||||
log_error($fname, NO_LINE_NUMBER, "$!");
|
||||
next;
|
||||
}
|
||||
log_note($fname, NO_LINE_NUMBER, "Has been autofixed. Please re-run pkglint.");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Line.pm,v 1.1 2015/11/25 16:42:21 rillig Exp $
|
||||
# $NetBSD: Line.pm,v 1.2 2019/10/06 11:45:05 rillig Exp $
|
||||
#
|
||||
# When files are read in by pkglint, they are interpreted in terms of
|
||||
# lines. For Makefiles, line continuations are handled properly, allowing
|
||||
|
@ -13,10 +13,6 @@
|
|||
# C<lines>, C<text>, C<physlines> and C<is_changed>, as well as some
|
||||
# methods for printing diagnostics easily.
|
||||
#
|
||||
# Some other methods allow modification of the physical lines, but leave
|
||||
# the logical line (the C<text>) untouched. These methods are used in the
|
||||
# --autofix mode.
|
||||
#
|
||||
# A line can have some "extra" fields that allow the results of parsing to
|
||||
# be saved under a name.
|
||||
#
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: makevars.map,v 1.12 2019/10/06 11:06:42 rillig Exp $
|
||||
# $NetBSD: makevars.map,v 1.13 2019/10/06 11:45:05 rillig Exp $
|
||||
#
|
||||
|
||||
# This file contains the guessed type of some variables, according to
|
||||
|
@ -145,7 +145,7 @@ BDB185_DEFAULT Unchecked []
|
|||
BDBBASE Pathname [$system]
|
||||
BDB_ACCEPTED List of { db1 db2 db3 db4 db5 } [$package]
|
||||
BDB_DEFAULT { db1 db2 db3 db4 db5 } []
|
||||
BDB_LIBS List of LdFlag [$system]
|
||||
BDB_LIBS List of ShellWord [$system]
|
||||
BDB_TYPE { db1 db2 db3 db4 db5 } [$system]
|
||||
BINGRP UserGroupName [$system]
|
||||
BINMODE FileMode [$system]
|
||||
|
@ -161,10 +161,10 @@ BUILDLINK_ABI_DEPENDS.* InternalList of Dependency [*:a]
|
|||
BUILDLINK_API_DEPENDS.* InternalList of Dependency [*:a]
|
||||
BUILDLINK_CONTENTS_FILTER List of ShellWord []
|
||||
# ^^ ShellCommand
|
||||
BUILDLINK_CFLAGS List of CFlag [$system]
|
||||
BUILDLINK_CFLAGS.* List of CFlag [$bl_list]
|
||||
BUILDLINK_CPPFLAGS List of CFlag [$system]
|
||||
BUILDLINK_CPPFLAGS.* List of CFlag [$bl_list]
|
||||
BUILDLINK_CFLAGS List of ShellWord [$system]
|
||||
BUILDLINK_CFLAGS.* List of ShellWord [$bl_list]
|
||||
BUILDLINK_CPPFLAGS List of ShellWord [$system]
|
||||
BUILDLINK_CPPFLAGS.* List of ShellWord [$bl_list]
|
||||
BUILDLINK_CONTENTS_FILTER.* ShellCommand [b:s]
|
||||
BUILDLINK_DEPENDS InternalList of Identifier [b:a]
|
||||
BUILDLINK_DEPMETHOD.* List of BuildlinkDepmethod [b:ad,m:as,c:a,*.mk:a]
|
||||
|
@ -176,11 +176,11 @@ BUILDLINK_FILES_CMD.* List of ShellWord []
|
|||
# ^^ ShellCommand
|
||||
BUILDLINK_INCDIRS.* List of Pathname [b:ad] # b:d?
|
||||
BUILDLINK_JAVA_PREFIX.* Pathname [b:s]
|
||||
BUILDLINK_LDADD.* List of LdFlag [builtin.mk:adsu, b:, m:u, c:u, *.mk:u]
|
||||
BUILDLINK_LDFLAGS List of LdFlag [$system]
|
||||
BUILDLINK_LDFLAGS.* List of LdFlag [$bl_list]
|
||||
BUILDLINK_LDADD.* List of ShellWord [builtin.mk:adsu, b:, m:u, c:u, *.mk:u]
|
||||
BUILDLINK_LDFLAGS List of ShellWord [$system]
|
||||
BUILDLINK_LDFLAGS.* List of ShellWord [$bl_list]
|
||||
BUILDLINK_LIBDIRS.* List of Pathname [$bl_list]
|
||||
BUILDLINK_LIBS.* List of LdFlag [b:a]
|
||||
BUILDLINK_LIBS.* List of ShellWord [b:a]
|
||||
BUILDLINK_PACKAGES BuildlinkPackages [b:aps]
|
||||
BUILDLINK_PASSTHRU_DIRS List of Pathname [m:a,c:a,b:a,h:a]
|
||||
BUILDLINK_PASSTHRU_RPATHDIRS List of Pathname [m:a,c:a,b:a,h:a]
|
||||
|
@ -212,7 +212,7 @@ BUILTIN_X11_VERSION Unchecked [$system]
|
|||
CATEGORIES List of Category [m:as,c:ads]
|
||||
CC_VERSION Message [$system]
|
||||
CC ShellCommand [$system]
|
||||
CFLAGS* List of CFlag [$package_list]
|
||||
CFLAGS* List of ShellWord [$package_list]
|
||||
# ^^ may also be changed by the user
|
||||
CHECK_BUILTIN YesNo [builtin.mk:d,m:s]
|
||||
CHECK_BUILTIN.* YesNo [*:p]
|
||||
|
@ -254,10 +254,10 @@ CONF_FILES_PERMS List of ShellWord [$package_list]
|
|||
COPY { -c } [$system]
|
||||
# ^^ the flag that tells ${INSTALL} to copy a file
|
||||
CPP ShellCommand [$system]
|
||||
CPPFLAGS* List of CFlag [$package_list]
|
||||
CPPFLAGS* List of ShellWord [$package_list]
|
||||
CRYPTO Yes [m:s]
|
||||
CXX ShellCommand [$system]
|
||||
CXXFLAGS* List of CFlag [$package_list]
|
||||
CXXFLAGS* List of ShellWord [$package_list]
|
||||
DEINSTALL_FILE Pathname [m:s]
|
||||
DEINSTALL_SRC List of Pathname [m:s,c:ds]
|
||||
DEINSTALL_TEMPLATES List of Pathname [m:as,c:ads]
|
||||
|
@ -287,7 +287,7 @@ DJB_RESTRICTED YesNo [m:s]
|
|||
DJB_SLASHPACKAGE YesNo
|
||||
DLOPEN_REQUIRE_PTHREADS YesNo
|
||||
DL_AUTO_VARS Yes [m:s,c:s,o:s]
|
||||
DL_LIBS List of LdFlag
|
||||
DL_LIBS List of ShellWord
|
||||
DOCOWN UserGroupName [$system]
|
||||
DOCGRP UserGroupName [$system]
|
||||
DOCMODE FileMode [$system]
|
||||
|
@ -334,7 +334,7 @@ ERROR_CAT ShellCommand [$system]
|
|||
ERROR_MSG ShellCommand [$system]
|
||||
EVAL_PREFIX InternalList of ShellWord [m:a,c:a]
|
||||
# ^^ FIXME: Looks like a type mismatch.
|
||||
EXPORT_SYMBOLS_LDFLAGS List of LdFlag [$system]
|
||||
EXPORT_SYMBOLS_LDFLAGS List of ShellWord [$system]
|
||||
EXTRACT_CMD ShellCommand [$system]
|
||||
EXTRACT_DIR Pathname [$package]
|
||||
EXTRACT_ELEMENTS List of Pathmask [$package_list]
|
||||
|
@ -429,12 +429,12 @@ KRB5_ACCEPTED List of { heimdal mit-krb5 }
|
|||
KRB5_DEFAULT { heimdal mit-krb5 } [$user]
|
||||
KRB5_TYPE Unchecked [$system]
|
||||
LD ShellCommand [$system]
|
||||
LDFLAGS* List of LdFlag [$package_list]
|
||||
LDFLAGS* List of ShellWord [$package_list]
|
||||
LIBGRP UserGroupName [$system]
|
||||
LIBMODE FileMode [$system]
|
||||
LIBOWN UserGroupName [$system]
|
||||
LIBOSSAUDIO Pathname [$system]
|
||||
LIBS* List of LdFlag [$package_list]
|
||||
LIBS* List of ShellWord [$package_list]
|
||||
LIBTOOL ShellCommand [$system]
|
||||
LIBTOOL_OVERRIDE List of Pathmask [m:as]
|
||||
LIBTOOL_REQD List of Version [$package_list]
|
||||
|
@ -649,9 +649,9 @@ PREV_PKGPATH Pathname [*:u] # doesn't exist any longer
|
|||
PRINT_PLIST_AWK AwkCommand [*:a]
|
||||
PRIVILEGED_STAGES List of { install package clean }
|
||||
PTHREAD_AUTO_VARS YesNo [m:s]
|
||||
PTHREAD_CFLAGS List of CFlag [$system]
|
||||
PTHREAD_LDFLAGS List of LdFlag [$system]
|
||||
PTHREAD_LIBS List of LdFlag [$system]
|
||||
PTHREAD_CFLAGS List of ShellWord [$system]
|
||||
PTHREAD_LDFLAGS List of ShellWord [$system]
|
||||
PTHREAD_LIBS List of ShellWord [$system]
|
||||
PTHREAD_OPTS List of { native optional require } [m:as,c:a,b:a]
|
||||
PTHREAD_TYPE Identifier [$system]
|
||||
# ^^ or "native" or "none".
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
PKGLINT(1) General Commands Manual PKGLINT(1)
|
||||
PKGLINT(1) NetBSD General Commands Manual PKGLINT(1)
|
||||
|
||||
NNAAMMEE
|
||||
ppkkgglliinntt -- static analyzer for pkgsrc packages
|
||||
|
@ -10,7 +10,6 @@ DDEESSCCRRIIPPTTIIOONN
|
|||
ppkkgglliinntt attempts to detect features of the named pkgsrc packages that are
|
||||
likely to be bugs, or that are simply deprecated.
|
||||
|
||||
|
||||
OOppttiioonnss
|
||||
--CC{{[[nnoo--]]cchheecckk,,......}} Enable or disable specific checks. For a list of
|
||||
checks, see below.
|
||||
|
@ -18,8 +17,6 @@ DDEESSCCRRIIPPTTIIOONN
|
|||
--DD{{[[nnoo--]]ddeebbuugg,,......}} Enable or disable debugging categories. For a list
|
||||
of categories, see below.
|
||||
|
||||
--FF|----aauuttooffiixx Repair trivial things automatically.
|
||||
|
||||
--II Show the _M_a_k_e_f_i_l_e that is constructed by including
|
||||
all the files that are slurped in via `.include'
|
||||
directives. This flag is mainly for debugging.
|
||||
|
@ -32,9 +29,9 @@ DDEESSCCRRIIPPTTIIOONN
|
|||
--WW{{[[nnoo--]]wwaarrnn,,......}} Enable or disable specific warnings. For a list of
|
||||
warnings, see below.
|
||||
|
||||
--ee|----eexxppllaaiinn Print further explanations for diagnostics.
|
||||
Sometimes the reasons for diagnostics are not obvious
|
||||
and need further explanation.
|
||||
--ee|----eexxppllaaiinn Print further explanations for diagnostics. Some-
|
||||
times the reasons for diagnostics are not obvious and
|
||||
need further explanation.
|
||||
|
||||
--gg|----ggcccc--oouuttppuutt--ffoorrmmaatt
|
||||
Use a format for the diagnostics that is understood
|
||||
|
@ -125,8 +122,6 @@ DDEESSCCRRIIPPTTIIOONN
|
|||
|
||||
nnoonnee Disable all warnings.
|
||||
|
||||
[[nnoo--]]aabbssnnaammee Warn if a file contains an absolute pathname.
|
||||
|
||||
[[nnoo--]]ddiirreeccttccmmdd Warn if a system command name is used instead of a
|
||||
variable (e.g. sed instead of ${SED}).
|
||||
|
||||
|
@ -136,28 +131,11 @@ DDEESSCCRRIIPPTTIIOONN
|
|||
[[nnoo--]]oorrddeerr Warn if Makefile variables are not in the preferred
|
||||
order.
|
||||
|
||||
[[nnoo--]]ppeerrmm Warn if a variable is used or defined outside its
|
||||
specified scope. The available permissions are:
|
||||
append
|
||||
append something using +=
|
||||
default
|
||||
set a default value using ?=
|
||||
preprocess
|
||||
use a variable during preprocessing
|
||||
runtime
|
||||
use a variable at runtime
|
||||
set set a variable using :=, =, !=
|
||||
unknown
|
||||
permissions for this variable currently not
|
||||
known
|
||||
A `?' means that it is not yet clear which
|
||||
permissions are allowed and which aren't.
|
||||
|
||||
[[nnoo--]]pplliisstt--ddeepprr Warn if deprecated pathnames are used in _P_L_I_S_T files.
|
||||
This warning is disabled by default.
|
||||
|
||||
[[nnoo--]]pplliisstt--ssoorrtt Warn if items of a PLIST file are not sorted
|
||||
alphabetically. This warning is disabled by default.
|
||||
[[nnoo--]]pplliisstt--ssoorrtt Warn if items of a PLIST file are not sorted alpha-
|
||||
betically. This warning is disabled by default.
|
||||
|
||||
[[nnoo--]]qquuoottiinngg Warn for possibly invalid quoting of make variables
|
||||
in shell programs and shell variables themselves.
|
||||
|
@ -174,11 +152,11 @@ DDEESSCCRRIIPPTTIIOONN
|
|||
ordered in the way it is described the pkgsrc guide.
|
||||
|
||||
OOtthheerr aarrgguummeennttss
|
||||
_d_i_r _._._. The pkgsrc directories to be checked. If
|
||||
omitted, the current directory is checked.
|
||||
_d_i_r _._._. The pkgsrc directories to be checked. If omit-
|
||||
ted, the current directory is checked.
|
||||
|
||||
FFIILLEESS
|
||||
_p_k_g_s_r_c_/_m_k_/_* Files from the pkgsrc infrastructure.
|
||||
pkgsrc/mk/* Files from the pkgsrc infrastructure.
|
||||
|
||||
EEXXAAMMPPLLEESS
|
||||
ppkkgglliinntt --CCnnoonnee,,ppaattcchheess ..
|
||||
|
@ -202,7 +180,7 @@ DDIIAAGGNNOOSSTTIICCSS
|
|||
critical as errors.
|
||||
|
||||
AAUUTTHHOORRSS
|
||||
Roland Illig <rillig@NetBSD.org>
|
||||
Roland Illig <_r_i_l_l_i_g_@_N_e_t_B_S_D_._o_r_g>
|
||||
|
||||
BBUUGGSS
|
||||
Many more checks could be added.
|
||||
|
@ -210,4 +188,4 @@ BBUUGGSS
|
|||
If you don't understand the messages, feel free to ask on the
|
||||
<tech-pkg@NetBSD.org> mailing list.
|
||||
|
||||
NetBSD 6.99.8 July 14, 2012 NetBSD 6.99.8
|
||||
NetBSD 8.0 October 6, 2019 NetBSD 8.0
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.\" $NetBSD: pkglint.1,v 1.1 2015/11/25 16:42:21 rillig Exp $
|
||||
.\" $NetBSD: pkglint.1,v 1.2 2019/10/06 11:45:05 rillig Exp $
|
||||
.\" From FreeBSD: portlint.1,v 1.8 1997/11/25 14:53:14 itojun Exp
|
||||
.\"
|
||||
.\" Copyright (c) 1997 by Jun-ichiro Itoh <itojun@itojun.org>.
|
||||
|
@ -7,7 +7,7 @@
|
|||
.\" Roland Illig <roland.illig@gmx.de>, 2004, 2005.
|
||||
.\" Thomas Klausner <wiz@NetBSD.org>, 2012.
|
||||
.\"
|
||||
.Dd July 14, 2012
|
||||
.Dd October 6, 2019
|
||||
.Dt PKGLINT 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -31,8 +31,6 @@ For a list of checks, see below.
|
|||
.It Fl D{[no-]debug,...}
|
||||
Enable or disable debugging categories.
|
||||
For a list of categories, see below.
|
||||
.It Fl F Ns | Ns Fl -autofix
|
||||
Repair trivial things automatically.
|
||||
.It Fl I
|
||||
Show the
|
||||
.Pa Makefile
|
||||
|
@ -145,8 +143,6 @@ Information about the contexts in which variables are used.
|
|||
Enable all warnings.
|
||||
.It Cm none
|
||||
Disable all warnings.
|
||||
.It Cm [no-]absname
|
||||
Warn if a file contains an absolute pathname.
|
||||
.It Cm [no-]directcmd
|
||||
Warn if a system command name is used instead of a variable (e.g. sed
|
||||
instead of ${SED}).
|
||||
|
@ -155,26 +151,6 @@ Emit some additional warnings that are not enabled by default,
|
|||
for whatever reason.
|
||||
.It Cm [no-]order
|
||||
Warn if Makefile variables are not in the preferred order.
|
||||
.It Cm [no-]perm
|
||||
Warn if a variable is used or defined outside its specified scope.
|
||||
The available permissions are:
|
||||
.Bl -tag -width 3n -compact
|
||||
.It append
|
||||
append something using +=
|
||||
.It default
|
||||
set a default value using ?=
|
||||
.It preprocess
|
||||
use a variable during preprocessing
|
||||
.It runtime
|
||||
use a variable at runtime
|
||||
.It set
|
||||
set a variable using :=, =, !=
|
||||
.It unknown
|
||||
permissions for this variable currently not known
|
||||
.El
|
||||
A
|
||||
.Sq \&?
|
||||
means that it is not yet clear which permissions are allowed and which aren't.
|
||||
.It Cm [no-]plist-depr
|
||||
Warn if deprecated pathnames are used in
|
||||
.Pa PLIST
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#! @PERL@
|
||||
# $NetBSD: pkglint.pl,v 1.9 2019/10/06 11:06:42 rillig Exp $
|
||||
# $NetBSD: pkglint.pl,v 1.10 2019/10/06 11:45:05 rillig Exp $
|
||||
#
|
||||
|
||||
# pkglint - static analyzer and checker for pkgsrc packages
|
||||
|
@ -98,7 +98,6 @@ BEGIN {
|
|||
);
|
||||
import PkgLint::FileUtil qw(
|
||||
load_file load_lines
|
||||
save_autofix_changes
|
||||
);
|
||||
import PkgLint::Type qw(
|
||||
LK_NONE LK_INTERNAL LK_EXTERNAL
|
||||
|
@ -190,34 +189,27 @@ my (%debug) = (
|
|||
"varuse" => [\$opt_debug_varuse, "contexts where variables are used"],
|
||||
);
|
||||
|
||||
my $opt_warn_absname = true;
|
||||
my $opt_warn_directcmd = true;
|
||||
our $opt_warn_extra = false; # used by PkgLint::SubstContext
|
||||
my $opt_warn_order = true;
|
||||
my $opt_warn_perm = false;
|
||||
my $opt_warn_plist_depr = false;
|
||||
my $opt_warn_plist_sort = false;
|
||||
my $opt_warn_quoting = false;
|
||||
my $opt_warn_space = false;
|
||||
my $opt_warn_style = false;
|
||||
my $opt_warn_types = true;
|
||||
my $opt_warn_varorder = false;
|
||||
my (%warnings) = (
|
||||
"absname" => [\$opt_warn_absname, "warn about use of absolute file names"],
|
||||
"directcmd" => [\$opt_warn_directcmd, "warn about use of direct command names instead of Make variables"],
|
||||
"extra" => [\$opt_warn_extra, "enable some extra warnings"],
|
||||
"order" => [\$opt_warn_order, "warn if Makefile entries are unordered"],
|
||||
"perm" => [\$opt_warn_perm, "warn about unforeseen variable definition and use"],
|
||||
"plist-depr" => [\$opt_warn_plist_depr, "warn about deprecated paths in PLISTs"],
|
||||
"plist-sort" => [\$opt_warn_plist_sort, "warn about unsorted entries in PLISTs"],
|
||||
"quoting" => [\$opt_warn_quoting, "warn about quoting issues"],
|
||||
"space" => [\$opt_warn_space, "warn about inconsistent use of white-space"],
|
||||
"style" => [\$opt_warn_style, "warn about stylistic issues"],
|
||||
"types" => [\$opt_warn_types, "do some simple type checking in Makefiles"],
|
||||
"varorder" => [\$opt_warn_varorder, "warn about the ordering of variables"],
|
||||
);
|
||||
|
||||
my $opt_autofix = false;
|
||||
my $opt_dumpmakefile = false;
|
||||
my $opt_import = false;
|
||||
my $opt_quiet = false;
|
||||
|
@ -237,8 +229,6 @@ my (@options) = (
|
|||
my ($opt, $val) = @_;
|
||||
parse_multioption($val, \%debug);
|
||||
} ],
|
||||
[ "-F|--autofix", "Try to automatically fix some errors (experimental)",
|
||||
"autofix|F", \$opt_autofix ],
|
||||
[ "-I|--dumpmakefile", "Dump the Makefile after parsing",
|
||||
"dumpmakefile|I", \$opt_dumpmakefile ],
|
||||
[ "-R|--rcsidstring", "Set the allowed RCS Id strings",
|
||||
|
@ -499,93 +489,6 @@ sub parse_command_line() {
|
|||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Caching subroutines.
|
||||
#
|
||||
|
||||
# The get_regex_plurals() function returns a regular expression that
|
||||
# matches for all make(1) variable names that are considered lists
|
||||
# of something.
|
||||
#
|
||||
# Rationale:
|
||||
#
|
||||
# The pkglint author thinks that variables containing lists of things
|
||||
# should have a name indicating some plural form. Sadly, there are other
|
||||
# reasons like backwards compatibility and other developer's
|
||||
# expectations that make changes to most of the following variables
|
||||
# highly unlikely.
|
||||
sub get_regex_plurals() {
|
||||
state $result = undef;
|
||||
return $result if defined($result);
|
||||
|
||||
my @plurals_ok = qw(
|
||||
.*S
|
||||
.*LIST
|
||||
.*_AWK
|
||||
.*_ENV
|
||||
.*_REQD
|
||||
.*_SED
|
||||
.*_SKIP
|
||||
BUILDLINK_LDADD
|
||||
COMMENT
|
||||
EXTRACT_ONLY
|
||||
FETCH_MESSAGE
|
||||
GENERATE_PLIST
|
||||
PLIST_CAT
|
||||
PLIST_PRE
|
||||
PREPEND_PATH
|
||||
);
|
||||
my @plurals_missing_an_s = qw(
|
||||
.*_OVERRIDE
|
||||
.*_PREREQ
|
||||
.*_SRC
|
||||
.*_SUBST
|
||||
.*_TARGET
|
||||
.*_TMPL
|
||||
BROKEN_EXCEPT_ON_PLATFORM
|
||||
BROKEN_ON_PLATFORM
|
||||
BUILDLINK_DEPMETHOD
|
||||
BUILDLINK_TRANSFORM
|
||||
EVAL_PREFIX
|
||||
INTERACTIVE_STAGE
|
||||
LICENSE
|
||||
MASTER_SITE_.*
|
||||
MASTER_SORT_REGEX
|
||||
NOT_FOR_COMPILER
|
||||
NOT_FOR_PLATFORM
|
||||
ONLY_FOR_COMPILER
|
||||
ONLY_FOR_PLATFORM
|
||||
PERL5_PACKLIST
|
||||
PKG_FAIL_REASON
|
||||
PKG_SKIP_REASON
|
||||
);
|
||||
my @plurals_reluctantly_accepted = qw(
|
||||
CRYPTO
|
||||
DEINSTALL_TEMPLATE
|
||||
FIX_RPATH
|
||||
INSTALL_TEMPLATE
|
||||
PYTHON_VERSIONS_INCOMPATIBLE
|
||||
REPLACE_INTERPRETER
|
||||
REPLACE_PERL
|
||||
REPLACE_RUBY
|
||||
RESTRICTED
|
||||
SITES_.*
|
||||
TOOLS_ALIASES\.*
|
||||
TOOLS_BROKEN
|
||||
TOOLS_CREATE
|
||||
TOOLS_GNU_MISSING
|
||||
TOOLS_NOOP
|
||||
);
|
||||
my $plurals = join("|",
|
||||
@plurals_ok,
|
||||
@plurals_missing_an_s,
|
||||
@plurals_reluctantly_accepted
|
||||
);
|
||||
|
||||
$result = qr"^(?:${plurals})$";
|
||||
return $result;
|
||||
}
|
||||
|
||||
#
|
||||
# Loading pkglint-specific data from files.
|
||||
#
|
||||
|
@ -730,25 +633,6 @@ sub get_vartypes_map() {
|
|||
}
|
||||
}
|
||||
|
||||
# TODO: Enable when the time is ripe.
|
||||
if (false) {
|
||||
# Additionally, scan mk/defaults/mk.conf for variable
|
||||
# definitions. All these variables are reserved for the user and
|
||||
# must not be set within packages.
|
||||
$fname = "${cwd_pkgsrcdir}/mk/defaults/mk.conf";
|
||||
if ((my $lines = load_file($fname))) {
|
||||
foreach my $line (@{$lines}) {
|
||||
if ($line->text =~ m"^#?([\w_]+)\?=") {
|
||||
my ($varname) = ($1);
|
||||
$opt_debug_misc and $line->log_debug("Found user-definable variable ${varname}.");
|
||||
$vartypes->{$varname} = "Userdefined"; # FIXME: type error
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log_fatal($fname, NO_LINE_NUMBER, "Cannot be read.");
|
||||
}
|
||||
}
|
||||
|
||||
return ($result = $vartypes);
|
||||
}
|
||||
|
||||
|
@ -1237,14 +1121,6 @@ sub match_all($$) {
|
|||
return ($mm, substr($rest, $lastpos));
|
||||
}
|
||||
|
||||
sub autofix($) {
|
||||
my ($lines) = @_;
|
||||
|
||||
if ($opt_autofix) {
|
||||
save_autofix_changes($lines);
|
||||
}
|
||||
}
|
||||
|
||||
# Checks whether a file is already committed to the CVS repository or not.
|
||||
sub is_committed($) {
|
||||
my ($fname) = @_;
|
||||
|
@ -2105,34 +1981,6 @@ sub readmakefile($$$$) {
|
|||
$opt_debug_include and $line->log_debug("Including \"$dirname/$includefile\".");
|
||||
my $last_lineno = $#{$all_lines};
|
||||
readmakefile("$dirname/$includefile", $main_lines, $all_lines, $seen_Makefile_include) or return false;
|
||||
|
||||
# Check that there is a comment in each
|
||||
# Makefile.common that says which files
|
||||
# include it.
|
||||
if ($includefile =~ m"/Makefile\.common$") {
|
||||
my @mc_lines = @{$all_lines}[$last_lineno+1 .. $#{$all_lines}];
|
||||
my $expected = "# used by " . relative_path($cwd_pkgsrcdir, $fname);
|
||||
|
||||
if (!(grep { $_->text eq $expected } @mc_lines)) {
|
||||
my $lineno = 0;
|
||||
while ($lineno < $#mc_lines && $mc_lines[$lineno]->has("is_comment")) {
|
||||
$lineno++;
|
||||
}
|
||||
my $iline = $mc_lines[$lineno];
|
||||
$iline->log_warning("Please add a line \"$expected\" here.");
|
||||
$iline->explain_warning(
|
||||
"Since Makefile.common files usually don't have any comments and",
|
||||
"therefore not a clearly defined interface, they should at least contain",
|
||||
"references to all files that include them, so that it is easier to see",
|
||||
"what effects future changes may have.",
|
||||
"",
|
||||
"If there are more than five packages that use a Makefile.common,",
|
||||
"you should think about giving it a proper name (maybe plugin.mk) and",
|
||||
"documenting its interface.");
|
||||
$iline->append_before($expected);
|
||||
autofix(\@mc_lines);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2711,42 +2559,6 @@ sub checkline_mk_vartype_basic($$$$$$$$) {
|
|||
}
|
||||
},
|
||||
|
||||
CFlag => sub {
|
||||
if ($value =~ m"^-D([0-9A-Z_a-z]+)=(.*)") {
|
||||
my ($macname, $macval) = ($1, $2);
|
||||
|
||||
# No checks needed, since the macro definitions
|
||||
# are usually directory names, which don't need
|
||||
# any quoting.
|
||||
|
||||
} elsif ($value =~ m"^-[DU]([0-9A-Z_a-z]+)") {
|
||||
my ($macname) = ($1);
|
||||
|
||||
$opt_debug_unchecked and $line->log_debug("Unchecked macro ${macname} in ${varname}.");
|
||||
|
||||
} elsif ($value =~ m"^-I(.*)") {
|
||||
my ($dirname) = ($1);
|
||||
|
||||
$opt_debug_unchecked and $line->log_debug("Unchecked directory ${dirname} in ${varname}.");
|
||||
|
||||
} elsif ($value eq "-c99") {
|
||||
# Only works on IRIX, but is usually enclosed with
|
||||
# the proper preprocessor conditional.
|
||||
|
||||
} elsif ($value =~ m"^-[OWfgm]|^-std=.*") {
|
||||
$opt_debug_unchecked and $line->log_debug("Unchecked compiler flag ${value} in ${varname}.");
|
||||
|
||||
} elsif ($value =~ m"^-.*") {
|
||||
$line->log_warning("Unknown compiler flag \"${value}\".");
|
||||
|
||||
} elsif ($value =~ regex_unresolved) {
|
||||
$opt_debug_unchecked and $line->log_debug("Unchecked CFLAG: ${value}");
|
||||
|
||||
} else {
|
||||
$line->log_warning("Compiler flag \"${value}\" does not start with a dash.");
|
||||
}
|
||||
},
|
||||
|
||||
Comment => sub {
|
||||
if ($value eq "SHORT_DESCRIPTION_OF_THE_PACKAGE") {
|
||||
$line->log_error("COMMENT must be set.");
|
||||
|
@ -2935,35 +2747,6 @@ sub checkline_mk_vartype_basic($$$$$$$$) {
|
|||
}
|
||||
},
|
||||
|
||||
LdFlag => sub {
|
||||
if ($value =~ m"^-L(.*)") {
|
||||
my ($dirname) = ($1);
|
||||
|
||||
$opt_debug_unchecked and $line->log_debug("Unchecked directory ${dirname} in ${varname}.");
|
||||
|
||||
} elsif ($value =~ m"^-l(.*)") {
|
||||
my ($libname) = ($1);
|
||||
|
||||
$opt_debug_unchecked and $line->log_debug("Unchecked library name ${libname} in ${varname}.");
|
||||
|
||||
} elsif ($value =~ m"^(?:-static)$") {
|
||||
# Assume that the wrapper framework catches these.
|
||||
|
||||
} elsif ($value =~ m"^(-Wl,(?:-R|-rpath|--rpath))") {
|
||||
my ($rpath_flag) = ($1);
|
||||
$line->log_warning("Please use \${COMPILER_RPATH_FLAG} instead of ${rpath_flag}.");
|
||||
|
||||
} elsif ($value =~ m"^-.*") {
|
||||
$line->log_warning("Unknown linker flag \"${value}\".");
|
||||
|
||||
} elsif ($value =~ regex_unresolved) {
|
||||
$opt_debug_unchecked and $line->log_debug("Unchecked LDFLAG: ${value}");
|
||||
|
||||
} else {
|
||||
$line->log_warning("Linker flag \"${value}\" does not start with a dash.");
|
||||
}
|
||||
},
|
||||
|
||||
License => sub {
|
||||
|
||||
use constant deprecated_licenses => array_to_hash(qw(
|
||||
|
@ -4343,7 +4126,6 @@ sub checkfile_DESCR($) {
|
|||
"fit on one screen. It is also intended to give a _brief_ summary",
|
||||
"about the package's contents.");
|
||||
}
|
||||
autofix($lines);
|
||||
}
|
||||
|
||||
sub checkfile_distinfo($) {
|
||||
|
@ -4536,7 +4318,6 @@ sub checkfile_mk($) {
|
|||
|
||||
parselines_mk($lines);
|
||||
checklines_mk($lines);
|
||||
autofix($lines);
|
||||
}
|
||||
|
||||
sub checkfile_package_Makefile($$) {
|
||||
|
@ -4673,7 +4454,6 @@ sub checkfile_package_Makefile($$) {
|
|||
}
|
||||
|
||||
checklines_mk($lines);
|
||||
autofix($lines);
|
||||
}
|
||||
|
||||
#include PkgLint/Patches.pm
|
||||
|
@ -4925,9 +4705,6 @@ sub checkfile_PLIST($) {
|
|||
}
|
||||
|
||||
} elsif ($text =~ m"^share/icons/[^/]+/.+$") {
|
||||
if (defined($pkgctx_vardef) && !exists($pkgctx_vardef->{"ICON_THEMES"})) {
|
||||
$line->log_warning("Packages that install icon theme files should set ICON_THEMES.");
|
||||
}
|
||||
|
||||
} elsif ($pkgpath ne "graphics/hicolor-icon-theme" && $text =~ m"^share/icons/hicolor(?:$|/)") {
|
||||
my $f = "../../graphics/hicolor-icon-theme/buildlink3.mk";
|
||||
|
@ -5005,7 +4782,6 @@ sub checkfile_PLIST($) {
|
|||
}
|
||||
}
|
||||
checklines_trailing_empty_lines($lines);
|
||||
autofix($lines);
|
||||
}
|
||||
|
||||
sub checkfile($) {
|
||||
|
@ -5359,8 +5135,6 @@ sub checkdir_category() {
|
|||
|
||||
checklines_mk($lines);
|
||||
|
||||
autofix($lines);
|
||||
|
||||
if ($opt_recursive) {
|
||||
unshift(@todo_items, @subdirs);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#! @PERL@
|
||||
# $NetBSD: pkglint.t,v 1.3 2019/10/06 10:33:34 rillig Exp $
|
||||
# $NetBSD: pkglint.t,v 1.4 2019/10/06 11:45:05 rillig Exp $
|
||||
#
|
||||
|
||||
require 'pkglint.pl'; # so we can test its internals
|
||||
|
@ -28,10 +28,10 @@ sub test_unit {
|
|||
if (defined $exitcode) {
|
||||
is($trap->exit, $exitcode, qq{exits $exitcode});
|
||||
} else {
|
||||
is($trap->exit, undef, q{doesn't exit});
|
||||
is($trap->exit, undef, q{doesn't exit}); #'
|
||||
}
|
||||
like($trap->stdout, qr/$stdout_re/sm, qq{stdout matches $stdout_re});
|
||||
like($trap->stderr, qr/$stderr_re/sm, qq{stderr matches $stderr_re});
|
||||
like($trap->stdout, qr/$stdout_re/sm, sprintf(qq{stdout '%s' matches '%s'}, $trap->stdout, $stdout_re));
|
||||
like($trap->stderr, qr/$stderr_re/sm, sprintf(qq{stderr '%s' matches '%s'}, $trap->stderr, $stderr_re));
|
||||
|
||||
return @results;
|
||||
}
|
||||
|
@ -73,11 +73,11 @@ sub test_get_vartypes_basictypes {
|
|||
my @all_vartypes_basictypes = qw(
|
||||
AwkCommand BrokenIn
|
||||
BuildlinkDepmethod BuildlinkDepth BuildlinkPackages
|
||||
CFlag Category Comment
|
||||
Category Comment
|
||||
Dependency DependencyWithPath
|
||||
DistSuffix EmulPlatform
|
||||
FetchURL FileMode Filemask Filename
|
||||
Identifier Integer LdFlag License Mail_Address Message Option
|
||||
Identifier Integer License Mail_Address Message Option
|
||||
Pathlist Pathmask Pathname
|
||||
Perl5Packlist
|
||||
PkgName PkgOptionsVar PkgPath PkgRevision
|
||||
|
|
Loading…
Reference in a new issue