From 5f160a3699d80d1736f691ad9ef774eb6aa28079 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 14 Oct 2019 15:18:44 +0200 Subject: [PATCH] Fix static linking when bearer management plugins are built MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bearer plugins include copies of moc generated code that results in duplicate symbols when static linking pulls in multiple bearer plugins. Instead of relying on toolchain defined behavior, this patch moves the code that is shared into the shared library as private API. This way it will exist only once in memory and once at link time, resulting no linking errors about duplicate symbols. Fixes: QTBUG-79211 Change-Id: Iafa45c234e7fdd998971fc9cb7116334d08907bc Reviewed-by: MÃ¥rten Nordheim --- src/network/bearer/bearer.pri | 3 +++ .../bearer/qbearerengine_impl_p.h} | 6 +++++- src/{plugins => network}/bearer/qnetworksession_impl.cpp | 8 ++++++-- .../bearer/qnetworksession_impl_p.h} | 8 ++++++-- src/plugins/bearer/android/src/qandroidbearerengine.cpp | 2 +- src/plugins/bearer/android/src/qandroidbearerengine.h | 2 +- src/plugins/bearer/android/src/src.pro | 7 ++----- src/plugins/bearer/connman/connman.pro | 7 ++----- src/plugins/bearer/connman/qconnmanengine.cpp | 2 +- src/plugins/bearer/connman/qconnmanengine.h | 2 +- src/plugins/bearer/corewlan/corewlan.pro | 7 ++----- src/plugins/bearer/corewlan/qcorewlanengine.h | 2 +- src/plugins/bearer/corewlan/qcorewlanengine.mm | 2 +- src/plugins/bearer/generic/generic.pro | 3 --- src/plugins/bearer/generic/qgenericengine.cpp | 2 +- src/plugins/bearer/generic/qgenericengine.h | 2 +- src/plugins/bearer/nativewifi/nativewifi.pro | 7 ++----- src/plugins/bearer/nativewifi/qnativewifiengine.cpp | 2 +- src/plugins/bearer/nativewifi/qnativewifiengine.h | 2 +- src/plugins/bearer/networkmanager/networkmanager.pro | 7 ++----- .../bearer/networkmanager/qnetworkmanagerengine.cpp | 2 +- src/plugins/bearer/networkmanager/qnetworkmanagerengine.h | 2 +- src/plugins/bearer/nla/nla.pro | 7 ++----- src/plugins/bearer/nla/qnlaengine.cpp | 2 +- src/plugins/bearer/nla/qnlaengine.h | 2 +- 25 files changed, 46 insertions(+), 52 deletions(-) rename src/{plugins/bearer/qbearerengine_impl.h => network/bearer/qbearerengine_impl_p.h} (95%) rename src/{plugins => network}/bearer/qnetworksession_impl.cpp (99%) rename src/{plugins/bearer/qnetworksession_impl.h => network/bearer/qnetworksession_impl_p.h} (96%) diff --git a/src/network/bearer/bearer.pri b/src/network/bearer/bearer.pri index d58d5ec1687..bcb7a5971e7 100644 --- a/src/network/bearer/bearer.pri +++ b/src/network/bearer/bearer.pri @@ -6,11 +6,14 @@ HEADERS += bearer/qnetworkconfiguration.h \ bearer/qnetworkconfigmanager_p.h \ bearer/qnetworkconfiguration_p.h \ bearer/qnetworksession_p.h \ + bearer/qnetworksession_impl_p.h \ bearer/qbearerengine_p.h \ + bearer/qbearerengine_impl_p.h \ bearer/qbearerplugin_p.h \ bearer/qsharednetworksession_p.h SOURCES += bearer/qnetworksession.cpp \ + bearer/qnetworksession_impl.cpp \ bearer/qnetworkconfigmanager.cpp \ bearer/qnetworkconfiguration.cpp \ bearer/qnetworkconfigmanager_p.cpp \ diff --git a/src/plugins/bearer/qbearerengine_impl.h b/src/network/bearer/qbearerengine_impl_p.h similarity index 95% rename from src/plugins/bearer/qbearerengine_impl.h rename to src/network/bearer/qbearerengine_impl_p.h index 5c003aaaf66..4221b73276e 100644 --- a/src/plugins/bearer/qbearerengine_impl.h +++ b/src/network/bearer/qbearerengine_impl_p.h @@ -42,9 +42,11 @@ #include +#ifndef QT_NO_BEARERMANAGEMENT + QT_BEGIN_NAMESPACE -class QBearerEngineImpl : public QBearerEngine +class Q_NETWORK_EXPORT QBearerEngineImpl : public QBearerEngine { Q_OBJECT @@ -78,4 +80,6 @@ QT_END_NAMESPACE Q_DECLARE_METATYPE(QBearerEngineImpl::ConnectionError) +#endif // QT_NO_BEARERMANAGEMENT + #endif // QBEARERENGINE_IMPL_H diff --git a/src/plugins/bearer/qnetworksession_impl.cpp b/src/network/bearer/qnetworksession_impl.cpp similarity index 99% rename from src/plugins/bearer/qnetworksession_impl.cpp rename to src/network/bearer/qnetworksession_impl.cpp index c6b678ab208..4b8631d4db0 100644 --- a/src/plugins/bearer/qnetworksession_impl.cpp +++ b/src/network/bearer/qnetworksession_impl.cpp @@ -40,8 +40,8 @@ // see comment in ../platformdefs_win.h. #define WIN32_LEAN_AND_MEAN 1 -#include "qnetworksession_impl.h" -#include "qbearerengine_impl.h" +#include "qnetworksession_impl_p.h" +#include "qbearerengine_impl_p.h" #include #include @@ -51,6 +51,8 @@ #include #include +#ifndef QT_NO_BEARERMANAGEMENT + QT_BEGIN_NAMESPACE static QBearerEngineImpl *getEngineFromId(const QString &id) @@ -433,3 +435,5 @@ void QNetworkSessionPrivateImpl::decrementTimeout() QT_END_NAMESPACE #include "qnetworksession_impl.moc" + +#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/plugins/bearer/qnetworksession_impl.h b/src/network/bearer/qnetworksession_impl_p.h similarity index 96% rename from src/plugins/bearer/qnetworksession_impl.h rename to src/network/bearer/qnetworksession_impl_p.h index 0f8e0149006..b1747601524 100644 --- a/src/plugins/bearer/qnetworksession_impl.h +++ b/src/network/bearer/qnetworksession_impl_p.h @@ -51,16 +51,18 @@ // We mean it. // -#include "qbearerengine_impl.h" +#include "qbearerengine_impl_p.h" #include #include +#ifndef QT_NO_BEARERMANAGEMENT + QT_BEGIN_NAMESPACE class QBearerEngineImpl; -class QNetworkSessionPrivateImpl : public QNetworkSessionPrivate +class Q_NETWORK_EXPORT QNetworkSessionPrivateImpl : public QNetworkSessionPrivate { Q_OBJECT @@ -127,4 +129,6 @@ private: QT_END_NAMESPACE +#endif // QT_NO_BEARERMANAGEMENT + #endif // QNETWORKSESSION_IMPL_H diff --git a/src/plugins/bearer/android/src/qandroidbearerengine.cpp b/src/plugins/bearer/android/src/qandroidbearerengine.cpp index a43ed695708..ad9895e0cf2 100644 --- a/src/plugins/bearer/android/src/qandroidbearerengine.cpp +++ b/src/plugins/bearer/android/src/qandroidbearerengine.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include "qandroidbearerengine.h" -#include "../../qnetworksession_impl.h" +#include #include "wrappers/androidconnectivitymanager.h" #ifndef QT_NO_BEARERMANAGEMENT diff --git a/src/plugins/bearer/android/src/qandroidbearerengine.h b/src/plugins/bearer/android/src/qandroidbearerengine.h index 837b02232d6..867d04d8865 100644 --- a/src/plugins/bearer/android/src/qandroidbearerengine.h +++ b/src/plugins/bearer/android/src/qandroidbearerengine.h @@ -40,7 +40,7 @@ #ifndef QANDROIDBEARERENGINE_H #define QANDROIDBEARERENGINE_H -#include "../../qbearerengine_impl.h" +#include #include #include diff --git a/src/plugins/bearer/android/src/src.pro b/src/plugins/bearer/android/src/src.pro index eb0738386c6..fcd599dffe8 100644 --- a/src/plugins/bearer/android/src/src.pro +++ b/src/plugins/bearer/android/src/src.pro @@ -2,13 +2,10 @@ TARGET = qandroidbearer QT = core-private network-private -HEADERS += qandroidbearerengine.h \ - ../../qnetworksession_impl.h \ - ../../qbearerengine_impl.h +HEADERS += qandroidbearerengine.h SOURCES += main.cpp \ - qandroidbearerengine.cpp \ - ../../qnetworksession_impl.cpp + qandroidbearerengine.cpp include(wrappers/wrappers.pri) diff --git a/src/plugins/bearer/connman/connman.pro b/src/plugins/bearer/connman/connman.pro index 065ed11dad3..d6577e9d7ff 100644 --- a/src/plugins/bearer/connman/connman.pro +++ b/src/plugins/bearer/connman/connman.pro @@ -4,15 +4,12 @@ QT = core network-private dbus HEADERS += qconnmanservice_linux_p.h \ ../linux_common/qofonoservice_linux_p.h \ - qconnmanengine.h \ - ../qnetworksession_impl.h \ - ../qbearerengine_impl.h + qconnmanengine.h SOURCES += main.cpp \ qconnmanservice_linux.cpp \ ../linux_common/qofonoservice_linux.cpp \ - qconnmanengine.cpp \ - ../qnetworksession_impl.cpp + qconnmanengine.cpp OTHER_FILES += connman.json diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp index 8b2076bd18f..a6738348254 100644 --- a/src/plugins/bearer/connman/qconnmanengine.cpp +++ b/src/plugins/bearer/connman/qconnmanengine.cpp @@ -39,7 +39,7 @@ #include "qconnmanengine.h" #include "qconnmanservice_linux_p.h" -#include "../qnetworksession_impl.h" +#include #include diff --git a/src/plugins/bearer/connman/qconnmanengine.h b/src/plugins/bearer/connman/qconnmanengine.h index ef80d38fa2b..eb79dbec1be 100644 --- a/src/plugins/bearer/connman/qconnmanengine.h +++ b/src/plugins/bearer/connman/qconnmanengine.h @@ -51,7 +51,7 @@ // We mean it. // -#include "../qbearerengine_impl.h" +#include #include "qconnmanservice_linux_p.h" #include "../linux_common/qofonoservice_linux_p.h" diff --git a/src/plugins/bearer/corewlan/corewlan.pro b/src/plugins/bearer/corewlan/corewlan.pro index 1dc09ebdd65..4f08eaba715 100644 --- a/src/plugins/bearer/corewlan/corewlan.pro +++ b/src/plugins/bearer/corewlan/corewlan.pro @@ -7,12 +7,9 @@ qtConfig(corewlan) { LIBS += -framework CoreWLAN -framework Security } -HEADERS += qcorewlanengine.h \ - ../qnetworksession_impl.h \ - ../qbearerengine_impl.h +HEADERS += qcorewlanengine.h -SOURCES += main.cpp \ - ../qnetworksession_impl.cpp +SOURCES += main.cpp OBJECTIVE_SOURCES += qcorewlanengine.mm diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.h b/src/plugins/bearer/corewlan/qcorewlanengine.h index 6dddee66a41..8775474c091 100644 --- a/src/plugins/bearer/corewlan/qcorewlanengine.h +++ b/src/plugins/bearer/corewlan/qcorewlanengine.h @@ -40,7 +40,7 @@ #ifndef QCOREWLANENGINE_H #define QCOREWLANENGINE_H -#include "../qbearerengine_impl.h" +#include #include #include diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm index 4644b5af9fb..11798995575 100644 --- a/src/plugins/bearer/corewlan/qcorewlanengine.mm +++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm @@ -38,7 +38,7 @@ ****************************************************************************/ #include "qcorewlanengine.h" -#include "../qnetworksession_impl.h" +#include #include diff --git a/src/plugins/bearer/generic/generic.pro b/src/plugins/bearer/generic/generic.pro index f30bdc4951e..14b858b3016 100644 --- a/src/plugins/bearer/generic/generic.pro +++ b/src/plugins/bearer/generic/generic.pro @@ -3,11 +3,8 @@ TARGET = qgenericbearer QT = core-private network-private HEADERS += qgenericengine.h \ - ../qnetworksession_impl.h \ - ../qbearerengine_impl.h \ ../platformdefs_win.h SOURCES += qgenericengine.cpp \ - ../qnetworksession_impl.cpp \ main.cpp OTHER_FILES += generic.json diff --git a/src/plugins/bearer/generic/qgenericengine.cpp b/src/plugins/bearer/generic/qgenericengine.cpp index b1f28849a7a..a5fba15789e 100644 --- a/src/plugins/bearer/generic/qgenericengine.cpp +++ b/src/plugins/bearer/generic/qgenericengine.cpp @@ -41,7 +41,7 @@ #define WIN32_LEAN_AND_MEAN 1 #include "qgenericengine.h" -#include "../qnetworksession_impl.h" +#include #include diff --git a/src/plugins/bearer/generic/qgenericengine.h b/src/plugins/bearer/generic/qgenericengine.h index 79c71ca7a31..6b8fb4cd0f2 100644 --- a/src/plugins/bearer/generic/qgenericengine.h +++ b/src/plugins/bearer/generic/qgenericengine.h @@ -40,7 +40,7 @@ #ifndef QGENERICENGINE_H #define QGENERICENGINE_H -#include "../qbearerengine_impl.h" +#include #include #include diff --git a/src/plugins/bearer/nativewifi/nativewifi.pro b/src/plugins/bearer/nativewifi/nativewifi.pro index da7f2da353e..41bde993419 100644 --- a/src/plugins/bearer/nativewifi/nativewifi.pro +++ b/src/plugins/bearer/nativewifi/nativewifi.pro @@ -3,13 +3,10 @@ TARGET = qnativewifibearer QT = core-private network-private HEADERS += qnativewifiengine.h \ - platformdefs.h \ - ../qnetworksession_impl.h \ - ../qbearerengine_impl.h + platformdefs.h SOURCES += main.cpp \ - qnativewifiengine.cpp \ - ../qnetworksession_impl.cpp + qnativewifiengine.cpp OTHER_FILES += nativewifi.json diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp index 777b4eea596..ca8700e63b3 100644 --- a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp +++ b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp @@ -39,7 +39,7 @@ #include "qnativewifiengine.h" #include "platformdefs.h" -#include "../qnetworksession_impl.h" +#include #include diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.h b/src/plugins/bearer/nativewifi/qnativewifiengine.h index ab8d949c9a2..24e97bf6df3 100644 --- a/src/plugins/bearer/nativewifi/qnativewifiengine.h +++ b/src/plugins/bearer/nativewifi/qnativewifiengine.h @@ -51,7 +51,7 @@ // We mean it. // -#include "../qbearerengine_impl.h" +#include #include diff --git a/src/plugins/bearer/networkmanager/networkmanager.pro b/src/plugins/bearer/networkmanager/networkmanager.pro index e71c93f66f0..3fbad07ef52 100644 --- a/src/plugins/bearer/networkmanager/networkmanager.pro +++ b/src/plugins/bearer/networkmanager/networkmanager.pro @@ -4,15 +4,12 @@ QT = core network-private dbus HEADERS += qnetworkmanagerservice.h \ qnetworkmanagerengine.h \ - ../linux_common/qofonoservice_linux_p.h \ - ../qnetworksession_impl.h \ - ../qbearerengine_impl.h + ../linux_common/qofonoservice_linux_p.h SOURCES += main.cpp \ qnetworkmanagerservice.cpp \ qnetworkmanagerengine.cpp \ - ../linux_common/qofonoservice_linux.cpp \ - ../qnetworksession_impl.cpp + ../linux_common/qofonoservice_linux.cpp OTHER_FILES += networkmanager.json diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp index e74b1cf7449..d686bc4e51d 100644 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp +++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp @@ -39,7 +39,7 @@ #include "qnetworkmanagerengine.h" #include "qnetworkmanagerservice.h" -#include "../qnetworksession_impl.h" +#include #include diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h index a95c68abdfc..c6c5280eca9 100644 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h +++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h @@ -51,7 +51,7 @@ // We mean it. // -#include "../qbearerengine_impl.h" +#include #include "qnetworkmanagerservice.h" diff --git a/src/plugins/bearer/nla/nla.pro b/src/plugins/bearer/nla/nla.pro index 76f3279d25e..2582dc7cd4d 100644 --- a/src/plugins/bearer/nla/nla.pro +++ b/src/plugins/bearer/nla/nla.pro @@ -5,13 +5,10 @@ QT = core core-private network network-private QMAKE_USE_PRIVATE += ws2_32 HEADERS += qnlaengine.h \ - ../platformdefs_win.h \ - ../qnetworksession_impl.h \ - ../qbearerengine_impl.h + ../platformdefs_win.h SOURCES += main.cpp \ - qnlaengine.cpp \ - ../qnetworksession_impl.cpp + qnlaengine.cpp OTHER_FILES += nla.json diff --git a/src/plugins/bearer/nla/qnlaengine.cpp b/src/plugins/bearer/nla/qnlaengine.cpp index e1e60389f18..ab3c0d0e3ab 100644 --- a/src/plugins/bearer/nla/qnlaengine.cpp +++ b/src/plugins/bearer/nla/qnlaengine.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include "qnlaengine.h" -#include "../qnetworksession_impl.h" +#include #include diff --git a/src/plugins/bearer/nla/qnlaengine.h b/src/plugins/bearer/nla/qnlaengine.h index ab014ff776a..90efa50201e 100644 --- a/src/plugins/bearer/nla/qnlaengine.h +++ b/src/plugins/bearer/nla/qnlaengine.h @@ -51,7 +51,7 @@ // We mean it. // -#include "../qbearerengine_impl.h" +#include #include