struct wl_list link;
struct description *description;
bool bitfield;
+ int since;
};
struct entry {
char *uppercase_name;
char *value;
char *summary;
+ int since;
struct wl_list link;
};
enumeration = xzalloc(sizeof *enumeration);
enumeration->name = xstrdup(name);
enumeration->uppercase_name = uppercase_dup(name);
+ enumeration->since = 1;
wl_list_init(&enumeration->entry_list);
fail(&ctx->loc, "no entry name given");
entry = create_entry(name, value);
+ version = version_from_since(ctx, since);
+
+ if (version < ctx->enumeration->since)
+ warn(&ctx->loc, "since version not increasing\n");
+ ctx->enumeration->since = version;
+ entry->since = version;
if (summary)
entry->summary = xstrdup(summary);
}
printf("enum %s_%s {\n", interface->name, e->name);
wl_list_for_each(entry, &e->entry_list, link) {
- if (entry->summary)
- printf("\t/**\n"
- "\t * %s\n"
- "\t */\n", entry->summary);
+ if (entry->summary || entry->since > 1) {
+ printf("\t/**\n");
+ if (entry->summary)
+ printf("\t * %s\n", entry->summary);
+ if (entry->since > 1)
+ printf("\t * @since %d\n", entry->since);
+ printf("\t */\n");
+ }
printf("\t%s_%s_%s = %s,\n",
interface->uppercase_name,
e->uppercase_name,
entry->uppercase_name, entry->value);
}
printf("};\n");
+
+ wl_list_for_each(entry, &e->entry_list, link) {
+ if (entry->since == 1)
+ continue;
+
+ printf("/**\n * @ingroup iface_%s\n */\n", interface->name);
+ printf("#define %s_%s_%s_SINCE_VERSION %d\n",
+ interface->uppercase_name,
+ e->uppercase_name, entry->uppercase_name,
+ entry->since);
+
+ }
+
printf("#endif /* %s_%s_ENUM */\n\n",
interface->uppercase_name, e->uppercase_name);
}
SOFTWARE.
</copyright>
- <interface name="intf_A" version="1">
+ <interface name="intf_A" version="3">
<description summary="the thing A">
A useless example trying to tickle the scanner.
</description>
<request name="destroy" type="destructor"/>
<event name="hey"/>
+
+ <enum name="foo">
+ <entry name="first" value="0" summary="this is the first"/>
+ <entry name="second" value="1" summary="this is the second"/>
+ <entry name="third" value="2" since="2" summary="this is the third"/>
+ </enum>
</interface>
</protocol>