Browse Source

Add extra headers exclude argument to generate_qtprotobuf

- Add headers to exclude list to generate_qtprotobuf
- Add missed globalenums header that generated by default
Alexey Edelev 5 years ago
parent
commit
e60be32f7e
4 changed files with 16 additions and 140 deletions
  1. 2 0
      README.md
  2. 3 2
      cmake/QtProtobufCommon.cmake
  3. 10 1
      src/protobuf/QtProtobufGen.cmake.in
  4. 1 137
      tests/test_protobuf/CMakeLists.txt

+ 2 - 0
README.md

@@ -123,6 +123,8 @@ Due to cmake restrictions it's required to specify resulting artifacts manually
 
 *GENERATED_HEADERS* - List of header files expected after generator job finished
 
+*EXCLUDE_HEADERS* - List of header files to be excluded from pre-parsed list of expected header files (e.g. nested messages that are not supported by QtProtobuf generator)
+
 *PROTO_FILES* - List of .proto files that will be used in generation procedure
 
 **Outcome:**

+ 3 - 2
cmake/QtProtobufCommon.cmake

@@ -43,7 +43,7 @@ endfunction(protobuf_generate_all)
 function(add_test_target)
     set(options)
     set(oneValueArgs QML_DIR TARGET)
-    set(multiValueArgs SOURCES GENERATED_HEADERS PROTO_FILES)
+    set(multiValueArgs SOURCES GENERATED_HEADERS EXCLUDE_HEADERS PROTO_FILES)
     cmake_parse_arguments(add_test_target "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 
     ## test sources build
@@ -63,7 +63,8 @@ function(add_test_target)
     generate_qtprotobuf(TARGET ${add_test_target_TARGET}
         OUT_DIR ${GENERATED_SOURCES_DIR}
         PROTO_FILES ${PROTO_FILES}
-        GENERATED_HEADERS ${add_test_target_GENERATED_HEADERS})
+        GENERATED_HEADERS ${add_test_target_GENERATED_HEADERS}
+        EXCLUDE_HEADERS ${add_test_target_EXCLUDE_HEADERS})
 
     add_executable(${add_test_target_TARGET} ${add_test_target_SOURCES})
 

+ 10 - 1
src/protobuf/QtProtobufGen.cmake.in

@@ -1,7 +1,7 @@
 function(generate_qtprotobuf)
     set(options)
     set(oneValueArgs OUT_DIR TARGET)
-    set(multiValueArgs GENERATED_HEADERS PROTO_FILES)
+    set(multiValueArgs GENERATED_HEADERS EXCLUDE_HEADERS PROTO_FILES)
     cmake_parse_arguments(generate_qtprotobuf "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 
     set(QtProtobuf_GENERATED ${generate_qtprotobuf_TARGET}_qtprotobuf_gen PARENT_SCOPE)
@@ -20,12 +20,21 @@ function(generate_qtprotobuf)
         set(GENERATED_HEADERS ${GENERATED_HEADERS} ${GENERATED_HEADERS_PART})
     endforeach()
 
+    #TODO: add globalenums by default. But it's better to verify if proto file contains any global enum
+    set(GENERATED_HEADERS ${GENERATED_HEADERS} globalenums.h)
+
     #message("${PARSER_ERROR} Generated files list: ${GENERATED_HEADERS} ${GENERATED_HEADERS_PART}")
 
     if(DEFINED generate_qtprotobuf_GENERATED_HEADERS)
         set(GENERATED_HEADERS ${generate_qtprotobuf_GENERATED_HEADERS})
     endif()
 
+    foreach(EXCLUDE_HEADER IN LISTS generate_qtprotobuf_EXCLUDE_HEADERS)
+        list(REMOVE_ITEM GENERATED_HEADERS ${EXCLUDE_HEADER})
+    endforeach()
+
+    list(REMOVE_DUPLICATES GENERATED_HEADERS)
+    
     if(NOT DEFINED generate_qtprotobuf_OUT_DIR)
         set(OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
     else()

+ 1 - 137
tests/test_protobuf/CMakeLists.txt

@@ -2,142 +2,6 @@ set(TARGET qtprotobuf_test)
 
 include(${QTPROTOBUF_CMAKE_DIR}/QtProtobufCommon.cmake)
 
-set(GENERATED_HEADERS
-    complexmessage.h
-    externalcomplexmessage.h
-    globalenums.h
-    repeatedbytesmessage.h
-    repeatedcomplexmessage.h
-    repeateddoublemessage.h
-    repeatedexternalcomplexmessage.h
-    repeatedfixedint64message.h
-    repeatedfixedintmessage.h
-    repeatedfloatmessage.h
-    repeatedint64message.h
-    repeatedintmessage.h
-    repeatedsfixedint64message.h
-    repeatedsfixedintmessage.h
-    repeatedsint64message.h
-    repeatedsintmessage.h
-    repeatedstringmessage.h
-    repeateduint64message.h
-    repeateduintmessage.h
-    simpleboolmessage.h
-    simplebytesmessage.h
-    simpledoublemessage.h
-    simpleenumlistmessage.h
-    simpleenummessage.h
-    simpleexternalenummessage.h
-    simpleexternalmessage.h
-    simplefileenummessage.h
-    simplefixed32complexmessagemapmessage.h
-    simplefixed32int32mapmessage.h
-    simplefixed32int64mapmessage.h
-    simplefixed32sint32mapmessage.h
-    simplefixed32sint64mapmessage.h
-    simplefixed32stringmapmessage.h
-    simplefixed32uint32mapmessage.h
-    simplefixed32uint64mapmessage.h
-    simplefixed64complexmessagemapmessage.h
-    simplefixed64int32mapmessage.h
-    simplefixed64int64mapmessage.h
-    simplefixed64sint32mapmessage.h
-    simplefixed64sint64mapmessage.h
-    simplefixed64stringmapmessage.h
-    simplefixed64uint32mapmessage.h
-    simplefixed64uint64mapmessage.h
-    simplefixedint32message.h
-    simplefixedint64message.h
-    simplefloatmessage.h
-    simpleint32complexmessagemapmessage.h
-    simpleint32int32mapmessage.h
-    simpleint32int64mapmessage.h
-    simpleint32sint32mapmessage.h
-    simpleint32sint64mapmessage.h
-    simpleint32stringmapmessage.h
-    simpleint32uint32mapmessage.h
-    simpleint32uint64mapmessage.h
-    simpleint64complexmessagemapmessage.h
-    simpleint64int32mapmessage.h
-    simpleint64int64mapmessage.h
-    simpleint64message.h
-    simpleint64sint32mapmessage.h
-    simpleint64sint64mapmessage.h
-    simpleint64stringmapmessage.h
-    simpleint64uint32mapmessage.h
-    simpleint64uint64mapmessage.h
-    simpleintmessage.h
-    simplesfixed32complexmessagemapmessage.h
-    simplesfixed32int32mapmessage.h
-    simplesfixed32int64mapmessage.h
-    simplesfixed32sint32mapmessage.h
-    simplesfixed32sint64mapmessage.h
-    simplesfixed32stringmapmessage.h
-    simplesfixed32uint32mapmessage.h
-    simplesfixed32uint64mapmessage.h
-    simplesfixed64complexmessagemapmessage.h
-    simplesfixed64int32mapmessage.h
-    simplesfixed64int64mapmessage.h
-    simplesfixed64sint32mapmessage.h
-    simplesfixed64sint64mapmessage.h
-    simplesfixed64stringmapmessage.h
-    simplesfixed64uint32mapmessage.h
-    simplesfixed64uint64mapmessage.h
-    simplesfixedint32message.h
-    simplesfixedint64message.h
-    simplesint32complexmessagemapmessage.h
-    simplesint32int32mapmessage.h
-    simplesint32int64mapmessage.h
-    simplesint32sint32mapmessage.h
-    simplesint32sint64mapmessage.h
-    simplesint32stringmapmessage.h
-    simplesint32uint32mapmessage.h
-    simplesint32uint64mapmessage.h
-    simplesint64complexmessagemapmessage.h
-    simplesint64int32mapmessage.h
-    simplesint64int64mapmessage.h
-    simplesint64message.h
-    simplesint64sint32mapmessage.h
-    simplesint64sint64mapmessage.h
-    simplesint64stringmapmessage.h
-    simplesint64uint32mapmessage.h
-    simplesint64uint64mapmessage.h
-    simplesintmessage.h
-    simplestringcomplexmessagemapmessage.h
-    simplestringint32mapmessage.h
-    simplestringint64mapmessage.h
-    simplestringmessage.h
-    simplestringsint32mapmessage.h
-    simplestringsint64mapmessage.h
-    simplestringstringmapmessage.h
-    simplestringuint32mapmessage.h
-    simplestringuint64mapmessage.h
-    simpleuint32complexmessagemapmessage.h
-    simpleuint32int32mapmessage.h
-    simpleuint32int64mapmessage.h
-    simpleuint32sint32mapmessage.h
-    simpleuint32sint64mapmessage.h
-    simpleuint32stringmapmessage.h
-    simpleuint32uint32mapmessage.h
-    simpleuint32uint64mapmessage.h
-    simpleuint64complexmessagemapmessage.h
-    simpleuint64int32mapmessage.h
-    simpleuint64int64mapmessage.h
-    simpleuint64message.h
-    simpleuint64sint32mapmessage.h
-    simpleuint64sint64mapmessage.h
-    simpleuint64stringmapmessage.h
-    simpleuint64uint32mapmessage.h
-    simpleuint64uint64mapmessage.h
-    simpleuintmessage.h
-    stepchildenummessage.h
-    emptymessage.h
-    fieldindextest1message.h
-    fieldindextest2message.h
-    fieldindextest3message.h
-    fieldindextest4message.h
-)
-
 file(GLOB SOURCES
     simpletest.cpp
     serializationtest.cpp
@@ -147,7 +11,7 @@ file(GLOB SOURCES
     jsonserializationtest.cpp)
 
 add_test_target(TARGET ${TARGET}
-    GENERATED_HEADERS ${GENERATED_HEADERS}
+    EXCLUDE_HEADERS nestedsimpleintmessage.h
     SOURCES ${SOURCES})
 add_target_windeployqt(TARGET ${TARGET}
     QML_DIR ${CMAKE_CURRENT_SOURCE_DIR})