sdbus++: simplify vtable generation
Move vtable generation into separate mako files to simplify all of
the "*.prototype.hpp.mako" files.
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I2700698d760a25b649e86d812e425e66c9ff30a2
diff --git a/tools/meson.build b/tools/meson.build
index 41d0bb6..30ce47f 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -21,11 +21,14 @@
'sdbusplus/templates/method.md.mako',
'sdbusplus/templates/method.client.hpp.mako',
'sdbusplus/templates/method.prototype.hpp.mako',
+ 'sdbusplus/templates/method.server.vtable.cpp.mako',
'sdbusplus/templates/property.md.mako',
'sdbusplus/templates/property.client.hpp.mako',
'sdbusplus/templates/property.server.cpp.mako',
+ 'sdbusplus/templates/property.server.vtable.cpp.mako',
'sdbusplus/templates/signal.md.mako',
'sdbusplus/templates/signal.prototype.hpp.mako',
+ 'sdbusplus/templates/signal.server.vtable.cpp.mako',
)
meson.override_find_program('sdbus++', files('sdbus++'))
sdbusplusplus_prog = find_program('sdbus++', native: true)
diff --git a/tools/sdbusplus/templates/interface.server.cpp.mako b/tools/sdbusplus/templates/interface.server.cpp.mako
index eb8ca64..0562361 100644
--- a/tools/sdbusplus/templates/interface.server.cpp.mako
+++ b/tools/sdbusplus/templates/interface.server.cpp.mako
@@ -57,25 +57,15 @@
const vtable_t ${interface.classname}::_vtable[] = {
vtable::start(),
+
% for m in interface.methods:
-${ m.cpp_prototype(loader, interface=interface, ptype='vtable') }
+${ m.render(loader, "method.server.vtable.cpp.mako", method=m, interface=interface) }
% endfor
% for s in interface.signals:
-${ s.cpp_prototype(loader, interface=interface, ptype='vtable') }
+${ s.render(loader, "signal.server.vtable.cpp.mako", signal=s, interface=interface) }
% endfor
% for p in interface.properties:
- vtable::property("${p.name}",
- details::${interface.classname}::_property_${p.name}
- .data(),
- _callback_get_${p.name},
- % if 'const' not in p.flags and 'readonly' not in p.flags:
- _callback_set_${p.name},
- % endif
- % if not p.cpp_flags:
- vtable::property_::emits_change),
- % else:
- ${p.cpp_flags}),
- % endif
+${ p.render(loader, "property.server.vtable.cpp.mako", property=p, interface=interface) }
% endfor
vtable::end()
};
diff --git a/tools/sdbusplus/templates/method.prototype.hpp.mako b/tools/sdbusplus/templates/method.prototype.hpp.mako
index 6cfe02d..74d0cbc 100644
--- a/tools/sdbusplus/templates/method.prototype.hpp.mako
+++ b/tools/sdbusplus/templates/method.prototype.hpp.mako
@@ -29,21 +29,6 @@
static int _callback_${ method.CamelCase }(
sd_bus_message*, void*, sd_bus_error*);
###
-### Emit 'vtable'
-###
- % elif ptype == 'vtable':
- vtable::method("${method.name}",
- details::${interface.classname}::_param_${ method.CamelCase }
- .data(),
- details::${interface.classname}::_return_${ method.CamelCase }
- .data(),
- % if method.cpp_flags:
- _callback_${method.CamelCase},
- ${method.cpp_flags}),
- % else:
- _callback_${method.CamelCase}),
- % endif
-###
### Emit 'callback-cpp'
###
% elif ptype == 'callback-cpp':
diff --git a/tools/sdbusplus/templates/method.server.vtable.cpp.mako b/tools/sdbusplus/templates/method.server.vtable.cpp.mako
new file mode 100644
index 0000000..3774ab4
--- /dev/null
+++ b/tools/sdbusplus/templates/method.server.vtable.cpp.mako
@@ -0,0 +1,10 @@
+ vtable::method("${method.name}",
+ details::${interface.classname}::_param_${ method.CamelCase }.data(),
+ details::${interface.classname}::_return_${ method.CamelCase }.data(),
+ % if method.cpp_flags:
+ _callback_${method.CamelCase},
+ ${method.cpp_flags}\
+ % else:
+ _callback_${method.CamelCase}\
+ % endif
+),
diff --git a/tools/sdbusplus/templates/property.server.vtable.cpp.mako b/tools/sdbusplus/templates/property.server.vtable.cpp.mako
new file mode 100644
index 0000000..f21a6cc
--- /dev/null
+++ b/tools/sdbusplus/templates/property.server.vtable.cpp.mako
@@ -0,0 +1,12 @@
+ vtable::property("${property.name}",
+ details::${interface.classname}::_property_${property.name}.data(),
+ _callback_get_${property.name},
+ % if 'const' not in property.flags and 'readonly' not in property.flags:
+ _callback_set_${property.name},
+ % endif
+ % if not property.cpp_flags:
+ vtable::property_::emits_change\
+ % else:
+ ${property.cpp_flags}\
+ % endif
+),
diff --git a/tools/sdbusplus/templates/signal.prototype.hpp.mako b/tools/sdbusplus/templates/signal.prototype.hpp.mako
index 78c838c..10fae50 100644
--- a/tools/sdbusplus/templates/signal.prototype.hpp.mako
+++ b/tools/sdbusplus/templates/signal.prototype.hpp.mako
@@ -40,13 +40,6 @@
void ${ signal.camelCase }(
${ parameters(True) });
###
-### Emit 'vtable'
-###
- % elif ptype == 'vtable':
- vtable::signal("${signal.name}",
- details::${interface.classname}::_signal_${signal.CamelCase }
- .data()),
-###
### Emit 'callback-cpp'
###
% elif ptype == 'callback-cpp':
diff --git a/tools/sdbusplus/templates/signal.server.vtable.cpp.mako b/tools/sdbusplus/templates/signal.server.vtable.cpp.mako
new file mode 100644
index 0000000..d9caf4b
--- /dev/null
+++ b/tools/sdbusplus/templates/signal.server.vtable.cpp.mako
@@ -0,0 +1,2 @@
+ vtable::signal("${signal.name}",
+ details::${interface.classname}::_signal_${signal.CamelCase }.data()),