On Mon, Jun 20, 2016 at 05:06:25PM +0200, Christophe Fergeau wrote: > This commit adds autogeneration of a generated_client_marshallers.h > header, which is then included in client_marshallers.h > > This allows to remove the SpiceMessageMarshallers struct from this file, > which has to match what the generated code expects. > --- > common/Makefile.am | 6 +++++- > common/client_marshallers.h | 46 +-------------------------------------------- > python_modules/marshal.py | 27 +++++++++++++++++++++++++- > 3 files changed, 32 insertions(+), 47 deletions(-) > > diff --git a/common/Makefile.am b/common/Makefile.am > index 2dd56f3..4b8f63a 100644 > --- a/common/Makefile.am > +++ b/common/Makefile.am > @@ -5,6 +5,7 @@ CLIENT_MARSHALLERS = \ > generated_client_demarshallers.c \ > generated_client_demarshallers1.c \ > generated_client_marshallers.c \ > + generated_client_marshallers.h \ > generated_client_marshallers1.c \ > $(NULL) > > @@ -107,8 +108,11 @@ generated_client_demarshallers.c: $(top_srcdir)/spice.proto $(MARSHALLERS_DEPS) > generated_client_demarshallers1.c: $(top_srcdir)/spice1.proto $(MARSHALLERS_DEPS) > $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-demarshallers --client --include common/messages.h --prefix 1 --ptrsize 8 $< $@ >/dev/null > > +generated_client_marshallers.h: $(top_srcdir)/spice.proto $(MARSHALLERS_DEPS) > + $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-marshallers -P --client --include common/messages.h -H $< $@ >/dev/null > + > generated_client_marshallers.c: $(top_srcdir)/spice.proto $(MARSHALLERS_DEPS) > - $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-marshallers -P --include common/messages.h --include client_marshallers.h --client $< $@ >/dev/null > + $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-marshallers -P --include client_marshallers.h --client $< $@ >/dev/null > > generated_client_marshallers1.c: $(top_srcdir)/spice1.proto $(MARSHALLERS_DEPS) > $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-marshallers -P --include common/messages.h --include client_marshallers.h --client --prefix 1 --ptrsize 8 $< $@ >/dev/null > diff --git a/common/client_marshallers.h b/common/client_marshallers.h > index 2074323..d3e26b4 100644 > --- a/common/client_marshallers.h > +++ b/common/client_marshallers.h > @@ -25,56 +25,12 @@ > > #include <spice/protocol.h> > > +#include "generated_client_marshallers.h" > #include "marshaller.h" > #include "messages.h" > > SPICE_BEGIN_DECLS > > -typedef struct { > - void (*msg_SpiceMsgEmpty)(SpiceMarshaller *m, SpiceMsgEmpty *msg); > - void (*msg_SpiceMsgData)(SpiceMarshaller *m, SpiceMsgData *msg); > - void (*msg_SpiceMsgCompressedData)(SpiceMarshaller *m, SpiceMsgCompressedData *msg); > - void (*msgc_ack_sync)(SpiceMarshaller *m, SpiceMsgcAckSync *msg); > - void (*msgc_pong)(SpiceMarshaller *m, SpiceMsgPing *msg); > - void (*msgc_disconnecting)(SpiceMarshaller *m, SpiceMsgDisconnect *msg); > - void (*msgc_main_client_info)(SpiceMarshaller *m, SpiceMsgcClientInfo *msg); > - void (*msgc_main_mouse_mode_request)(SpiceMarshaller *m, SpiceMsgcMainMouseModeRequest *msg); > - void (*msgc_main_agent_start)(SpiceMarshaller *m, SpiceMsgcMainAgentStart *msg); > - void (*msgc_main_agent_token)(SpiceMarshaller *m, SpiceMsgcMainAgentTokens *msg); > - void (*msgc_main_migrate_dst_do_seamless)(SpiceMarshaller *m, SpiceMsgcMainMigrateDstDoSeamless *msg); > - void (*msgc_display_init)(SpiceMarshaller *m, SpiceMsgcDisplayInit *msg); > - void (*msgc_display_stream_report)(SpiceMarshaller *m, SpiceMsgcDisplayStreamReport *msg); > - void (*msgc_display_gl_draw_done)(SpiceMarshaller *m, SpiceMsgcDisplayGlDrawDone *msg); > - void (*msgc_inputs_key_down)(SpiceMarshaller *m, SpiceMsgcKeyDown *msg); > - void (*msgc_inputs_key_up)(SpiceMarshaller *m, SpiceMsgcKeyUp *msg); > - void (*msgc_inputs_key_modifiers)(SpiceMarshaller *m, SpiceMsgcKeyModifiers *msg); > - void (*msgc_inputs_mouse_motion)(SpiceMarshaller *m, SpiceMsgcMouseMotion *msg); > - void (*msgc_inputs_mouse_position)(SpiceMarshaller *m, SpiceMsgcMousePosition *msg); > - void (*msgc_inputs_mouse_press)(SpiceMarshaller *m, SpiceMsgcMousePress *msg); > - void (*msgc_inputs_mouse_release)(SpiceMarshaller *m, SpiceMsgcMouseRelease *msg); > - void (*msgc_record_data)(SpiceMarshaller *m, SpiceMsgcRecordPacket *msg); > - void (*msgc_record_mode)(SpiceMarshaller *m, SpiceMsgcRecordMode *msg); > - void (*msgc_record_start_mark)(SpiceMarshaller *m, SpiceMsgcRecordStartMark *msg); > - void (*msgc_tunnel_service_add)(SpiceMarshaller *m, SpiceMsgcTunnelAddGenericService *msg, SpiceMarshaller **name_out, SpiceMarshaller **description_out); > - void (*msgc_tunnel_service_remove)(SpiceMarshaller *m, SpiceMsgcTunnelRemoveService *msg); > - void (*msgc_tunnel_socket_open_ack)(SpiceMarshaller *m, SpiceMsgcTunnelSocketOpenAck *msg); > - void (*msgc_tunnel_socket_open_nack)(SpiceMarshaller *m, SpiceMsgcTunnelSocketOpenNack *msg); > - void (*msgc_tunnel_socket_fin)(SpiceMarshaller *m, SpiceMsgcTunnelSocketFin *msg); > - void (*msgc_tunnel_socket_closed)(SpiceMarshaller *m, SpiceMsgcTunnelSocketClosed *msg); > - void (*msgc_tunnel_socket_closed_ack)(SpiceMarshaller *m, SpiceMsgcTunnelSocketClosedAck *msg); > - void (*msgc_tunnel_socket_data)(SpiceMarshaller *m, SpiceMsgcTunnelSocketData *msg); > - void (*msgc_tunnel_socket_token)(SpiceMarshaller *m, SpiceMsgcTunnelSocketTokens *msg); > -#ifdef USE_SMARTCARD > - void (*msgc_smartcard_atr)(SpiceMarshaller *m, VSCMsgATR *msg); > - void (*msgc_smartcard_error)(SpiceMarshaller *m, VSCMsgError *msg); > - void (*msgc_smartcard_header)(SpiceMarshaller *m, VSCMsgHeader *msg); > - void (*msgc_smartcard_data)(SpiceMarshaller *m, SpiceMsgcSmartcard *msg, SpiceMarshaller **reader_name_out); > - void (*msgc_smartcard_reader_add)(SpiceMarshaller *m, VSCMsgReaderAdd *msg); > -#endif > - void (*msgc_port_event)(SpiceMarshaller *m, SpiceMsgcPortEvent *msg); > - void (*msgc_display_preferred_compression)(SpiceMarshaller *m, SpiceMsgcDisplayPreferredCompression *msg); > -} SpiceMessageMarshallers; > - > SpiceMessageMarshallers *spice_message_marshallers_get(void); > SpiceMessageMarshallers *spice_message_marshallers_get1(void); > > diff --git a/python_modules/marshal.py b/python_modules/marshal.py > index cc6cbdf..cd4b4fa 100644 > --- a/python_modules/marshal.py > +++ b/python_modules/marshal.py > @@ -336,6 +336,7 @@ def write_container_marshaller(writer, container, src): > def write_message_marshaller(writer, message, private): > if message.has_attr("ifdef"): > writer.ifdef(message.attributes["ifdef"][0]) > + writer.header.ifdef(message.attributes["ifdef"][0]) > writer.out_prefix = "" > function_name = "spice_marshall_" + message.c_name() > if writer.is_generated("marshaller", function_name): > @@ -348,7 +349,15 @@ def write_message_marshaller(writer, message, private): > n = [", SpiceMarshaller **%s_out" % name for name in names] > names_args = "".join(n) > > - if not private: > + if private: > + message_name = message.c_name() > + if (not message_name.startswith("msgc_")): > + #small bug above, checks for startswith("msg") which > + #matches "msgc" and appends "msg_" if this fails causing > + #inconsistencies > + message_name = "msg_" + message_name > + writer.header.writeln("void (*" + message_name + ")(SpiceMarshaller *m, %s *msg" % message.c_type() + names_args + ");") > + else: > writer.header.writeln("void " + function_name + "(SpiceMarshaller *m, %s *msg" % message.c_type() + names_args + ");") > > scope = writer.function(function_name, > @@ -369,11 +378,18 @@ def write_message_marshaller(writer, message, private): > writer.end_block() > if message.has_attr("ifdef"): > writer.endif(message.attributes["ifdef"][0]) > + writer.header.endif(message.attributes["ifdef"][0]) > + > writer.newline() > return function_name > > def write_protocol_marshaller(writer, proto, is_server, private_marshallers): > functions = {} > + writer.header.newline() > + writer.header.writeln("SPICE_BEGIN_DECLS") > + writer.header.newline() This is better in write_includes() imo > @@ -416,5 +438,8 @@ def write_protocol_marshaller(writer, proto, is_server, private_marshallers): > writer.end_block() > writer.newline() > > + writer.header.writeln("SPICE_END_DECLS") > + writer.header.newline() > + and this in write_trailer() otherwise we get an odd generated_server_marshallers.h file with declaration after SPICE_END_DECLS. Squashing this in: diff --git a/python_modules/marshal.py b/python_modules/marshal.py index cd4b4fa..6597edf 100644 --- a/python_modules/marshal.py +++ b/python_modules/marshal.py @@ -8,6 +8,9 @@ def write_includes(writer): writer.header.newline() writer.header.writeln("#ifndef _GENERATED_HEADERS_H") writer.header.writeln("#define _GENERATED_HEADERS_H") + writer.header.newline() + writer.header.writeln("SPICE_BEGIN_DECLS") + writer.header.newline() writer.writeln("#include <string.h>") writer.writeln("#include <assert.h>") @@ -385,9 +388,6 @@ def write_message_marshaller(writer, message, private): def write_protocol_marshaller(writer, proto, is_server, private_marshallers): functions = {} - writer.header.newline() - writer.header.writeln("SPICE_BEGIN_DECLS") - writer.header.newline() if private_marshallers: writer.header.begin_block("typedef struct") for c in proto.channels: @@ -438,8 +438,9 @@ def write_protocol_marshaller(writer, proto, is_server, private_marshallers): writer.end_block() writer.newline() - writer.header.writeln("SPICE_END_DECLS") - writer.header.newline() - def write_trailer(writer): + writer.header.newline() + writer.header.writeln("SPICE_END_DECLS") + writer.header.newline() + writer.header.writeln("#endif") Christophe > def write_trailer(writer): > writer.header.writeln("#endif") > -- > 2.7.4 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel