Annotation of pkgsrc/pkgtools/pkglint/files/buildlink3_test.go, Revision 1.48
1.23 rillig 1: package pkglint
1.1 rillig 2:
1.10 rillig 3: import "gopkg.in/check.v1"
1.1 rillig 4:
1.26 rillig 5: // This test ensures that CheckLinesBuildlink3Mk really checks for
6: // buildlink3.mk files that are included by the buildlink3.mk file
7: // but not by the package.
8: func (s *Suite) Test_CheckLinesBuildlink3Mk__package(c *check.C) {
9: t := s.Init(c)
10:
11: t.CreateFileLines("category/dependency1/buildlink3.mk",
1.32 rillig 12: MkCvsID)
1.26 rillig 13: t.CreateFileLines("category/dependency2/buildlink3.mk",
1.32 rillig 14: MkCvsID)
1.26 rillig 15: t.SetUpPackage("category/package",
16: ".include \"../../category/dependency1/buildlink3.mk\"")
17:
1.38 rillig 18: t.CreateFileBuildlink3("category/package/buildlink3.mk",
1.26 rillig 19: ".include \"../../category/dependency2/buildlink3.mk\"")
1.30 rillig 20: t.FinishSetUp()
1.26 rillig 21:
22: G.Check(t.File("category/package"))
23:
24: t.CheckOutputLines(
25: "WARN: ~/category/package/buildlink3.mk:12: " +
26: "../../category/dependency2/buildlink3.mk is included " +
27: "by this file but not by the package.")
28: }
29:
1.24 rillig 30: func (s *Suite) Test_CheckLinesBuildlink3Mk__unfinished_url2pkg(c *check.C) {
1.11 rillig 31: t := s.Init(c)
32:
1.25 rillig 33: t.SetUpVartypes()
1.20 rillig 34: t.CreateFileLines("x11/Xbae/Makefile")
35: t.CreateFileLines("mk/motif.buildlink3.mk")
1.25 rillig 36: mklines := t.SetUpFileMkLines("category/package/buildlink3.mk",
1.32 rillig 37: MkCvsID,
1.3 rillig 38: "# XXX This file was created automatically using createbuildlink-@PKGVERSION@",
1.1 rillig 39: "",
1.20 rillig 40: "BUILDLINK_TREE+=\tXbae",
1.1 rillig 41: "",
42: "BUILDLINK_DEPMETHOD.Xbae?=\tfull",
43: ".if !defined(XBAE_BUILDLINK3_MK)",
44: "XBAE_BUILDLINK3_MK:=",
45: "",
1.20 rillig 46: "BUILDLINK_API_DEPENDS.Xbae+=\tXbae>=4.8.4",
47: "BUILDLINK_ABI_DEPENDS.Xbae+=\tXbae>=4.51.01nb2",
48: "BUILDLINK_PKGSRCDIR.Xbae?=\t../../x11/Xbae",
1.1 rillig 49: "",
50: ".include \"../../mk/motif.buildlink3.mk\"",
51: ".endif # XBAE_BUILDLINK3_MK",
52: "",
1.20 rillig 53: "BUILDLINK_TREE+=\t-Xbae")
1.1 rillig 54:
1.24 rillig 55: CheckLinesBuildlink3Mk(mklines)
1.1 rillig 56:
1.11 rillig 57: t.CheckOutputLines(
1.22 rillig 58: "ERROR: ~/category/package/buildlink3.mk:2: This comment indicates unfinished work (url2pkg).")
1.1 rillig 59: }
60:
1.3 rillig 61: // Before version 5.3, pkglint wrongly warned here.
62: // The mk/haskell.mk file takes care of constructing the correct PKGNAME,
63: // but pkglint had not looked at that file.
1.20 rillig 64: //
65: // Since then, pkglint also looks at files from mk/ when they are directly
66: // included, and therefore finds the default definition for PKGNAME.
1.24 rillig 67: func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch_Haskell_incomplete(c *check.C) {
1.11 rillig 68: t := s.Init(c)
69:
1.25 rillig 70: t.SetUpPackage("x11/hs-X11",
1.18 rillig 71: "DISTNAME=\tX11-1.0")
72: t.Chdir("x11/hs-X11")
73: t.CreateFileLines("buildlink3.mk",
1.32 rillig 74: MkCvsID,
1.1 rillig 75: "",
76: "BUILDLINK_TREE+=\ths-X11",
77: "",
78: ".if !defined(HS_X11_BUILDLINK3_MK)",
79: "HS_X11_BUILDLINK3_MK:=",
80: "",
81: "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
82: "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X11>=1.6.1.2nb2",
83: "",
84: ".endif\t# HS_X11_BUILDLINK3_MK",
85: "",
86: "BUILDLINK_TREE+=\t-hs-X11")
1.30 rillig 87: t.FinishSetUp()
1.1 rillig 88:
1.24 rillig 89: G.Check(".")
1.1 rillig 90:
1.18 rillig 91: // This warning only occurs because pkglint cannot see mk/haskell.mk in this test.
1.11 rillig 92: t.CheckOutputLines(
1.8 rillig 93: "ERROR: buildlink3.mk:3: Package name mismatch between \"hs-X11\" in this file and \"X11\" from Makefile:3.")
1.1 rillig 94: }
95:
1.20 rillig 96: // Before version 5.3, pkglint wrongly warned here.
97: // The mk/haskell.mk file takes care of constructing the correct PKGNAME,
98: // but pkglint had not looked at that file.
99: //
100: // Since then, pkglint also looks at files from mk/ when they are directly
101: // included, and therefore finds the default definition for PKGNAME.
1.24 rillig 102: func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch_Haskell_complete(c *check.C) {
1.20 rillig 103: t := s.Init(c)
104:
105: t.CreateFileLines("mk/haskell.mk",
1.32 rillig 106: MkCvsID,
1.20 rillig 107: "PKGNAME?=\ths-${DISTNAME}")
1.25 rillig 108: t.SetUpPackage("x11/hs-X11",
1.20 rillig 109: "DISTNAME=\tX11-1.0",
110: "",
111: ".include \"../../mk/haskell.mk\"")
112: t.Chdir("x11/hs-X11")
113: t.CreateFileLines("buildlink3.mk",
1.32 rillig 114: MkCvsID,
1.20 rillig 115: "",
116: "BUILDLINK_TREE+=\ths-X11",
117: "",
118: ".if !defined(HS_X11_BUILDLINK3_MK)",
119: "HS_X11_BUILDLINK3_MK:=",
120: "",
121: "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
122: "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X11>=1.6.1.2nb2",
123: "",
124: ".endif\t# HS_X11_BUILDLINK3_MK",
125: "",
126: "BUILDLINK_TREE+=\t-hs-X11")
1.30 rillig 127: t.FinishSetUp()
1.20 rillig 128:
1.24 rillig 129: G.Check(".")
1.20 rillig 130:
131: t.CheckOutputEmpty()
132: }
133:
1.29 rillig 134: func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch__Perl(c *check.C) {
135: t := s.Init(c)
136:
137: t.SetUpPackage("x11/p5-gtk2",
138: "DISTNAME=\tGtk2-1.0",
139: "PKGNAME=\t${DISTNAME:C:Gtk2:p5-gtk2:}")
140: t.CreateFileLines("x11/p5-gtk2/buildlink3.mk",
1.32 rillig 141: MkCvsID,
1.29 rillig 142: "",
143: "BUILDLINK_TREE+=\tp5-gtk2",
144: "",
145: ".if !defined(P5_GTK2_BUILDLINK3_MK)",
146: "P5_GTK2_BUILDLINK3_MK:=",
147: "",
148: "BUILDLINK_API_DEPENDS.p5-gtk2+=\tp5-gtk2>=1.0",
149: "BUILDLINK_ABI_DEPENDS.p5-gtk2+=\tp5-gtk2>=1.0",
150: "",
151: ".endif\t# P5_GTK2_BUILDLINK3_MK",
152: "",
153: "BUILDLINK_TREE+=\t-p5-gtk2")
1.30 rillig 154: t.FinishSetUp()
1.29 rillig 155:
156: G.Check(t.File("x11/p5-gtk2"))
157:
158: // Up to 2019-03-17, pkglint wrongly complained about a mismatch
159: // between the package name from buildlink3.mk (p5-gtk2) and the
160: // one from the package Makefile (Gtk2).
161: //
162: // Pkglint had taken this information from the DISTNAME variable,
163: // ignoring the fact that PKGNAME was also defined.
164: t.CheckOutputEmpty()
165: }
166:
1.33 rillig 167: func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch__lib(c *check.C) {
168: t := s.Init(c)
169:
170: t.SetUpPackage("converters/libiconv")
171: t.CreateFileLines("converters/libiconv/buildlink3.mk",
172: MkCvsID,
173: "",
174: "BUILDLINK_TREE+=\ticonv",
175: "",
176: ".if !defined(ICONV_BUILDLINK3_MK)",
177: "ICONV_BUILDLINK3_MK:=",
178: "",
179: "BUILDLINK_API_DEPENDS.iconv+=\tlibiconv>=1.0",
180: "BUILDLINK_ABI_DEPENDS.iconv+=\tlibiconv>=1.0",
181: "",
182: ".endif\t# ICONV_BUILDLINK3_MK",
183: "",
184: "BUILDLINK_TREE+=\t-iconv")
185: t.FinishSetUp()
186:
187: G.Check(t.File("converters/libiconv"))
188:
189: // Up to 2019-10-12, pkglint complained about a mismatch
190: // between the package name from buildlink3.mk (iconv) and the
191: // one from the package Makefile (libiconv).
192: //
193: // This mismatch is not important enough to warrant a global
194: // renaming of the buildlink3 identifier, therefore the warning
195: // is suppressed in cases like this.
196: t.CheckOutputEmpty()
197: }
198:
1.34 rillig 199: func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch__version_ok(c *check.C) {
1.33 rillig 200: t := s.Init(c)
201:
202: t.SetUpPackage("editors/emacs22",
203: "PKGNAME=\temacs22-22.0")
204: t.CreateFileLines("editors/emacs22/buildlink3.mk",
205: MkCvsID,
206: "",
207: "BUILDLINK_TREE+=\temacs",
208: "",
209: ".if !defined(EMACS_BUILDLINK3_MK)",
210: "EMACS_BUILDLINK3_MK:=",
211: "",
212: "BUILDLINK_API_DEPENDS.emacs+=\temacs22>=1.0",
213: "BUILDLINK_ABI_DEPENDS.emacs+=\temacs22>=1.0",
214: "",
215: ".endif\t# EMACS_BUILDLINK3_MK",
216: "",
217: "BUILDLINK_TREE+=\t-emacs")
218: t.FinishSetUp()
219:
220: G.Check(t.File("editors/emacs22"))
221:
222: // Up to 2019-10-12, pkglint complained about a mismatch
223: // between the package name from buildlink3.mk (emacs) and the
224: // one from the package Makefile (emacs22).
225: //
226: // This mismatch is not important enough to warrant a global
227: // renaming of the buildlink3 identifier, therefore the warning
228: // is suppressed in cases like this.
229: t.CheckOutputEmpty()
230: }
231:
1.34 rillig 232: func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch__version_bad(c *check.C) {
233: t := s.Init(c)
234:
235: t.SetUpPackage("editors/emacs-client",
236: "PKGNAME=\temacs-client-22.0")
237: t.CreateFileLines("editors/emacs-client/buildlink3.mk",
238: MkCvsID,
239: "",
240: "BUILDLINK_TREE+=\temacs",
241: "",
242: ".if !defined(EMACS_BUILDLINK3_MK)",
243: "EMACS_BUILDLINK3_MK:=",
244: "",
245: "BUILDLINK_API_DEPENDS.emacs+=\temacs-client>=1.0",
246: "BUILDLINK_ABI_DEPENDS.emacs+=\temacs-client>=1.0",
247: "",
248: ".endif\t# EMACS_BUILDLINK3_MK",
249: "",
250: "BUILDLINK_TREE+=\t-emacs")
251: t.FinishSetUp()
252:
253: G.Check(t.File("editors/emacs-client"))
254:
255: t.CheckOutputLines(
256: "ERROR: ~/editors/emacs-client/buildlink3.mk:3: " +
257: "Package name mismatch between \"emacs\" in this file " +
258: "and \"emacs-client\" from Makefile:4.")
259: }
260:
1.24 rillig 261: func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch_multiple_inclusion(c *check.C) {
1.11 rillig 262: t := s.Init(c)
263:
1.25 rillig 264: t.SetUpVartypes()
1.11 rillig 265: mklines := t.NewMkLines("buildlink3.mk",
1.32 rillig 266: MkCvsID,
1.3 rillig 267: "",
268: "BUILDLINK_TREE+=\tpkgbase1",
269: "",
270: ".if !defined(PKGBASE2_BUILDLINK3_MK)",
271: "PKGBASE2_BUILDLINK3_MK:=",
272: "",
273: ".endif",
274: "",
275: "BUILDLINK_TREE+=\t-pkgbase1")
276:
1.24 rillig 277: CheckLinesBuildlink3Mk(mklines)
1.3 rillig 278:
1.11 rillig 279: t.CheckOutputLines(
1.21 rillig 280: "ERROR: buildlink3.mk:5: Package name mismatch between multiple-inclusion guard \"PKGBASE2\" "+
281: "(expected \"PKGBASE1\") and package name \"pkgbase1\" (from line 3).",
1.8 rillig 282: "WARN: buildlink3.mk:9: Definition of BUILDLINK_API_DEPENDS is missing.")
1.3 rillig 283: }
284:
1.24 rillig 285: func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch_abi_api(c *check.C) {
1.11 rillig 286: t := s.Init(c)
287:
1.25 rillig 288: t.SetUpVartypes()
1.11 rillig 289: mklines := t.NewMkLines("buildlink3.mk",
1.32 rillig 290: MkCvsID,
1.3 rillig 291: "",
292: "BUILDLINK_TREE+=\ths-X11",
293: "",
294: ".if !defined(HS_X11_BUILDLINK3_MK)",
295: "HS_X11_BUILDLINK3_MK:=",
296: "",
297: "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
298: "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X12>=1.6.1.2nb2",
1.17 rillig 299: "BUILDLINK_ABI_DEPENDS.hs-X12+=\ths-X11>=1.6.1.2nb2",
1.3 rillig 300: "",
301: ".endif\t# HS_X11_BUILDLINK3_MK",
302: "",
303: "BUILDLINK_TREE+=\t-hs-X11")
304:
1.24 rillig 305: CheckLinesBuildlink3Mk(mklines)
1.3 rillig 306:
1.11 rillig 307: t.CheckOutputLines(
1.47 rillig 308: "ERROR: buildlink3.mk:10: Packages must only require API versions, not ABI versions of dependencies.",
1.17 rillig 309: "WARN: buildlink3.mk:9: Package name mismatch between ABI \"hs-X12\" and API \"hs-X11\" (from line 8).",
310: "WARN: buildlink3.mk:10: Only buildlink variables for \"hs-X11\", not \"hs-X12\" may be set in this file.")
1.3 rillig 311: }
312:
1.24 rillig 313: func (s *Suite) Test_CheckLinesBuildlink3Mk__abi_api_versions(c *check.C) {
1.11 rillig 314: t := s.Init(c)
315:
1.25 rillig 316: t.SetUpVartypes()
1.11 rillig 317: mklines := t.NewMkLines("buildlink3.mk",
1.32 rillig 318: MkCvsID,
1.3 rillig 319: "",
320: "BUILDLINK_TREE+=\ths-X11",
321: "",
322: ".if !defined(HS_X11_BUILDLINK3_MK)",
323: "HS_X11_BUILDLINK3_MK:=",
324: "",
325: "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
326: "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X11>=1.6.0",
327: "",
328: ".endif\t# HS_X11_BUILDLINK3_MK",
329: "",
330: "BUILDLINK_TREE+=\t-hs-X11")
331:
1.24 rillig 332: CheckLinesBuildlink3Mk(mklines)
1.3 rillig 333:
1.11 rillig 334: t.CheckOutputLines(
1.8 rillig 335: "WARN: buildlink3.mk:9: ABI version \"1.6.0\" should be at least API version \"1.6.1\" (see line 8).")
1.3 rillig 336: }
337:
1.24 rillig 338: func (s *Suite) Test_CheckLinesBuildlink3Mk__missing_BUILDLINK_TREE_at_beginning(c *check.C) {
1.11 rillig 339: t := s.Init(c)
340:
1.25 rillig 341: t.SetUpVartypes()
1.11 rillig 342: mklines := t.NewMkLines("buildlink3.mk",
1.32 rillig 343: MkCvsID,
1.3 rillig 344: "",
345: ".if !defined(HS_X11_BUILDLINK3_MK)",
346: "HS_X11_BUILDLINK3_MK:=",
1.20 rillig 347: ".endif")
348:
1.24 rillig 349: CheckLinesBuildlink3Mk(mklines)
1.20 rillig 350:
351: t.CheckOutputLines(
352: "WARN: buildlink3.mk:3: Expected a BUILDLINK_TREE line.")
353: }
354:
355: // In buildlink3.mk files, there is no need to place any comments
356: // in the autogenerated code, therefore this warning is justified.
1.24 rillig 357: func (s *Suite) Test_CheckLinesBuildlink3Mk__missing_BUILDLINK_TREE_at_end(c *check.C) {
1.20 rillig 358: t := s.Init(c)
359:
1.25 rillig 360: t.SetUpVartypes()
1.20 rillig 361: mklines := t.NewMkLines("buildlink3.mk",
1.32 rillig 362: MkCvsID,
1.20 rillig 363: "",
364: "BUILDLINK_TREE+=\ths-X11",
365: "",
366: ".if !defined(HS_X11_BUILDLINK3_MK)",
367: "HS_X11_BUILDLINK3_MK:=",
1.3 rillig 368: "",
369: "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
370: "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X11>=1.6.1.2nb2",
371: "",
372: ".endif\t# HS_X11_BUILDLINK3_MK",
373: "",
1.20 rillig 374: "# needless comment",
1.3 rillig 375: "BUILDLINK_TREE+=\t-hs-X11")
376:
1.24 rillig 377: CheckLinesBuildlink3Mk(mklines)
1.3 rillig 378:
1.11 rillig 379: t.CheckOutputLines(
1.46 rillig 380: "WARN: buildlink3.mk:13: This line should consist of the following text: BUILDLINK_TREE+=\t-hs-X11")
1.3 rillig 381: }
382:
1.24 rillig 383: func (s *Suite) Test_CheckLinesBuildlink3Mk__DEPMETHOD_placement(c *check.C) {
1.11 rillig 384: t := s.Init(c)
385:
1.25 rillig 386: t.SetUpVartypes()
1.11 rillig 387: mklines := t.NewMkLines("buildlink3.mk",
1.32 rillig 388: MkCvsID,
1.1 rillig 389: "",
390: "BUILDLINK_DEPMETHOD.hs-X11?=\tfull",
1.3 rillig 391: "",
1.1 rillig 392: "BUILDLINK_TREE+=\ths-X11",
393: "",
394: ".if !defined(HS_X11_BUILDLINK3_MK)",
395: "HS_X11_BUILDLINK3_MK:=",
396: "",
397: "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
398: "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X11>=1.6.1.2nb2",
399: "",
400: ".endif\t# HS_X11_BUILDLINK3_MK",
401: "",
402: "BUILDLINK_TREE+=\t-hs-X11")
403:
1.24 rillig 404: CheckLinesBuildlink3Mk(mklines)
1.1 rillig 405:
1.11 rillig 406: t.CheckOutputLines(
1.20 rillig 407: "WARN: buildlink3.mk:3: This line belongs inside the .ifdef block.")
1.3 rillig 408: }
409:
1.24 rillig 410: func (s *Suite) Test_CheckLinesBuildlink3Mk__multiple_inclusion_wrong(c *check.C) {
1.11 rillig 411: t := s.Init(c)
412:
1.25 rillig 413: t.SetUpVartypes()
1.11 rillig 414: mklines := t.NewMkLines("buildlink3.mk",
1.32 rillig 415: MkCvsID,
1.3 rillig 416: "",
417: "BUILDLINK_TREE+=\ths-X11",
418: "",
419: ".if !defined(HS_X11_BUILDLINK3_MK)",
1.20 rillig 420: "UNRELATED_BUILDLINK3_MK:=",
421: ".endif")
1.3 rillig 422:
1.24 rillig 423: CheckLinesBuildlink3Mk(mklines)
1.3 rillig 424:
1.11 rillig 425: t.CheckOutputLines(
1.20 rillig 426: "WARN: buildlink3.mk:5: HS_X11_BUILDLINK3_MK is used but not defined.",
1.14 rillig 427: "WARN: buildlink3.mk:6: UNRELATED_BUILDLINK3_MK is defined but not used.",
1.46 rillig 428: "WARN: buildlink3.mk:6: This line should consist of the following text: HS_X11_BUILDLINK3_MK:=")
1.3 rillig 429: }
430:
1.24 rillig 431: func (s *Suite) Test_CheckLinesBuildlink3Mk__missing_endif(c *check.C) {
1.11 rillig 432: t := s.Init(c)
433:
1.25 rillig 434: t.SetUpVartypes()
1.11 rillig 435: mklines := t.NewMkLines("buildlink3.mk",
1.32 rillig 436: MkCvsID,
1.3 rillig 437: "",
438: "BUILDLINK_TREE+=\tpkgbase1",
439: "",
440: ".if !defined(PKGBASE1_BUILDLINK3_MK)",
441: "PKGBASE1_BUILDLINK3_MK:=")
442:
1.24 rillig 443: CheckLinesBuildlink3Mk(mklines)
1.3 rillig 444:
1.11 rillig 445: t.CheckOutputLines(
1.20 rillig 446: "ERROR: buildlink3.mk:EOF: .if from line 5 must be closed.",
1.41 rillig 447: "NOTE: buildlink3.mk:6: Empty line expected below this line.")
1.3 rillig 448: }
449:
1.24 rillig 450: func (s *Suite) Test_CheckLinesBuildlink3Mk__invalid_dependency_patterns(c *check.C) {
1.11 rillig 451: t := s.Init(c)
452:
1.25 rillig 453: t.SetUpVartypes()
1.11 rillig 454: mklines := t.NewMkLines("buildlink3.mk",
1.32 rillig 455: MkCvsID,
1.3 rillig 456: "",
1.20 rillig 457: "BUILDLINK_TREE+=\ths-X11",
1.3 rillig 458: "",
459: ".if !defined(HS_X11_BUILDLINK3_MK)",
460: "HS_X11_BUILDLINK3_MK:=",
461: "",
462: "BUILDLINK_DEPMETHOD.hs-X11?=\tfull",
463: "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11!=1.6.1",
464: "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X11!=1.6.1.2nb2",
465: "",
466: ".endif\t# HS_X11_BUILDLINK3_MK",
467: "",
468: "BUILDLINK_TREE+=\t-hs-X11")
469:
1.24 rillig 470: CheckLinesBuildlink3Mk(mklines)
1.3 rillig 471:
1.11 rillig 472: t.CheckOutputLines(
1.20 rillig 473: "WARN: buildlink3.mk:9: Invalid dependency pattern \"hs-X11!=1.6.1\".",
474: "WARN: buildlink3.mk:10: Invalid dependency pattern \"hs-X11!=1.6.1.2nb2\".")
1.3 rillig 475: }
476:
1.42 rillig 477: func (s *Suite) Test_CheckLinesBuildlink3Mk__PKG_OPTIONS(c *check.C) {
478: t := s.Init(c)
479:
480: t.SetUpOption("option", "")
481: t.SetUpPkgsrc()
482: t.SetUpPackage("category/package")
483: t.CreateFileBuildlink3("category/package/buildlink3.mk",
484: ".include \"../../mk/bsd.fast.prefs.mk\"",
485: ".if ${PKG_OPTIONS:Moption}",
486: ".endif")
487: t.FinishSetUp()
488:
489: G.Check(t.File("category/package/buildlink3.mk"))
490:
491: t.CheckOutputLines(
492: "ERROR: ~/category/package/buildlink3.mk:13: " +
493: "PKG_OPTIONS is not available in buildlink3.mk files.")
494: }
495:
1.35 rillig 496: // Just for branch coverage.
497: func (s *Suite) Test_Buildlink3Checker_Check__no_tracing(c *check.C) {
498: t := s.Init(c)
499:
500: t.SetUpPackage("category/package")
1.38 rillig 501: t.CreateFileBuildlink3("category/package/buildlink3.mk")
1.35 rillig 502: t.DisableTracing()
503: t.FinishSetUp()
504:
505: G.Check(t.File("category/package/buildlink3.mk"))
506:
507: t.CheckOutputEmpty()
508: }
509:
1.44 rillig 510: func (s *Suite) Test_Buildlink3Checker_checkFirstParagraph__comment_before_tree(c *check.C) {
511: t := s.Init(c)
512:
513: t.SetUpPkgsrc()
514: t.SetUpPackage("category/package")
515: t.CreateFileLines("category/package/buildlink3.mk",
516: MkCvsID,
517: "",
518: "# comment",
519: "BUILDLINK_TREE+=\tpackage",
520: "",
521: ".if !defined(PACKAGE_BUILDLINK3_MK)",
522: "PACKAGE_BUILDLINK3_MK:=",
523: "",
524: "BUILDLINK_API_DEPENDS.package+=\tpackage>=0",
525: "BUILDLINK_PKGSRCDIR.package?=\t../../category/package",
526: "BUILDLINK_DEPMETHOD.package?=\tbuild",
527: "",
528: ".endif # PACKAGE_BUILDLINK3_MK",
529: "",
530: "BUILDLINK_TREE+=\t-package")
531: t.FinishSetUp()
532:
533: G.Check(t.File("category/package/buildlink3.mk"))
534:
535: // No warning in line 3. Comments are ok there.
536: t.CheckOutputEmpty()
537: }
538:
1.31 rillig 539: func (s *Suite) Test_Buildlink3Checker_checkUniquePkgbase(c *check.C) {
540: t := s.Init(c)
541:
542: G.InterPackage.Enable()
543:
1.37 rillig 544: test := func(pkgbase string, pkgpath RelPath, diagnostics ...string) {
1.31 rillig 545: mkline := t.NewMkLine(t.File(pkgpath+"/buildlink3.mk"), 123, "")
546:
547: (*Buildlink3Checker).checkUniquePkgbase(nil, pkgbase, mkline)
548:
549: t.CheckOutput(diagnostics)
550: }
551:
552: // From now on, the pkgbase "php" may only be used for "php\d+".
553: test("php", "lang/php56",
554: nil...)
555:
1.37 rillig 556: // No warning since "php" is a valid buildlink3 basename for "php72".
1.31 rillig 557: test("php", "lang/php72",
558: nil...)
559:
560: // But this is a clear typo.
561: test("php", "security/pgp",
562: "ERROR: ~/security/pgp/buildlink3.mk:123: "+
563: "Duplicate package identifier \"php\" already appeared "+
564: "in ../../lang/php56/buildlink3.mk:123.")
565:
566: // This combination is not allowed because the names "php" and "php-pcre"
567: // differ too much. The only allowed inexact match is that the pkgname
568: // has one more number than the pkgbase, no matter at which position.
569: test("php", "textproc/php-pcre",
570: "ERROR: ~/textproc/php-pcre/buildlink3.mk:123: "+
571: "Duplicate package identifier \"php\" already appeared "+
572: "in ../../lang/php56/buildlink3.mk:123.")
573:
574: test("ruby-module", "net/ruby24-module",
575: nil...)
576:
577: test("ruby-module", "net/ruby26-module",
578: nil...)
579:
580: test("ruby-module", "net/ruby26-module12",
581: "ERROR: ~/net/ruby26-module12/buildlink3.mk:123: "+
582: "Duplicate package identifier \"ruby-module\" already appeared "+
583: "in ../../net/ruby24-module/buildlink3.mk:123.")
584:
585: test("package", "devel/package",
586: nil...)
587:
588: test("package", "wip/package",
589: nil...)
590: }
591:
1.37 rillig 592: func (s *Suite) Test_Buildlink3Checker_checkUniquePkgbase__chdir(c *check.C) {
593: t := s.Init(c)
594:
595: G.InterPackage.Enable()
596: t.Chdir("lang/php56")
597:
598: test := func(pkgbase string, path CurrPath, diagnostics ...string) {
599: mkline := t.NewMkLine(path.JoinNoClean("buildlink3.mk"), 123, "")
600:
601: (*Buildlink3Checker).checkUniquePkgbase(nil, pkgbase, mkline)
602:
603: t.CheckOutput(diagnostics)
604: }
605:
606: test("php", "../../lang/php72",
607: nil...)
608:
609: // Using the identifier "php" is ok in the current directory since
610: // its relative path from the pkgsrc root is "lang/php56", which
611: // starts with "php" as well.
612: test("php", ".",
613: nil...)
614: }
615:
1.35 rillig 616: func (s *Suite) Test_Buildlink3Checker_checkSecondParagraph__missing_mkbase(c *check.C) {
617: t := s.Init(c)
618:
619: t.SetUpPackage("category/package",
620: "DISTNAME=\t# empty",
621: "PKGNAME=\t# empty, to force mkbase to be empty")
1.38 rillig 622: t.CreateFileBuildlink3("category/package/buildlink3.mk")
1.35 rillig 623: t.FinishSetUp()
624:
625: G.Check(t.File("category/package"))
626:
627: // There is no warning from buildlink3.mk about mismatched package names
628: // since that is only a follow-up error of being unable to parse the pkgbase.
629: t.CheckOutputLines(
630: "WARN: ~/category/package/Makefile:3: As DISTNAME is not a valid package name, "+
631: "please define the PKGNAME explicitly.",
632: "WARN: ~/category/package/Makefile:4: \"\" is not a valid package name.")
633: }
634:
1.46 rillig 635: func (s *Suite) Test_Buildlink3Checker_checkPkgbaseMismatch(c *check.C) {
636: t := s.Init(c)
637:
638: t.SetUpPackage("category/package")
639: t.CreateFileBuildlink3Id("category/package/buildlink3.mk", "unrelated")
640: t.Chdir("category/package")
641: t.FinishSetUp()
642:
643: G.Check(".")
644:
645: t.CheckOutputLines(
646: "ERROR: buildlink3.mk:3: Package name mismatch between \"unrelated\" " +
647: "in this file and \"package\" from Makefile:3.")
648: }
649:
1.27 rillig 650: func (s *Suite) Test_Buildlink3Checker_checkMainPart__if_else_endif(c *check.C) {
651: t := s.Init(c)
652:
1.32 rillig 653: t.SetUpPackage("category/package")
1.38 rillig 654: t.CreateFileBuildlink3("category/package/buildlink3.mk",
655: ".include \"../../mk/bsd.fast.prefs.mk\"",
656: "",
1.27 rillig 657: ".if ${X11_TYPE} == modular",
658: ".else",
659: ".endif")
1.30 rillig 660: t.FinishSetUp()
1.27 rillig 661:
662: G.Check(t.File("category/package"))
663:
664: t.CheckOutputEmpty()
665: }
666:
1.40 rillig 667: // The buildlink3 checker does not use MkLines.ForEach since that would make
668: // the code more difficult to understand. Without MkLines.ForEach, it has to
669: // keep track of the nesting depth of .if directives itself.
1.35 rillig 670: func (s *Suite) Test_Buildlink3Checker_checkMainPart__nested_if(c *check.C) {
671: t := s.Init(c)
672:
1.38 rillig 673: t.SetUpPkgsrc()
674: t.Chdir("category/package")
675: t.FinishSetUp()
676: mklines := t.SetUpFileMkLines("buildlink3.mk",
1.35 rillig 677: MkCvsID,
678: "",
679: "BUILDLINK_TREE+=\ths-X11",
680: "",
681: ".if !defined(HS_X11_BUILDLINK3_MK)",
682: "HS_X11_BUILDLINK3_MK:=",
683: "",
684: "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
685: "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X11>=1.6.1.2nb2",
686: "",
1.38 rillig 687: ".include \"../../mk/bsd.fast.prefs.mk\"",
688: "",
1.35 rillig 689: ".if ${OPSYS} == NetBSD",
690: ".endif",
691: "",
692: ".endif\t# HS_X11_BUILDLINK3_MK",
693: "",
694: "BUILDLINK_TREE+=\t-hs-X11")
695:
696: CheckLinesBuildlink3Mk(mklines)
697:
698: t.CheckOutputEmpty()
699: }
700:
701: func (s *Suite) Test_Buildlink3Checker_checkMainPart__comment_at_end_of_file(c *check.C) {
702: t := s.Init(c)
703:
704: t.SetUpVartypes()
705: mklines := t.SetUpFileMkLines("category/package/buildlink3.mk",
706: MkCvsID,
707: "",
708: "BUILDLINK_TREE+=\ths-X11",
709: "",
710: ".if !defined(HS_X11_BUILDLINK3_MK)",
711: "HS_X11_BUILDLINK3_MK:=",
712: "",
713: "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
714: "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X11>=1.6.1.2nb2",
715: "",
716: ".endif\t# HS_X11_BUILDLINK3_MK",
717: "",
718: "BUILDLINK_TREE+=\t-hs-X11",
719: "",
720: "# the end")
721:
722: CheckLinesBuildlink3Mk(mklines)
723:
724: t.CheckOutputLines(
725: "WARN: ~/category/package/buildlink3.mk:14: The file should end here.")
726: }
727:
1.42 rillig 728: func (s *Suite) Test_Buildlink3Checker_checkVarUse__PKG_BUILD_OPTIONS(c *check.C) {
729: t := s.Init(c)
730:
731: t.SetUpOption("option", "")
732: t.SetUpPkgsrc()
733: t.CreateFileLines("mk/pkg-build-options.mk")
734: t.SetUpPackage("category/package")
735: t.CreateFileBuildlink3("category/package/buildlink3.mk",
736: "pkgbase := unrelated",
737: ".include \"../../mk/pkg-build-options.mk\"",
738: "",
739: ".if ${PKG_BUILD_OPTIONS:Moption}", // missing variable parameter
740: ".endif",
741: "",
742: ".if ${PKG_BUILD_OPTIONS.package:Moption}", // wrong variable parameter
743: ".endif",
744: "",
745: ".if ${PKG_BUILD_OPTIONS.unrelated:Moption}", // corresponds to pkgbase above
746: ".endif")
747: t.FinishSetUp()
748:
749: G.Check(t.File("category/package/buildlink3.mk"))
750:
751: t.CheckOutputLines(
752: "WARN: ~/category/package/buildlink3.mk:15: "+
753: "PKG_BUILD_OPTIONS is used but not defined.",
1.45 rillig 754: "ERROR: ~/category/package/buildlink3.mk:12: "+
755: "A buildlink3.mk file must only query its own PKG_BUILD_OPTIONS.package, "+
756: "not PKG_BUILD_OPTIONS.unrelated.",
1.42 rillig 757: "WARN: ~/category/package/buildlink3.mk:21: "+
758: "Wrong PKG_BUILD_OPTIONS, expected \"package\" instead of \"unrelated\".")
759: }
760:
1.35 rillig 761: // As of October 2018, pkglint parses package dependencies a little
762: // different than the pkg_* tools.
763: // In all but two cases this works, this is one of the exceptions.
1.45 rillig 764: // The "{totem,totem-xine}" cannot be parsed, therefore the check is skipped.
1.35 rillig 765: func (s *Suite) Test_Buildlink3Checker_checkVarassign__abi_api_versions_brace(c *check.C) {
766: t := s.Init(c)
767:
768: t.SetUpVartypes()
769: t.CreateFileLines("multimedia/totem/Makefile")
770: mklines := t.SetUpFileMkLines("multimedia/totem/buildlink3.mk",
771: MkCvsID,
772: "",
773: "BUILDLINK_TREE+=\ttotem",
774: "",
775: ".if !defined(TOTEM_BUILDLINK3_MK)",
776: "TOTEM_BUILDLINK3_MK:=",
777: "",
778: "BUILDLINK_API_DEPENDS.totem+=\t{totem,totem-xine}>=1.4.0",
779: "BUILDLINK_ABI_DEPENDS.totem+=\ttotem>=2.32.0nb46",
780: "BUILDLINK_PKGSRCDIR.totem?=\t../../multimedia/totem",
781: "",
782: ".endif # TOTEM_BUILDLINK3_MK",
783: "",
784: "BUILDLINK_TREE+=\t-totem")
785:
786: CheckLinesBuildlink3Mk(mklines)
787:
788: // No warning about ABI "totem" and API "{totem,totem-xine}"
789: // because that case is explicitly not checked.
790: t.CheckOutputEmpty()
791: }
792:
1.27 rillig 793: func (s *Suite) Test_Buildlink3Checker_checkVarassign__dependencies_with_path(c *check.C) {
794: t := s.Init(c)
795:
1.32 rillig 796: t.SetUpPackage("category/package")
1.38 rillig 797: t.CreateFileBuildlink3("category/package/buildlink3.mk",
1.27 rillig 798: "BUILDLINK_ABI_DEPENDS.package+=\tpackage>=1.0:../../category/package",
799: "BUILDLINK_API_DEPENDS.package+=\tpackage>=1.5:../../category/package")
1.30 rillig 800: t.FinishSetUp()
1.27 rillig 801:
802: G.Check(t.File("category/package"))
803:
804: // Since these dependencies are malformed, they are not processed further.
805: // Doing that would reveal that the ABI version should be higher than the API version.
806: t.CheckOutputLines(
807: "WARN: ~/category/package/buildlink3.mk:12: "+
808: "Invalid dependency pattern \"package>=1.0:../../category/package\".",
809: "WARN: ~/category/package/buildlink3.mk:13: "+
810: "Invalid dependency pattern \"package>=1.5:../../category/package\".")
811: }
812:
813: func (s *Suite) Test_Buildlink3Checker_checkVarassign__abi_without_api(c *check.C) {
814: t := s.Init(c)
815:
1.32 rillig 816: t.SetUpPackage("category/package")
1.38 rillig 817: // t.CreateFileBuildlink3() cannot be used here since it always adds an API line.
1.27 rillig 818: t.CreateFileLines("category/package/buildlink3.mk",
1.32 rillig 819: MkCvsID,
1.27 rillig 820: "",
821: "BUILDLINK_TREE+=\tpackage",
822: "",
823: ".if !defined(PACKAGE_BUILDLINK3_MK)",
824: "PACKAGE_BUILDLINK3_MK:=",
825: "",
826: "BUILDLINK_PKGSRCDIR.package?=\t../../category/package",
827: "BUILDLINK_DEPMETHOD.package?=\tbuild",
828: "BUILDLINK_ABI_DEPENDS.package+=\tpackage>=1.0",
829: "",
830: ".endif # PACKAGE_BUILDLINK3_MK",
831: "",
832: "BUILDLINK_TREE+=\t-package")
1.30 rillig 833: t.FinishSetUp()
1.27 rillig 834:
835: G.Check(t.File("category/package"))
836:
837: // Since only ABI is given but not API, the check for ABI >= API cannot be done.
838: t.CheckOutputLines(
839: "WARN: ~/category/package/buildlink3.mk:13: Definition of BUILDLINK_API_DEPENDS is missing.")
840: }
841:
842: func (s *Suite) Test_Buildlink3Checker_checkVarassign__abi_and_api_with_variables(c *check.C) {
843: t := s.Init(c)
844:
1.32 rillig 845: t.SetUpPackage("category/package")
1.38 rillig 846: t.CreateFileBuildlink3("category/package/buildlink3.mk",
1.27 rillig 847: "BUILDLINK_ABI_DEPENDS.package+=\tpackage>=${ABI_VERSION}",
848: "BUILDLINK_API_DEPENDS.package+=\tpackage>=${API_VERSION}",
849: "",
850: "ABI_VERSION=\t1.0",
851: "API_VERSION=\t1.5")
1.30 rillig 852: t.FinishSetUp()
1.27 rillig 853:
854: G.Check(t.File("category/package"))
855:
856: // Since the versions contain variable references, pkglint refuses to compare them.
857: t.CheckOutputEmpty()
858: }
859:
860: func (s *Suite) Test_Buildlink3Checker_checkVarassign__api_with_variable(c *check.C) {
861: t := s.Init(c)
862:
1.32 rillig 863: t.SetUpPackage("category/package")
1.38 rillig 864: t.CreateFileBuildlink3("category/package/buildlink3.mk",
1.27 rillig 865: "BUILDLINK_ABI_DEPENDS.package+=\tpackage>=1.0",
866: "BUILDLINK_API_DEPENDS.package+=\tpackage>=${API_VERSION}",
867: "",
868: "API_VERSION=\t1.5")
1.30 rillig 869: t.FinishSetUp()
1.27 rillig 870:
871: G.Check(t.File("category/package"))
872:
873: // Since the versions contain variable references, pkglint refuses to compare them.
874: t.CheckOutputEmpty()
875: }
876:
877: func (s *Suite) Test_Buildlink3Checker_checkVarassign__abi_and_api_with_pattern(c *check.C) {
878: t := s.Init(c)
879:
1.32 rillig 880: t.SetUpPackage("category/package")
1.38 rillig 881: t.CreateFileBuildlink3("category/package/buildlink3.mk",
1.27 rillig 882: "BUILDLINK_ABI_DEPENDS.package+=\tpackage-1.*",
883: "BUILDLINK_API_DEPENDS.package+=\tpackage-2.*")
1.30 rillig 884: t.FinishSetUp()
1.27 rillig 885:
886: G.Check(t.File("category/package"))
887:
888: // Since the versions do not contain lower bounds (they are package-1.*
889: // instead of package>=1), pkglint refuses to compare them.
890: t.CheckOutputEmpty()
891: }
892:
893: func (s *Suite) Test_Buildlink3Checker_checkVarassign__api_with_pattern(c *check.C) {
894: t := s.Init(c)
895:
1.32 rillig 896: t.SetUpPackage("category/package")
1.38 rillig 897: t.CreateFileBuildlink3("category/package/buildlink3.mk",
1.27 rillig 898: "BUILDLINK_ABI_DEPENDS.package+=\tpackage>=1",
899: "BUILDLINK_API_DEPENDS.package+=\tpackage-1.*")
1.30 rillig 900: t.FinishSetUp()
1.27 rillig 901:
902: G.Check(t.File("category/package"))
903:
904: // Since the API version does not contain lower bounds (it is package-1.*
905: // instead of package>=1), pkglint refuses to compare the versions.
906: t.CheckOutputEmpty()
907: }
908:
909: func (s *Suite) Test_Buildlink3Checker_checkVarassign__other_variables(c *check.C) {
910: t := s.Init(c)
911:
1.32 rillig 912: t.SetUpPackage("category/package")
1.38 rillig 913: t.CreateFileBuildlink3("category/package/buildlink3.mk",
1.27 rillig 914: "BUILDLINK_TREE+=\tmistake", // Wrong, but doesn't happen in practice.
915: "",
916: "LDFLAGS.NetBSD+=\t-ldl",
917: "",
918: "BUILDLINK_DEPMETHOD.other+=\tbuild",
919: "",
920: "BUILDLINK_API_DEPENDS.other+=\tother>=3")
1.30 rillig 921: t.FinishSetUp()
1.27 rillig 922:
923: G.Check(t.File("category/package"))
924:
925: t.CheckOutputLines(
1.28 rillig 926: "WARN: ~/category/package/buildlink3.mk:16: " +
927: "Only buildlink variables for \"package\", " +
1.27 rillig 928: "not \"other\" may be set in this file.")
929: }
1.38 rillig 930:
1.48 ! rillig 931: func (s *Suite) Test_Buildlink3Checker_checkVarassignPkgsrcdir(c *check.C) {
! 932: t := s.Init(c)
! 933:
! 934: t.SetUpPackage("category/package")
! 935: t.SetUpPackage("category/other-package")
! 936: t.CreateFileBuildlink3("category/package/buildlink3.mk",
! 937: "BUILDLINK_PKGSRCDIR.package?=\t../../category/other-package",
! 938: "BUILDLINK_API_DEPENDS.package+=\tpackage>=3")
! 939: t.FinishSetUp()
! 940:
! 941: G.Check(t.File("category/package"))
! 942:
! 943: t.CheckOutputLines(
! 944: "ERROR: ~/category/package/buildlink3.mk:12: " +
! 945: "BUILDLINK_PKGSRCDIR.package must be set " +
! 946: "to the package's own path (../../category/package), " +
! 947: "not ../../category/other-package.")
! 948: }
! 949:
! 950: // An indirect BUILDLINK_PKGSRCDIR is used in editors/emacs, among others.
! 951: func (s *Suite) Test_Buildlink3Checker_checkVarassignPkgsrcdir__var(c *check.C) {
! 952: t := s.Init(c)
! 953:
! 954: t.SetUpPackage("category/package")
! 955: t.SetUpPackage("category/other-package")
! 956: t.CreateFileBuildlink3("category/package/buildlink3.mk",
! 957: "PACKAGE_SRCDIR=\t\t\t../../category/package",
! 958: "BUILDLINK_PKGSRCDIR.package?=\t${PACKAGE_SRCDIR}",
! 959: "BUILDLINK_API_DEPENDS.package+=\tpackage>=3")
! 960: t.FinishSetUp()
! 961:
! 962: G.Check(t.File("category/package"))
! 963:
! 964: t.CheckOutputEmpty()
! 965: }
! 966:
1.38 rillig 967: func (s *Suite) Test_Buildlink3Checker_checkVaruseInPkgbase__PKGBASE_with_variable_PHP_PKG_PREFIX(c *check.C) {
968: t := s.Init(c)
969:
970: t.SetUpPkgsrc()
971: t.Chdir(".")
972: t.FinishSetUp()
973: mklines := t.NewMkLines("x11/php-wxwidgets/buildlink3.mk",
974: MkCvsID,
975: "",
976: "BUILDLINK_TREE+=\t${PHP_PKG_PREFIX}-wxWidgets",
977: "",
978: ".if !defined(PHP_WXWIDGETS_BUILDLINK3_MK)",
979: "PHP_WXWIDGETS_BUILDLINK3_MK:=",
980: "",
981: "BUILDLINK_API_DEPENDS.${PHP_PKG_PREFIX}-wxWidgets+=\t${PHP_PKG_PREFIX}-wxWidgets>=2.6.1.0",
982: "BUILDLINK_ABI_DEPENDS.${PHP_PKG_PREFIX}-wxWidgets+=\t${PHP_PKG_PREFIX}-wxWidgets>=2.8.10.1nb26",
983: "",
984: ".endif",
985: "",
986: "BUILDLINK_TREE+=\t-${PHP_PKG_PREFIX}-wxWidgets")
987:
988: CheckLinesBuildlink3Mk(mklines)
989:
990: t.CheckOutputLines(
1.39 rillig 991: "ERROR: x11/php-wxwidgets/buildlink3.mk:3: "+
992: "Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 993: "WARN: x11/php-wxwidgets/buildlink3.mk:8: "+
994: "To use PHP_PKG_PREFIX at load time, "+
995: ".include \"../../mk/bsd.fast.prefs.mk\" first.",
1.39 rillig 996: "ERROR: x11/php-wxwidgets/buildlink3.mk:13: "+
997: "Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 998: "WARN: x11/php-wxwidgets/buildlink3.mk:3: "+
999: "Please use \"php\" instead of \"${PHP_PKG_PREFIX}\" "+
1000: "(also in other variables in this file).")
1001: }
1002:
1003: func (s *Suite) Test_Buildlink3Checker_checkVaruseInPkgbase__PKGBASE_with_variable_PYPKGPREFIX(c *check.C) {
1004: t := s.Init(c)
1005:
1006: t.SetUpPkgsrc()
1007: t.Chdir(".")
1008: t.FinishSetUp()
1009: mklines := t.NewMkLines("x11/py-wxwidgets/buildlink3.mk",
1010: MkCvsID,
1011: "",
1012: "BUILDLINK_TREE+=\t${PYPKGPREFIX}-wxWidgets",
1013: "",
1014: ".if !defined(PY_WXWIDGETS_BUILDLINK3_MK)",
1015: "PY_WXWIDGETS_BUILDLINK3_MK:=",
1016: "",
1017: "BUILDLINK_API_DEPENDS.${PYPKGPREFIX}-wxWidgets+=\t${PYPKGPREFIX}-wxWidgets>=2.6.1.0",
1018: "BUILDLINK_ABI_DEPENDS.${PYPKGPREFIX}-wxWidgets+=\t${PYPKGPREFIX}-wxWidgets>=2.8.10.1nb26",
1019: "",
1020: ".endif",
1021: "",
1022: "BUILDLINK_TREE+=\t-${PYPKGPREFIX}-wxWidgets")
1023:
1024: CheckLinesBuildlink3Mk(mklines)
1025:
1026: t.CheckOutputLines(
1.39 rillig 1027: "ERROR: x11/py-wxwidgets/buildlink3.mk:3: "+
1028: "Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 1029: "WARN: x11/py-wxwidgets/buildlink3.mk:8: "+
1030: "To use PYPKGPREFIX at load time, "+
1031: ".include \"../../mk/bsd.fast.prefs.mk\" first.",
1.39 rillig 1032: "ERROR: x11/py-wxwidgets/buildlink3.mk:13: "+
1033: "Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 1034: "WARN: x11/py-wxwidgets/buildlink3.mk:3: "+
1035: "Please use \"py\" instead of \"${PYPKGPREFIX}\" "+
1036: "(also in other variables in this file).")
1037: }
1038:
1039: func (s *Suite) Test_Buildlink3Checker_checkVaruseInPkgbase__PKGBASE_with_variable_RUBY_BASE(c *check.C) {
1040: t := s.Init(c)
1041:
1042: t.SetUpPkgsrc()
1043: t.Chdir(".")
1044: t.FinishSetUp()
1045: mklines := t.NewMkLines("x11/ruby1-wxwidgets/buildlink3.mk",
1046: MkCvsID,
1047: "",
1048: "BUILDLINK_TREE+=\t${RUBY_BASE}-wxWidgets",
1049: "",
1050: ".if !defined(RUBY_WXWIDGETS_BUILDLINK3_MK)",
1051: "RUBY_WXWIDGETS_BUILDLINK3_MK:=",
1052: "",
1053: "BUILDLINK_API_DEPENDS.${RUBY_BASE}-wxWidgets+=\t${RUBY_BASE}-wxWidgets>=2.6.1.0",
1054: "BUILDLINK_ABI_DEPENDS.${RUBY_BASE}-wxWidgets+=\t${RUBY_BASE}-wxWidgets>=2.8.10.1nb26",
1055: "",
1056: ".endif",
1057: "",
1058: "BUILDLINK_TREE+=\t-${RUBY_BASE}-wxWidgets")
1059:
1060: CheckLinesBuildlink3Mk(mklines)
1061:
1062: t.CheckOutputLines(
1.39 rillig 1063: "ERROR: x11/ruby1-wxwidgets/buildlink3.mk:3: "+
1064: "Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 1065: "WARN: x11/ruby1-wxwidgets/buildlink3.mk:8: "+
1066: "To use RUBY_BASE at load time, "+
1067: ".include \"../../mk/bsd.fast.prefs.mk\" first.",
1.39 rillig 1068: "ERROR: x11/ruby1-wxwidgets/buildlink3.mk:13: "+
1069: "Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 1070: "WARN: x11/ruby1-wxwidgets/buildlink3.mk:3: "+
1071: "Please use \"ruby\" instead of \"${RUBY_BASE}\" "+
1072: "(also in other variables in this file).")
1073: }
1074:
1075: func (s *Suite) Test_Buildlink3Checker_checkVaruseInPkgbase__PKGBASE_with_variable_RUBY_PKGPREFIX(c *check.C) {
1076: t := s.Init(c)
1077:
1078: t.SetUpPkgsrc()
1079: t.Chdir(".")
1080: t.FinishSetUp()
1081: mklines := t.NewMkLines("x11/ruby2-wxwidgets/buildlink3.mk",
1082: MkCvsID,
1083: "",
1084: "BUILDLINK_TREE+=\t${RUBY_PKGPREFIX}-wxWidgets",
1085: "",
1086: ".if !defined(RUBY_WXWIDGETS_BUILDLINK3_MK)",
1087: "RUBY_WXWIDGETS_BUILDLINK3_MK:=",
1088: "",
1089: "BUILDLINK_API_DEPENDS.${RUBY_PKGPREFIX}-wxWidgets+=\t${RUBY_PKGPREFIX}-wxWidgets>=2.6.1.0",
1090: "BUILDLINK_ABI_DEPENDS.${RUBY_PKGPREFIX}-wxWidgets+=\t${RUBY_PKGPREFIX}-wxWidgets>=2.8.10.1nb26",
1091: "",
1092: ".endif",
1093: "",
1094: "BUILDLINK_TREE+=\t-${RUBY_PKGPREFIX}-wxWidgets")
1095:
1096: CheckLinesBuildlink3Mk(mklines)
1097:
1098: t.CheckOutputLines(
1.39 rillig 1099: "ERROR: x11/ruby2-wxwidgets/buildlink3.mk:3: "+
1100: "Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 1101: "WARN: x11/ruby2-wxwidgets/buildlink3.mk:8: "+
1102: "To use RUBY_PKGPREFIX at load time, "+
1103: ".include \"../../mk/bsd.fast.prefs.mk\" first.",
1.39 rillig 1104: "ERROR: x11/ruby2-wxwidgets/buildlink3.mk:13: "+
1105: "Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 1106: "WARN: x11/ruby2-wxwidgets/buildlink3.mk:3: "+
1107: "Please use \"ruby\" instead of \"${RUBY_PKGPREFIX}\" "+
1108: "(also in other variables in this file).")
1109: }
1110:
1111: func (s *Suite) Test_Buildlink3Checker_checkVaruseInPkgbase__PKGBASE_with_unknown_variable(c *check.C) {
1112: t := s.Init(c)
1113:
1114: t.SetUpPkgsrc()
1115: t.Chdir(".")
1116: t.FinishSetUp()
1117: mklines := t.NewMkLines("buildlink3.mk",
1118: MkCvsID,
1119: "",
1120: "BUILDLINK_TREE+=\t${LICENSE}-wxWidgets",
1121: "",
1122: ".if !defined(LICENSE_BUILDLINK3_MK)",
1123: "LICENSE_BUILDLINK3_MK:=",
1124: "",
1125: "BUILDLINK_API_DEPENDS.${LICENSE}-wxWidgets+=\t${LICENSE}-wxWidgets>=2.6.1.0",
1126: "BUILDLINK_ABI_DEPENDS.${LICENSE}-wxWidgets+=\t${LICENSE}-wxWidgets>=2.8.10.1nb26",
1127: "",
1128: ".endif",
1129: "",
1130: "BUILDLINK_TREE+=\t-${LICENSE}-wxWidgets")
1131:
1132: CheckLinesBuildlink3Mk(mklines)
1133:
1134: t.CheckOutputLines(
1.39 rillig 1135: "ERROR: buildlink3.mk:3: Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 1136: "WARN: buildlink3.mk:3: LICENSE should not be used in this file; "+
1137: "it would be ok in Makefile, Makefile.* or *.mk, but not buildlink3.mk or builtin.mk.",
1138: "WARN: buildlink3.mk:3: The variable LICENSE should be quoted as part of a shell word.",
1139: "WARN: buildlink3.mk:8: The variable LICENSE should be quoted as part of a shell word.",
1140: "WARN: buildlink3.mk:8: The variable LICENSE should be quoted as part of a shell word.",
1141: "WARN: buildlink3.mk:9: The variable LICENSE should be quoted as part of a shell word.",
1142: "WARN: buildlink3.mk:9: The variable LICENSE should be quoted as part of a shell word.",
1.39 rillig 1143: "ERROR: buildlink3.mk:13: Identifiers for BUILDLINK_TREE must not refer to other variables.",
1.38 rillig 1144: "WARN: buildlink3.mk:13: The variable LICENSE should be quoted as part of a shell word.",
1145: "WARN: buildlink3.mk:3: Please replace \"${LICENSE}\" with a simple string "+
1146: "(also in other variables in this file).")
1147: }
1.43 rillig 1148:
1149: func (s *Suite) Test_LoadBuildlink3Data(c *check.C) {
1150: t := s.Init(c)
1151:
1152: t.CreateFileBuildlink3("category/package/buildlink3.mk",
1.46 rillig 1153: "BUILDLINK_ABI_DEPENDS.package+=\tpackage>=0.1",
1154: "",
1155: "BUILDLINK_API_DEPENDS.other+=\tother>=0.1",
1156: "BUILDLINK_ABI_DEPENDS.other+=\tother>=0.1.3",
1157: "BUILDLINK_API_DEPENDS.package+=\tinvalid",
1158: "BUILDLINK_API_DEPENDS.package+=\tpackage>=0.1:extra",
1159: "BUILDLINK_ABI_DEPENDS.package+=\tinvalid",
1160: "BUILDLINK_ABI_DEPENDS.package+=\tpackage>=0.1:extra",
1161:
1162: "BUILDLINK_PREFIX.package=\t${PREFIX}",
1163: "BUILDLINK_PREFIX.other=\t${PREFIX}",
1164:
1165: "BUILDLINK_PKGSRCDIR.other=\tcategory/package")
1.43 rillig 1166: t.Chdir("category/package")
1167: mklines := LoadMk("buildlink3.mk", nil, MustSucceed)
1168:
1169: data := LoadBuildlink3Data(mklines)
1170:
1171: t.CheckDeepEquals(data, &Buildlink3Data{
1172: id: "package",
1.46 rillig 1173: prefix: "${PREFIX}",
1.43 rillig 1174: pkgsrcdir: "../../category/package",
1175: apiDepends: &DependencyPattern{
1176: Pkgbase: "package",
1177: LowerOp: ">=",
1178: Lower: "0",
1179: },
1180: apiDependsLine: mklines.mklines[7],
1181: abiDepends: &DependencyPattern{
1182: Pkgbase: "package",
1183: LowerOp: ">=",
1184: Lower: "0.1",
1185: },
1186: abiDependsLine: mklines.mklines[11],
1187: })
1188: }
CVSweb <webmaster@jp.NetBSD.org>