Pragmas are a method for providing additional information to genom
,
beyond what is conveyed in the language itself. They are introduced by
the #pragma
directive, followed by arguments. genom
understands the
following pragmas:
#pragma requires: External dependencies
#pragma provides: Provide interfaces for all components
#pragma masquerade: Pretend that ports are something else
#pragma requires
#pragma requires
is recognized by 'both' genom-pcpp
preprocessor and
'genom3'. It indicates an external dependency on a software package that is
required to parse the current specification. #pragma requires
assumes
that the package is using the pkg-config
utility (see
http://www.freedesktop.org/wiki/Software/pkg-config) and a .pc
file is available. This has the same effect as placing requires
directives in all components (Component declaration) but
saves the need to pass -I
and -D
directives to genom3
(see
General options) as they are automatically
computed.
The pragma syntax is as follow:
#pragma requires
accepts a string argument in the form package [>=
version]
. genom-pcpp
interprets it by running pkg-config --cflags
on
the string argument. It then adds the resulting -I
and -D
flags as if
they had been passed on the command line. Note that the flags are added 'at
the current processing location', so they do not influence already
preprocessed input. The pkg-config
utility is found in PATH
, or via the
PKG_CONFIG
environment variable if defined (see
Environment variables).
The pragma argument is added to the require
property of all components
later defined in a specification.
#pragma provides
#pragma provides
achieves the same effect as if 'all' components of a
specification defined the same provides
property (see
Component declaration). This directive is
mostly useful for templates implementation, so that they can provide a
common interface to all user defined components.
The pragma syntax is as follow:
#pragma masquerade
This directive applies to an IDL type definition in a component
interface. It is meant for aliasing the IDL type description to a native
object that cannot be described in IDL. The exact nature of the native
object depends on the template used for code generation, so it is only
described as a raw string here and not interpreted by genom
.
The pragma syntax is as follow:
The 'template' argument is a free form string that indicates to which template the directives applies. Templates can lookup this name and take the appropriate actions based on this information. 'type' is the name of the IDL type thas is to be masqueraded. 'data' describes how the masquerading will be done, and is template specific. Refer to the documentation of the template you are using for a precise description of the syntax and semantics of 'data'.