diff options
author | Stef Walter <stefw@redhat.com> | 2014-01-09 23:04:45 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-02-24 11:14:12 +0100 |
commit | b699c4d7f85a5404be1d1ee9450331aea869b886 (patch) | |
tree | 768eb8caba2a7c16adeecded05ee539b65d52a7d /src/tests/sbus_codegen_tests.xml | |
parent | 3ddbc81148d8bae386beb987195086ade9355f38 (diff) | |
download | sssd-b699c4d7f85a5404be1d1ee9450331aea869b886.tar.gz sssd-b699c4d7f85a5404be1d1ee9450331aea869b886.tar.xz sssd-b699c4d7f85a5404be1d1ee9450331aea869b886.zip |
sbus: Add meta data structures and code generator
These metadata structures hold the information about all the
details of a DBus interface. They are typically generated from
the canonical XML form of the DBus interface, although they
may also be hand crafted.
Add some handy functions for looking up methods, props, signals,
in the metadata of an interface. Currently lookups are just done
by looking through an array. If performance becomes an issue (ie:
very large interfaces) it would be really easy to sort things
and use bsearch().
Later commits will include some definitions using this metadata
and related functions.
DBus interfaces are defined here:
http://dbus.freedesktop.org/doc/dbus-specification.html#introspection-format
The introspection data format has become the standard way to represent a
DBus interface. For many examples see /usr/share/dbus-1/interfaces/ on a
typical linux machine.
A word about annotations. These are extra flags or values that can be
assigned to anything. So far, the codegen supports this annotation:
org.freedesktop.DBus.GLib.CSymbol
- An annotation specified in the specification that tells us what C symbol
to generate for a given interface or method. By default the codegen will
build up a symbol name from the DBus name.
It is possible to confuse the code generator into producing invalid
C code (with strange method names, for example), but the C compiler
catches such silliness right away.
Add tests testing basic features of the codegen and poking through
the metadata it creates. Also test the metadata lookup functions.
Generated code is checked in for easy discovery.
An example of the XML interface definitions can be found at:
src/tests/sbus_codegen_tests.xml
And an example of the generated header can be found here:
src/tests/sbus_codegen_tests_generated.h
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Reviewed-by: Sumit Bose <sbose@redhat.com>
Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
Reviewed-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'src/tests/sbus_codegen_tests.xml')
-rwxr-xr-x | src/tests/sbus_codegen_tests.xml | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/tests/sbus_codegen_tests.xml b/src/tests/sbus_codegen_tests.xml new file mode 100755 index 000000000..0def3585a --- /dev/null +++ b/src/tests/sbus_codegen_tests.xml @@ -0,0 +1,45 @@ +<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" + "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> +<node> + <!-- + This file should exercise as many aspects of the sbus_codegen as + possible. See sbus_codegen_test.c for verification. + --> + + <!-- + This is an interface, it will get a sbus_interface_meta struct. + Its name will be com_planetexpress_Ship__meta, since no c symbol + is specified. + --> + <interface name="com.planetexpress.Ship"> + <!-- A property --> + <property name="Color" type="s" access="read"/> + + <!-- A method with two in and one out argument --> + <method name="MoveUniverse"> + <!-- This is a boolean arg --> + <arg name="smoothly" type="b" direction="in"/> + <!-- This is an uint32 arg --> + <arg name="speed_factor" type="u" direction="in"/> + <!-- This is a string arg --> + <arg name="where_we_crashed" type="s" direction="out"/> + </method> + + <!-- A signal with one argument --> + <signal name="BecameSentient"> + <arg name="gender" type="s"/> + </signal> + </interface> + + <!-- + Another interface. It's C name will be test_pilot, since we've overridden + the c symbol name. + --> + <interface name="com.planetexpress.Pilot"> + <annotation value="test_pilot" name="org.freedesktop.DBus.GLib.CSymbol"/> + + <!-- A property --> + <property name="FullName" type="s" access="readwrite"/> + </interface> + +</node> |