alint.5.scd 10.1 KB
Newer Older
Leo's avatar
Leo committed
1
2
3
4
alint(5)

# NAME

Leo's avatar
Leo committed
5
alint - linting labels and tags
Leo's avatar
Leo committed
6
7
8

# DESCRIPTION

Leo's avatar
Leo committed
9
10
11
12
A label and a tag are 2 attributes given to each test in alint, a label is composed
by a collection of words separated by dashes and it is meant to convey the general
idea of what the test does. A tag is a string with AL followed by an integer, those
being assigned in increasing order as new tests are made but never re-using old ones.
Leo's avatar
Leo committed
13

Leo's avatar
Leo committed
14
15
16
tests can be skipped by setting an environment variable composed of SKIP_ + the label
in uppercase with the dashes replaced by underscore or by setting an environment variable
composed of SKIP_ + the tag.
Leo's avatar
Leo committed
17

Leo's avatar
Leo committed
18
# Severity
Leo's avatar
Leo committed
19

Leo's avatar
Leo committed
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Severity is assigned to each tag and indicates how serious the violation found is:

## Serious (S)

Will cause problems during build or when package is delivered to users. Should be fixed
immediately.

## Important (I)

Might cause problems during build or when the package is delivered to users in certain
situations. Should be fixed soon.

## Minor (M)

Won't directly cause issues during build or when the package is delivered to users.
Leo's avatar
Leo committed
35
36
37
Should be fixed when convenient.

This also holds style issues that are dictated on the CODINGSTYLE.md file.
Leo's avatar
Leo committed
38

Leo's avatar
Leo committed
39
40
41
42
43
44
## STYLE (T)

Won't cause any issues, are specific style issues pertinent to a concerned developer
or contributor. the _APKBUILD\_STYLE_ variable can be set to a specific value to enable
a subset of checks that the specific developer or user uses.

45
46
47
48
When a check belongs to this category this manual page also provides information on which
developers use a specific style check as developers can sometimes both want to have the
same check done on their own style.

Leo's avatar
Leo committed
49
50
51
52
Current valid values are:

- leo (style linting for leo)

Leo's avatar
Leo committed
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Certainty

Certainty is assigned to each tag and indicates how certain a test is that the violation
found is not a false positive

## Certain (C)

The test is certain that this is not a false positive

## Possible (P)

The test is not certain that this is a false positive, but there is a high chance it isn't

# LABELS TAGS (aports-lint)

The following labels and tags are used by the *aports-lint* program.

## duplicate-package [AL22]
Leo's avatar
Leo committed
71

Leo's avatar
Leo committed
72
73
The Package being introduced is already present in another repo. Solve the
conflict by:
Leo's avatar
Leo committed
74

Leo's avatar
Leo committed
75
76
- If the package in the uppermost repo has more recent changes, merge them.
- Then delete the package in the upper repo.
Leo's avatar
Leo committed
77
78
79
80
81
82

Duplicate packages will shadow eachother in the repo and the one with the
higher version will win, it can also cause programs to compile against
the wrong version of a package. E.g: if *main/foo-1-r0* and *testing/foo-2-r0* exist
and *main/bar* is updated to version 2 which requires *foo>=2-r0* then it will
fail because it will only find *main/foo-1-r0* and not *testing/foo-2-r0*.
Leo's avatar
Leo committed
83

Leo's avatar
Leo committed
84
85
86
Severity: Serious, Certainty: Certain

## upper-repo-depends [AL16]
Leo's avatar
Leo committed
87
88
89
90
91
92
93
94
95

The package depends on a package in a upper repo. The package must be moved to 
the upper repo or the dependency moved to the repo the package is.

Packages cannot depend on a package on an upper repo. Packages in main cannot
depend on packages in other repos. Packages in community can depend on main
and itself only. Packages in testing can depend on main, community and itself
only. Packages in unmaintained can depend on package on any repo but non-free.

Leo's avatar
Leo committed
96
97
98
Severity: Serious, Certainty: Certain

## duplicate-depends [AL17]
Leo's avatar
Leo committed
99
100
101
102
103

The APKBUILD has duplicate depends. One of them must be removed.

Declaring duplicate dependencies is superfluous.

Leo's avatar
Leo committed
104
105
106
Severity: Minor, Certainty: Certain

## upper-repo-makedepends [AL18]
Leo's avatar
Leo committed
107
108
109
110
111
112
113

The package makedepends on a package in a upper repo. The package must be moved
to the upper repo or the dependency moved to the repo the package is.

Packages cannot makedepend on a package on an upper repo. Packages in main cannot
makedepend on packages in other repos. Packages in community can depend on main
and itself only. Packages in testing can makedepend on main, community and itself
Leo's avatar
Leo committed
114
only. Packages in unmaintained can makedepend on packages of any repo but non-free.
Leo's avatar
Leo committed
115

Leo's avatar
Leo committed
116
117
118
Severity: Serious, Certainty: Certain

## duplicate-makedepends [AL19]
Leo's avatar
Leo committed
119
120
121
122
123

The APKBUILD has duplicate makedepends. One of them must be removed.

Declaring duplicate dependencies is superfluous.

Leo's avatar
Leo committed
124
125
126
Severity: Minor, Certainty: Certain

## upper-repo-checkdepends [AL20]
Leo's avatar
Leo committed
127
128
129
130
131
132
133
134
135

The package checkdepends on a package in a upper repo. The package must be moved
to the upper repo or the dependency moved to the repo the package is.

Packages cannot checkdepend on a package on an upper repo. Packages in main cannot
checkdepend on packages in other repos. Packages in community can checkdepend on main
and itself only. Packages in testing can checkdepend on main, community and itself
only. Packages in unmaintained can checkdepend on package on any repo but non-free.

Leo's avatar
Leo committed
136
137
138
Severity: Serious, Certainty: Certain

## duplicate-checkdepends [AL21]
Leo's avatar
Leo committed
139
140
141
142
143

The APKBUILD has duplicate checkdepends. One of them must be removed.

Declaring duplicate dependencies is superfluous.

Leo's avatar
Leo committed
144
145
146
Severity: Minor, Certainty: Certain

## pkgname-dirname-mismatch [AL23]
Leo's avatar
Leo committed
147
148
149
150

The pkgname variable of the APKBUILD has value *foo* but the directory in which the
APKBUILD is found is not named *foo*

Leo's avatar
Leo committed
151
152
153
Severity: Important, Certainty: Certain

## depends-makedepends-checkdepends-overlap [AL24]
Leo's avatar
Leo committed
154

155
156
157
158
A package is present in 2 to 3 of the 3 types of following dependencies: depends,
makedepends and checkdepends. All of them are installed during creation of the package,
please specify only once in the lowest common denominator location.

Leo's avatar
Leo committed
159
160
161
Severity: Important, Certainty: Certain

# LABELS TAGS (apkbuild-lint)
Leo's avatar
Leo committed
162

Leo's avatar
Leo committed
163
The following labels and tags are used by the *apkbuild-lint* program
Leo's avatar
Leo committed
164

Leo's avatar
Leo committed
165
## default-builddir-value [AL1]
Leo's avatar
Leo committed
166
167
168
169
170
171

The value of builddir matches the default which is *$srcdir/$pkgname-$pkgver*.
The *builddir* declaration can be removed.

Starting with v2.29.0 of *abuild* the value is set automatically.

172
Severity: Minor, Certainty: Certain
Leo's avatar
Leo committed
173
174

## unnecessary-return-1 [AL2]
Leo's avatar
Leo committed
175
176
177
178
179
180

The APKBUILD has *|| return 1* statements. They can be safely removed.

Starting with version v2.15.0 of *abuild* the building process is executed
with *set -e* effectively adding a *|| return 1* to every command.

Leo's avatar
Leo committed
181
182
183
Severity: Minor, Certainity: Certain

## pkgname-quoted [AL3]
Leo's avatar
Leo committed
184
185
186

The APKBUILD's *pkgname* variable is quoted. It must not be quoted.

Leo's avatar
Leo committed
187
Severity: Style, Certainty: Possible
Leo's avatar
Leo committed
188

189
190
191
192
Present in the _APKBUILD\_STYLE_ of:

- leo

Leo's avatar
Leo committed
193
194
195
## pkgver-quoted [AL4]

The APKBUILD's *pkgver* variable is quoted. It must not be quoted.
Leo's avatar
Leo committed
196

Leo's avatar
Leo committed
197
Severity: Style, Certainty: Possible
Leo's avatar
Leo committed
198

199
200
201
202
Present in the _APKBUILD\_STYLE_ of:

- leo

Leo's avatar
Leo committed
203
## empty-variable [AL5]
Leo's avatar
Leo committed
204
205
206
207
208
209

The APKBUILD has variables that are empty values, they can safely be removed.

Empty variables can be removed to make the APKBUILD smaller and more
concise.

Leo's avatar
Leo committed
210
211
212
Severity: Minor, Certainty: Certain

## custom-variable [AL6]
Leo's avatar
Leo committed
213
214
215
216
217
218
219
220

The APKBUILD has custom variables that are not prefixed with an underscore.
prefix the variables with underscore.

Variables that do no affect behaviour of *abuild* should be prefixed with an
underscore so maintainers and contributors can easily distinguish their
importance.

Leo's avatar
Leo committed
221
222
223
Severity: Important, Certainty: Certain

## indent-tabs [AL7]
Leo's avatar
Leo committed
224
225
226
227
228
229

The APKBUILD is using spaces instead of tabs for indenting. Replace the
spaces with tabs.

APKBUILDs use tab characters (\t) not spaces for indentation.

Leo's avatar
Leo committed
230
231
232
Severity: Important, Certainty: Certain

## trailing-whitespace [AL8]
Leo's avatar
Leo committed
233
234
235
236
237

The APKBUILD has trailing whitespace characters. Remove them.

Trailing whitespace is superfluous.

Leo's avatar
Leo committed
238
239
Severity: Important, Certainty: Certain

Leo's avatar
Leo committed
240
## backticks-usage [AL25]
Leo's avatar
Leo committed
241
242
243
244
245
246

The APKBUILD uses backticks for running a shell command, use `$()` instead.

Severity: Serious, Certainty: Possible

## function-keyword [AL9]
Leo's avatar
Leo committed
247
248
249
250
251
252
253

The APKBUILD uses the function keyword to declare a function. Use
*function()* instead.

the function keyword is a bashism. *abuild* uses Posix-compliant
shell with the *local* keyword.

Leo's avatar
Leo committed
254
255
256
Severity: Serious, Certainty: Certain

## space-before-function-parenthesis [AL10]
Leo's avatar
Leo committed
257
258
259
260
261

The APKBUILD has a space character between the name of a function
and the paranthesis that denote it is a function. Remove the superfluous
space.

Leo's avatar
Leo committed
262
Severity: MInor, Certainty: Certain
263

Leo's avatar
Leo committed
264
## space-after-function-parenthesis [AL11]
Leo's avatar
Leo committed
265
266
267
268

The APKBUILD doesn't have a space after the function parenthesis or has more
than one space. Use only one space after the function parenthesis.

Leo's avatar
Leo committed
269
Severity: Minor, Certainty: Certain
270

Leo's avatar
Leo committed
271
## newline-opening-brace [AL12]
Leo's avatar
Leo committed
272
273
274
275
276

The APKBUILD has a newline before the opening brace of a function. Put the
opening brace in the same line as the declaration with one space after the
function parenthesis.

Leo's avatar
Leo committed
277
Severity: Minor, Certainty: Certain
278

Leo's avatar
Leo committed
279
## superfluous-cd-builddir [AL13]
Leo's avatar
Leo committed
280
281
282
283
284

The APKBUILD has *cd "$builddir"* statements that are superfluous. Remove them.

Staring with v3.3.0 of *abuild* the *prepare*, *build*, *check* and *package*
functions automatically have their working directory set to the value of
Leo's avatar
Leo committed
285
286
*builddir*. It is also possible that there are 2 *cd "$builddir"* statements
one after the other.
287

288
Severity: Minor, Certainty: Possible
Leo's avatar
Leo committed
289
290

## pkgname-has-uppercase [AL14]
291
292

pkgname has uppercase characters, pkgname must have only lowercase characters.
Leo's avatar
Leo committed
293

Leo's avatar
Leo committed
294
295
296
Severity: Serious, Certainty: Certain

## pkgver-has-pkgrel [AL15]
Leo's avatar
Leo committed
297
298
299

pkgver has *-r* followed by a number, that is reserved for the relaease of a package
as defined by the *pkgrel* variable.
Leo's avatar
Leo committed
300
301

Severity: Serious, Certainty: Certain
Leo's avatar
Leo committed
302
303
304

## _builddir-is-set [AL26]

Kevin Daudt's avatar
Kevin Daudt committed
305
\_builddir is set instead of builddir, which is an old variable from before builddir
Leo's avatar
Leo committed
306
existed as a concept understood by abuild.
Leo's avatar
Leo committed
307
308

Severity: Serious, Certainty: Certain
Leo's avatar
Leo committed
309
310
311
312
313
314

## literal-integer-is-quoted [AL28]

A variable declaration containing only integers should not be quoted.

Severity: Minor,  Certainty: Certain
Kevin Daudt's avatar
Kevin Daudt committed
315
316
317
318
319
320
321
322
323
324
325

## pkgname-used-in-source [AL29]

"$pkgname" is used in the source url. This tightly couples the pkgname to the
upstream name, which makes it harder to rename packages or create specialized /
variants of packages.

Instead, use the upstream name fully written out. This only counts for the url
itself, not the local archive name prefix.

Severity: Minor, Certainty: Certain
Leo's avatar
Leo committed
326
327
328
329
330
331
332

## double-underscore-in-variable [AL30]

Usage of double underscore in variables is forbidden, use always one underscore
for variables that are not used by abuild.

Severity: Minor, Certainty: Certain
Leo's avatar
Leo committed
333
334
335
336
337
338

## variable-capitalized [AL31]

Variables should have no capitalized letters

Severity: Minor, Certainty: Certain