diff options
author | Simon Ser <contact@emersion.fr> | 2023-05-03 12:18:07 +0200 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2024-03-28 13:21:28 +0000 |
commit | fbd7460737c9cbae943bbc5d68a0fc6ca753c4d8 (patch) | |
tree | 36a940d6ec4f3c14eb4b137ca099fb8b28a12a04 | |
parent | 2621484037869c917621b9f961310f13c09fcc00 (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.c | 37 |
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; |