aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKai Dohmen <psykai1993@googlemail.com>2020-12-02 21:30:44 +0100
committerKai Dohmen <psykai1993@googlemail.com>2020-12-03 14:32:03 +0000
commit04810c92fce18d82648140e0670194bbf1e72a6f (patch)
tree01b9349fba4e6483a4f524b1eedeb5fff8bf0daa
parentc21932163779bcfe4577ac2e3326b8c113884829 (diff)
Pass import paths as nanopb_opt to support `.options` files
To make use of nanopb specific options defined in a separate `.options` file pass import paths to nanopb generator script. This is needed because protoc doesn’t currently pass include path into plugins. Therefore if your .proto is in a subdirectory, nanopb may have trouble finding the associated .options file. Change-Id: I28eb2e9c2f353df88aa1a1e772dfb57a36800434 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r--share/qbs/modules/protobuf/nanopb/nanopb.qbs6
-rw-r--r--share/qbs/modules/protobuf/protobuf.js6
-rw-r--r--tests/auto/blackbox/testdata/protobuf/addressbook_nanopb.options3
-rw-r--r--tests/auto/blackbox/testdata/protobuf/addressbook_nanopb.qbs2
-rw-r--r--tests/auto/blackbox/testdata/protobuf/main_nanopb.cpp4
5 files changed, 19 insertions, 2 deletions
diff --git a/share/qbs/modules/protobuf/nanopb/nanopb.qbs b/share/qbs/modules/protobuf/nanopb/nanopb.qbs
index fdf95e2fd..02754b8c4 100644
--- a/share/qbs/modules/protobuf/nanopb/nanopb.qbs
+++ b/share/qbs/modules/protobuf/nanopb/nanopb.qbs
@@ -44,9 +44,13 @@ ProtobufBase {
}
prepare: {
+ var options = input.protobuf.nanopb.importPaths.map(function (path) {
+ return "-I" + path;
+ })
+
var result = HelperFunctions.doPrepare(
input.protobuf.nanopb, product, input, outputs, "nanopb",
- input.protobuf.nanopb._plugin);
+ input.protobuf.nanopb._plugin, options);
return result;
}
}
diff --git a/share/qbs/modules/protobuf/protobuf.js b/share/qbs/modules/protobuf/protobuf.js
index 0fd89856b..999da6988 100644
--- a/share/qbs/modules/protobuf/protobuf.js
+++ b/share/qbs/modules/protobuf/protobuf.js
@@ -92,7 +92,7 @@ function objcArtifact(outputDir, input, tags, suffix) {
}
}
-function doPrepare(module, product, input, outputs, generator, plugin)
+function doPrepare(module, product, input, outputs, generator, plugin, generatorOptions)
{
var outputDir = module.outputDir;
var args = [];
@@ -101,6 +101,10 @@ function doPrepare(module, product, input, outputs, generator, plugin)
args.push("--plugin=" + plugin)
args.push("--" + generator + "_out", outputDir);
+ if (!!generatorOptions) {
+ for (var i = 0; i < generatorOptions.length; ++i)
+ args.push("--" + generator + "_opt=" + generatorOptions[i])
+ }
var importPaths = module.importPaths;
if (importPaths.length === 0)
diff --git a/tests/auto/blackbox/testdata/protobuf/addressbook_nanopb.options b/tests/auto/blackbox/testdata/protobuf/addressbook_nanopb.options
new file mode 100644
index 000000000..60726de93
--- /dev/null
+++ b/tests/auto/blackbox/testdata/protobuf/addressbook_nanopb.options
@@ -0,0 +1,3 @@
+tutorial.Person.name max_size:128
+tutorial.Person.email max_size:256
+tutorial.Person.phones max_count:16
diff --git a/tests/auto/blackbox/testdata/protobuf/addressbook_nanopb.qbs b/tests/auto/blackbox/testdata/protobuf/addressbook_nanopb.qbs
index c5bc6d2e3..9640bb888 100644
--- a/tests/auto/blackbox/testdata/protobuf/addressbook_nanopb.qbs
+++ b/tests/auto/blackbox/testdata/protobuf/addressbook_nanopb.qbs
@@ -19,9 +19,11 @@ CppApplication {
console.info("has protobuf: " + protobuf.nanopb.present);
return protobuf.nanopb.present;
}
+ protobuf.nanopb.importPaths: product.sourceDirectory
files: [
"addressbook_nanopb.proto",
+ "addressbook_nanopb.options",
"main_nanopb.cpp",
]
}
diff --git a/tests/auto/blackbox/testdata/protobuf/main_nanopb.cpp b/tests/auto/blackbox/testdata/protobuf/main_nanopb.cpp
index d6fa0c73d..76fa03fca 100644
--- a/tests/auto/blackbox/testdata/protobuf/main_nanopb.cpp
+++ b/tests/auto/blackbox/testdata/protobuf/main_nanopb.cpp
@@ -34,6 +34,10 @@
#include "addressbook_nanopb.pb.h"
+static_assert(std::is_array<decltype(std::declval<tutorial_Person>().name)>::value, "");
+static_assert(std::is_array<decltype(std::declval<tutorial_Person>().email)>::value, "");
+static_assert(std::is_array<decltype(std::declval<tutorial_Person>().phones)>::value, "");
+
bool writeString(pb_ostream_t *stream, const pb_field_t *field, void *const *)
{
constexpr auto str = "0123456789";