From: Philippe Proulx Date: Wed, 8 Feb 2017 00:55:43 +0000 (-0500) Subject: Shared object plugin: add component class help support X-Git-Tag: v2.0.0-pre1~501 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=279b3f153f459cb582232e9c29ca4b5b19237f2a Shared object plugin: add component class help support Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- diff --git a/include/babeltrace/plugin/plugin-dev.h b/include/babeltrace/plugin/plugin-dev.h index c8ea1c85..0ce20059 100644 --- a/include/babeltrace/plugin/plugin-dev.h +++ b/include/babeltrace/plugin/plugin-dev.h @@ -165,13 +165,14 @@ struct __bt_plugin_component_class_descriptor { /* Type of a component class attribute (internal use) */ enum __bt_plugin_component_class_descriptor_attribute_type { BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESCRIPTION = 0, - BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INIT_METHOD = 1, - BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESTROY_METHOD = 2, - BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD = 3, - BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD = 4, - BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD = 5, - BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_DESTROY_METHOD = 6, - BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_SEEK_TIME_METHOD = 7, + BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_HELP = 1, + BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INIT_METHOD = 2, + BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESTROY_METHOD = 3, + BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD = 4, + BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD = 5, + BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD = 6, + BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_DESTROY_METHOD = 7, + BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_SEEK_TIME_METHOD = 8, }; /* Component class attribute (internal use) */ @@ -193,6 +194,9 @@ struct __bt_plugin_component_class_descriptor_attribute { /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESCRIPTION */ const char *description; + /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_HELP */ + const char *help; + /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INIT_METHOD */ bt_component_class_init_method init_method; @@ -483,6 +487,39 @@ struct __bt_plugin_component_class_descriptor_attribute { #define BT_PLUGIN_SINK_COMPONENT_CLASS_DESCRIPTION_WITH_ID(_id, _comp_class_id, _x) \ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(description, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESCRIPTION, _id, _comp_class_id, sink, _x) +/* + * Defines a help attribute attached to a specific source component + * class descriptor. + * + * _id: Plugin descriptor ID (C identifier). + * _comp_class_id: Component class descriptor ID (C identifier). + * _x: Help (C string). + */ +#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_HELP_WITH_ID(_id, _comp_class_id, _x) \ + __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(help, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_HELP, _id, _comp_class_id, source, _x) + +/* + * Defines a help attribute attached to a specific filter component + * class descriptor. + * + * _id: Plugin descriptor ID (C identifier). + * _comp_class_id: Component class descriptor ID (C identifier). + * _x: Help (C string). + */ +#define BT_PLUGIN_FILTER_COMPONENT_CLASS_HELP_WITH_ID(_id, _comp_class_id, _x) \ + __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(help, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_HELP, _id, _comp_class_id, filter, _x) + +/* + * Defines a help attribute attached to a specific sink component class + * descriptor. + * + * _id: Plugin descriptor ID (C identifier). + * _comp_class_id: Component class descriptor ID (C identifier). + * _x: Help (C string). + */ +#define BT_PLUGIN_SINK_COMPONENT_CLASS_HELP_WITH_ID(_id, _comp_class_id, _x) \ + __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(help, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_HELP, _id, _comp_class_id, sink, _x) + /* * Defines an initialization method attribute attached to a specific * source component class descriptor. @@ -773,6 +810,36 @@ struct __bt_plugin_component_class_descriptor_attribute { #define BT_PLUGIN_SINK_COMPONENT_CLASS_DESCRIPTION(_name, _x) \ BT_PLUGIN_SINK_COMPONENT_CLASS_DESCRIPTION_WITH_ID(auto, _name, _x) +/* + * Defines a help attribute attached to a source component class + * descriptor which is attached to the automatic plugin descriptor. + * + * _name: Component class name (C identifier). + * _x: Help (C string). + */ +#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_HELP(_name, _x) \ + BT_PLUGIN_SOURCE_COMPONENT_CLASS_HELP_WITH_ID(auto, _name, _x) + +/* + * Defines a help attribute attached to a filter component class + * descriptor which is attached to the automatic plugin descriptor. + * + * _name: Component class name (C identifier). + * _x: Help (C string). + */ +#define BT_PLUGIN_FILTER_COMPONENT_CLASS_HELP(_name, _x) \ + BT_PLUGIN_FILTER_COMPONENT_CLASS_HELP_WITH_ID(auto, _name, _x) + +/* + * Defines a help attribute attached to a sink component class + * descriptor which is attached to the automatic plugin descriptor. + * + * _name: Component class name (C identifier). + * _x: Help (C string). + */ +#define BT_PLUGIN_SINK_COMPONENT_CLASS_HELP(_name, _x) \ + BT_PLUGIN_SINK_COMPONENT_CLASS_HELP_WITH_ID(auto, _name, _x) + /* * Defines an initialization method attribute attached to a source * component class descriptor which is attached to the automatic plugin diff --git a/lib/plugin/plugin-so.c b/lib/plugin/plugin-so.c index 6760aa75..9a2a7cc8 100644 --- a/lib/plugin/plugin-so.c +++ b/lib/plugin/plugin-so.c @@ -249,6 +249,7 @@ enum bt_plugin_status bt_plugin_so_init( struct comp_class_full_descriptor { const struct __bt_plugin_component_class_descriptor *descriptor; const char *description; + const char *help; bt_component_class_init_method init_method; bt_component_class_destroy_method destroy_method; bt_component_class_filter_add_iterator_method filter_add_iterator_method; @@ -365,6 +366,10 @@ enum bt_plugin_status bt_plugin_so_init( cc_full_descr->description = cur_cc_descr_attr->value.description; break; + case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_HELP: + cc_full_descr->help = + cur_cc_descr_attr->value.help; + break; case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INIT_METHOD: cc_full_descr->init_method = cur_cc_descr_attr->value.init_method; @@ -466,6 +471,16 @@ enum bt_plugin_status bt_plugin_so_init( } } + if (cc_full_descr->help) { + ret = bt_component_class_set_help(comp_class, + cc_full_descr->help); + if (ret) { + status = BT_PLUGIN_STATUS_ERROR; + BT_PUT(comp_class); + goto end; + } + } + if (cc_full_descr->init_method) { ret = bt_component_class_set_init_method(comp_class, cc_full_descr->init_method);