Updated pkglint to 5.4.1. Changes since 5.4.0: * PKG_SKIP_REASON is no longer marked as deprecated, since it still has its value * When PKG_SKIP_REASON is defined depending on OPSYS, suggest to use NOT_FOR_PLATFORM instead. * Check for ROOT_USER/ROOT_GROUP being used in special file permissions; using REAL_ROOT_USER/REAL_ROOT_GROUP is better.diff -r1.485 -r1.486 pkgsrc/pkgtools/pkglint/Makefile
(rillig)
@@ -1,16 +1,16 @@ | @@ -1,16 +1,16 @@ | |||
1 | # $NetBSD: Makefile,v 1.485 2016/06/05 11:24:32 rillig Exp $ | 1 | # $NetBSD: Makefile,v 1.486 2016/06/10 19:42:41 rillig Exp $ | |
2 | 2 | |||
3 | PKGNAME= pkglint-5.4.0 | 3 | PKGNAME= pkglint-5.4.1 | |
4 | DISTFILES= # none | 4 | DISTFILES= # none | |
5 | CATEGORIES= pkgtools | 5 | CATEGORIES= pkgtools | |
6 | 6 | |||
7 | OWNER= rillig@NetBSD.org | 7 | OWNER= rillig@NetBSD.org | |
8 | HOMEPAGE= http://www.NetBSD.org/docs/pkgsrc/ | 8 | HOMEPAGE= http://www.NetBSD.org/docs/pkgsrc/ | |
9 | COMMENT= Verifier for NetBSD packages | 9 | COMMENT= Verifier for NetBSD packages | |
10 | LICENSE= 2-clause-bsd | 10 | LICENSE= 2-clause-bsd | |
11 | CONFLICTS+= pkglint4-[0-9]* | 11 | CONFLICTS+= pkglint4-[0-9]* | |
12 | 12 | |||
13 | WRKSRC= ${WRKDIR}/netbsd.org/pkglint | 13 | WRKSRC= ${WRKDIR}/netbsd.org/pkglint | |
14 | NO_CHECKSUM= yes | 14 | NO_CHECKSUM= yes | |
15 | USE_LANGUAGES= # none | 15 | USE_LANGUAGES= # none | |
16 | USE_TOOLS+= pax | 16 | USE_TOOLS+= pax |
@@ -468,27 +468,26 @@ func (gd *GlobalData) loadDeprecatedVars | @@ -468,27 +468,26 @@ func (gd *GlobalData) loadDeprecatedVars | |||
468 | 468 | |||
469 | // July 2006 | 469 | // July 2006 | |
470 | "USE_DIGEST": "You can just remove it.", | 470 | "USE_DIGEST": "You can just remove it.", | |
471 | "LTCONFIG_OVERRIDE": "You can just remove it.", | 471 | "LTCONFIG_OVERRIDE": "You can just remove it.", | |
472 | "USE_GNU_GETTEXT": "You can just remove it.", | 472 | "USE_GNU_GETTEXT": "You can just remove it.", | |
473 | "BUILD_ENV": "Use PKGSRC_MAKE_ENV instead.", | 473 | "BUILD_ENV": "Use PKGSRC_MAKE_ENV instead.", | |
474 | "DYNAMIC_MASTER_SITES": "You can just remove it.", | 474 | "DYNAMIC_MASTER_SITES": "You can just remove it.", | |
475 | 475 | |||
476 | // September 2006 | 476 | // September 2006 | |
477 | "MAKEFILE": "Use MAKE_FILE instead.", | 477 | "MAKEFILE": "Use MAKE_FILE instead.", | |
478 | 478 | |||
479 | // November 2006 | 479 | // November 2006 | |
480 | "SKIP_PORTABILITY_CHECK": "Use CHECK_PORTABILITY_SKIP (a list of patterns) instead.", | 480 | "SKIP_PORTABILITY_CHECK": "Use CHECK_PORTABILITY_SKIP (a list of patterns) instead.", | |
481 | "PKG_SKIP_REASON": "Use PKG_FAIL_REASON instead.", | |||
482 | 481 | |||
483 | // January 2007 | 482 | // January 2007 | |
484 | "BUILDLINK_TRANSFORM.*": "Use BUILDLINK_FNAME_TRANSFORM.* instead.", | 483 | "BUILDLINK_TRANSFORM.*": "Use BUILDLINK_FNAME_TRANSFORM.* instead.", | |
485 | 484 | |||
486 | // March 2007 | 485 | // March 2007 | |
487 | "SCRIPTDIR": "You can just remove it.", | 486 | "SCRIPTDIR": "You can just remove it.", | |
488 | "NO_PKG_REGISTER": "You can just remove it.", | 487 | "NO_PKG_REGISTER": "You can just remove it.", | |
489 | "NO_DEPENDS": "You can just remove it.", | 488 | "NO_DEPENDS": "You can just remove it.", | |
490 | 489 | |||
491 | // October 2007 | 490 | // October 2007 | |
492 | "_PKG_SILENT": "Use RUN (with more error checking) instead.", | 491 | "_PKG_SILENT": "Use RUN (with more error checking) instead.", | |
493 | "_PKG_DEBUG": "Use RUN (with more error checking) instead.", | 492 | "_PKG_DEBUG": "Use RUN (with more error checking) instead.", | |
494 | "LICENCE": "Use LICENSE instead.", | 493 | "LICENCE": "Use LICENSE instead.", |
@@ -267,26 +267,36 @@ func (s *Suite) TestVartypeCheck_Option( | @@ -267,26 +267,36 @@ func (s *Suite) TestVartypeCheck_Option( | |||
267 | "undocumented", | 267 | "undocumented", | |
268 | "unknown") | 268 | "unknown") | |
269 | 269 | |||
270 | c.Check(s.Output(), equals, "WARN: fname:3: Unknown option \"unknown\".\n") | 270 | c.Check(s.Output(), equals, "WARN: fname:3: Unknown option \"unknown\".\n") | |
271 | } | 271 | } | |
272 | 272 | |||
273 | func (s *Suite) TestVartypeCheck_Pathlist(c *check.C) { | 273 | func (s *Suite) TestVartypeCheck_Pathlist(c *check.C) { | |
274 | runVartypeChecks("PATH", opAssign, (*VartypeCheck).Pathlist, | 274 | runVartypeChecks("PATH", opAssign, (*VartypeCheck).Pathlist, | |
275 | "/usr/bin:/usr/sbin:.:${LOCALBASE}/bin") | 275 | "/usr/bin:/usr/sbin:.:${LOCALBASE}/bin") | |
276 | 276 | |||
277 | c.Check(s.Output(), equals, "WARN: fname:1: All components of PATH (in this case \".\") should be absolute paths.\n") | 277 | c.Check(s.Output(), equals, "WARN: fname:1: All components of PATH (in this case \".\") should be absolute paths.\n") | |
278 | } | 278 | } | |
279 | 279 | |||
280 | func (s *Suite) Test_VartypeCheck_Perms(c *check.C) { | |||
281 | runVartypeChecks("CONF_FILES_PERMS", opAssignAppend, (*VartypeCheck).Perms, | |||
282 | "root", | |||
283 | "${ROOT_USER}", | |||
284 | "ROOT_USER", | |||
285 | "${REAL_ROOT_USER}") | |||
286 | ||||
287 | c.Check(s.Output(), equals, "ERROR: fname:2: ROOT_USER must not be used in permission definitions. Use REAL_ROOT_USER instead.\n") | |||
288 | } | |||
289 | ||||
280 | func (s *Suite) TestVartypeCheck_PkgOptionsVar(c *check.C) { | 290 | func (s *Suite) TestVartypeCheck_PkgOptionsVar(c *check.C) { | |
281 | runVartypeChecks("PKG_OPTIONS_VAR.screen", opAssign, (*VartypeCheck).PkgOptionsVar, | 291 | runVartypeChecks("PKG_OPTIONS_VAR.screen", opAssign, (*VartypeCheck).PkgOptionsVar, | |
282 | "PKG_OPTIONS.${PKGBASE}") | 292 | "PKG_OPTIONS.${PKGBASE}") | |
283 | 293 | |||
284 | c.Check(s.Output(), equals, "ERROR: fname:1: PKGBASE must not be used in PKG_OPTIONS_VAR.\n") | 294 | c.Check(s.Output(), equals, "ERROR: fname:1: PKGBASE must not be used in PKG_OPTIONS_VAR.\n") | |
285 | } | 295 | } | |
286 | 296 | |||
287 | func (s *Suite) TestVartypeCheck_PkgRevision(c *check.C) { | 297 | func (s *Suite) TestVartypeCheck_PkgRevision(c *check.C) { | |
288 | runVartypeChecks("PKGREVISION", opAssign, (*VartypeCheck).PkgRevision, | 298 | runVartypeChecks("PKGREVISION", opAssign, (*VartypeCheck).PkgRevision, | |
289 | "3a") | 299 | "3a") | |
290 | 300 | |||
291 | c.Check(s.Output(), equals, ""+ | 301 | c.Check(s.Output(), equals, ""+ | |
292 | "WARN: fname:1: PKGREVISION must be a positive integer number.\n"+ | 302 | "WARN: fname:1: PKGREVISION must be a positive integer number.\n"+ |
@@ -206,28 +206,29 @@ func (mkline *MkLine) checkInclude() { | @@ -206,28 +206,29 @@ func (mkline *MkLine) checkInclude() { | |||
206 | mkline.Error1("%s must not be included directly. Include \"../../mk/x11.buildlink3.mk\" instead.", includefile) | 206 | mkline.Error1("%s must not be included directly. Include \"../../mk/x11.buildlink3.mk\" instead.", includefile) | |
207 | 207 | |||
208 | case hasSuffix(includefile, "/jpeg/buildlink3.mk"): | 208 | case hasSuffix(includefile, "/jpeg/buildlink3.mk"): | |
209 | mkline.Error1("%s must not be included directly. Include \"../../mk/jpeg.buildlink3.mk\" instead.", includefile) | 209 | mkline.Error1("%s must not be included directly. Include \"../../mk/jpeg.buildlink3.mk\" instead.", includefile) | |
210 | 210 | |||
211 | case hasSuffix(includefile, "/intltool/buildlink3.mk"): | 211 | case hasSuffix(includefile, "/intltool/buildlink3.mk"): | |
212 | mkline.Warn0("Please write \"USE_TOOLS+= intltool\" instead of this line.") | 212 | mkline.Warn0("Please write \"USE_TOOLS+= intltool\" instead of this line.") | |
213 | 213 | |||
214 | case hasSuffix(includefile, "/builtin.mk"): | 214 | case hasSuffix(includefile, "/builtin.mk"): | |
215 | mkline.Line.Error2("%s must not be included directly. Include \"%s/buildlink3.mk\" instead.", includefile, path.Dir(includefile)) | 215 | mkline.Line.Error2("%s must not be included directly. Include \"%s/buildlink3.mk\" instead.", includefile, path.Dir(includefile)) | |
216 | } | 216 | } | |
217 | } | 217 | } | |
218 | 218 | |||
219 | func (mkline *MkLine) checkCond(indentation *Indentation, forVars map[string]bool) { | 219 | func (mkline *MkLine) checkCond(forVars map[string]bool) { | |
220 | indent, directive, args := mkline.Indent(), mkline.Directive(), mkline.Args() | 220 | indent, directive, args := mkline.Indent(), mkline.Directive(), mkline.Args() | |
221 | indentation := &G.Mk.indentation | |||
221 | 222 | |||
222 | switch directive { | 223 | switch directive { | |
223 | case "endif", "endfor", "elif", "else": | 224 | case "endif", "endfor", "elif", "else": | |
224 | if indentation.Len() > 1 { | 225 | if indentation.Len() > 1 { | |
225 | indentation.Pop() | 226 | indentation.Pop() | |
226 | } else { | 227 | } else { | |
227 | mkline.Error1("Unmatched .%s.", directive) | 228 | mkline.Error1("Unmatched .%s.", directive) | |
228 | } | 229 | } | |
229 | } | 230 | } | |
230 | 231 | |||
231 | // Check the indentation | 232 | // Check the indentation | |
232 | if expected := strings.Repeat(" ", indentation.Depth()); indent != expected { | 233 | if expected := strings.Repeat(" ", indentation.Depth()); indent != expected { | |
233 | if G.opts.WarnSpace && !mkline.Line.AutofixReplace("."+indent, "."+expected) { | 234 | if G.opts.WarnSpace && !mkline.Line.AutofixReplace("."+indent, "."+expected) { | |
@@ -933,26 +934,30 @@ func (mkline *MkLine) checkVarassignSpec | @@ -933,26 +934,30 @@ func (mkline *MkLine) checkVarassignSpec | |||
933 | "only the state of the variable), whose meaning could be described", | 934 | "only the state of the variable), whose meaning could be described", | |
934 | "with \"none\". It is this meaning that should be described.") | 935 | "with \"none\". It is this meaning that should be described.") | |
935 | } | 936 | } | |
936 | 937 | |||
937 | if m, revvarname := match1(value, `\$\{(PKGNAME|PKGVERSION)[:\}]`); m { | 938 | if m, revvarname := match1(value, `\$\{(PKGNAME|PKGVERSION)[:\}]`); m { | |
938 | if varname == "DIST_SUBDIR" || varname == "WRKSRC" { | 939 | if varname == "DIST_SUBDIR" || varname == "WRKSRC" { | |
939 | mkline.Line.Warnf("%s should not be used in %s, as it includes the PKGREVISION. Please use %s_NOREV instead.", revvarname, varname, revvarname) | 940 | mkline.Line.Warnf("%s should not be used in %s, as it includes the PKGREVISION. Please use %s_NOREV instead.", revvarname, varname, revvarname) | |
940 | } | 941 | } | |
941 | } | 942 | } | |
942 | 943 | |||
943 | if hasPrefix(varname, "SITES_") { | 944 | if hasPrefix(varname, "SITES_") { | |
944 | mkline.Warn0("SITES_* is deprecated. Please use SITES.* instead.") | 945 | mkline.Warn0("SITES_* is deprecated. Please use SITES.* instead.") | |
945 | } | 946 | } | |
947 | ||||
948 | if varname == "PKG_SKIP_REASON" && G.Mk.indentation.DependsOn("OPSYS") { | |||
949 | mkline.Note0("Consider defining NOT_FOR_PLATFORM instead of setting PKG_SKIP_REASON depending on ${OPSYS}.") | |||
950 | } | |||
946 | } | 951 | } | |
947 | 952 | |||
948 | func (mkline *MkLine) checkVarassignBsdPrefs() { | 953 | func (mkline *MkLine) checkVarassignBsdPrefs() { | |
949 | if G.opts.WarnExtra && mkline.Op() == opAssignDefault && G.Pkg != nil && !G.Pkg.SeenBsdPrefsMk { | 954 | if G.opts.WarnExtra && mkline.Op() == opAssignDefault && G.Pkg != nil && !G.Pkg.SeenBsdPrefsMk { | |
950 | switch mkline.Varcanon() { | 955 | switch mkline.Varcanon() { | |
951 | case "BUILDLINK_PKGSRCDIR.*", "BUILDLINK_DEPMETHOD.*", "BUILDLINK_ABI_DEPENDS.*": | 956 | case "BUILDLINK_PKGSRCDIR.*", "BUILDLINK_DEPMETHOD.*", "BUILDLINK_ABI_DEPENDS.*": | |
952 | return | 957 | return | |
953 | } | 958 | } | |
954 | 959 | |||
955 | mkline.Warn0("Please include \"../../mk/bsd.prefs.mk\" before using \"?=\".") | 960 | mkline.Warn0("Please include \"../../mk/bsd.prefs.mk\" before using \"?=\".") | |
956 | Explain( | 961 | Explain( | |
957 | "The ?= operator is used to provide a default value to a variable.", | 962 | "The ?= operator is used to provide a default value to a variable.", | |
958 | "In pkgsrc, many variables can be set by the pkgsrc user in the", | 963 | "In pkgsrc, many variables can be set by the pkgsrc user in the", | |
@@ -1214,26 +1219,54 @@ func (mkline *MkLine) CheckCond() { | @@ -1214,26 +1219,54 @@ func (mkline *MkLine) CheckCond() { | |||
1214 | }) | 1219 | }) | |
1215 | 1220 | |||
1216 | cond.Visit("compareVarStr", func(node *Tree) { | 1221 | cond.Visit("compareVarStr", func(node *Tree) { | |
1217 | varuse := node.args[0].(MkVarUse) | 1222 | varuse := node.args[0].(MkVarUse) | |
1218 | varname := varuse.varname | 1223 | varname := varuse.varname | |
1219 | varmods := varuse.modifiers | 1224 | varmods := varuse.modifiers | |
1220 | value := node.args[2].(string) | 1225 | value := node.args[2].(string) | |
1221 | if len(varmods) == 0 { | 1226 | if len(varmods) == 0 { | |
1222 | mkline.CheckVartype(varname, opUse, value, "") | 1227 | mkline.CheckVartype(varname, opUse, value, "") | |
1223 | } else if len(varmods) == 1 && matches(varmods[0], `^[MN]`) && value != "" { | 1228 | } else if len(varmods) == 1 && matches(varmods[0], `^[MN]`) && value != "" { | |
1224 | mkline.CheckVartype(varname, opUseMatch, value, "") | 1229 | mkline.CheckVartype(varname, opUseMatch, value, "") | |
1225 | } | 1230 | } | |
1226 | }) | 1231 | }) | |
1232 | ||||
1233 | mkline.rememberUsedVariables(cond) | |||
1234 | } | |||
1235 | ||||
1236 | func (mkline *MkLine) rememberUsedVariables(cond *Tree) { | |||
1237 | if G.Mk == nil { | |||
1238 | return | |||
1239 | } | |||
1240 | ||||
1241 | indentation := &G.Mk.indentation | |||
1242 | arg0varname := func(node *Tree) { | |||
1243 | varname := node.args[0].(string) | |||
1244 | indentation.AddVar(varname) | |||
1245 | } | |||
1246 | arg0varuse := func(node *Tree) { | |||
1247 | varuse := node.args[0].(MkVarUse) | |||
1248 | indentation.AddVar(varuse.varname) | |||
1249 | } | |||
1250 | arg2varuse := func(node *Tree) { | |||
1251 | varuse := node.args[2].(MkVarUse) | |||
1252 | indentation.AddVar(varuse.varname) | |||
1253 | } | |||
1254 | cond.Visit("defined", arg0varname) | |||
1255 | cond.Visit("empty", arg0varuse) | |||
1256 | cond.Visit("compareVarNum", arg0varuse) | |||
1257 | cond.Visit("compareVarStr", arg0varuse) | |||
1258 | cond.Visit("compareVarVar", arg0varuse) | |||
1259 | cond.Visit("compareVarVar", arg2varuse) | |||
1227 | } | 1260 | } | |
1228 | 1261 | |||
1229 | func (mkline *MkLine) CheckValidCharactersInValue(reValid string) { | 1262 | func (mkline *MkLine) CheckValidCharactersInValue(reValid string) { | |
1230 | rest := regcomp(reValid).ReplaceAllString(mkline.Value(), "") | 1263 | rest := regcomp(reValid).ReplaceAllString(mkline.Value(), "") | |
1231 | if rest != "" { | 1264 | if rest != "" { | |
1232 | uni := "" | 1265 | uni := "" | |
1233 | for _, c := range rest { | 1266 | for _, c := range rest { | |
1234 | uni += fmt.Sprintf(" %U", c) | 1267 | uni += fmt.Sprintf(" %U", c) | |
1235 | } | 1268 | } | |
1236 | mkline.Warn2("%s contains invalid characters (%s).", mkline.Varname(), uni[1:]) | 1269 | mkline.Warn2("%s contains invalid characters (%s).", mkline.Varname(), uni[1:]) | |
1237 | } | 1270 | } | |
1238 | } | 1271 | } | |
1239 | 1272 | |||
@@ -1669,20 +1702,52 @@ const ( | @@ -1669,20 +1702,52 @@ const ( | |||
1669 | ) | 1702 | ) | |
1670 | 1703 | |||
1671 | func (e vucExtent) String() string { return [...]string{"word", "wordpart"}[e] } | 1704 | func (e vucExtent) String() string { return [...]string{"word", "wordpart"}[e] } | |
1672 | 1705 | |||
1673 | func (vuc *VarUseContext) String() string { | 1706 | func (vuc *VarUseContext) String() string { | |
1674 | typename := "no-type" | 1707 | typename := "no-type" | |
1675 | if vuc.vartype != nil { | 1708 | if vuc.vartype != nil { | |
1676 | typename = vuc.vartype.String() | 1709 | typename = vuc.vartype.String() | |
1677 | } | 1710 | } | |
1678 | return fmt.Sprintf("(%s time:%s quoting:%s extent:%s)", typename, vuc.time, vuc.quoting, vuc.extent) | 1711 | return fmt.Sprintf("(%s time:%s quoting:%s extent:%s)", typename, vuc.time, vuc.quoting, vuc.extent) | |
1679 | } | 1712 | } | |
1680 | 1713 | |||
1681 | type Indentation struct { | 1714 | type Indentation struct { | |
1682 | data []int | 1715 | depth []int // Number of space characters; always a multiple of 2 | |
1716 | conditionVars []map[string]bool // Variables on which the current path depends | |||
1717 | } | |||
1718 | ||||
1719 | func (ind *Indentation) Len() int { | |||
1720 | return len(ind.depth) | |||
1683 | } | 1721 | } | |
1684 | 1722 | |||
1685 | func (ind *Indentation) Len() int { return len(ind.data) } | 1723 | func (ind *Indentation) Depth() int { | |
1686 | func (ind *Indentation) Depth() int { return ind.data[len(ind.data)-1] } | 1724 | return ind.depth[len(ind.depth)-1] | |
1687 | func (ind *Indentation) Pop() { ind.data = ind.data[:len(ind.data)-1] } | 1725 | } | |
1688 | func (ind *Indentation) Push(indent int) { ind.data = append(ind.data, indent) } | 1726 | ||
1727 | func (ind *Indentation) Pop() { | |||
1728 | newlen := ind.Len() - 1 | |||
1729 | ind.depth = ind.depth[:newlen] | |||
1730 | ind.conditionVars = ind.conditionVars[:newlen] | |||
1731 | } | |||
1732 | ||||
1733 | func (ind *Indentation) Push(indent int) { | |||
1734 | ind.depth = append(ind.depth, indent) | |||
1735 | ind.conditionVars = append(ind.conditionVars, nil) | |||
1736 | } | |||
1737 | ||||
1738 | func (ind *Indentation) AddVar(varname string) { | |||
1739 | level := ind.Len() - 1 | |||
1740 | if ind.conditionVars[level] == nil { | |||
1741 | ind.conditionVars[level] = make(map[string]bool) | |||
1742 | } | |||
1743 | ind.conditionVars[level][varname] = true | |||
1744 | } | |||
1745 | ||||
1746 | func (ind *Indentation) DependsOn(varname string) bool { | |||
1747 | for _, vars := range ind.conditionVars { | |||
1748 | if vars[varname] { | |||
1749 | return true | |||
1750 | } | |||
1751 | } | |||
1752 | return false | |||
1753 | } |
@@ -7,51 +7,53 @@ import ( | @@ -7,51 +7,53 @@ import ( | |||
7 | 7 | |||
8 | // MkLines contains data for the Makefile (or *.mk) that is currently checked. | 8 | // MkLines contains data for the Makefile (or *.mk) that is currently checked. | |
9 | type MkLines struct { | 9 | type MkLines struct { | |
10 | mklines []*MkLine | 10 | mklines []*MkLine | |
11 | lines []*Line | 11 | lines []*Line | |
12 | forVars map[string]bool // The variables currently used in .for loops | 12 | forVars map[string]bool // The variables currently used in .for loops | |
13 | target string // Current make(1) target | 13 | target string // Current make(1) target | |
14 | vardef map[string]*MkLine // varname => line; for all variables that are defined in the current file | 14 | vardef map[string]*MkLine // varname => line; for all variables that are defined in the current file | |
15 | varuse map[string]*MkLine // varname => line; for all variables that are used in the current file | 15 | varuse map[string]*MkLine // varname => line; for all variables that are used in the current file | |
16 | buildDefs map[string]bool // Variables that are registered in BUILD_DEFS, to ensure that all user-defined variables are added to it. | 16 | buildDefs map[string]bool // Variables that are registered in BUILD_DEFS, to ensure that all user-defined variables are added to it. | |
17 | plistVars map[string]bool // Variables that are registered in PLIST_VARS, to ensure that all user-defined variables are added to it. | 17 | plistVars map[string]bool // Variables that are registered in PLIST_VARS, to ensure that all user-defined variables are added to it. | |
18 | tools map[string]bool // Set of tools that are declared to be used. | 18 | tools map[string]bool // Set of tools that are declared to be used. | |
19 | SeenBsdPrefsMk bool | 19 | SeenBsdPrefsMk bool | |
20 | indentation Indentation // Indentation depth of preprocessing directives | |||
20 | } | 21 | } | |
21 | 22 | |||
22 | func NewMkLines(lines []*Line) *MkLines { | 23 | func NewMkLines(lines []*Line) *MkLines { | |
23 | mklines := make([]*MkLine, len(lines)) | 24 | mklines := make([]*MkLine, len(lines)) | |
24 | for i, line := range lines { | 25 | for i, line := range lines { | |
25 | mklines[i] = NewMkLine(line) | 26 | mklines[i] = NewMkLine(line) | |
26 | } | 27 | } | |
27 | tools := make(map[string]bool) | 28 | tools := make(map[string]bool) | |
28 | for toolname, tool := range G.globalData.Tools.byName { | 29 | for toolname, tool := range G.globalData.Tools.byName { | |
29 | if tool.Predefined { | 30 | if tool.Predefined { | |
30 | tools[toolname] = true | 31 | tools[toolname] = true | |
31 | } | 32 | } | |
32 | } | 33 | } | |
33 | 34 | |||
34 | return &MkLines{ | 35 | return &MkLines{ | |
35 | mklines, | 36 | mklines, | |
36 | lines, | 37 | lines, | |
37 | make(map[string]bool), | 38 | make(map[string]bool), | |
38 | "", | 39 | "", | |
39 | make(map[string]*MkLine), | 40 | make(map[string]*MkLine), | |
40 | make(map[string]*MkLine), | 41 | make(map[string]*MkLine), | |
41 | make(map[string]bool), | 42 | make(map[string]bool), | |
42 | make(map[string]bool), | 43 | make(map[string]bool), | |
43 | tools, | 44 | tools, | |
44 | false} | 45 | false, | |
46 | Indentation{}} | |||
45 | } | 47 | } | |
46 | 48 | |||
47 | func (mklines *MkLines) DefineVar(mkline *MkLine, varname string) { | 49 | func (mklines *MkLines) DefineVar(mkline *MkLine, varname string) { | |
48 | if mklines.vardef[varname] == nil { | 50 | if mklines.vardef[varname] == nil { | |
49 | mklines.vardef[varname] = mkline | 51 | mklines.vardef[varname] = mkline | |
50 | } | 52 | } | |
51 | varcanon := varnameCanon(varname) | 53 | varcanon := varnameCanon(varname) | |
52 | if mklines.vardef[varcanon] == nil { | 54 | if mklines.vardef[varcanon] == nil { | |
53 | mklines.vardef[varcanon] = mkline | 55 | mklines.vardef[varcanon] = mkline | |
54 | } | 56 | } | |
55 | } | 57 | } | |
56 | 58 | |||
57 | func (mklines *MkLines) UseVar(mkline *MkLine, varname string) { | 59 | func (mklines *MkLines) UseVar(mkline *MkLine, varname string) { | |
@@ -89,48 +91,49 @@ func (mklines *MkLines) Check() { | @@ -89,48 +91,49 @@ func (mklines *MkLines) Check() { | |||
89 | } | 91 | } | |
90 | 92 | |||
91 | // In the first pass, all additions to BUILD_DEFS and USE_TOOLS | 93 | // In the first pass, all additions to BUILD_DEFS and USE_TOOLS | |
92 | // are collected to make the order of the definitions irrelevant. | 94 | // are collected to make the order of the definitions irrelevant. | |
93 | mklines.DetermineUsedVariables() | 95 | mklines.DetermineUsedVariables() | |
94 | mklines.determineDefinedVariables() | 96 | mklines.determineDefinedVariables() | |
95 | 97 | |||
96 | // In the second pass, the actual checks are done. | 98 | // In the second pass, the actual checks are done. | |
97 | 99 | |||
98 | mklines.lines[0].CheckRcsid(`#\s+`, "# ") | 100 | mklines.lines[0].CheckRcsid(`#\s+`, "# ") | |
99 | 101 | |||
100 | var substcontext SubstContext | 102 | var substcontext SubstContext | |
101 | var varalign VaralignBlock | 103 | var varalign VaralignBlock | |
102 | indentation := Indentation{[]int{0}} // Indentation depth of preprocessing directives | 104 | indentation := &mklines.indentation | |
105 | indentation.Push(0) | |||
103 | for _, mkline := range mklines.mklines { | 106 | for _, mkline := range mklines.mklines { | |
104 | mkline.Check() | 107 | mkline.Check() | |
105 | varalign.Check(mkline) | 108 | varalign.Check(mkline) | |
106 | 109 | |||
107 | switch { | 110 | switch { | |
108 | case mkline.IsEmpty(): | 111 | case mkline.IsEmpty(): | |
109 | substcontext.Finish(mkline) | 112 | substcontext.Finish(mkline) | |
110 | 113 | |||
111 | case mkline.IsVarassign(): | 114 | case mkline.IsVarassign(): | |
112 | mklines.target = "" | 115 | mklines.target = "" | |
113 | substcontext.Varassign(mkline) | 116 | substcontext.Varassign(mkline) | |
114 | 117 | |||
115 | case mkline.IsInclude(): | 118 | case mkline.IsInclude(): | |
116 | mklines.target = "" | 119 | mklines.target = "" | |
117 | switch path.Base(mkline.Includefile()) { | 120 | switch path.Base(mkline.Includefile()) { | |
118 | case "bsd.prefs.mk", "bsd.fast.prefs.mk", "bsd.builtin.mk": | 121 | case "bsd.prefs.mk", "bsd.fast.prefs.mk", "bsd.builtin.mk": | |
119 | mklines.setSeenBsdPrefsMk() | 122 | mklines.setSeenBsdPrefsMk() | |
120 | } | 123 | } | |
121 | 124 | |||
122 | case mkline.IsCond(): | 125 | case mkline.IsCond(): | |
123 | mkline.checkCond(&indentation, mklines.forVars) | 126 | mkline.checkCond(mklines.forVars) | |
124 | 127 | |||
125 | case mkline.IsDependency(): | 128 | case mkline.IsDependency(): | |
126 | mkline.checkDependencyRule(allowedTargets) | 129 | mkline.checkDependencyRule(allowedTargets) | |
127 | mklines.target = mkline.Targets() | 130 | mklines.target = mkline.Targets() | |
128 | } | 131 | } | |
129 | } | 132 | } | |
130 | lastMkline := mklines.mklines[len(mklines.mklines)-1] | 133 | lastMkline := mklines.mklines[len(mklines.mklines)-1] | |
131 | substcontext.Finish(lastMkline) | 134 | substcontext.Finish(lastMkline) | |
132 | varalign.Finish() | 135 | varalign.Finish() | |
133 | 136 | |||
134 | ChecklinesTrailingEmptyLines(mklines.lines) | 137 | ChecklinesTrailingEmptyLines(mklines.lines) | |
135 | 138 | |||
136 | if indentation.Len() != 1 && indentation.Depth() != 0 { | 139 | if indentation.Len() != 1 && indentation.Depth() != 0 { |
@@ -234,13 +234,27 @@ func (s *Suite) Test_MkLines_LoopModifie | @@ -234,13 +234,27 @@ func (s *Suite) Test_MkLines_LoopModifie | |||
234 | mklines := s.NewMkLines("chat/xchat/Makefile", | 234 | mklines := s.NewMkLines("chat/xchat/Makefile", | |
235 | "# $"+"NetBSD$", | 235 | "# $"+"NetBSD$", | |
236 | "GCONF_SCHEMAS=\tapps_xchat_url_handler.schemas", | 236 | "GCONF_SCHEMAS=\tapps_xchat_url_handler.schemas", | |
237 | "post-install:", | 237 | "post-install:", | |
238 | "\t${GCONF_SCHEMAS:@.s.@"+ | 238 | "\t${GCONF_SCHEMAS:@.s.@"+ | |
239 | "${INSTALL_DATA} ${WRKSRC}/src/common/dbus/${.s.} ${DESTDIR}${GCONF_SCHEMAS_DIR}/@}") | 239 | "${INSTALL_DATA} ${WRKSRC}/src/common/dbus/${.s.} ${DESTDIR}${GCONF_SCHEMAS_DIR}/@}") | |
240 | 240 | |||
241 | mklines.Check() | 241 | mklines.Check() | |
242 | 242 | |||
243 | c.Check(s.Output(), equals, ""+ // No warning about missing @ at the end | 243 | c.Check(s.Output(), equals, ""+ // No warning about missing @ at the end | |
244 | "WARN: chat/xchat/Makefile:4: Unknown shell command \"${GCONF_SCHEMAS:@.s.@"+ | 244 | "WARN: chat/xchat/Makefile:4: Unknown shell command \"${GCONF_SCHEMAS:@.s.@"+ | |
245 | "${INSTALL_DATA} ${WRKSRC}/src/common/dbus/${.s.} ${DESTDIR}${GCONF_SCHEMAS_DIR}/@}\".\n") | 245 | "${INSTALL_DATA} ${WRKSRC}/src/common/dbus/${.s.} ${DESTDIR}${GCONF_SCHEMAS_DIR}/@}\".\n") | |
246 | } | 246 | } | |
247 | ||||
248 | func (s *Suite) Test_MkLines_Indentation_DependsOn(c *check.C) { | |||
249 | G.globalData.InitVartypes() | |||
250 | mklines := s.NewMkLines("Makefile", | |||
251 | "# $"+"NetBSD$", | |||
252 | "PKG_SKIP_REASON+=\t\"Fails everywhere\"", | |||
253 | ".if ${OPSYS} == \"Cygwin\"", | |||
254 | "PKG_SKIP_REASON+=\t\"Fails on Cygwin\"", | |||
255 | ".endif") | |||
256 | ||||
257 | mklines.Check() | |||
258 | ||||
259 | c.Check(s.Output(), equals, "NOTE: Makefile:4: Consider defining NOT_FOR_PLATFORM instead of setting PKG_SKIP_REASON depending on ${OPSYS}.\n") | |||
260 | } |
@@ -196,27 +196,27 @@ func (gd *GlobalData) InitVartypes() { | @@ -196,27 +196,27 @@ func (gd *GlobalData) InitVartypes() { | |||
196 | pkglist("CONFIGURE_DIRS", lkShell, CheckvarWrksrcSubdirectory) | 196 | pkglist("CONFIGURE_DIRS", lkShell, CheckvarWrksrcSubdirectory) | |
197 | acl("CONFIGURE_ENV", lkShell, CheckvarShellWord, "Makefile, Makefile.common: append, set, use; buildlink3.mk, builtin.mk: append; *.mk: append, use") | 197 | acl("CONFIGURE_ENV", lkShell, CheckvarShellWord, "Makefile, Makefile.common: append, set, use; buildlink3.mk, builtin.mk: append; *.mk: append, use") | |
198 | pkg("CONFIGURE_HAS_INFODIR", lkNone, CheckvarYesNo) | 198 | pkg("CONFIGURE_HAS_INFODIR", lkNone, CheckvarYesNo) | |
199 | pkg("CONFIGURE_HAS_LIBDIR", lkNone, CheckvarYesNo) | 199 | pkg("CONFIGURE_HAS_LIBDIR", lkNone, CheckvarYesNo) | |
200 | pkg("CONFIGURE_HAS_MANDIR", lkNone, CheckvarYesNo) | 200 | pkg("CONFIGURE_HAS_MANDIR", lkNone, CheckvarYesNo) | |
201 | pkg("CONFIGURE_SCRIPT", lkNone, CheckvarPathname) | 201 | pkg("CONFIGURE_SCRIPT", lkNone, CheckvarPathname) | |
202 | acl("CONFIG_GUESS_OVERRIDE", lkShell, CheckvarPathmask, "Makefile, Makefile.common: set, append") | 202 | acl("CONFIG_GUESS_OVERRIDE", lkShell, CheckvarPathmask, "Makefile, Makefile.common: set, append") | |
203 | acl("CONFIG_STATUS_OVERRIDE", lkShell, CheckvarPathmask, "Makefile, Makefile.common: set, append") | 203 | acl("CONFIG_STATUS_OVERRIDE", lkShell, CheckvarPathmask, "Makefile, Makefile.common: set, append") | |
204 | acl("CONFIG_SHELL", lkNone, CheckvarPathname, "Makefile, Makefile.common: set") | 204 | acl("CONFIG_SHELL", lkNone, CheckvarPathname, "Makefile, Makefile.common: set") | |
205 | acl("CONFIG_SUB_OVERRIDE", lkShell, CheckvarPathmask, "Makefile, Makefile.common: set, append") | 205 | acl("CONFIG_SUB_OVERRIDE", lkShell, CheckvarPathmask, "Makefile, Makefile.common: set, append") | |
206 | pkglist("CONFLICTS", lkSpace, CheckvarDependency) | 206 | pkglist("CONFLICTS", lkSpace, CheckvarDependency) | |
207 | pkglist("CONF_FILES", lkShell, CheckvarShellWord) | 207 | pkglist("CONF_FILES", lkShell, CheckvarShellWord) | |
208 | pkg("CONF_FILES_MODE", lkNone, enum("0644 0640 0600 0400")) | 208 | pkg("CONF_FILES_MODE", lkNone, enum("0644 0640 0600 0400")) | |
209 | pkglist("CONF_FILES_PERMS", lkShell, CheckvarShellWord) | 209 | pkglist("CONF_FILES_PERMS", lkShell, CheckvarPerms) | |
210 | sys("COPY", lkNone, enum("-c")) // The flag that tells ${INSTALL} to copy a file | 210 | sys("COPY", lkNone, enum("-c")) // The flag that tells ${INSTALL} to copy a file | |
211 | sys("CPP", lkNone, CheckvarShellCommand) | 211 | sys("CPP", lkNone, CheckvarShellCommand) | |
212 | pkglist("CPPFLAGS*", lkShell, CheckvarCFlag) | 212 | pkglist("CPPFLAGS*", lkShell, CheckvarCFlag) | |
213 | acl("CRYPTO", lkNone, CheckvarYes, "Makefile: set") | 213 | acl("CRYPTO", lkNone, CheckvarYes, "Makefile: set") | |
214 | sys("CXX", lkNone, CheckvarShellCommand) | 214 | sys("CXX", lkNone, CheckvarShellCommand) | |
215 | pkglist("CXXFLAGS*", lkShell, CheckvarCFlag) | 215 | pkglist("CXXFLAGS*", lkShell, CheckvarCFlag) | |
216 | acl("DEINSTALL_FILE", lkNone, CheckvarPathname, "Makefile: set") | 216 | acl("DEINSTALL_FILE", lkNone, CheckvarPathname, "Makefile: set") | |
217 | acl("DEINSTALL_SRC", lkShell, CheckvarPathname, "Makefile: set; Makefile.common: default, set") | 217 | acl("DEINSTALL_SRC", lkShell, CheckvarPathname, "Makefile: set; Makefile.common: default, set") | |
218 | acl("DEINSTALL_TEMPLATES", lkShell, CheckvarPathname, "Makefile: set, append; Makefile.common: set, default, append") | 218 | acl("DEINSTALL_TEMPLATES", lkShell, CheckvarPathname, "Makefile: set, append; Makefile.common: set, default, append") | |
219 | sys("DELAYED_ERROR_MSG", lkNone, CheckvarShellCommand) | 219 | sys("DELAYED_ERROR_MSG", lkNone, CheckvarShellCommand) | |
220 | sys("DELAYED_WARNING_MSG", lkNone, CheckvarShellCommand) | 220 | sys("DELAYED_WARNING_MSG", lkNone, CheckvarShellCommand) | |
221 | pkglist("DEPENDS", lkSpace, CheckvarDependencyWithPath) | 221 | pkglist("DEPENDS", lkSpace, CheckvarDependencyWithPath) | |
222 | usr("DEPENDS_TARGET", lkShell, CheckvarIdentifier) | 222 | usr("DEPENDS_TARGET", lkShell, CheckvarIdentifier) | |
@@ -390,27 +390,27 @@ func (gd *GlobalData) InitVartypes() { | @@ -390,27 +390,27 @@ func (gd *GlobalData) InitVartypes() { | |||
390 | pkg("LICENSE_FILE", lkNone, CheckvarPathname) | 390 | pkg("LICENSE_FILE", lkNone, CheckvarPathname) | |
391 | sys("LINKER_RPATH_FLAG", lkNone, CheckvarShellWord) | 391 | sys("LINKER_RPATH_FLAG", lkNone, CheckvarShellWord) | |
392 | sys("LOWER_OPSYS", lkNone, CheckvarIdentifier) | 392 | sys("LOWER_OPSYS", lkNone, CheckvarIdentifier) | |
393 | acl("LTCONFIG_OVERRIDE", lkShell, CheckvarPathmask, "Makefile: set, append; Makefile.common: append") | 393 | acl("LTCONFIG_OVERRIDE", lkShell, CheckvarPathmask, "Makefile: set, append; Makefile.common: append") | |
394 | sys("MACHINE_ARCH", lkNone, enumMachineArch) | 394 | sys("MACHINE_ARCH", lkNone, enumMachineArch) | |
395 | sys("MACHINE_GNU_ARCH", lkNone, enumMachineGnuArch) | 395 | sys("MACHINE_GNU_ARCH", lkNone, enumMachineGnuArch) | |
396 | sys("MACHINE_GNU_PLATFORM", lkNone, CheckvarMachineGnuPlatform) | 396 | sys("MACHINE_GNU_PLATFORM", lkNone, CheckvarMachineGnuPlatform) | |
397 | sys("MACHINE_PLATFORM", lkNone, CheckvarMachinePlatform) | 397 | sys("MACHINE_PLATFORM", lkNone, CheckvarMachinePlatform) | |
398 | acl("MAINTAINER", lkNone, CheckvarMailAddress, "Makefile: set; Makefile.common: default") | 398 | acl("MAINTAINER", lkNone, CheckvarMailAddress, "Makefile: set; Makefile.common: default") | |
399 | sys("MAKE", lkNone, CheckvarShellCommand) | 399 | sys("MAKE", lkNone, CheckvarShellCommand) | |
400 | pkglist("MAKEFLAGS", lkShell, CheckvarShellWord) | 400 | pkglist("MAKEFLAGS", lkShell, CheckvarShellWord) | |
401 | acl("MAKEVARS", lkShell, CheckvarVarname, "builtin.mk: append; buildlink3.mk: append; hacks.mk: append") | 401 | acl("MAKEVARS", lkShell, CheckvarVarname, "builtin.mk: append; buildlink3.mk: append; hacks.mk: append") | |
402 | pkglist("MAKE_DIRS", lkShell, CheckvarPathname) | 402 | pkglist("MAKE_DIRS", lkShell, CheckvarPathname) | |
403 | pkglist("MAKE_DIRS_PERMS", lkShell, CheckvarShellWord) | 403 | pkglist("MAKE_DIRS_PERMS", lkShell, CheckvarPerms) | |
404 | acl("MAKE_ENV", lkShell, CheckvarShellWord, "Makefile: append, set, use; Makefile.common: append, set, use; buildlink3.mk: append; builtin.mk: append; *.mk: append, use") | 404 | acl("MAKE_ENV", lkShell, CheckvarShellWord, "Makefile: append, set, use; Makefile.common: append, set, use; buildlink3.mk: append; builtin.mk: append; *.mk: append, use") | |
405 | pkg("MAKE_FILE", lkNone, CheckvarPathname) | 405 | pkg("MAKE_FILE", lkNone, CheckvarPathname) | |
406 | pkglist("MAKE_FLAGS", lkShell, CheckvarShellWord) | 406 | pkglist("MAKE_FLAGS", lkShell, CheckvarShellWord) | |
407 | usr("MAKE_JOBS", lkNone, CheckvarInteger) | 407 | usr("MAKE_JOBS", lkNone, CheckvarInteger) | |
408 | pkg("MAKE_JOBS_SAFE", lkNone, CheckvarYesNo) | 408 | pkg("MAKE_JOBS_SAFE", lkNone, CheckvarYesNo) | |
409 | pkg("MAKE_PROGRAM", lkNone, CheckvarShellCommand) | 409 | pkg("MAKE_PROGRAM", lkNone, CheckvarShellCommand) | |
410 | acl("MANCOMPRESSED", lkNone, CheckvarYesNo, "Makefile: set; Makefile.common: default, set") | 410 | acl("MANCOMPRESSED", lkNone, CheckvarYesNo, "Makefile: set; Makefile.common: default, set") | |
411 | acl("MANCOMPRESSED_IF_MANZ", lkNone, CheckvarYes, "Makefile: set; Makefile.common: default, set") | 411 | acl("MANCOMPRESSED_IF_MANZ", lkNone, CheckvarYes, "Makefile: set; Makefile.common: default, set") | |
412 | sys("MANGRP", lkNone, CheckvarUserGroupName) | 412 | sys("MANGRP", lkNone, CheckvarUserGroupName) | |
413 | sys("MANMODE", lkNone, CheckvarFileMode) | 413 | sys("MANMODE", lkNone, CheckvarFileMode) | |
414 | sys("MANOWN", lkNone, CheckvarUserGroupName) | 414 | sys("MANOWN", lkNone, CheckvarUserGroupName) | |
415 | pkglist("MASTER_SITES", lkShell, CheckvarFetchURL) | 415 | pkglist("MASTER_SITES", lkShell, CheckvarFetchURL) | |
416 | sys("MASTER_SITE_APACHE", lkShell, CheckvarFetchURL) | 416 | sys("MASTER_SITE_APACHE", lkShell, CheckvarFetchURL) | |
@@ -467,27 +467,27 @@ func (gd *GlobalData) InitVartypes() { | @@ -467,27 +467,27 @@ func (gd *GlobalData) InitVartypes() { | |||
467 | acl("NO_SRC_ON_CDROM", lkNone, CheckvarRestricted, "Makefile, Makefile.common: set") | 467 | acl("NO_SRC_ON_CDROM", lkNone, CheckvarRestricted, "Makefile, Makefile.common: set") | |
468 | acl("NO_SRC_ON_FTP", lkNone, CheckvarRestricted, "Makefile, Makefile.common: set") | 468 | acl("NO_SRC_ON_FTP", lkNone, CheckvarRestricted, "Makefile, Makefile.common: set") | |
469 | pkglist("ONLY_FOR_COMPILER", lkShell, enum("ccc clang gcc hp icc ido mipspro mipspro-ucode pcc sunpro xlc")) | 469 | pkglist("ONLY_FOR_COMPILER", lkShell, enum("ccc clang gcc hp icc ido mipspro mipspro-ucode pcc sunpro xlc")) | |
470 | pkglist("ONLY_FOR_PLATFORM", lkSpace, CheckvarMachinePlatformPattern) | 470 | pkglist("ONLY_FOR_PLATFORM", lkSpace, CheckvarMachinePlatformPattern) | |
471 | pkg("ONLY_FOR_UNPRIVILEGED", lkNone, CheckvarYesNo) | 471 | pkg("ONLY_FOR_UNPRIVILEGED", lkNone, CheckvarYesNo) | |
472 | sys("OPSYS", lkNone, CheckvarIdentifier) | 472 | sys("OPSYS", lkNone, CheckvarIdentifier) | |
473 | acl("OPSYSVARS", lkShell, CheckvarVarname, "Makefile, Makefile.common: append") | 473 | acl("OPSYSVARS", lkShell, CheckvarVarname, "Makefile, Makefile.common: append") | |
474 | acl("OSVERSION_SPECIFIC", lkNone, CheckvarYes, "Makefile, Makefile.common: set") | 474 | acl("OSVERSION_SPECIFIC", lkNone, CheckvarYes, "Makefile, Makefile.common: set") | |
475 | sys("OS_VERSION", lkNone, CheckvarVersion) | 475 | sys("OS_VERSION", lkNone, CheckvarVersion) | |
476 | pkg("OVERRIDE_DIRDEPTH*", lkNone, CheckvarInteger) | 476 | pkg("OVERRIDE_DIRDEPTH*", lkNone, CheckvarInteger) | |
477 | pkg("OVERRIDE_GNU_CONFIG_SCRIPTS", lkNone, CheckvarYes) | 477 | pkg("OVERRIDE_GNU_CONFIG_SCRIPTS", lkNone, CheckvarYes) | |
478 | acl("OWNER", lkNone, CheckvarMailAddress, "Makefile: set; Makefile.common: default") | 478 | acl("OWNER", lkNone, CheckvarMailAddress, "Makefile: set; Makefile.common: default") | |
479 | pkglist("OWN_DIRS", lkShell, CheckvarPathname) | 479 | pkglist("OWN_DIRS", lkShell, CheckvarPathname) | |
480 | pkglist("OWN_DIRS_PERMS", lkShell, CheckvarShellWord) | 480 | pkglist("OWN_DIRS_PERMS", lkShell, CheckvarPerms) | |
481 | sys("PAMBASE", lkNone, CheckvarPathname) | 481 | sys("PAMBASE", lkNone, CheckvarPathname) | |
482 | usr("PAM_DEFAULT", lkNone, enum("linux-pam openpam solaris-pam")) | 482 | usr("PAM_DEFAULT", lkNone, enum("linux-pam openpam solaris-pam")) | |
483 | acl("PATCHDIR", lkNone, CheckvarRelativePkgPath, "Makefile: set; Makefile.common: default, set") | 483 | acl("PATCHDIR", lkNone, CheckvarRelativePkgPath, "Makefile: set; Makefile.common: default, set") | |
484 | pkglist("PATCHFILES", lkShell, CheckvarFilename) | 484 | pkglist("PATCHFILES", lkShell, CheckvarFilename) | |
485 | acl("PATCH_ARGS", lkShell, CheckvarShellWord, "") | 485 | acl("PATCH_ARGS", lkShell, CheckvarShellWord, "") | |
486 | acl("PATCH_DIST_ARGS", lkShell, CheckvarShellWord, "Makefile: set, append") | 486 | acl("PATCH_DIST_ARGS", lkShell, CheckvarShellWord, "Makefile: set, append") | |
487 | acl("PATCH_DIST_CAT", lkNone, CheckvarShellCommand, "") | 487 | acl("PATCH_DIST_CAT", lkNone, CheckvarShellCommand, "") | |
488 | acl("PATCH_DIST_STRIP*", lkNone, CheckvarShellWord, "Makefile, Makefile.common: set; buildlink3.mk:; builtin.mk:; *.mk: set") | 488 | acl("PATCH_DIST_STRIP*", lkNone, CheckvarShellWord, "Makefile, Makefile.common: set; buildlink3.mk:; builtin.mk:; *.mk: set") | |
489 | acl("PATCH_SITES", lkShell, CheckvarFetchURL, "Makefile: set; options.mk: set; Makefile.common: set") | 489 | acl("PATCH_SITES", lkShell, CheckvarFetchURL, "Makefile: set; options.mk: set; Makefile.common: set") | |
490 | acl("PATCH_STRIP", lkNone, CheckvarShellWord, "") | 490 | acl("PATCH_STRIP", lkNone, CheckvarShellWord, "") | |
491 | pkg("PERL5_USE_PACKLIST", lkNone, CheckvarYesNo) | 491 | pkg("PERL5_USE_PACKLIST", lkNone, CheckvarYesNo) | |
492 | acl("PERL5_PACKLIST", lkShell, CheckvarPerl5Packlist, "Makefile: set; options.mk: set, append") | 492 | acl("PERL5_PACKLIST", lkShell, CheckvarPerl5Packlist, "Makefile: set; options.mk: set, append") | |
493 | acl("PERL5_PACKLIST_DIR", lkNone, CheckvarPathname, "") | 493 | acl("PERL5_PACKLIST_DIR", lkNone, CheckvarPathname, "") | |
@@ -554,27 +554,27 @@ func (gd *GlobalData) InitVartypes() { | @@ -554,27 +554,27 @@ func (gd *GlobalData) InitVartypes() { | |||
554 | acl("PKG_OPTIONS_NONEMPTY_SETS", lkSpace, CheckvarIdentifier, "") | 554 | acl("PKG_OPTIONS_NONEMPTY_SETS", lkSpace, CheckvarIdentifier, "") | |
555 | acl("PKG_OPTIONS_OPTIONAL_GROUPS", lkSpace, CheckvarIdentifier, "options.mk: set, append") | 555 | acl("PKG_OPTIONS_OPTIONAL_GROUPS", lkSpace, CheckvarIdentifier, "options.mk: set, append") | |
556 | acl("PKG_OPTIONS_REQUIRED_GROUPS", lkSpace, CheckvarIdentifier, "options.mk: set; Makefile: set") | 556 | acl("PKG_OPTIONS_REQUIRED_GROUPS", lkSpace, CheckvarIdentifier, "options.mk: set; Makefile: set") | |
557 | acl("PKG_OPTIONS_SET.*", lkSpace, CheckvarOption, "") | 557 | acl("PKG_OPTIONS_SET.*", lkSpace, CheckvarOption, "") | |
558 | acl("PKG_OPTIONS_VAR", lkNone, CheckvarPkgOptionsVar, "options.mk: set; Makefile, Makefile.common: set; bsd.options.mk: use-loadtime") | 558 | acl("PKG_OPTIONS_VAR", lkNone, CheckvarPkgOptionsVar, "options.mk: set; Makefile, Makefile.common: set; bsd.options.mk: use-loadtime") | |
559 | acl("PKG_PRESERVE", lkNone, CheckvarYes, "Makefile: set") | 559 | acl("PKG_PRESERVE", lkNone, CheckvarYes, "Makefile: set") | |
560 | acl("PKG_SHELL", lkNone, CheckvarPathname, "Makefile, Makefile.common: set") | 560 | acl("PKG_SHELL", lkNone, CheckvarPathname, "Makefile, Makefile.common: set") | |
561 | acl("PKG_SHELL.*", lkNone, CheckvarPathname, "Makefile, Makefile.common: set") | 561 | acl("PKG_SHELL.*", lkNone, CheckvarPathname, "Makefile, Makefile.common: set") | |
562 | acl("PKG_SHLIBTOOL", lkNone, CheckvarPathname, "") | 562 | acl("PKG_SHLIBTOOL", lkNone, CheckvarPathname, "") | |
563 | pkglist("PKG_SKIP_REASON", lkShell, CheckvarShellWord) | 563 | pkglist("PKG_SKIP_REASON", lkShell, CheckvarShellWord) | |
564 | acl("PKG_SUGGESTED_OPTIONS", lkShell, CheckvarOption, "options.mk: set, append; Makefile: set, append; Makefile.common: set") | 564 | acl("PKG_SUGGESTED_OPTIONS", lkShell, CheckvarOption, "options.mk: set, append; Makefile: set, append; Makefile.common: set") | |
565 | acl("PKG_SUPPORTED_OPTIONS", lkShell, CheckvarOption, "options.mk: set, append, use; Makefile: set, append; Makefile.common: set") | 565 | acl("PKG_SUPPORTED_OPTIONS", lkShell, CheckvarOption, "options.mk: set, append, use; Makefile: set, append; Makefile.common: set") | |
566 | pkg("PKG_SYSCONFDIR*", lkNone, CheckvarPathname) | 566 | pkg("PKG_SYSCONFDIR*", lkNone, CheckvarPathname) | |
567 | pkglist("PKG_SYSCONFDIR_PERMS", lkShell, CheckvarShellWord) | 567 | pkglist("PKG_SYSCONFDIR_PERMS", lkShell, CheckvarPerms) | |
568 | sys("PKG_SYSCONFBASEDIR", lkNone, CheckvarPathname) | 568 | sys("PKG_SYSCONFBASEDIR", lkNone, CheckvarPathname) | |
569 | pkg("PKG_SYSCONFSUBDIR", lkNone, CheckvarPathname) | 569 | pkg("PKG_SYSCONFSUBDIR", lkNone, CheckvarPathname) | |
570 | acl("PKG_SYSCONFVAR", lkNone, CheckvarIdentifier, "") // FIXME: name/type mismatch. | 570 | acl("PKG_SYSCONFVAR", lkNone, CheckvarIdentifier, "") // FIXME: name/type mismatch. | |
571 | acl("PKG_UID", lkNone, CheckvarInteger, "Makefile: set") | 571 | acl("PKG_UID", lkNone, CheckvarInteger, "Makefile: set") | |
572 | acl("PKG_USERS", lkShell, CheckvarShellWord, "Makefile: set, append") | 572 | acl("PKG_USERS", lkShell, CheckvarShellWord, "Makefile: set, append") | |
573 | pkg("PKG_USERS_VARS", lkShell, CheckvarVarname) | 573 | pkg("PKG_USERS_VARS", lkShell, CheckvarVarname) | |
574 | acl("PKG_USE_KERBEROS", lkNone, CheckvarYes, "Makefile, Makefile.common: set") | 574 | acl("PKG_USE_KERBEROS", lkNone, CheckvarYes, "Makefile, Makefile.common: set") | |
575 | // PLIST.* has special handling code | 575 | // PLIST.* has special handling code | |
576 | pkglist("PLIST_VARS", lkShell, CheckvarIdentifier) | 576 | pkglist("PLIST_VARS", lkShell, CheckvarIdentifier) | |
577 | pkglist("PLIST_SRC", lkShell, CheckvarRelativePkgPath) | 577 | pkglist("PLIST_SRC", lkShell, CheckvarRelativePkgPath) | |
578 | pkglist("PLIST_SUBST", lkShell, CheckvarShellWord) | 578 | pkglist("PLIST_SUBST", lkShell, CheckvarShellWord) | |
579 | acl("PLIST_TYPE", lkNone, enum("dynamic static"), "") | 579 | acl("PLIST_TYPE", lkNone, enum("dynamic static"), "") | |
580 | acl("PREPEND_PATH", lkShell, CheckvarPathname, "") | 580 | acl("PREPEND_PATH", lkShell, CheckvarPathname, "") | |
@@ -604,47 +604,47 @@ func (gd *GlobalData) InitVartypes() { | @@ -604,47 +604,47 @@ func (gd *GlobalData) InitVartypes() { | |||
604 | pkglist("REPLACE_AWK", lkShell, CheckvarPathmask) | 604 | pkglist("REPLACE_AWK", lkShell, CheckvarPathmask) | |
605 | pkglist("REPLACE_BASH", lkShell, CheckvarPathmask) | 605 | pkglist("REPLACE_BASH", lkShell, CheckvarPathmask) | |
606 | pkglist("REPLACE_CSH", lkShell, CheckvarPathmask) | 606 | pkglist("REPLACE_CSH", lkShell, CheckvarPathmask) | |
607 | acl("REPLACE_EMACS", lkShell, CheckvarPathmask, "") | 607 | acl("REPLACE_EMACS", lkShell, CheckvarPathmask, "") | |
608 | acl("REPLACE_FILES.*", lkShell, CheckvarPathmask, "Makefile, Makefile.common: set, append") | 608 | acl("REPLACE_FILES.*", lkShell, CheckvarPathmask, "Makefile, Makefile.common: set, append") | |
609 | acl("REPLACE_INTERPRETER", lkShell, CheckvarIdentifier, "Makefile, Makefile.common: append") | 609 | acl("REPLACE_INTERPRETER", lkShell, CheckvarIdentifier, "Makefile, Makefile.common: append") | |
610 | pkglist("REPLACE_KSH", lkShell, CheckvarPathmask) | 610 | pkglist("REPLACE_KSH", lkShell, CheckvarPathmask) | |
611 | pkglist("REPLACE_LOCALEDIR_PATTERNS", lkShell, CheckvarFilemask) | 611 | pkglist("REPLACE_LOCALEDIR_PATTERNS", lkShell, CheckvarFilemask) | |
612 | pkglist("REPLACE_LUA", lkShell, CheckvarPathmask) | 612 | pkglist("REPLACE_LUA", lkShell, CheckvarPathmask) | |
613 | pkglist("REPLACE_PERL", lkShell, CheckvarPathmask) | 613 | pkglist("REPLACE_PERL", lkShell, CheckvarPathmask) | |
614 | pkglist("REPLACE_PYTHON", lkShell, CheckvarPathmask) | 614 | pkglist("REPLACE_PYTHON", lkShell, CheckvarPathmask) | |
615 | pkglist("REPLACE_SH", lkShell, CheckvarPathmask) | 615 | pkglist("REPLACE_SH", lkShell, CheckvarPathmask) | |
616 | pkglist("REQD_DIRS", lkShell, CheckvarPathname) | 616 | pkglist("REQD_DIRS", lkShell, CheckvarPathname) | |
617 | pkglist("REQD_DIRS_PERMS", lkShell, CheckvarShellWord) | 617 | pkglist("REQD_DIRS_PERMS", lkShell, CheckvarPerms) | |
618 | pkglist("REQD_FILES", lkShell, CheckvarPathname) | 618 | pkglist("REQD_FILES", lkShell, CheckvarPathname) | |
619 | pkg("REQD_FILES_MODE", lkNone, enum("0644 0640 0600 0400")) | 619 | pkg("REQD_FILES_MODE", lkNone, enum("0644 0640 0600 0400")) | |
620 | pkglist("REQD_FILES_PERMS", lkShell, CheckvarShellWord) | 620 | pkglist("REQD_FILES_PERMS", lkShell, CheckvarPerms) | |
621 | pkg("RESTRICTED", lkNone, CheckvarMessage) | 621 | pkg("RESTRICTED", lkNone, CheckvarMessage) | |
622 | usr("ROOT_USER", lkNone, CheckvarUserGroupName) | 622 | usr("ROOT_USER", lkNone, CheckvarUserGroupName) | |
623 | usr("ROOT_GROUP", lkNone, CheckvarUserGroupName) | 623 | usr("ROOT_GROUP", lkNone, CheckvarUserGroupName) | |
624 | usr("RUBY_VERSION_REQD", lkNone, CheckvarVersion) | 624 | usr("RUBY_VERSION_REQD", lkNone, CheckvarVersion) | |
625 | sys("RUN", lkNone, CheckvarShellCommand) | 625 | sys("RUN", lkNone, CheckvarShellCommand) | |
626 | sys("RUN_LDCONFIG", lkNone, CheckvarYesNo) | 626 | sys("RUN_LDCONFIG", lkNone, CheckvarYesNo) | |
627 | acl("SCRIPTS_ENV", lkShell, CheckvarShellWord, "Makefile, Makefile.common: append") | 627 | acl("SCRIPTS_ENV", lkShell, CheckvarShellWord, "Makefile, Makefile.common: append") | |
628 | usr("SETUID_ROOT_PERMS", lkShell, CheckvarShellWord) | 628 | usr("SETUID_ROOT_PERMS", lkShell, CheckvarShellWord) | |
629 | sys("SHAREGRP", lkNone, CheckvarUserGroupName) | 629 | sys("SHAREGRP", lkNone, CheckvarUserGroupName) | |
630 | sys("SHAREMODE", lkNone, CheckvarFileMode) | 630 | sys("SHAREMODE", lkNone, CheckvarFileMode) | |
631 | sys("SHAREOWN", lkNone, CheckvarUserGroupName) | 631 | sys("SHAREOWN", lkNone, CheckvarUserGroupName) | |
632 | sys("SHCOMMENT", lkNone, CheckvarShellCommand) | 632 | sys("SHCOMMENT", lkNone, CheckvarShellCommand) | |
633 | acl("SHLIB_HANDLING", lkNone, enum("YES NO no"), "") | 633 | acl("SHLIB_HANDLING", lkNone, enum("YES NO no"), "") | |
634 | acl("SHLIBTOOL", lkNone, CheckvarShellCommand, "Makefile: use") | 634 | acl("SHLIBTOOL", lkNone, CheckvarShellCommand, "Makefile: use") | |
635 | acl("SHLIBTOOL_OVERRIDE", lkShell, CheckvarPathmask, "Makefile: set, append; Makefile.common: append") | 635 | acl("SHLIBTOOL_OVERRIDE", lkShell, CheckvarPathmask, "Makefile: set, append; Makefile.common: append") | |
636 | acl("SITES.*", lkShell, CheckvarFetchURL, "Makefile, Makefile.common, options.mk: set, append, use") | 636 | acl("SITES.*", lkShell, CheckvarFetchURL, "Makefile, Makefile.common, options.mk: set, append, use") | |
637 | pkglist("SPECIAL_PERMS", lkShell, CheckvarShellWord) | 637 | pkglist("SPECIAL_PERMS", lkShell, CheckvarPerms) | |
638 | sys("STEP_MSG", lkNone, CheckvarShellCommand) | 638 | sys("STEP_MSG", lkNone, CheckvarShellCommand) | |
639 | acl("SUBDIR", lkShell, CheckvarFilename, "Makefile: append; *:") | 639 | acl("SUBDIR", lkShell, CheckvarFilename, "Makefile: append; *:") | |
640 | acl("SUBST_CLASSES", lkShell, CheckvarIdentifier, "Makefile: set, append; *: append") | 640 | acl("SUBST_CLASSES", lkShell, CheckvarIdentifier, "Makefile: set, append; *: append") | |
641 | acl("SUBST_FILES.*", lkShell, CheckvarPathmask, "Makefile: set, append; Makefile.*, *.mk: set, append") | 641 | acl("SUBST_FILES.*", lkShell, CheckvarPathmask, "Makefile: set, append; Makefile.*, *.mk: set, append") | |
642 | acl("SUBST_FILTER_CMD.*", lkNone, CheckvarShellCommand, "Makefile, Makefile.*, *.mk: set") | 642 | acl("SUBST_FILTER_CMD.*", lkNone, CheckvarShellCommand, "Makefile, Makefile.*, *.mk: set") | |
643 | acl("SUBST_MESSAGE.*", lkNone, CheckvarMessage, "Makefile, Makefile.*, *.mk: set") | 643 | acl("SUBST_MESSAGE.*", lkNone, CheckvarMessage, "Makefile, Makefile.*, *.mk: set") | |
644 | acl("SUBST_SED.*", lkNone, CheckvarSedCommands, "Makefile, Makefile.*, *.mk: set, append") | 644 | acl("SUBST_SED.*", lkNone, CheckvarSedCommands, "Makefile, Makefile.*, *.mk: set, append") | |
645 | pkg("SUBST_STAGE.*", lkNone, CheckvarStage) | 645 | pkg("SUBST_STAGE.*", lkNone, CheckvarStage) | |
646 | pkglist("SUBST_VARS.*", lkShell, CheckvarVarname) | 646 | pkglist("SUBST_VARS.*", lkShell, CheckvarVarname) | |
647 | pkglist("SUPERSEDES", lkSpace, CheckvarDependency) | 647 | pkglist("SUPERSEDES", lkSpace, CheckvarDependency) | |
648 | pkglist("TEST_DIRS", lkShell, CheckvarWrksrcSubdirectory) | 648 | pkglist("TEST_DIRS", lkShell, CheckvarWrksrcSubdirectory) | |
649 | pkglist("TEST_ENV", lkShell, CheckvarShellWord) | 649 | pkglist("TEST_ENV", lkShell, CheckvarShellWord) | |
650 | acl("TEST_TARGET", lkShell, CheckvarIdentifier, "Makefile: set; Makefile.common: default, set; options.mk: set, append") | 650 | acl("TEST_TARGET", lkShell, CheckvarIdentifier, "Makefile: set; Makefile.common: default, set; options.mk: set, append") | |
@@ -662,26 +662,27 @@ func (gd *GlobalData) InitVartypes() { | @@ -662,26 +662,27 @@ func (gd *GlobalData) InitVartypes() { | |||
662 | sys("TOOLS_PATH.*", lkNone, CheckvarPathname) | 662 | sys("TOOLS_PATH.*", lkNone, CheckvarPathname) | |
663 | sys("TOOLS_PLATFORM.*", lkNone, CheckvarShellCommand) | 663 | sys("TOOLS_PLATFORM.*", lkNone, CheckvarShellCommand) | |
664 | sys("TOUCH_FLAGS", lkShell, CheckvarShellWord) | 664 | sys("TOUCH_FLAGS", lkShell, CheckvarShellWord) | |
665 | pkglist("UAC_REQD_EXECS", lkShell, CheckvarPrefixPathname) | 665 | pkglist("UAC_REQD_EXECS", lkShell, CheckvarPrefixPathname) | |
666 | acl("UNLIMIT_RESOURCES", lkShell, enum("datasize stacksize memorysize"), "Makefile: set, append; Makefile.common: append") | 666 | acl("UNLIMIT_RESOURCES", lkShell, enum("datasize stacksize memorysize"), "Makefile: set, append; Makefile.common: append") | |
667 | usr("UNPRIVILEGED_USER", lkNone, CheckvarUserGroupName) | 667 | usr("UNPRIVILEGED_USER", lkNone, CheckvarUserGroupName) | |
668 | usr("UNPRIVILEGED_GROUP", lkNone, CheckvarUserGroupName) | 668 | usr("UNPRIVILEGED_GROUP", lkNone, CheckvarUserGroupName) | |
669 | pkglist("UNWRAP_FILES", lkShell, CheckvarPathmask) | 669 | pkglist("UNWRAP_FILES", lkShell, CheckvarPathmask) | |
670 | usr("UPDATE_TARGET", lkShell, CheckvarIdentifier) | 670 | usr("UPDATE_TARGET", lkShell, CheckvarIdentifier) | |
671 | pkg("USE_BSD_MAKEFILE", lkNone, CheckvarYes) | 671 | pkg("USE_BSD_MAKEFILE", lkNone, CheckvarYes) | |
672 | acl("USE_BUILTIN.*", lkNone, CheckvarYesNoIndirectly, "builtin.mk: set") | 672 | acl("USE_BUILTIN.*", lkNone, CheckvarYesNoIndirectly, "builtin.mk: set") | |
673 | pkg("USE_CMAKE", lkNone, CheckvarYes) | 673 | pkg("USE_CMAKE", lkNone, CheckvarYes) | |
674 | acl("USE_CROSSBASE", lkNone, CheckvarYes, "Makefile: set") | 674 | acl("USE_CROSSBASE", lkNone, CheckvarYes, "Makefile: set") | |
675 | usr("USE_DESTDIR", lkNone, CheckvarYes) | |||
675 | pkg("USE_FEATURES", lkShell, CheckvarIdentifier) | 676 | pkg("USE_FEATURES", lkShell, CheckvarIdentifier) | |
676 | pkg("USE_GCC_RUNTIME", lkNone, CheckvarYesNo) | 677 | pkg("USE_GCC_RUNTIME", lkNone, CheckvarYesNo) | |
677 | pkg("USE_GNU_CONFIGURE_HOST", lkNone, CheckvarYesNo) | 678 | pkg("USE_GNU_CONFIGURE_HOST", lkNone, CheckvarYesNo) | |
678 | acl("USE_GNU_ICONV", lkNone, CheckvarYes, "Makefile, Makefile.common: set; options.mk: set") | 679 | acl("USE_GNU_ICONV", lkNone, CheckvarYes, "Makefile, Makefile.common: set; options.mk: set") | |
679 | acl("USE_IMAKE", lkNone, CheckvarYes, "Makefile: set") | 680 | acl("USE_IMAKE", lkNone, CheckvarYes, "Makefile: set") | |
680 | pkg("USE_JAVA", lkNone, enum("run yes build")) | 681 | pkg("USE_JAVA", lkNone, enum("run yes build")) | |
681 | pkg("USE_JAVA2", lkNone, enum("YES yes no 1.4 1.5 6 7 8")) | 682 | pkg("USE_JAVA2", lkNone, enum("YES yes no 1.4 1.5 6 7 8")) | |
682 | acl("USE_LANGUAGES", lkShell, enum("ada c c99 c++ fortran fortran77 java objc"), "Makefile, Makefile.common, options.mk: set, append") | 683 | acl("USE_LANGUAGES", lkShell, enum("ada c c99 c++ fortran fortran77 java objc"), "Makefile, Makefile.common, options.mk: set, append") | |
683 | pkg("USE_LIBTOOL", lkNone, CheckvarYes) | 684 | pkg("USE_LIBTOOL", lkNone, CheckvarYes) | |
684 | pkg("USE_MAKEINFO", lkNone, CheckvarYes) | 685 | pkg("USE_MAKEINFO", lkNone, CheckvarYes) | |
685 | pkg("USE_MSGFMT_PLURALS", lkNone, CheckvarYes) | 686 | pkg("USE_MSGFMT_PLURALS", lkNone, CheckvarYes) | |
686 | pkg("USE_NCURSES", lkNone, CheckvarYes) | 687 | pkg("USE_NCURSES", lkNone, CheckvarYes) | |
687 | pkg("USE_OLD_DES_API", lkNone, CheckvarYesNo) | 688 | pkg("USE_OLD_DES_API", lkNone, CheckvarYesNo) |
@@ -226,26 +226,27 @@ var ( | @@ -226,26 +226,27 @@ var ( | |||
226 | CheckvarInteger = &VarChecker{"Integer", (*VartypeCheck).Integer} | 226 | CheckvarInteger = &VarChecker{"Integer", (*VartypeCheck).Integer} | |
227 | CheckvarLdFlag = &VarChecker{"LdFlag", (*VartypeCheck).LdFlag} | 227 | CheckvarLdFlag = &VarChecker{"LdFlag", (*VartypeCheck).LdFlag} | |
228 | CheckvarLicense = &VarChecker{"License", (*VartypeCheck).License} | 228 | CheckvarLicense = &VarChecker{"License", (*VartypeCheck).License} | |
229 | CheckvarMachineGnuPlatform = &VarChecker{"MachineGnuPlatform", (*VartypeCheck).MachineGnuPlatform} | 229 | CheckvarMachineGnuPlatform = &VarChecker{"MachineGnuPlatform", (*VartypeCheck).MachineGnuPlatform} | |
230 | CheckvarMachinePlatform = &VarChecker{"MachinePlatform", (*VartypeCheck).MachinePlatform} | 230 | CheckvarMachinePlatform = &VarChecker{"MachinePlatform", (*VartypeCheck).MachinePlatform} | |
231 | CheckvarMachinePlatformPattern = &VarChecker{"MachinePlatformPattern", (*VartypeCheck).MachinePlatformPattern} | 231 | CheckvarMachinePlatformPattern = &VarChecker{"MachinePlatformPattern", (*VartypeCheck).MachinePlatformPattern} | |
232 | CheckvarMailAddress = &VarChecker{"MailAddress", (*VartypeCheck).MailAddress} | 232 | CheckvarMailAddress = &VarChecker{"MailAddress", (*VartypeCheck).MailAddress} | |
233 | CheckvarMessage = &VarChecker{"Message", (*VartypeCheck).Message} | 233 | CheckvarMessage = &VarChecker{"Message", (*VartypeCheck).Message} | |
234 | CheckvarOption = &VarChecker{"Option", (*VartypeCheck).Option} | 234 | CheckvarOption = &VarChecker{"Option", (*VartypeCheck).Option} | |
235 | CheckvarPathlist = &VarChecker{"Pathlist", (*VartypeCheck).Pathlist} | 235 | CheckvarPathlist = &VarChecker{"Pathlist", (*VartypeCheck).Pathlist} | |
236 | CheckvarPathmask = &VarChecker{"Pathmask", (*VartypeCheck).Pathmask} | 236 | CheckvarPathmask = &VarChecker{"Pathmask", (*VartypeCheck).Pathmask} | |
237 | CheckvarPathname = &VarChecker{"Pathname", (*VartypeCheck).Pathname} | 237 | CheckvarPathname = &VarChecker{"Pathname", (*VartypeCheck).Pathname} | |
238 | CheckvarPerl5Packlist = &VarChecker{"Perl5Packlist", (*VartypeCheck).Perl5Packlist} | 238 | CheckvarPerl5Packlist = &VarChecker{"Perl5Packlist", (*VartypeCheck).Perl5Packlist} | |
239 | CheckvarPerms = &VarChecker{"Perms", (*VartypeCheck).Perms} | |||
239 | CheckvarPkgName = &VarChecker{"PkgName", (*VartypeCheck).PkgName} | 240 | CheckvarPkgName = &VarChecker{"PkgName", (*VartypeCheck).PkgName} | |
240 | CheckvarPkgPath = &VarChecker{"PkgPath", (*VartypeCheck).PkgPath} | 241 | CheckvarPkgPath = &VarChecker{"PkgPath", (*VartypeCheck).PkgPath} | |
241 | CheckvarPkgOptionsVar = &VarChecker{"PkgOptionsVar", (*VartypeCheck).PkgOptionsVar} | 242 | CheckvarPkgOptionsVar = &VarChecker{"PkgOptionsVar", (*VartypeCheck).PkgOptionsVar} | |
242 | CheckvarPkgRevision = &VarChecker{"PkgRevision", (*VartypeCheck).PkgRevision} | 243 | CheckvarPkgRevision = &VarChecker{"PkgRevision", (*VartypeCheck).PkgRevision} | |
243 | CheckvarPrefixPathname = &VarChecker{"PrefixPathname", (*VartypeCheck).PrefixPathname} | 244 | CheckvarPrefixPathname = &VarChecker{"PrefixPathname", (*VartypeCheck).PrefixPathname} | |
244 | CheckvarPythonDependency = &VarChecker{"PythonDependency", (*VartypeCheck).PythonDependency} | 245 | CheckvarPythonDependency = &VarChecker{"PythonDependency", (*VartypeCheck).PythonDependency} | |
245 | CheckvarRelativePkgDir = &VarChecker{"RelativePkgDir", (*VartypeCheck).RelativePkgDir} | 246 | CheckvarRelativePkgDir = &VarChecker{"RelativePkgDir", (*VartypeCheck).RelativePkgDir} | |
246 | CheckvarRelativePkgPath = &VarChecker{"RelativePkgPath", (*VartypeCheck).RelativePkgPath} | 247 | CheckvarRelativePkgPath = &VarChecker{"RelativePkgPath", (*VartypeCheck).RelativePkgPath} | |
247 | CheckvarRestricted = &VarChecker{"Restricted", (*VartypeCheck).Restricted} | 248 | CheckvarRestricted = &VarChecker{"Restricted", (*VartypeCheck).Restricted} | |
248 | CheckvarSedCommand = &VarChecker{"SedCommand", (*VartypeCheck).SedCommand} | 249 | CheckvarSedCommand = &VarChecker{"SedCommand", (*VartypeCheck).SedCommand} | |
249 | CheckvarSedCommands = &VarChecker{"SedCommands", nil} | 250 | CheckvarSedCommands = &VarChecker{"SedCommands", nil} | |
250 | CheckvarShellCommand = &VarChecker{"ShellCommand", nil} | 251 | CheckvarShellCommand = &VarChecker{"ShellCommand", nil} | |
251 | CheckvarShellCommands = &VarChecker{"ShellCommands", nil} | 252 | CheckvarShellCommands = &VarChecker{"ShellCommands", nil} |
@@ -652,26 +652,33 @@ func (cv *VartypeCheck) Pathname() { | @@ -652,26 +652,33 @@ func (cv *VartypeCheck) Pathname() { | |||
652 | } | 652 | } | |
653 | if !matches(cv.valueNovar, `^[#\-0-9A-Za-z._~+%/]*$`) { | 653 | if !matches(cv.valueNovar, `^[#\-0-9A-Za-z._~+%/]*$`) { | |
654 | cv.line.Warn1("%q is not a valid pathname.", cv.value) | 654 | cv.line.Warn1("%q is not a valid pathname.", cv.value) | |
655 | } | 655 | } | |
656 | cv.line.CheckAbsolutePathname(cv.value) | 656 | cv.line.CheckAbsolutePathname(cv.value) | |
657 | } | 657 | } | |
658 | 658 | |||
659 | func (cv *VartypeCheck) Perl5Packlist() { | 659 | func (cv *VartypeCheck) Perl5Packlist() { | |
660 | if cv.value != cv.valueNovar { | 660 | if cv.value != cv.valueNovar { | |
661 | cv.line.Warn1("%s should not depend on other variables.", cv.varname) | 661 | cv.line.Warn1("%s should not depend on other variables.", cv.varname) | |
662 | } | 662 | } | |
663 | } | 663 | } | |
664 | 664 | |||
665 | func (cv *VartypeCheck) Perms() { | |||
666 | if cv.value == "${ROOT_USER}" || cv.value == "${ROOT_GROUP}" { | |||
667 | valuename := cv.value[2 : len(cv.value)-1] | |||
668 | cv.line.Error1("%s must not be used in permission definitions. Use REAL_%[1]s instead.", valuename) | |||
669 | } | |||
670 | } | |||
671 | ||||
665 | func (cv *VartypeCheck) PkgName() { | 672 | func (cv *VartypeCheck) PkgName() { | |
666 | if cv.op != opUseMatch && cv.value == cv.valueNovar && !matches(cv.value, rePkgname) { | 673 | if cv.op != opUseMatch && cv.value == cv.valueNovar && !matches(cv.value, rePkgname) { | |
667 | cv.line.Warn1("%q is not a valid package name. A valid package name has the form packagename-version, where version consists only of digits, letters and dots.", cv.value) | 674 | cv.line.Warn1("%q is not a valid package name. A valid package name has the form packagename-version, where version consists only of digits, letters and dots.", cv.value) | |
668 | } | 675 | } | |
669 | } | 676 | } | |
670 | 677 | |||
671 | func (cv *VartypeCheck) PkgOptionsVar() { | 678 | func (cv *VartypeCheck) PkgOptionsVar() { | |
672 | cv.mkline.CheckVartypePrimitive(cv.varname, CheckvarVarname, cv.op, cv.value, cv.comment, false, cv.guessed) | 679 | cv.mkline.CheckVartypePrimitive(cv.varname, CheckvarVarname, cv.op, cv.value, cv.comment, false, cv.guessed) | |
673 | if matches(cv.value, `\$\{PKGBASE[:\}]`) { | 680 | if matches(cv.value, `\$\{PKGBASE[:\}]`) { | |
674 | cv.line.Error0("PKGBASE must not be used in PKG_OPTIONS_VAR.") | 681 | cv.line.Error0("PKGBASE must not be used in PKG_OPTIONS_VAR.") | |
675 | Explain3( | 682 | Explain3( | |
676 | "PKGBASE is defined in bsd.pkg.mk, which is included as the", | 683 | "PKGBASE is defined in bsd.pkg.mk, which is included as the", | |
677 | "very last file, but PKG_OPTIONS_VAR is evaluated earlier.", | 684 | "very last file, but PKG_OPTIONS_VAR is evaluated earlier.", |