diff options
author | Kai Dohmen <psykai1993@googlemail.com> | 2020-12-02 21:30:44 +0100 |
---|---|---|
committer | Kai Dohmen <psykai1993@googlemail.com> | 2020-12-03 14:32:03 +0000 |
commit | 04810c92fce18d82648140e0670194bbf1e72a6f (patch) | |
tree | 01b9349fba4e6483a4f524b1eedeb5fff8bf0daa | |
parent | c21932163779bcfe4577ac2e3326b8c113884829 (diff) | |
download | qbs-04810c92fce18d82648140e0670194bbf1e72a6f.tar.gz |
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>
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"; |