Received: by mail.netbsd.org (Postfix, from userid 605) id DEE9D85066; Thu, 19 Jul 2018 06:38:17 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by mail.netbsd.org (Postfix) with ESMTP id D09B784F23 for ; Thu, 19 Jul 2018 06:38:16 +0000 (UTC) X-Virus-Scanned: amavisd-new at netbsd.org Received: from mail.netbsd.org ([127.0.0.1]) by localhost (mail.netbsd.org [127.0.0.1]) (amavisd-new, port 10025) with ESMTP id WCdDA4nSPm1k for ; Thu, 19 Jul 2018 06:38:15 +0000 (UTC) Received: from cvs.NetBSD.org (ivanova.NetBSD.org [IPv6:2001:470:a085:999:28c:faff:fe03:5984]) by mail.netbsd.org (Postfix) with ESMTP id 853A084E4D for ; Thu, 19 Jul 2018 06:38:15 +0000 (UTC) Received: by cvs.NetBSD.org (Postfix, from userid 500) id 7E0A9FBEC; Thu, 19 Jul 2018 06:38:15 +0000 (UTC) Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_1531982295222610" MIME-Version: 1.0 Date: Thu, 19 Jul 2018 06:38:15 +0000 From: "Roland Illig" Subject: CVS commit: pkgsrc/pkgtools/pkglint To: pkgsrc-changes@NetBSD.org Reply-To: rillig@netbsd.org X-Mailer: log_accum Message-Id: <20180719063815.7E0A9FBEC@cvs.NetBSD.org> Sender: pkgsrc-changes-owner@NetBSD.org List-Id: pkgsrc-changes.NetBSD.org Precedence: bulk List-Unsubscribe: This is a multi-part message in MIME format. --_----------=_1531982295222610 Content-Disposition: inline Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" Module Name: pkgsrc Committed By: rillig Date: Thu Jul 19 06:38:15 UTC 2018 Modified Files: pkgsrc/pkgtools/pkglint: Makefile pkgsrc/pkgtools/pkglint/files: check_test.go mklinechecker.go mklines.go mklines_test.go vardefs.go vartypecheck.go Log Message: pkgtools/pkglint: updated to 5.5.14 Changes since 5.5.13: * Suppress duplicate warnings for unknown options in the same file * Grab acceptable package versions directly from the infrastructure files * Note about too deeply indented shell programs To generate a diff of this commit: cvs rdiff -u -r1.541 -r1.542 pkgsrc/pkgtools/pkglint/Makefile cvs rdiff -u -r1.19 -r1.20 pkgsrc/pkgtools/pkglint/files/check_test.go cvs rdiff -u -r1.13 -r1.14 pkgsrc/pkgtools/pkglint/files/mklinechecker.go cvs rdiff -u -r1.25 -r1.26 pkgsrc/pkgtools/pkglint/files/mklines.go cvs rdiff -u -r1.20 -r1.21 pkgsrc/pkgtools/pkglint/files/mklines_test.go cvs rdiff -u -r1.42 -r1.43 pkgsrc/pkgtools/pkglint/files/vardefs.go cvs rdiff -u -r1.33 -r1.34 pkgsrc/pkgtools/pkglint/files/vartypecheck.go Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. --_----------=_1531982295222610 Content-Disposition: inline Content-Length: 8806 Content-Transfer-Encoding: binary Content-Type: text/x-diff; charset=us-ascii Modified files: Index: pkgsrc/pkgtools/pkglint/Makefile diff -u pkgsrc/pkgtools/pkglint/Makefile:1.541 pkgsrc/pkgtools/pkglint/Makefile:1.542 --- pkgsrc/pkgtools/pkglint/Makefile:1.541 Thu Jul 12 16:23:36 2018 +++ pkgsrc/pkgtools/pkglint/Makefile Thu Jul 19 06:38:15 2018 @@ -1,6 +1,6 @@ -# $NetBSD: Makefile,v 1.541 2018/07/12 16:23:36 rillig Exp $ +# $NetBSD: Makefile,v 1.542 2018/07/19 06:38:15 rillig Exp $ -PKGNAME= pkglint-5.5.13 +PKGNAME= pkglint-5.5.14 DISTFILES= # none CATEGORIES= pkgtools Index: pkgsrc/pkgtools/pkglint/files/check_test.go diff -u pkgsrc/pkgtools/pkglint/files/check_test.go:1.19 pkgsrc/pkgtools/pkglint/files/check_test.go:1.20 --- pkgsrc/pkgtools/pkglint/files/check_test.go:1.19 Sat Mar 24 14:32:49 2018 +++ pkgsrc/pkgtools/pkglint/files/check_test.go Thu Jul 19 06:38:15 2018 @@ -124,6 +124,11 @@ func (t *Tester) SetupMasterSite(varname } } +// SetupOption pretends that the package option is defined in mk/defaults/options.description. +func (t *Tester) SetupOption(name, description string) { + G.Pkgsrc.PkgOptions[name] = description +} + func (t *Tester) SetupTool(tool *Tool) { reg := G.Pkgsrc.Tools @@ -254,7 +259,11 @@ func (t *Tester) NewLinesAt(fileName str } func (t *Tester) NewMkLines(fileName string, lines ...string) *MkLines { - return NewMkLines(t.NewLines(fileName, lines...)) + rawText := "" + for _, line := range lines { + rawText += line + "\n" + } + return NewMkLines(convertToLogicalLines(fileName, rawText, true)) } // Returns and consumes the output from both stdout and stderr. Index: pkgsrc/pkgtools/pkglint/files/mklinechecker.go diff -u pkgsrc/pkgtools/pkglint/files/mklinechecker.go:1.13 pkgsrc/pkgtools/pkglint/files/mklinechecker.go:1.14 --- pkgsrc/pkgtools/pkglint/files/mklinechecker.go:1.13 Thu Jul 12 16:23:36 2018 +++ pkgsrc/pkgtools/pkglint/files/mklinechecker.go Thu Jul 19 06:38:15 2018 @@ -26,6 +26,19 @@ func (ck MkLineChecker) Check() { case mkline.IsShellCommand(): shellCommand := mkline.ShellCommand() + + if G.opts.WarnSpace && hasPrefix(mkline.Text, "\t\t") { + fix := mkline.Autofix() + fix.Notef("Shell programs should be indented with a single tab.") + fix.Explain( + "The first tab in the line marks the line as a shell command. Since", + "every line of shell commands starts with a completely new shell", + "environment, there is no need to indent some of the commands, or to", + "use more horizontal space than necessary.") + fix.ReplaceRegex(`^\t\t+`, "\t", 1) + fix.Apply() + } + ck.checkText(shellCommand) NewShellLine(mkline).CheckShellCommandLine(shellCommand) Index: pkgsrc/pkgtools/pkglint/files/mklines.go diff -u pkgsrc/pkgtools/pkglint/files/mklines.go:1.25 pkgsrc/pkgtools/pkglint/files/mklines.go:1.26 --- pkgsrc/pkgtools/pkglint/files/mklines.go:1.25 Thu Jul 12 16:23:36 2018 +++ pkgsrc/pkgtools/pkglint/files/mklines.go Thu Jul 19 06:38:15 2018 @@ -19,6 +19,7 @@ type MkLines struct { toolRegistry ToolRegistry // Tools defined in file scope. SeenBsdPrefsMk bool indentation Indentation // Indentation depth of preprocessing directives + Once // XXX: Why both tools and toolRegistry? } @@ -45,7 +46,8 @@ func NewMkLines(lines []Line) *MkLines { tools, NewToolRegistry(), false, - Indentation{}} + Indentation{}, + Once{}} } func (mklines *MkLines) UseVar(mkline MkLine, varname string) { Index: pkgsrc/pkgtools/pkglint/files/mklines_test.go diff -u pkgsrc/pkgtools/pkglint/files/mklines_test.go:1.20 pkgsrc/pkgtools/pkglint/files/mklines_test.go:1.21 --- pkgsrc/pkgtools/pkglint/files/mklines_test.go:1.20 Tue May 1 23:30:11 2018 +++ pkgsrc/pkgtools/pkglint/files/mklines_test.go Thu Jul 19 06:38:15 2018 @@ -493,3 +493,42 @@ func (s *Suite) Test_MkLines_ExtractDocu "VARBASE3.* (line 19)"} c.Check(varnames, deepEquals, expected) } + +func (s *Suite) Test_MkLines__shell_command_indentation(c *check.C) { + t := s.Init(c) + + t.SetupCommandLine("-Wall") + t.SetupVartypes() + mklines := t.NewMkLines("Makefile", + MkRcsID, + "#", + "pre-configure:", + "\tcd 'indented correctly'", + "\t\tcd 'indented needlessly'", + "\tcd 'indented correctly' \\", + "\t\t&& cd 'with indented continuation'") + + mklines.Check() + + t.CheckOutputLines( + "NOTE: Makefile:5: Shell programs should be indented with a single tab.") +} + +func (s *Suite) Test_MkLines__unknown_options(c *check.C) { + t := s.Init(c) + + t.SetupCommandLine("-Wall") + t.SetupVartypes() + t.SetupOption("known", "") + mklines := t.NewMkLines("options.mk", + MkRcsID, + "#", + "PKG_OPTIONS_VAR=\tPKG_OPTIONS.pkgbase", + "PKG_SUPPORTED_OPTIONS=\tknown unknown", + "PKG_SUGGESTED_OPTIONS=\tknown unknown") + + mklines.Check() + + t.CheckOutputLines( + "WARN: options.mk:4: Unknown option \"unknown\".") +} Index: pkgsrc/pkgtools/pkglint/files/vardefs.go diff -u pkgsrc/pkgtools/pkglint/files/vardefs.go:1.42 pkgsrc/pkgtools/pkglint/files/vardefs.go:1.43 --- pkgsrc/pkgtools/pkglint/files/vardefs.go:1.42 Mon May 21 08:12:23 2018 +++ pkgsrc/pkgtools/pkglint/files/vardefs.go Thu Jul 19 06:38:15 2018 @@ -121,6 +121,17 @@ func (src *Pkgsrc) InitVartypes() { return joined }()) + enumFrom := func(fileName, varname, defval string) *BasicType { + lines, _ := readLines(src.File(fileName), true) + mklines := NewMkLines(lines) + for _, mkline := range mklines.mklines { + if mkline.IsVarassign() && mkline.Varname() == varname { + return enum(mkline.Value()) + } + } + return enum(defval) + } + // Last synced with mk/defaults/mk.conf revision 1.269 usr("USE_CWRAPPERS", lkNone, enum("yes no auto")) usr("ALLOW_VULNERABLE_PACKAGES", lkNone, BtYes) @@ -588,7 +599,7 @@ func (src *Pkgsrc) InitVartypes() { sys("EMACS_PKGNAME_PREFIX", lkNone, BtIdentifier) // Or the empty string. sys("EMACS_TYPE", lkNone, enum("emacs xemacs")) acl("EMACS_USE_LEIM", lkNone, BtYes, "") - acl("EMACS_VERSIONS_ACCEPTED", lkShell, enum("emacs25 emacs21 emacs21nox emacs20 xemacs215 xemacs215nox xemacs214 xemacs214nox"), "Makefile: set") + acl("EMACS_VERSIONS_ACCEPTED", lkShell, enumFrom("editors/emacs/modules.mk", "_EMACS_VERSIONS_ALL", "emacs25 emacs21 emacs21nox emacs20 xemacs215 xemacs215nox xemacs214 xemacs214nox"), "Makefile: set") sys("EMACS_VERSION_MAJOR", lkNone, BtInteger) sys("EMACS_VERSION_MINOR", lkNone, BtInteger) acl("EMACS_VERSION_REQD", lkShell, enum("emacs25 emacs25nox emacs21 emacs21nox emacs20 xemacs215 xemacs214"), "Makefile: set, append") @@ -785,7 +796,7 @@ func (src *Pkgsrc) InitVartypes() { acl("MESSAGE_SUBST", lkShell, BtShellWord, "Makefile, Makefile.common, options.mk: append") pkg("META_PACKAGE", lkNone, BtYes) sys("MISSING_FEATURES", lkShell, BtIdentifier) - acl("MYSQL_VERSIONS_ACCEPTED", lkShell, enum("51 55 56"), "Makefile: set") + acl("MYSQL_VERSIONS_ACCEPTED", lkShell, enumFrom("mk/mysql.buildlink3.mk", "MYSQL_VERSIONS_ACCEPTED", "57 56 55 51 MARIADB55"), "Makefile: set") usr("MYSQL_VERSION_DEFAULT", lkNone, BtVersion) sys("NM", lkNone, BtShellCommand) sys("NONBINMODE", lkNone, BtFileMode) @@ -833,7 +844,7 @@ func (src *Pkgsrc) InitVartypes() { pkg("PERL5_REQD", lkShell, BtVersion) pkg("PERL5_USE_PACKLIST", lkNone, BtYesNo) sys("PGSQL_PREFIX", lkNone, BtPathname) - acl("PGSQL_VERSIONS_ACCEPTED", lkShell, enum("10 93 94 95 96"), "") + acl("PGSQL_VERSIONS_ACCEPTED", lkShell, enumFrom("mk/pgsql.buildlink3.mk", "PGSQL_VERSIONS_ACCEPTED", "10 96 95 94 93"), "") usr("PGSQL_VERSION_DEFAULT", lkNone, BtVersion) sys("PG_LIB_EXT", lkNone, enum("dylib so")) sys("PGSQL_TYPE", lkNone, enum("postgresql81-client postgresql80-client")) Index: pkgsrc/pkgtools/pkglint/files/vartypecheck.go diff -u pkgsrc/pkgtools/pkglint/files/vartypecheck.go:1.33 pkgsrc/pkgtools/pkglint/files/vartypecheck.go:1.34 --- pkgsrc/pkgtools/pkglint/files/vartypecheck.go:1.33 Sat May 19 12:58:25 2018 +++ pkgsrc/pkgtools/pkglint/files/vartypecheck.go Thu Jul 19 06:38:15 2018 @@ -626,7 +626,7 @@ func (cv *VartypeCheck) Message() { } } -// A package option from options.mk +// Option checks whether a single package option from options.mk conforms to the naming conventions. func (cv *VartypeCheck) Option() { line, value, valueNovar := cv.Line, cv.Value, cv.ValueNoVar @@ -638,8 +638,12 @@ func (cv *VartypeCheck) Option() { } if m, optname := match1(value, `^-?([a-z][-0-9a-z+]*)$`); m { + if G.Mk != nil && !G.Mk.FirstTime("option:"+optname) { + return + } + if _, found := G.Pkgsrc.PkgOptions[optname]; !found { // There's a difference between empty and absent here. - line.Warnf("Unknown option \"%s\".", optname) + line.Warnf("Unknown option %q.", optname) Explain( "This option is not documented in the mk/defaults/options.description", "file. Please think of a brief but precise description and either", --_----------=_1531982295222610--