pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/pkgtools/pkglint



Module Name:    pkgsrc
Committed By:   rillig
Date:           Thu Mar 26 07:02:44 UTC 2020

Modified Files:
        pkgsrc/pkgtools/pkglint: Makefile
        pkgsrc/pkgtools/pkglint/files: distinfo.go distinfo_test.go mkline.go
            mklines.go package.go package_test.go pkglint.go shell.go
            shell_test.go util.go vardefs.go

Log Message:
pkgtools/pkglint: update to 20.1.1

Changes since 20.1.0:

In UNLIMIT_RESOURCES, the recently added virtualsize is allowed.

Packages that have distfiles without any digit in their name should
define DIST_SUBDIR to avoid polluting the global namespace. The
top-level distfiles directory should only contain versioned filenames.


To generate a diff of this commit:
cvs rdiff -u -r1.638 -r1.639 pkgsrc/pkgtools/pkglint/Makefile
cvs rdiff -u -r1.42 -r1.43 pkgsrc/pkgtools/pkglint/files/distinfo.go
cvs rdiff -u -r1.38 -r1.39 pkgsrc/pkgtools/pkglint/files/distinfo_test.go
cvs rdiff -u -r1.76 -r1.77 pkgsrc/pkgtools/pkglint/files/mkline.go
cvs rdiff -u -r1.70 -r1.71 pkgsrc/pkgtools/pkglint/files/mklines.go
cvs rdiff -u -r1.85 -r1.86 pkgsrc/pkgtools/pkglint/files/package.go
cvs rdiff -u -r1.72 -r1.73 pkgsrc/pkgtools/pkglint/files/package_test.go
cvs rdiff -u -r1.78 -r1.79 pkgsrc/pkgtools/pkglint/files/pkglint.go
cvs rdiff -u -r1.60 -r1.61 pkgsrc/pkgtools/pkglint/files/shell.go
cvs rdiff -u -r1.66 -r1.67 pkgsrc/pkgtools/pkglint/files/shell_test.go
cvs rdiff -u -r1.75 -r1.76 pkgsrc/pkgtools/pkglint/files/util.go
cvs rdiff -u -r1.91 -r1.92 pkgsrc/pkgtools/pkglint/files/vardefs.go

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/pkgtools/pkglint/Makefile
diff -u pkgsrc/pkgtools/pkglint/Makefile:1.638 pkgsrc/pkgtools/pkglint/Makefile:1.639
--- pkgsrc/pkgtools/pkglint/Makefile:1.638      Mon Mar 23 19:55:08 2020
+++ pkgsrc/pkgtools/pkglint/Makefile    Thu Mar 26 07:02:44 2020
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.638 2020/03/23 19:55:08 rillig Exp $
+# $NetBSD: Makefile,v 1.639 2020/03/26 07:02:44 rillig Exp $
 
-PKGNAME=       pkglint-20.1.0
+PKGNAME=       pkglint-20.1.1
 CATEGORIES=    pkgtools
 DISTNAME=      tools
 MASTER_SITES=  ${MASTER_SITE_GITHUB:=golang/}

Index: pkgsrc/pkgtools/pkglint/files/distinfo.go
diff -u pkgsrc/pkgtools/pkglint/files/distinfo.go:1.42 pkgsrc/pkgtools/pkglint/files/distinfo.go:1.43
--- pkgsrc/pkgtools/pkglint/files/distinfo.go:1.42      Sat Feb 15 13:48:40 2020
+++ pkgsrc/pkgtools/pkglint/files/distinfo.go   Thu Mar 26 07:02:44 2020
@@ -34,6 +34,13 @@ func CheckLinesDistinfo(pkg *Package, li
        CheckLinesTrailingEmptyLines(lines)
        ck.checkUnrecordedPatches()
 
+       if pkg != nil {
+               pkg.distinfoDistfiles = make(map[string]bool)
+               for path := range ck.infos {
+                       pkg.distinfoDistfiles[path.Base()] = true
+               }
+       }
+
        SaveAutofixChanges(lines)
 }
 
@@ -106,6 +113,7 @@ func (ck *distinfoLinesChecker) check() 
        for _, filename := range ck.filenames {
                info := ck.infos[filename]
 
+               ck.checkFilename(filename, info)
                ck.checkAlgorithms(info)
                for _, hash := range info.hashes {
                        ck.checkGlobalDistfileMismatch(hash)
@@ -116,6 +124,18 @@ func (ck *distinfoLinesChecker) check() 
        }
 }
 
+func (ck *distinfoLinesChecker) checkFilename(filename RelPath, info distinfoFileInfo) {
+       if info.isPatch != no || !info.hasDistfileAlgorithms() || matches(filename.String(), `\d`) {
+               return
+       }
+
+       line := info.line()
+       line.Warnf(
+               "Distfiles without version number should be placed in a versioned DIST_SUBDIR.")
+       line.Explain(
+               seeGuide("How to handle modified distfiles with the 'old' name", "modified-distfiles-same-name"))
+}
+
 func (ck *distinfoLinesChecker) checkAlgorithms(info distinfoFileInfo) {
        filename := info.filename()
        algorithms := info.algorithms()
@@ -419,6 +439,15 @@ func (info *distinfoFileInfo) algorithms
        return strings.Join(algs, ", ")
 }
 
+func (info *distinfoFileInfo) hasDistfileAlgorithms() bool {
+       h := info.hashes
+       return len(h) == 4 &&
+               h[0].algorithm == "SHA1" &&
+               h[1].algorithm == "RMD160" &&
+               h[2].algorithm == "SHA512" &&
+               h[3].algorithm == "Size"
+}
+
 type distinfoHash struct {
        line      *Line
        filename  RelPath

Index: pkgsrc/pkgtools/pkglint/files/distinfo_test.go
diff -u pkgsrc/pkgtools/pkglint/files/distinfo_test.go:1.38 pkgsrc/pkgtools/pkglint/files/distinfo_test.go:1.39
--- pkgsrc/pkgtools/pkglint/files/distinfo_test.go:1.38 Sun Mar 22 17:43:15 2020
+++ pkgsrc/pkgtools/pkglint/files/distinfo_test.go      Thu Mar 26 07:02:44 2020
@@ -14,8 +14,8 @@ func (s *Suite) Test_CheckLinesDistinfo_
        lines := t.SetUpFileLines("distinfo",
                "should be the CVS ID",
                "should be empty",
-               "MD5 (distfile.tar.gz) = 12345678901234567890123456789012",
-               "SHA1 (distfile.tar.gz) = 1234567890123456789012345678901234567890",
+               "MD5 (distfile-1.0.tar.gz) = 12345678901234567890123456789012",
+               "SHA1 (distfile-1.0.tar.gz) = 1234567890123456789012345678901234567890",
                "SHA1 (patch-aa) = 6b98dd609f85a9eb9c4c1e4e7055a6aaa62b7cc7",
                "Size (patch-aa) = 104",
                "SHA1 (patch-ab) = 6b98dd609f85a9eb9c4c1e4e7055a6aaa62b7cc7",
@@ -31,7 +31,7 @@ func (s *Suite) Test_CheckLinesDistinfo_
                "ERROR: distinfo:1: Invalid line: should be the CVS ID",
                "ERROR: distinfo:2: Invalid line: should be empty",
                "ERROR: distinfo:8: Invalid line: Another invalid line",
-               "ERROR: distinfo:3: Expected SHA1, RMD160, SHA512, Size checksums for \"distfile.tar.gz\", got MD5, SHA1.",
+               "ERROR: distinfo:3: Expected SHA1, RMD160, SHA512, Size checksums for \"distfile-1.0.tar.gz\", got MD5, SHA1.",
                "ERROR: distinfo:5: Expected SHA1 hash for patch-aa, got SHA1, Size.",
                "WARN: distinfo:9: Patch file \"patch-nonexistent\" does not exist in directory \"patches\".")
 }
@@ -204,6 +204,41 @@ func (s *Suite) Test_distinfoLinesChecke
        t.CheckOutputEmpty()
 }
 
+func (s *Suite) Test_distinfoLinesChecker_checkFilename(c *check.C) {
+       t := s.Init(c)
+
+       t.SetUpPackage("category/package")
+       t.CreateFileLines("category/package/distinfo",
+               CvsID,
+               "",
+               "SHA1 (ok-1.0.tar.gz) = 1234",
+               "RMD160 (ok-1.0.tar.gz) = 1234",
+               "SHA512 (ok-1.0.tar.gz) = 1234",
+               "Size (ok-1.0.tar.gz) = 1234",
+               "SHA1 (not-ok.tar.gz) = 1234",
+               "RMD160 (not-ok.tar.gz) = 1234",
+               "SHA512 (not-ok.tar.gz) = 1234",
+               "Size (not-ok.tar.gz) = 1234",
+               "SHA1 (non-versioned/not-ok.tar.gz) = 1234",
+               "RMD160 (non-versioned/not-ok.tar.gz) = 1234",
+               "SHA512 (non-versioned/not-ok.tar.gz) = 1234",
+               "Size (non-versioned/not-ok.tar.gz) = 1234",
+               "SHA1 (versioned-1/ok.tar.gz) = 1234",
+               "RMD160 (versioned-1/ok.tar.gz) = 1234",
+               "SHA512 (versioned-1/ok.tar.gz) = 1234",
+               "Size (versioned-1/ok.tar.gz) = 1234")
+       t.Chdir("category/package")
+       t.FinishSetUp()
+
+       G.Check(".")
+
+       t.CheckOutputLines(
+               "WARN: distinfo:7: Distfiles without version number "+
+                       "should be placed in a versioned DIST_SUBDIR.",
+               "WARN: distinfo:11: Distfiles without version number "+
+                       "should be placed in a versioned DIST_SUBDIR.")
+}
+
 func (s *Suite) Test_distinfoLinesChecker_checkAlgorithms__nonexistent_distfile_called_patch(c *check.C) {
        t := s.Init(c)
 
@@ -653,6 +688,7 @@ func (s *Suite) Test_distinfoLinesChecke
        G.checkdirPackage(".")
 
        t.CheckOutputLines(
+               "WARN: distinfo:3: Distfiles without version number should be placed in a versioned DIST_SUBDIR.",
                "ERROR: distinfo: Patch \"patches/patch-aa\" is not recorded. Run \""+confMake+" makepatchsum\".",
                "ERROR: distinfo: Patch \"patches/patch-src-Makefile\" is not recorded. Run \""+confMake+" makepatchsum\".")
 }

Index: pkgsrc/pkgtools/pkglint/files/mkline.go
diff -u pkgsrc/pkgtools/pkglint/files/mkline.go:1.76 pkgsrc/pkgtools/pkglint/files/mkline.go:1.77
--- pkgsrc/pkgtools/pkglint/files/mkline.go:1.76        Sat Feb 15 13:48:40 2020
+++ pkgsrc/pkgtools/pkglint/files/mkline.go     Thu Mar 26 07:02:44 2020
@@ -293,12 +293,18 @@ func (mkline *MkLine) Args() string { re
 func (mkline *MkLine) Cond() *MkCond {
        cond := mkline.data.(*mkLineDirective).cond
        if cond == nil {
+               assert(mkline.HasCond())
                cond = NewMkParser(mkline.Line, mkline.Args()).MkCond()
                mkline.data.(*mkLineDirective).cond = cond
        }
        return cond
 }
 
+func (mkline *MkLine) HasCond() bool {
+       directive := mkline.Directive()
+       return directive == "if" || directive == "elif"
+}
+
 // DirectiveComment is the trailing end-of-line comment, typically at a deeply nested .endif or .endfor.
 func (mkline *MkLine) DirectiveComment() string { return mkline.data.(*mkLineDirective).comment }
 

Index: pkgsrc/pkgtools/pkglint/files/mklines.go
diff -u pkgsrc/pkgtools/pkglint/files/mklines.go:1.70 pkgsrc/pkgtools/pkglint/files/mklines.go:1.71
--- pkgsrc/pkgtools/pkglint/files/mklines.go:1.70       Wed Mar 18 08:24:49 2020
+++ pkgsrc/pkgtools/pkglint/files/mklines.go    Thu Mar 26 07:02:44 2020
@@ -653,6 +653,18 @@ func (mklines *MkLines) ExpandLoopVar(va
        return nil
 }
 
+// IsUnreachable determines whether the given line is unreachable because a
+// condition on the way to that line is not satisfied.
+// If unsure, returns false.
+func (mklines *MkLines) IsUnreachable(mkline *MkLine) bool {
+       // To make this code as simple as possible, the code should operate
+       // on a high-level AST, where the nodes are If, For and BasicBlock.
+       //
+       // See lang/ghc*/bootstrap.mk for good examples how pkglint should
+       // treat variable assignments. It's getting complicated.
+       return false
+}
+
 func (mklines *MkLines) SaveAutofixChanges() {
        mklines.lines.SaveAutofixChanges()
 }

Index: pkgsrc/pkgtools/pkglint/files/package.go
diff -u pkgsrc/pkgtools/pkglint/files/package.go:1.85 pkgsrc/pkgtools/pkglint/files/package.go:1.86
--- pkgsrc/pkgtools/pkglint/files/package.go:1.85       Sun Mar 22 17:43:15 2020
+++ pkgsrc/pkgtools/pkglint/files/package.go    Thu Mar 26 07:02:44 2020
@@ -86,6 +86,10 @@ type Package struct {
        IgnoreMissingPatches bool // In distinfo, don't warn about patches that cannot be found.
 
        Once Once
+
+       // Contains the basenames of the distfiles that are mentioned in distinfo,
+       // for example "package-1.0.tar.gz", even if that file is in a DIST_SUBDIR.
+       distinfoDistfiles map[string]bool
 }
 
 func NewPackage(dir CurrPath) *Package {
@@ -121,6 +125,7 @@ func NewPackage(dir CurrPath) *Package {
        pkg.vars.Fallback("PATCHDIR", "patches")
        pkg.vars.Fallback("KRB5_TYPE", "heimdal")
        pkg.vars.Fallback("PGSQL_VERSION", "95")
+       pkg.vars.Fallback("EXTRACT_SUFX", ".tar.gz")
 
        // In reality, this is an absolute pathname. Since this variable is
        // typically used in the form ${.CURDIR}/../../somewhere, this doesn't
@@ -132,6 +137,9 @@ func NewPackage(dir CurrPath) *Package {
 
 func (pkg *Package) Check() {
        files, mklines, allLines := pkg.load()
+       if files == nil {
+               return
+       }
        pkg.check(files, mklines, allLines)
 }
 
@@ -588,6 +596,8 @@ func (pkg *Package) check(filenames []Cu
 
                pkg.checkDescr(filenames, mklines)
        }
+
+       pkg.checkDistfilesInDistinfo(allLines)
 }
 
 func (pkg *Package) checkDescr(filenames []CurrPath, mklines *MkLines) {
@@ -605,6 +615,43 @@ func (pkg *Package) checkDescr(filenames
        mklines.Whole().Errorf("Each package must have a DESCR file.")
 }
 
+func (pkg *Package) checkDistfilesInDistinfo(mklines *MkLines) {
+       // Needs more work; see MkLines.IsUnreachable.
+       if !G.Experimental {
+               return
+       }
+
+       if pkg.distinfoDistfiles == nil {
+               return
+       }
+
+       redundant := pkg.redundant
+       distfiles := redundant.get("DISTFILES")
+       if distfiles == nil {
+               return
+       }
+
+       for _, mkline := range distfiles.vari.WriteLocations() {
+               unreachable := newLazyBool(
+                       func() bool { return mklines.IsUnreachable(mkline) })
+               resolved := resolveVariableRefs(mkline.Value(), nil, pkg)
+
+               for _, distfile := range mkline.ValueFields(resolved) {
+                       if containsVarUse(distfile) {
+                               continue
+                       }
+                       if pkg.distinfoDistfiles[NewPath(distfile).Base()] {
+                               continue
+                       }
+                       if unreachable.get() {
+                               continue
+                       }
+                       mkline.Warnf("Distfile %q is not mentioned in %s.",
+                               distfile, mkline.Rel(pkg.File(pkg.DistinfoFile)))
+               }
+       }
+}
+
 func (pkg *Package) checkfilePackageMakefile(filename CurrPath, mklines *MkLines, allLines *MkLines) {
        if trace.Tracing {
                defer trace.Call(filename)()

Index: pkgsrc/pkgtools/pkglint/files/package_test.go
diff -u pkgsrc/pkgtools/pkglint/files/package_test.go:1.72 pkgsrc/pkgtools/pkglint/files/package_test.go:1.73
--- pkgsrc/pkgtools/pkglint/files/package_test.go:1.72  Sun Mar 22 17:43:15 2020
+++ pkgsrc/pkgtools/pkglint/files/package_test.go       Thu Mar 26 07:02:44 2020
@@ -1344,6 +1344,124 @@ func (s *Suite) Test_Package_checkDescr_
        t.CheckOutputEmpty()
 }
 
+// All files that can possibly be added to DISTFILES need a corresponding
+// entry in the distinfo file.
+//
+// https://mail-index.netbsd.org/pkgsrc-changes/2020/02/05/msg206172.html
+// https://mail-index.netbsd.org/pkgsrc-changes/2020/03/25/msg209445.html
+func (s *Suite) Test_Package_checkDistfilesInDistinfo__indirect_conditional_DISTFILES(c *check.C) {
+       G.Experimental = true
+
+       t := s.Init(c)
+
+       t.SetUpPackage("category/package",
+               ".include \"../../mk/bsd.prefs.mk\"",
+               "",
+               "DISTFILES.i386=\t\tdistfile-i386.tar.gz",
+               "DISTFILES.other=\tdistfile-other.tar.gz",
+               "",
+               ".if ${MACHINE_ARCH} == i386",
+               "DISTFILES+=\t${DISTFILES.i386}",
+               ".else",
+               "DISTFILES+=\t${DISTFILES.other}",
+               ".endif",
+               "",
+               "DISTFILES+=\tok-3.tar.gz")
+       t.CreateFileLines("category/package/distinfo",
+               CvsID,
+               "",
+               "SHA1 (ok-3.tar.gz) = 1234",
+               "RMD160 (ok-3.tar.gz) = 1234",
+               "SHA512 (ok-3.tar.gz) = 1234",
+               "Size (ok-3.tar.gz) = 1234",
+               "SHA1 (package-1.0.tar.gz) = 1234",
+               "RMD160 (package-1.0.tar.gz) = 1234",
+               "SHA512 (package-1.0.tar.gz) = 1234",
+               "Size (package-1.0.tar.gz) = 1234")
+       t.Chdir("category/package")
+       t.FinishSetUp()
+
+       G.Check(".")
+
+       t.CheckOutputLines(
+               "WARN: Makefile:26: Distfile \"distfile-i386.tar.gz\" is not mentioned in distinfo.",
+               "WARN: Makefile:28: Distfile \"distfile-other.tar.gz\" is not mentioned in distinfo.")
+}
+
+func (s *Suite) Test_Package_checkDistfilesInDistinfo__indirect_DIST_SUBDIR(c *check.C) {
+       G.Experimental = true
+
+       t := s.Init(c)
+
+       t.SetUpPackage("category/package",
+               ".include \"../../mk/bsd.prefs.mk\"",
+               "",
+               // As of 2020-03-26, pkglint doesn't know how to resolve PKGNAME_NOREV.
+               "DIST_SUBDIR=\t${PKGNAME_NOREV}",
+               // Strictly speaking, this is redundant, but as of 2020-03-26,
+               // pkglint doesn't infer the default DISTFILES, so it needs a bit of help here.
+               "DISTFILES+=\tdistfile-1.0.tar.gz",
+               "DISTFILES+=\tdistfile-other.tar.gz")
+       t.CreateFileLines("distinfo",
+               CvsID,
+               "",
+               "SHA1 (package-1.0/distfile-other.tar.gz) = 1234",
+               "RMD160 (package-1.0/distfile-other.tar.gz) = 1234",
+               "SHA512 (package-1.0/distfile-other.tar.gz) = 1234",
+               "Size (package-1.0/distfile-other.tar.gz) = 1234",
+               "SHA1 (package-1.0/package-1.0.tar.gz) = 1234",
+               "RMD160 (package-1.0/package-1.0.tar.gz) = 1234",
+               "SHA512 (package-1.0/package-1.0.tar.gz) = 1234",
+               "Size (package-1.0/package-1.0.tar.gz) = 1234")
+       t.Chdir("category/package")
+       t.FinishSetUp()
+
+       G.Check(".")
+
+       t.CheckOutputLines(
+               "WARN: Makefile:24: Distfile \"distfile-other.tar.gz\" is not mentioned in distinfo.")
+}
+
+func (s *Suite) Test_Package_checkDistfilesInDistinfo__depending_on_package_settable(c *check.C) {
+       G.Experimental = true
+
+       t := s.Init(c)
+
+       t.SetUpPackage("print/tex-varisize",
+               "DISTNAME=\tvarisize",
+               "PKGNAME=\ttex-${DISTNAME}-2014",
+               "TEXLIVE_REV=\t15878",
+               "",
+               "TEXLIVE_UNVERSIONED=\tyes",
+               "",
+               ".include \"../../print/texlive/package.mk\"")
+       t.CreateFileLines("print/tex-varisize/distinfo",
+               CvsID,
+               "",
+               "SHA1 (tex-varisize-15878/varisize.tar.xz) = 1234",
+               "RMD160 (tex-varisize-15878/varisize.tar.xz) = 1234",
+               "SHA512 (tex-varisize-15878/varisize.tar.xz) = 1234",
+               "Size (tex-varisize-15878/varisize.tar.xz) = 3176 bytes")
+       t.CreateFileLines("print/texlive/package.mk",
+               MkCvsID,
+               "",
+               ".if empty(TEXLIVE_UNVERSIONED)",
+               "DISTFILES?=\t${DISTNAME}.r${TEXLIVE_REV}${EXTRACT_SUFX}",
+               ".endif")
+       t.Chdir("print/tex-varisize")
+       t.FinishSetUp()
+
+       G.Check(".")
+
+       // The package-settable TEXLIVE_UNVERSIONED is definitely not empty,
+       // therefore the line in package.mk doesn't apply.
+       // FIXME: This warning is wrong because the line in package.mk is unreachable.
+       //  See MkLines.IsUnreachable.
+       t.CheckOutputLines(
+               "WARN: ../../print/texlive/package.mk:4: Distfile \"varisize.r15878.tar.gz\" " +
+                       "is not mentioned in ../../print/tex-varisize/distinfo.")
+}
+
 func (s *Suite) Test_Package_checkfilePackageMakefile__GNU_CONFIGURE(c *check.C) {
        t := s.Init(c)
 

Index: pkgsrc/pkgtools/pkglint/files/pkglint.go
diff -u pkgsrc/pkgtools/pkglint/files/pkglint.go:1.78 pkgsrc/pkgtools/pkglint/files/pkglint.go:1.79
--- pkgsrc/pkgtools/pkglint/files/pkglint.go:1.78       Mon Mar 23 19:55:08 2020
+++ pkgsrc/pkgtools/pkglint/files/pkglint.go    Thu Mar 26 07:02:44 2020
@@ -401,7 +401,7 @@ func resolveVariableRefs(text string, mk
        str := text
        for {
                // TODO: Replace regular expression with full parser.
-               replaced := replaceAllFunc(str, `\$\{([\w.]+)\}`, replace)
+               replaced := replaceAllFunc(str, `\$\{([\w.\-]+)\}`, replace)
                if replaced == str {
                        if trace.Tracing && str != text {
                                trace.Stepf("resolveVariableRefs %q => %q", text, replaced)

Index: pkgsrc/pkgtools/pkglint/files/shell.go
diff -u pkgsrc/pkgtools/pkglint/files/shell.go:1.60 pkgsrc/pkgtools/pkglint/files/shell.go:1.61
--- pkgsrc/pkgtools/pkglint/files/shell.go:1.60 Wed Mar 18 08:24:49 2020
+++ pkgsrc/pkgtools/pkglint/files/shell.go      Thu Mar 26 07:02:44 2020
@@ -657,6 +657,8 @@ func (ck *ShellLineChecker) CheckShellCo
                        line.Errorf("Use of _PKG_SILENT and _PKG_DEBUG is obsolete. Use ${RUN} instead.")
                }
        }
+       lexer.SkipHspace()
+       lexer.SkipString("${_ULIMIT_CMD}") // It brings its own semicolon, just like ${RUN}.
 
        ck.CheckShellCommand(lexer.Rest(), &setE, RunTime)
        ck.checkMultiLineComment()

Index: pkgsrc/pkgtools/pkglint/files/shell_test.go
diff -u pkgsrc/pkgtools/pkglint/files/shell_test.go:1.66 pkgsrc/pkgtools/pkglint/files/shell_test.go:1.67
--- pkgsrc/pkgtools/pkglint/files/shell_test.go:1.66    Wed Mar 18 08:24:49 2020
+++ pkgsrc/pkgtools/pkglint/files/shell_test.go Thu Mar 26 07:02:44 2020
@@ -587,6 +587,21 @@ func (s *Suite) Test_SimpleCommandChecke
                "WARN: Makefile:4: Please use ${ECHO_N} instead of \"echo -n\".")
 }
 
+// Before 2020-03-25, pkglint ran into a parse error since it didn't
+// know that _ULIMIT_CMD brings its own semicolon.
+func (s *Suite) Test_ShellLineChecker__skip_ULIMIT_CMD(c *check.C) {
+       t := s.Init(c)
+
+       mklines := t.NewMkLines("Makefile",
+               MkCvsID,
+               "pre-configure:",
+               "\t${RUN} ${_ULIMIT_CMD} while :; do :; done")
+
+       mklines.Check()
+
+       t.CheckOutputEmpty()
+}
+
 func (s *Suite) Test_ShellLineChecker_checkConditionalCd(c *check.C) {
        t := s.Init(c)
 

Index: pkgsrc/pkgtools/pkglint/files/util.go
diff -u pkgsrc/pkgtools/pkglint/files/util.go:1.75 pkgsrc/pkgtools/pkglint/files/util.go:1.76
--- pkgsrc/pkgtools/pkglint/files/util.go:1.75  Wed Mar 18 08:24:49 2020
+++ pkgsrc/pkgtools/pkglint/files/util.go       Thu Mar 26 07:02:44 2020
@@ -1540,3 +1540,18 @@ type bagEntry struct {
        key   interface{}
        count int
 }
+
+type lazyBool struct {
+       fn    func() bool
+       value bool
+}
+
+func newLazyBool(fn func() bool) *lazyBool { return &lazyBool{fn, false} }
+
+func (b *lazyBool) get() bool {
+       if b.fn != nil {
+               b.value = b.fn()
+               b.fn = nil
+       }
+       return b.value
+}

Index: pkgsrc/pkgtools/pkglint/files/vardefs.go
diff -u pkgsrc/pkgtools/pkglint/files/vardefs.go:1.91 pkgsrc/pkgtools/pkglint/files/vardefs.go:1.92
--- pkgsrc/pkgtools/pkglint/files/vardefs.go:1.91       Wed Mar 18 08:24:49 2020
+++ pkgsrc/pkgtools/pkglint/files/vardefs.go    Thu Mar 26 07:02:44 2020
@@ -287,7 +287,7 @@ func (reg *VarTypeRegistry) compilerLang
                                }
                        }
 
-                       if mkline.IsDirective() && mkline.Cond() != nil {
+                       if mkline.IsDirective() && mkline.HasCond() && mkline.Cond() != nil {
                                mkline.Cond().Walk(&MkCondCallback{
                                        VarUse: func(varuse *MkVarUse) {
                                                if varuse.varname == "USE_LANGUAGES" && len(varuse.modifiers) == 1 {
@@ -1691,7 +1691,7 @@ func (reg *VarTypeRegistry) Init(src *Pk
        reg.syslist("TOUCH_FLAGS", BtShellWord)
        reg.pkglist("UAC_REQD_EXECS", BtPrefixPathname)
        reg.pkglistbl3("UNLIMIT_RESOURCES",
-               enum("cputime datasize memorysize stacksize"))
+               enum("cputime datasize memorysize stacksize virtualsize"))
        reg.usr("UNPRIVILEGED_USER", BtUserGroupName)
        reg.usr("UNPRIVILEGED_GROUP", BtUserGroupName)
        reg.pkglist("UNWRAP_FILES", BtPathPattern)
@@ -1767,6 +1767,7 @@ func (reg *VarTypeRegistry) Init(src *Pk
        reg.pkglist("X11_LDFLAGS", BtLdFlag)
        reg.sys("X11_PKGSRCDIR.*", BtPathname)
        reg.pkglist("XMKMF_FLAGS", BtShellWord)
+       reg.sys("_ULIMIT_CMD", BtShellCommands)
        reg.pkglist("_WRAP_EXTRA_ARGS.*", BtShellWord)
 
        reg.infralist("_VARGROUPS", BtIdentifierDirect)



Home | Main Index | Thread Index | Old Index