Avoid using improper default-constuctable enum class, use the
exising API for the tag definition instead.
Pick-to: 6.10
Change-Id: Id75cb7e06a54139116595c60ec09f3810313f26b
Reviewed-by: Dennis Oberst <dennis.oberst@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
The prefix was wrongly added to the parent directory but not to the
actual file name.
Amends d4e8ef8942
Fixes: QTBUG-137313
Pick-to: 6.8 6.9 6.10
Change-Id: I1e907e7be26048174899855efc6a9ed661a1e4d0
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
[ChangeLog][Third-Party Code] Added PURL and CPE information to the
attribution files of 3rd party sources.
Pick-to: 6.5 6.8 6.9 6.10
Fixes: QTBUG-137264
Task-number: QTBUG-129602
Change-Id: Ied50c009c8208ab576e5432586c99cb0e8ba84b4
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
The earliest we can move this is right after `BuildInternals`. This
allows us to add function calls before navigating the `find_package`
tree of the dependents.
Task-number: QTBUG-135233
Change-Id: I6a875982fa6d8b15dcfacfda5e4d5976d02798d6
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Since 6.10, QDoc is capable of generating links to the declaration in
the source code for each documented C++ API entity in their `Detailed
description`.
Add the required configuration to enable this feature for modules in
qtgrpc.
Change-Id: I09020881035bde71470ccb8c77d7905321f56251
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Instead of storing the build-time path to the well-known types
protobuf includes, calculate them when configuring user projects.
New approach expects that all well-known type schemas that the
ProtobufWellKnownTypes module used at build time are present when
configuring user projects. The include paths then calculated and
stored in the QT_PROTOBUF_INCLUDES property of the
ProtobufWellKnownTypes module.
The property usage remains unchanged.
Pick-to: 6.9 6.8
Fixes: QTBUG-130113
Change-Id: I31a607404f85f2a325c63e0f28d2ab2a0f4ea25f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Add the TYPES argument to the qt_internal_add_protobuf_wellknown_types
command instead of using ARGN. It's safer and more scalable approach.
Pick-to: 6.8 6.9
Change-Id: I75ac5df740b614433b74e8b70729211f49e0a308
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Dennis Oberst <dennis.oberst@qt.io>
Iterate the _<Module>_proto_external_include_dir variable in
<Module>ProtobufProperties.cmake and add the existing paths to
the QT_PROTO_INCLUDES property. This allow specifying extra paths
in <Module>Config.cmake.
If the respecive paths are not found or are not absolute, the
respective warning is raised.
Setting QT_NO_WARN_PROTOBUF_BROKEN_INCLUDES to ON suppresses the
warning.
Pick-to: 6.8 6.9
Change-Id: I4b6971e84f35b2986d187fb5d1766ed0cf3390f5
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
The existing benchmarks were not optimal: bidirectional streaming wasn’t
fully asynchronous, limiting channel performance. Introduce a
`BenchmarkData` type to collect detailed metrics and print richer
results at the end. Also add latency measurements for unary READ and
WRITE operations.
As a drive-by add cxx20 checks in cmake.
Pick-to: 6.9 6.8
Change-Id: I56d61e4712b7fe9e5b8b52a14f84b0583094e373
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Currently we only provide `setMetadata(~)` as a way for users to
supply their metadata. However, certain code paths would benefit from
having an `add` functionality as well, without requiring the user to
create a temporary object.
[ChangeLog][GRPC][QGrpc*Options] Added support for incrementally adding
metadata via `addMetadata()`.
Change-Id: Ibc5d721850745df5f171b9126b595ca9c6b0c319
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Even though gRPC provides some leeway, as "Access to metadata is
language dependent", we have yet to see an implementation which doesn't
support multiple values per key.
Common implementations like grpc-c++, grpc-go or grpc-java provide this
and we should do it aswell.
Ref: https://grpc.io/docs/what-is-grpc/core-concepts/#metadata
Ref: https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md#constructing-metadata
Use a base class to implement common functionality for the options
classes. Also use a new common class in the tests.
The QMultiHash overload is selected when the 'QtGrpc::MultiValue'
argument is used in 'metadata' calls. We update the documentation
accordingly.
Deprecation is scheduled for Qt 6.13
Users with a custom Qt build - those who care - should be rewarded with
minimal traces of this "accident" and should not suffer from potential
performance/storage overhead. Therefore we deprecate QtGrpc::MultiValue
for those builds, effectively providing Qt 7 behavior.
[ChangeLog][Deprecation Notice]
Deprecate the metadata()/setMetadata() methods on QGrpcCallOptions and
QGrpcChannelOptions that use QHash in favor of the new overloads that
use QMultiHash. This is more in line with the gRPC specification.
Fixes: QTBUG-136471
Change-Id: I58d14d2c304c06de269c99ba5383beee86d12f77
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
It was missing for the grpc reference client. It's used in both clients
so simply add it to the shared header
Pick-to: 6.8 6.9
Change-Id: I568aa92f50c7b4c7a94d0226a7d4e4672863fac8
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed and marked all security critical files in the qtgrpc/src
directory.
More information: https://contribute.qt-project.org/quips/23
Fixes: QTBUG-135455
Change-Id: Iad313dfe4b5b168d56954e58ab30e0e411ab6de5
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
The scope is mandatory there, since we read the containing class
name from it. Assert if the scope is nullptr.
Coverity-Id: 479426
Pick-to: 6.8 6.9
Change-Id: Iad3acba25083fde89b70b9c6dcacd4e2cafc3cae
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
The functionality is desirable by some users, we re-enable it.
New API addresses the core issue that is partially related to
QTBUG-119912, but has wider concequences in blind use in user
projects. We add the 'mut' prefix to all mutable getters to make
the mutable access explicit. Overload approach leads to unwanted
detaches not only whe is used be moc-generated code, but also
in user projects if developers do not pay enough attention to
const modifiers of their variables/references. We declined to
restore it, dispite it was the better looking API, in favor to
the code safety.
This also reveals the code clashing scenario, when the overload
might happen if the message has both 'a' and 'mutA' fields in
its definition. This scenario is kindly forbidden by our generator,
and sanitized at very early stages. We expect that it won't happen
in user projects, but even if it will, the solution is to rename
the field when generating Qt code. The serialization/deserialization
do not depend on field naming directly. json_name attribute also
will help to workaround this.
The undocumented ALLOW_MUTABLE_GETTER_CONFLICTS option allows clashing
the mutable getter names, but its usage currently limited by our
internal code only. The reason unfixed QTBUG-119912 issue in moc.
Once the issue is fixed, the moc version check should get the proper
version, but not '99' as for now and the ALLOW_MUTABLE_GETTER_CONFLICTS
will become public.
Another design solution is the use of overloaded functions that
return pointers, like it's done it the reference protobuf. But this
kind of API leaves the pointer ownership undefined and decided to
not be used.
[ChangeLog][Protobuf] The generated messages now have the mutable
getters for the fiels of the message type. The getters have 'mut'
prefix and implicily allocate the respective fields if needed, so the
use of intermediate message objects is not required.
Task-number: QTBUG-119913
Change-Id: I09b9ee37e1fbbe37b9c3cb501e92442da8ad3e4b
Reviewed-by: Dennis Oberst <dennis.oberst@qt.io>
This is not a library. The tool should not recover here. Print the error
and exit the program.
Coverity-Id: 479436
Pick-to: 6.9 6.8
Change-Id: I97c24b325a037e19de17af9b246ba2bb2be76d78
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Restructure the limits check to be more compact by separating the
invariant from the variant. The latter is extracted into a constexpr
lambda check.
Fix the overflow by checking the ok flag and return a default
initialized T.
Coverity-Id: 479421
Change-Id: Ia50fcba5de1335c2a26478d10f89b2d9c5696c4b
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This is the only logical solution for this code...
As a drive-by make asciiSpacing constexpr and adjust capitalization.
Change-Id: I2cda5006a9eec94b80701d71e5c4000c3c852bf3
Pick-to: 6.9 6.8
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
When the string is entirely whitespace all characters except one gets
erased. Rather use size() to denote the end of the string.
Change-Id: I80bf92319d4725b9400e0f67e968e3cb8c27dd86
Pick-to: 6.9 6.8
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Coverity noticed inefficiencies of unneeded copies. Fix this by using
std::filesystem for these operations.
Coverity-Id: 479416
Pick-to: 6.9 6.8
Change-Id: I44666f4ca791763c13152c4861e78a122b8cfc50
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Coverity rightfully complained about dead code in the char_data
method, as ... % alignof(char) will never be non zero.
Fix this by removing the superfluous check.
As a drive-by remove unused parameters - they can be added if needed.
Coverity-Id: 479414
Pick-to: 6.9 6.8
Change-Id: Ie3f2b14cbf3e18c76deae491c099ccf7ec8b7716
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
The newer protobuf version uses string_views as the return value.
Wrap the respecitive API with constructing std::string and update
some of the util functions to accept std::string_view arguments
but not plain std::string.
Fixes: QTBUG-134885
Pick-to: 6.8 6.9
Change-Id: I8bc06c46167a8b1bc0dca36242249e672ffcccd3
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
Reviewed-by: Dennis Oberst <dennis.oberst@qt.io>