Browse Source

Fix windows build

- Make separate command to define environment variable for windows
  generation
Alexey Edelev 5 years ago
parent
commit
ad6e821bf6

+ 5 - 2
src/generator/generatoroptions.cpp

@@ -44,9 +44,12 @@ void GeneratorOptions::parseFromEnv(const std::string &options)
     std::vector<std::string> optionsList;
     utils::split(options, optionsList, ':');
     for (auto option : optionsList) {
-        if(option == MultifileBuildOption) {
+        QT_PROTOBUF_DEBUG("option: " << option);
+        if(option.compare(MultifileBuildOption) == 0) {
+            QT_PROTOBUF_DEBUG("set mIsMulti: true");
             mIsMulti = true;
-        } else if (option == QmlPluginOption) {
+        } else if (option.compare(QmlPluginOption) == 0) {
+            QT_PROTOBUF_DEBUG("set mHasQml: true");
             mHasQml = true;
         }
     }

+ 6 - 1
src/generator/main.cpp

@@ -28,11 +28,16 @@
 #include "generator.h"
 #include "singlefilegenerator.h"
 #include "generatoroptions.h"
+#include "utils.h"
 
 using namespace ::QtProtobuf::generator;
 int main(int argc, char *argv[])
 {
-    GeneratorOptions::instance().parseFromEnv(getenv("QT_PROTOBUF_OPTIONS"));
+    char *optionsPtr = getenv("QT_PROTOBUF_OPTIONS");
+    if (optionsPtr != nullptr) {
+        QT_PROTOBUF_DEBUG("QT_PROTOBUF_OPTIONS: " << optionsPtr);
+        GeneratorOptions::instance().parseFromEnv(optionsPtr);
+    }
     if (GeneratorOptions::instance().isMulti()) {
         std::cerr << "Run multi generator" << std::endl;
         QtProtobuf::generator::QtGenerator generator;

+ 9 - 0
src/generator/utils.h

@@ -32,6 +32,12 @@
 #include <list>
 #include <algorithm>
 
+#ifdef QT_PROTOBUF_DEBUG_GENERATOR
+#define QT_PROTOBUF_DEBUG(X) std::cout << X << std::endl
+#else
+#define QT_PROTOBUF_DEBUG(X)
+#endif
+
 namespace google { namespace protobuf {
 class FileDescriptor;
 }}
@@ -43,6 +49,9 @@ public:
 static void split(const std::string &str, std::vector<std::string> &container, char delim)
 {
     container.clear();
+    if (str.size() <= 0) {
+        return;
+    }
     std::stringstream stream(str);
     std::string token;
     while (std::getline(stream, token, delim)) {

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

@@ -63,9 +63,14 @@ function(generate_qtprotobuf)
         set_property(SOURCE ${OUT_DIR}/${GENERATED_BASENAME}.cpp PROPERTY SKIP_AUTOMOC ON)
     endforeach()
 
+    if(WIN32)
+        set(PROTOC_COMMAND set QT_PROTOBUF_OPTIONS=${GENERATION_OPTIONS}&& $<TARGET_FILE:protobuf::protoc>)
+    else()
+        set(PROTOC_COMMAND "QT_PROTOBUF_OPTIONS=${GENERATION_OPTIONS}" $<TARGET_FILE:protobuf::protoc>)
+    endif()
     add_custom_command(
             OUTPUT ${QTPROTOBUF_GENERATED_SOURCES} ${QTPROTOBUF_GENERATED_HEADERS}
-            COMMAND "QT_PROTOBUF_OPTIONS=${GENERATION_OPTIONS}" $<TARGET_FILE:protobuf::protoc>
+            COMMAND ${PROTOC_COMMAND}
                 --plugin=protoc-gen-@GENERATOR_TARGET@=${QTPROTOBUF_EXECUTABLE}
                 --@GENERATOR_TARGET@_out=${OUT_DIR}
                 ${PROTO_INCLUDES}