This tag is useful for symbols which are private where their disappearance do not cause ABI breakage. For example, most of C++ template instantiations fall into this category. Like any other tag, this one may also have an arbitrary value: it could be used to indicate why the symbol is considered optional.
When operating in the default non-template mode, among arch-specific symbols only those that match the current host architecture are written to the symbols file. On the contrary, all arch-specific symbols (including those from foreign arches) are always written to the symbol file when operating in template mode.
The format of architecture list is the same as the one used in the Build-Depends field of debian/control (except the enclosing square brackets []). For example, the first symbol from the list below will be considered only on alpha, amd64, kfreebsd-amd64 and ia64 architectures while the second one anywhere except on armel.
(arch=alpha amd64 kfreebsd-amd64 ia64)a_64bit_specific_symbol@Base 1.0
(arch=!armel)symbol_armel_does_not_have@Base 1.0
#include "packages.symbols.common"
(tag|..|tagN)#include "file_to_include"
As a result, all symbols included from file_to_include will be considered to be tagged with tag .. tagN by default. You can use this feature to create a common package.symbols file which includes architecture specific symbol files:
common_symbol1@Base 1.0
(arch=amd64 ia64 alpha)#include "package.symbols.64bit"
(arch=!amd64 !ia64 !alpha)#include "package.symbols.32bit"
common_symbol2@Base 1.0
The symbols files are read line by line, and include directives are processed
as soon as they are encountered. This means that the content of the included
file can override any content that appeared before the include directive and
that any content after the directive can override anything contained in the
included file. Any symbol (or even another #include directive) in the included
file can specify additional tags or override values of the inherited tags in
its tag specification. However, there is no way for the symbol to remove
any of the inherited tags.
An included file can repeat the header line containing the SONAME of the
library. In that case, it overrides any header line previously read.
However, in general it's best to avoid duplicating header lines. One way
to do it is the following:
#include "libsomething1.symbols.common"
arch_specific_symbol@Base 1.0
libc.so.6 libc6 #MINVER#
*@GLIBC_2.0 2.0
[...]
*@GLIBC_2.7 2.7
access@GLIBC_2.0 2.2
The symbol access@GLIBC_2.0 will lead to a minimal dependency on libc6
version 2.2 despite the wildcard entry *@GLIBC_2.0 which associates
symbols versioned as GLIBC_2.0 with the minimal version 2.0.
Note that using wildcards means that dpkg-gensymbols can't check
for symbols that might have disappeared and can't generate a diff between
the maintainer-supplied symbols file and the generated one in the binary
package.
This value can be overridden by the environment variable DPKG_GENSYMBOLS_CHECK_LEVEL.
This is free software; see the GNU General Public Licence version 2 or later for copying conditions. There is NO WARRANTY.