
On Thu, Mar 09, 2023 at 03:25:38PM +0100, Ján Tomko wrote:
On a Wednesday in 2023, Daniel P. Berrangé wrote:
The new program takes the form
rpcgen [--mode source|header|repr] \ [--header include] \ xdr-file output-file
If '--mode' is not given it parses the XDR file but does not generate anything, which is useful as a syntax check. The 'source' mode gives the '.c' file content, while 'header' gives the '.h' file content. 'repr' gives a representation of the abstract syntax tree, mostly useful for debugging the parser.
If '--header' is given, it is added as a local #include ".." statement in the output and is valid for either 'header' or 'source' modes.
Either 'xdr-file' or 'output-file' can be omitted in which case they default to stdin/stdout respectively.
This rpcgen program will directly include the 'config.h' header in its output.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- scripts/rpcgen/main.py | 86 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100755 scripts/rpcgen/main.py
diff --git a/scripts/rpcgen/main.py b/scripts/rpcgen/main.py new file mode 100755 index 0000000000..bf4ef38ede --- /dev/null +++ b/scripts/rpcgen/main.py @@ -0,0 +1,86 @@ +#!/usr/bin/python
#!/usr/bin/env python
+ + if args.mode == "header": + print("/* This file is auto-generated from %s */\n" % args.input, file=outfp) + print("#include <rpc/rpc.h>", file=outfp) + for h in args.header: + print('#include "%s"' % h, file=outfp) + print("", file=outfp) + print("#pragma once\n", file=outfp) + generator = XDRTypeDeclarationGenerator(spec) + print(generator.visit(), file=outfp) + generator = XDRMarshallDeclarationGenerator(spec) + print(generator.visit(), file=outfp) + elif args.mode == "source": + print("/* This file is auto-generated from %s */\n" % args.input, file=outfp) + print("#include <config.h>", file=outfp)
+ if args.input.endswith(".x"): + print('#include "%s.h"' % args.input[:-2], file=outfp)
The .x file is in the source dir, while the .h file is in the build dir.
Unless I remove the two lines above, I'm getting an error:
src/remote/lxc_protocol.c:4:10: fatal error: '../../git/libvirt/src/remote/lxc_protocol.h' file not found #include "../../git/libvirt/src/remote/lxc_protocol.h" ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
And thanks to the --header option, there already is an include of lxc_protocol.h in the file:
#include <config.h> #include "../../git/libvirt/src/remote/lxc_protocol.h" #include "lxc_protocol.h"
If I use a builddir under libvirt.git, it somehow works:
#include <config.h> #include "../src/remote/lxc_protocol.h" #include "lxc_protocol.h"
Yes, that's what I used. Wierd. Anyway, as you say, it is redundant and I meant to remove it because it is saner to just pass the --header arg. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|