summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2023-05-03 12:18:07 +0200
committerSimon Ser <contact@emersion.fr>2024-03-28 13:21:28 +0000
commitfbd7460737c9cbae943bbc5d68a0fc6ca753c4d8 (patch)
tree36a940d6ec4f3c14eb4b137ca099fb8b28a12a04
parent2621484037869c917621b9f961310f13c09fcc00 (diff)
scanner: add new enum-header mode
This generates a header with only enum definitions. This is useful to share enum headers between libraries and library users. Signed-off-by: Simon Ser <contact@emersion.fr>
-rw-r--r--src/scanner.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/scanner.c b/src/scanner.c
index c512d23..3257cb6 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -67,7 +67,7 @@ enum visibility {
static int
usage(int ret)
{
- fprintf(stderr, "usage: %s [OPTION] [client-header|server-header|private-code|public-code]"
+ fprintf(stderr, "usage: %s [OPTION] [client-header|server-header|enum-header|private-code|public-code]"
" [input_file output_file]\n", PROGRAM_NAME);
fprintf(stderr, "\n");
fprintf(stderr, "Converts XML protocol descriptions supplied on "
@@ -1704,6 +1704,35 @@ emit_header(struct protocol *protocol, enum side side)
}
static void
+emit_enum_header(struct protocol *protocol)
+{
+ struct interface *i, *i_next;
+
+ printf("/* Generated by %s %s */\n\n", PROGRAM_NAME, WAYLAND_VERSION);
+
+ printf("#ifndef %s_ENUM_PROTOCOL_H\n"
+ "#define %s_ENUM_PROTOCOL_H\n"
+ "\n"
+ "#ifdef __cplusplus\n"
+ "extern \"C\" {\n"
+ "#endif\n\n",
+ protocol->uppercase_name,
+ protocol->uppercase_name);
+
+ wl_list_for_each_safe(i, i_next, &protocol->interface_list, link) {
+ emit_enumerations(i);
+
+ free_interface(i);
+ }
+
+ printf("#ifdef __cplusplus\n"
+ "}\n"
+ "#endif\n"
+ "\n"
+ "#endif\n");
+}
+
+static void
emit_null_run(struct protocol *protocol)
{
int i;
@@ -1923,6 +1952,7 @@ int main(int argc, char *argv[])
enum {
CLIENT_HEADER,
SERVER_HEADER,
+ ENUM_HEADER,
PRIVATE_CODE,
PUBLIC_CODE,
CODE,
@@ -1976,6 +2006,8 @@ int main(int argc, char *argv[])
mode = CLIENT_HEADER;
else if (strcmp(argv[0], "server-header") == 0)
mode = SERVER_HEADER;
+ else if (strcmp(argv[0], "enum-header") == 0)
+ mode = ENUM_HEADER;
else if (strcmp(argv[0], "private-code") == 0)
mode = PRIVATE_CODE;
else if (strcmp(argv[0], "public-code") == 0)
@@ -2067,6 +2099,9 @@ int main(int argc, char *argv[])
case SERVER_HEADER:
emit_header(&protocol, SERVER);
break;
+ case ENUM_HEADER:
+ emit_enum_header(&protocol);
+ break;
case PRIVATE_CODE:
emit_code(&protocol, PRIVATE);
break;