2.6. Vendor specific data files

Lintian uses a number of data files for various checks, ranging from common spelling mistakes to lists of architectures. While some of these data files are generally applicable for all vendors (or Debian derivatives), others are not.

Starting with version 2.5.7, Lintian supports vendor specific data files. This allows vendors to deploy their own data files tailored for their kind of system. Lintian supports both extending an existing data file and completely overriding it.

2.6.1. Load paths and order

Lintian will search the following directories in order for vendor specific data files:

If none of the directories exists or none of them provide the data file in question, Lintian will (recursively) retry with the parent of the vendor (if any). If the vendor and none of its parents provide the data file, Lintian will terminate with an error.

2.6.2. Basic syntax of data files

Generally, data files are read line by line. Leading whitespace of every line is removed and (now) empty lines are ignored. Lines starting with a # are comments and are also ignored by the parser. Lines are processed in the order they are read.

If the first character of the line is a @, the first word is parsed as a special processing instruction. The rest of the line is a parameter to that processing instruction. Please refer to List of processing instructions.

All other lines are read as actual data. If the data file is a table (or map), the lines will parsed as key-value pairs. If the data file is a list (or set), the full line will be considered a single value of the list.

It is permissible to define the same key twice with a different value. In this case, the value associated with the key is generally redefined. There are very rare exceptions to this rule, where the data file is a table of tables (of values). In this case, a recurring key is used to generate the inner table.

2.6.2.1. List of processing instructions

The following processing instructions are recognised:

@delete ENTRY

Removes a single entry denoted by ENTRY that has already been parsed.

It is permissible to list a non-existent entry, in which case the instruction has no effect. This instruction does not prevent the entry from being (re-)defined later, it only affects the current definition of the entry.

For key-pair based data files, ENTRY must match the key. For single value data files, ENTRY must match the line to remove.

@include-parent

Processes parent data file of the current data file.

The informal semantics of this instruction is that it reads the "next" data file in the vendor "chain". The parsing of the parent is comparable to a C-style include or sourcing a shell script.

More formally, let CP be the name of the vendor profile that defines the the data file containing the instruction. Let the parent of CP be referred to as PCP.

Lintian will search for the data file provided by PCP using the rules as specified in Load paths and order. If no data file is found, Lintian will terminate the parsing with an error. Thus, this instruction can only be used by profiles that extends other profiles.