From b99adf7a8101b48c3acd246baeacec9a5f871acd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kai=20K=C3=B6hne?= Date: Mon, 15 Nov 2021 13:28:17 +0100 Subject: [PATCH] Do not include qloggingcategory.h in public headers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reduce overhead for including qguiapplication.h by splitting up qnativeinterface.h into a public and a private part. [ChangeLog][Potentially Source-Incompatible Changes] The qguiapplication.h header no longer implicitly includes qloggingcategory.h. If your code depends on the transitive include, explicitly include where needed. Pick-to: 6.2 Task-number: QTBUG-97601 Change-Id: Ic02327a1c3092e21730160af5c59a9d58dc1239c Reviewed-by: Tor Arne Vestbø --- src/corelib/global/qglobal.cpp | 5 +- src/corelib/global/qnativeinterface.h | 33 ------- src/corelib/global/qnativeinterface_p.h | 99 +++++++++++++++++++ .../android/qandroidnativeinterface.cpp | 1 + src/gui/kernel/qguiapplication_p.h | 1 + .../global/qnativeinterface/CMakeLists.txt | 2 + .../qnativeinterface/tst_qnativeinterface.cpp | 1 + 7 files changed, 107 insertions(+), 35 deletions(-) create mode 100644 src/corelib/global/qnativeinterface_p.h diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index d455f887ed..c8f97c7148 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -52,6 +52,7 @@ #endif // Q_OS_WIN || Q_OS_CYGWIN #include #include "qnativeinterface.h" +#include "qnativeinterface_p.h" #include #include @@ -4923,8 +4924,8 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters) declares __CFMutableString and CFMutableStringRef. */ -namespace QNativeInterface::Private { - Q_LOGGING_CATEGORY(lcNativeInterface, "qt.nativeinterface") +namespace QtPrivate { +Q_LOGGING_CATEGORY(lcNativeInterface, "qt.nativeinterface") } QT_END_NAMESPACE diff --git a/src/corelib/global/qnativeinterface.h b/src/corelib/global/qnativeinterface.h index 56805d5a6e..bc25600efc 100644 --- a/src/corelib/global/qnativeinterface.h +++ b/src/corelib/global/qnativeinterface.h @@ -41,7 +41,6 @@ #define QNATIVEINTERFACE_H #include -#include QT_BEGIN_NAMESPACE @@ -159,9 +158,6 @@ namespace QNativeInterface::Private { // of incompatible interface types read better. template struct NativeInterface : TypeInfo {}; - - Q_CORE_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcNativeInterface) - } // QNativeInterface::Private // Declares an accessor for the native interface @@ -183,35 +179,6 @@ namespace QNativeInterface::Private { public: #endif -// Provides a definition for the interface destructor -#define QT_DEFINE_NATIVE_INTERFACE_2(Namespace, InterfaceClass) \ - QT_PREPEND_NAMESPACE(Namespace)::InterfaceClass::~InterfaceClass() = default - -#define QT_DEFINE_NATIVE_INTERFACE(...) QT_OVERLOADED_MACRO(QT_DEFINE_NATIVE_INTERFACE, QNativeInterface, __VA_ARGS__) -#define QT_DEFINE_PRIVATE_NATIVE_INTERFACE(...) QT_OVERLOADED_MACRO(QT_DEFINE_NATIVE_INTERFACE, QNativeInterface::Private, __VA_ARGS__) - -#define QT_NATIVE_INTERFACE_RETURN_IF(NativeInterface, baseType) \ - { \ - using QNativeInterface::Private::lcNativeInterface; \ - using QNativeInterface::Private::TypeInfo; \ - qCDebug(lcNativeInterface, "Comparing requested interface name %s with available %s", \ - name, TypeInfo::name()); \ - if (qstrcmp(name, TypeInfo::name()) == 0) { \ - qCDebug(lcNativeInterface, "Match for interface %s. Comparing revisions (requested %d / available %d)", \ - name, revision, TypeInfo::revision()); \ - if (revision == TypeInfo::revision()) { \ - qCDebug(lcNativeInterface) << "Full match. Returning dynamic cast of" << baseType; \ - return dynamic_cast(baseType); \ - } else { \ - qCWarning(lcNativeInterface, "Native interface revision mismatch (requested %d / available %d) for interface %s", \ - revision, TypeInfo::revision(), name); \ - return nullptr; \ - } \ - } else { \ - qCDebug(lcNativeInterface, "No match for requested interface name %s", name); \ - } \ - } - QT_END_NAMESPACE #endif // QNATIVEINTERFACE_H diff --git a/src/corelib/global/qnativeinterface_p.h b/src/corelib/global/qnativeinterface_p.h new file mode 100644 index 0000000000..65332eeecb --- /dev/null +++ b/src/corelib/global/qnativeinterface_p.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QNATIVEINTERFACE_P_H +#define QNATIVEINTERFACE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtPrivate { +Q_CORE_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcNativeInterface) +} + +// Provides a definition for the interface destructor +#define QT_DEFINE_NATIVE_INTERFACE_2(Namespace, InterfaceClass) \ + QT_PREPEND_NAMESPACE(Namespace)::InterfaceClass::~InterfaceClass() = default + +#define QT_DEFINE_NATIVE_INTERFACE(...) \ + QT_OVERLOADED_MACRO(QT_DEFINE_NATIVE_INTERFACE, QNativeInterface, __VA_ARGS__) +#define QT_DEFINE_PRIVATE_NATIVE_INTERFACE(...) \ + QT_OVERLOADED_MACRO(QT_DEFINE_NATIVE_INTERFACE, QNativeInterface::Private, __VA_ARGS__) + +#define QT_NATIVE_INTERFACE_RETURN_IF(NativeInterface, baseType) \ + { \ + using QtPrivate::lcNativeInterface; \ + using QNativeInterface::Private::TypeInfo; \ + qCDebug(lcNativeInterface, "Comparing requested interface name %s with available %s", \ + name, TypeInfo::name()); \ + if (qstrcmp(name, TypeInfo::name()) == 0) { \ + qCDebug(lcNativeInterface, \ + "Match for interface %s. Comparing revisions (requested %d / available %d)", \ + name, revision, TypeInfo::revision()); \ + if (revision == TypeInfo::revision()) { \ + qCDebug(lcNativeInterface) << "Full match. Returning dynamic cast of" << baseType; \ + return dynamic_cast(baseType); \ + } else { \ + qCWarning(lcNativeInterface, \ + "Native interface revision mismatch (requested %d / available %d) for " \ + "interface %s", \ + revision, TypeInfo::revision(), name); \ + return nullptr; \ + } \ + } else { \ + qCDebug(lcNativeInterface, "No match for requested interface name %s", name); \ + } \ + } + +QT_END_NAMESPACE + +#endif // QNATIVEINTERFACE_P_H diff --git a/src/corelib/platform/android/qandroidnativeinterface.cpp b/src/corelib/platform/android/qandroidnativeinterface.cpp index a3a10091cb..b8e2cbb424 100644 --- a/src/corelib/platform/android/qandroidnativeinterface.cpp +++ b/src/corelib/platform/android/qandroidnativeinterface.cpp @@ -39,6 +39,7 @@ #include +#include #include #include #if QT_CONFIG(future) && !defined(QT_NO_QOBJECT) diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h index 7616d59ed1..6bb973ee75 100644 --- a/src/gui/kernel/qguiapplication_p.h +++ b/src/gui/kernel/qguiapplication_p.h @@ -59,6 +59,7 @@ #include #include +#include #include #include diff --git a/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt b/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt index 639c7c3ec7..52242b4292 100644 --- a/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt +++ b/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt @@ -1,4 +1,6 @@ qt_internal_add_test(tst_qnativeinterface SOURCES tst_qnativeinterface.cpp + LIBRARIES + Qt::CorePrivate ) diff --git a/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp b/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp index dd4cc4755b..5291133406 100644 --- a/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp +++ b/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp @@ -29,6 +29,7 @@ #include #include +#include class tst_QNativeInterface: public QObject {