From 18bb2ba5e13d06f8ec294e19bc14878ca710d72b Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Wed, 19 Mar 2025 11:32:58 +0100 Subject: [PATCH] Allow specifying extra protobuf include directories for protobuf modules Iterate the __proto_external_include_dir variable in ProtobufProperties.cmake and add the existing paths to the QT_PROTO_INCLUDES property. This allow specifying extra paths in 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 --- src/protobuf/QtProtobufProperties.cmake.in | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/protobuf/QtProtobufProperties.cmake.in b/src/protobuf/QtProtobufProperties.cmake.in index 8fcd48e7..a51f0466 100644 --- a/src/protobuf/QtProtobufProperties.cmake.in +++ b/src/protobuf/QtProtobufProperties.cmake.in @@ -11,5 +11,28 @@ if(NOT QT_NO_CREATE_TARGETS) QT_PROTO_INCLUDES "${CMAKE_STAGING_PREFIX}/${proto_include_dir}") endif() endforeach() + + foreach(proto_include_dir IN LISTS _@target@_proto_external_include_dirs) + if(NOT IS_ABSOLUTE "${proto_include_dir}") + if(NOT QT_NO_WARN_PROTOBUF_BROKEN_INCLUDES) + message(WRANING "The protobuf include directory ${proto_include_dir} must be an" + " absolute path. Skipping adding it to the @target@ module QT_PROTO_INCLUDES." + " Use QT_NO_WARN_PROTOBUF_BROKEN_INCLUDES to suppress this warning.") + endif() + continue() + endif() + if(NOT EXISTS "${proto_include_dir}") + if(NOT QT_NO_WARN_PROTOBUF_BROKEN_INCLUDES) + message(WARNING "The protobuf include directory ${proto_include_dir} doesn't exist." + " Skipping adding it to the @target@ module QT_PROTO_INCLUDES." + " Use QT_NO_WARN_PROTOBUF_BROKEN_INCLUDES to suppress this warning.") + endif() + continue() + endif() + + set_property(TARGET ${QT_CMAKE_EXPORT_NAMESPACE}::@target@ APPEND PROPERTY + QT_PROTO_INCLUDES "${proto_include_dir}") + endforeach() + unset(_@target@_proto_include_dirs) endif()