summaryrefslogtreecommitdiffstats
path: root/src/corelib/plugin/qfactoryloader.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Plugins: Save some architectural requirement flagsThiago Macieira2018-09-011-3/+19
| | | | | | | | | | | | | | | | | | | | | ...not just the debug flag. The information is saved outside of the CBOR map for two reasons: 1) removing the hack that depended on how QCborStreamWriter and TinyCBOR internally work, allowing for the extra parameter to be written directly. We wouldn't be able to use that hack anyway and would have needed a further, uglier hack to encode a byte whose value we don't know. 2) outside the map, this information can be parsed more quickly and then we can discard any plugins we shouldn't actually load. Since we're doing this for a flag, I decided to move the Qt version there too for reason #2. Change-Id: I61ecce6b1324410bbab4fffd153d4e5fc696d19e Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Plugins: store the metadata in CBOR instead of binary JSONThiago Macieira2018-09-011-12/+63
| | | | | | | | | | | | | | | In preparation for Qt 6 deprecating the binary JSON format. Also reduces the size of the metadata a little: for the xcb platform plugin, it went down from 264 bytes to 138; for the jpeg image plugin, it went from 320 to 135. I've had to change the signature so older versions of Qt won't try to parse the CBOR data as Binary JSON. Unfortunately, before QJsonDocument could get a chance to reject it, qJsonFromRawLibraryMetaData() needed to allocate memory and that causes crashes with Qt < 5.11.2. Change-Id: Ieb48f7c0dd0e4e0fb35efffd153bee34e16ce347 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Merge branch '5.11' into devEdward Welbourne2018-07-311-0/+24
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: qmake/library/qmakebuiltins.cpp src/plugins/platforms/windows/qwindowstabletsupport.h src/plugins/platforms/xcb/qxcbconnection.cpp src/plugins/platforms/xcb/qxcbconnection.h src/plugins/platforms/xcb/qxcbconnection_xi2.cpp src/plugins/platforms/xcb/qxcbwindow.cpp src/widgets/styles/qstylesheetstyle.cpp tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp Done-With: Gatis Paeglis <gatis.paeglis@qt.io> Change-Id: I000b0eb3cea2a5c7a99b95732bfdd41507cf916e
| * Plugins: fix crash if the binary JSON data contains invalid sizeThiago Macieira2018-07-191-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Eight bytes into the Binary JSON header there's a 32-bit little-endian size, which qJsonFromRawLibraryMetaData uses to determine the size of the stored metadata. That value is passed as a size to QByteArray, which means certain values could cause crashes due to being too big or via sign-extension in 64-bit. [ChangeLog][QtCore][QPluginLoader] Fixed an issue that could cause a crash when certain damaged or corrupt plugin files were scanned. Change-Id: I117816bf0f5e469b8d34fffd153dc5425cec39a7 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | QLibrary: find AVX2 (Haswell) optimized plugins and librariesThiago Macieira2018-07-091-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Libraries are placed in a subdir "haswell/" of the main library dir, whereas plugins are simply named with ".avx2" appended to the plugin name (plugin.so.avx2). The "haswell/" library directory suffix is a convention found in glibc since version 2.26, whereas the ".avx2" and ".avx512" suffixes are a convention found in the Clear Linux OS for Intel Architecture. This patch implements this for all Unix OSes, except for Darwin, where the fat file format already has a sub-architecture for Haswell (x86_64h). We could also implement the "sse2/" subdir search for libraries, but I don't think it's worth the cost in 2018. Change-Id: Iff4151c519c144d580c4fffd1539fe5ee9a4d7b1 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Tracepoints: refactor the existing tracepoint namesGiuseppe D'Angelo2018-06-281-1/+1
| | | | | | | | | | | | | | | | Use CamelCase, like the API they're tracing. Change-Id: Ie718ab624d17c9186bcf05cc1276c8eccad7f454 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
* | macOS: Explicitly link to debug version of framework when neededTor Arne Vestbø2018-03-161-19/+12
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When Qt is configured for both debug and release, and frameworks are enabled, we produce two dynamic libraries inside each framework, eg: QtCore.framework/QtCore QtCore.framework/QtCore_debug When building an executable against these frameworks, we pass -framework QtCore, and the resulting executable will have its LC_LOAD_DYLIB load commands pointing to e.g.: @rpath/QtCore.framework/Versions/5/QtCore When running the executable, the dynamic loader will load the dynamic library dependencies based on these load commands. By setting the DYLD_IMAGE_SUFFIX environment variable at runtime to '_debug', the dynamic loader will prefer the debug versions of each library inside the frameworks. Unfortunately the use of an environment variable to choose debug or release versions leaves room for mismatches between the executable and the libraries that are loaded. An executable built in debug mode will at runtime pick up the release versions of the Qt libraries unless the DYLD_IMAGE_SUFFIX has also been set to match the build configuration of the executable. This results in confusing situations such as building your application in debug mode, and then stepping into Qt code but not getting any symbols. Qt Creator has an option to run the application with DYLD_IMAGE_SUFFIX set, but this is not enabled by default due to the startup cost of loading the Qt debug libraries. More critically, it results in tests failing when the tests are using QTest::ignoreMessage to ignore warnings produced by Qt, and these calls are ifdefed (correctly) inside QT_NO_DEBUG, as the test (built in debug mode) will then expect warnings from Qt, but those warnings are not emittet, as the test is run against the release version of the Qt libraries. To mitigate this mismatch, we now link the Qt frameworks using an explicit suffix, just like we would for no-framework builds on macOS, for debug and release builds on Windows, and for normal builds on other Unixes, leaving the dependency chain for the application predictable: @rpath/QtCore.framework/Versions/5/QtCore_debug This also conceptually matches how Xcode builds applications and frameworks, where it never relies on DYLD_IMAGE_SUFFIX, and instead uses two separate build directories, one for each configuration. The change means that Qt Creator will always load the Qt debug libraries if the application is built in debug mode. For Qt development this is a good thing, as you expect to be able to step into Qt code. For our users, the added startup cost can be mitigated by shipping our binary packages as release-only, but with separate debug info enabled. Change-Id: Ib9f1f2dab90ed00b9fb011200e3a69c71955e399 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Support for LTTNG and ETW tracingRafael Roquetto2018-01-281-0/+5
| | | | | | | | | | This commit introduces minimal support for instrumentation within Qt. Currently, only LTTNG/Linux and ETW/Windows are supported. Change-Id: I59b48cf83acf5532a998bb493e6379e9177e14c8 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Merge remote-tracking branch 'origin/5.9' into devLiang Qi2017-05-071-0/+2
|\ | | | | | | | | | | | | | | Conflicts: src/network/access/qnetworkreply.cpp tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp Change-Id: Iadf766269454087e69fb216fc3857d85b0ddfaad
| * QtCore: include mocsThiago Macieira2017-05-051-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Compilation and link times in CPU seconds with GCC 7, using precompiled headers (not including moc, rcc, uic, etc. steps or headersclean): Before After Debug -O0 198,1 180,3 Debug -Og 240,7 229,2 Release -O3 267,1 249,2 Release LTO 239,4 229,8 QtCore required a little manual adjusting because some files are bootstrapped into moc itself and into qmake. Change-Id: I84e363d735b443cb9beefffd14b8b57c10e7da36 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* | Merge "Merge remote-tracking branch 'origin/5.9' into dev" into refs/staging/devLiang Qi2017-03-201-6/+6
|\ \
| * | Merge remote-tracking branch 'origin/5.9' into devLiang Qi2017-03-201-6/+6
| |\| | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/corelib/io/qfilesystemengine_win.cpp src/gui/text/qdistancefield.cpp src/plugins/platforms/xcb/qxcbconnection.h Change-Id: I1be4a6f440ccb7599991159e3cb9de60990e4b1e
| | * Use QT_CONFIG(library) instead of QT_NO_LIBRARYUlf Hermann2017-03-061-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For the windows file system engine, we add an extra macro to use library loading if configured to do so, but avoid it on WinRT, as none of the symbols would be found. We also QT_REQUIRE_CONFIG(library) in the library headers and exclude the sources from the build if library loading is disabled. This, in turn, makes it necessary to clean up some header inclusions. Change-Id: I2b152cb5b47a2658996b6f4702b038536a5704ec Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* | | Use new QStringList::contains(QL1S)Anton Kudryavtsev2017-03-201-2/+2
|/ / | | | | | | | | | | | | ... to reduce text size by replacing QStringLiteral with QL1S. Change-Id: I8166282d915f081ba816989039451466ec29e208 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* / QFactoryLoader: use QStringLiteral more judiciouslyAnton Kudryavtsev2017-03-191-2/+2
|/ | | | | | | | Replace it with QL1S in overloaded functions. Saves some text size. Change-Id: Ie1436a787fb3052157880234ca180fefce5a8412 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix race condition in QFactoryLoader: lock the mutex we already haveThiago Macieira2016-12-171-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The process of loading a plugin is examplified by the qLoadPlugin function (though not all users of QFactoryLoader use this function, they all do something similar): const int index = loader->indexOf(key); if (index != -1) { QObject *factoryObject = loader->instance(index); if (FactoryInterface *factory = qobject_cast<FactoryInterface *>(factoryObject)) if (PluginInterface *result = factory->create(key, std::forward<Args>(args)...)) return result; } QFactoryLoader::indexOf already locked the mutex, but not QFactoryLoader::instance. This commit fixes that. Note that calling the virtual create() in the plugin's factory is not protected by the mutex. Each plugin's factory must be thread-safe and also create an object that works on any thread too. It's also the responsibility of the caller of qLoadPlugin to ensure that it's called thread-safely. Task-number: QTBUG-42855 Change-Id: I63e21df51c7448bc8b5ffffd148ebee33d4c47de Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Merge remote-tracking branch 'origin/5.7' into devLiang Qi2016-05-121-27/+11
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: config_help.txt configure src/corelib/io/qprocess_wince.cpp src/plugins/platforms/windows/qwindowstheme.cpp src/plugins/platforms/xcb/qxcbbackingstore.cpp tests/auto/corelib/tools/qtimezone/BLACKLIST tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp Change-Id: I26644d1cb3b78412c8ff285e2a55bea1bd641c01
| * QFactoryLoader: use new QJsonObject::value(QLatin1String)Marc Mutz2016-05-101-27/+11
| | | | | | | | | | | | | | | | Allows to get rid of some QStringLiterals, reducing QtCore text size by ~800b. Change-Id: I8f7e57927163eaaf628e42020f83f053faea6bf8 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* | Stop unloading plugins in QPluginLoader and QFactoryLoaderThiago Macieira2016-05-031-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QPluginLoader hasn't unloaded in its destructor since Qt 5.0, but we missed the equivalent code in QFactoryLoader (which bypasses QPluginLoader). Besides, QPluginLoader::unload() was still doing unloading, which it won't anymore. Not unloading plugins is Qt's policy, as decided during the 5.0 development process and reaffirmed now in 5.6. This is due to static data in plugins leaking out and remaining in use past the unloading of the plugin, causing crashes. This does not affect QLibrary and QLibrary::unload(). Those are meant for non-Qt loadable modules, so unloading them may be safe. Task-number: QTBUG-49061 Discussed-on: http://lists.qt-project.org/pipermail/development/2015-November/023681.html Change-Id: I461e9fc7199748faa187ffff1416070f138df8db Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com> Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* | QFactoryLoader: Add namefilter for Windows.Friedemann Kleint2016-03-101-1/+5
|/ | | | | | | | | | | | | No longer try to load all files in the directory as a plugin which can cause problems when for example installers move files around. [ChangeLog][QtCore][QFactoryLoader][Windows] QFactoryLoader now filters potential plugins by the ".dll" suffix. Task-number: QTBUG-31476 Change-Id: Ia19d6211c72765aaba0a5d06e6d3b501e8a40fff Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* Updated license headersJani Heikkinen2016-01-151-14/+20
| | | | | | | | | | | From Qt 5.7 -> LGPL v2.1 isn't an option anymore, see http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/ Updated license headers to use new LGPL header instead of LGPL21 one (in those files which will be under LGPL v3) Change-Id: I046ec3e47b1876cd7b4b0353a576b352e3a946d9 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* QtCore: eradicate all Q_FOREACH loops [threads, plugins]Marc Mutz2016-01-041-1/+2
| | | | | | | | | Saves just shy of 4KiB in text size on optimized GCC 4.9 Linux AMD64 builds, iow: ~0.07% of the total QtCore library size. Change-Id: I87fdcc8ee25c6bb5dabddb9a694ab4496b1538fa Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* Merge remote-tracking branch 'origin/5.6' into devLiang Qi2015-12-021-2/+2
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/corelib/kernel/qcoreapplication.cpp src/corelib/kernel/qeventdispatcher_blackberry.cpp src/network/bearer/qnetworkconfiguration.cpp src/plugins/bearer/blackberry/qbbengine.cpp src/plugins/platforms/android/androidjnimain.cpp src/plugins/platforms/android/qandroidplatformtheme.cpp src/plugins/platforms/qnx/qqnxbpseventfilter.cpp src/plugins/platforms/qnx/qqnxfiledialoghelper_bb10.cpp src/plugins/platforms/qnx/qqnxinputcontext_imf.cpp src/plugins/platforms/qnx/qqnxintegration.cpp src/plugins/platforms/qnx/qqnxnavigatorbps.cpp src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.cpp src/plugins/platforms/qnx/qqnxwindow.cpp src/widgets/kernel/qwidgetwindow.cpp src/widgets/styles/qwindowsvistastyle.cpp src/widgets/styles/qwindowsxpstyle.cpp src/widgets/widgets/qtoolbararealayout.cpp tests/auto/corelib/global/qflags/qflags.pro tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp tests/auto/corelib/tools/qversionnumber/qversionnumber.pro tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp Change-Id: I37be88c6c185bb85404823353e027a0a6acdbce4
| * QtBase: combine adjacent qDebug()/qCritical() linesMarc Mutz2015-11-281-2/+2
| | | | | | | | | | | | | | | | | | For qDebug() and qWarning(), this is just an optimization. For qCritical(), which can be fatal, the old code was just wrong. Change-Id: I6d8ab1d7531d766cd41b49569dc0fd4420ecab8b Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* | Merge remote-tracking branch 'origin/5.6' into devLiang Qi2015-11-231-0/+2
|\| | | | | | | | | | | | | | | Conflicts: src/corelib/kernel/qcoreapplication.cpp src/corelib/thread/qthread_unix.cpp Change-Id: Ia08d613c3f0bd08cb6dc3e3a57257207dfd4a099
| * qfactoryloader: static qt compile fixTim Blechmann2015-11-191-0/+2
| | | | | | | | | | | | | | | | | | statically linked qt does not compile, as versionKeyLiteral() is unused, causing clang to complain: error: unused function 'versionKeyLiteral' [-Werror,-Wunused-function] Change-Id: I6a233081e7c58fce75ece82616f937f29a23a81b Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
* | Allow loading of static plugins if QT_NO_LIBRARY is set.Ulf Hermann2015-08-181-2/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We keep two symbols from QPluginLoader defined, even if QT_NO_LIBRARY is set in order to be able to locate static plugins. This doesn't constitute any loading of shared libraries or plugins from external files at runtime. Using these symbols we can enable most of QFactoryLoader even if QT_NO_LIBRARY is set. Only update(), refreshAll(), library() and the dtor make no sense then. This way QGenericPlugin also becomes useful with QT_NO_LIBRARY. Task-number: QTBUG-3045 Change-Id: Ib7842ce5799e8e2caa46431d95fddd1adda0fc41 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Reorder code in qfactoryloader.cppUlf Hermann2015-08-181-46/+41
|/ | | | | | | | | | This allows us to introduce loading of static plugins with QT_NO_LIBRARY set, using a minimal number of #ifdefs. Also, drop the unused unloadPath() declaration. Change-Id: Ifb1c096e5d349f17cfa51d44bfd917e1d4d2d27e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Update copyright headersJani Heikkinen2015-02-111-7/+7
| | | | | | | | | | | | | | | | | | Qt copyrights are now in The Qt Company, so we could update the source code headers accordingly. In the same go we should also fix the links to point to qt.io. Outdated header.LGPL removed (use header.LGPL21 instead) Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing combination. New header.LGPL-COMM taken in the use file which were using old header.LGPL3 (src/plugins/platforms/android/extract.cpp) Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license combination Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
* Use QStringLiteral to prevent runtime string conversions.Milian Wolff2015-01-051-11/+17
| | | | | Change-Id: I0b2f06f9f09868051e84af80b2c61b5ada99af69 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* QFactoryLoader: de-duplicate two QStringLiteralsMarc Mutz2014-10-091-4/+8
| | | | | | | | | | | | When seemingly identical QStringLiterals are used in different functions, due to the use of lambdas and scoping, they produce different lambda types and thus duplicated QStringLiteral data. Fix by moving the QStringLiterals into inline functions and calling those instead. Change-Id: Ifaa124ec74e201ccc63fd9afce042f8b2ff22b9e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Update license headers and add new license filesMatti Paaso2014-09-241-19/+11
| | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 - Removed LICENSE.GPL Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2 Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
* QPluginLoader: add 'staticPlugins' functionRichard Moe Gustavsen2013-09-041-8/+4
| | | | | | | | | | | | | | | | | | Currently there is no API to extract the meta data from static plugins. This is needed in e.g QtDeclarative for loading static module plugins. This patch moves the 'staticPlugins' function from QLibraryPrivate into QPluginLoader, and makes it public. As such, we now also export QStaticPlugin. Since an application developer cannot do much with raw metadata, we add a new function QStaticPlugin::metaData() that returns the QJsonObject for the plugin. The old metaData function is renamed 'rawMetaData'. Change-Id: Idb0bf9ad8ebb13340565512e1998b26e762a357e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix warning about using QString's const char* constructor on MacThiago Macieira2013-07-201-1/+2
| | | | | Change-Id: I20ca50fdcdcfb075ad317247f147e4eb007a0c44 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
* Merge remote-tracking branch 'origin/release' into stableFrederik Gladhorn2013-06-201-10/+9
|\ | | | | | | Change-Id: I94bb158562ae6b80a87b40139d7302ea7b9b9aa8
| * QFactoryLoader: Release unused libraries.Friedemann Kleint2013-06-181-1/+6
| | | | | | | | | | | | | | Task-number: QTBUG-31476 Change-Id: Ib2eb076afaa21ab1fdc12944f80483e3de260d4b Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| * Remove unused member QFactoryLoaderPrivate::keyList.Friedemann Kleint2013-06-181-9/+3
| | | | | | | | | | | | | | Task-number: QTBUG-31476 Change-Id: Ife9b25ede67837152d94cd500a1d7c6dc6cd8ab8 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Print directories for QT_DEBUG_PLUGINSKai Koehne2013-06-051-0/+4
|/ | | | | | | | So far we stayed completely silent if the user forgot to deploy all plugins, or deployed them in the wrong way. Change-Id: Idd776c4b4a2ddffd5da08985e5925248c97e0270 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* Update copyright year in Digia's license headersSergio Ahumada2013-01-181-1/+1
| | | | | Change-Id: Ic804938fc352291d011800d21e549c10acac66fb Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Improve Cocoa platform plugin loading.Morten Johan Sorvig2012-12-121-0/+21
| | | | | | | | | | | | | | | | | | | Loading both the debug and release version of the cocoa plugins causes the objective-c runtime to print "duplicate class definitions" warnings. Fix this by directing the plugin loader to only load one of the cocoa plugins if both are available. Implement this as a special case directly in QFactoryLoader. Define QT_NO_DEBUG_PLUGIN_CHECK to allow mixing debug and release builds. Task-number: QTBUG-28155 Change-Id: Ie1927b219cc501a821f91b7e4b56f0589e0acbf5 Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Change copyrights from Nokia to DigiaIikka Eklund2012-09-221-24/+24
| | | | | | | | Change copyrights and license headers from Nokia to Digia Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
* Fix static plugin loading.Thiago Macieira2012-07-121-4/+11
| | | | | | | | | | | | The QFactoryLoader::indexOf and keyMap functions expect to receive the metadata that contains a "MetaData" entry, instead of the entry itself. Also, QFactoryLoader::metaData() skips static plugins with the wrong IID, so we need to skip it too in QFactoryLoader::instance(). Change-Id: I8a453087feb88d0e8d1021054353f3600d5100a5 Reviewed-by: Mark Brand <mabrand@mabrand.nl>
* Remove support for Qt 4 style pluginsLars Knoll2012-06-061-120/+16
| | | | | | | | | | The new plugin format allows us to avoid loading the plugins in all cases. Remove the old format, as we could get bad behavior with the old format if Qt would try to dlopen a Qt 4.x plugin. Change-Id: I2193e6874d6cca3c0b12298c2b9beb4105a42fd5 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Populate MetaData:Keys for compat pluginsKent Hansen2012-05-241-1/+5
| | | | | | | | | | QFactoryLoader::indexOf() expects the meta-data to contain a Keys entry, if there were any keys. For compat plugins, the result of the plugin's keys() function should be stored here. Change-Id: Ifd04f90cbfce2598d71548c469baa55ca6b0b338 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* QFactoryLoader: Add API for supporting the metadata containing keys.Friedemann Kleint2012-05-071-0/+33
| | | | | | | | | | | - Add a method returning a QMultiMap<int index, QString key> to QFactoryLoader, determined from metadata(), correctly reflecting the data structure ('Keys' being a list) - Add convenience templates to create plugins via factory interfaces Change-Id: I247749aa3245f635e476605db1c4cd9c74b74dea Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Allow loading of static plugins by indexLars Knoll2012-05-011-10/+19
| | | | | | | | | | Static plugins could so far not get loaded by index. Implement the missing support for this. Task-number: QTBUG-25274 Change-Id: I901b08bfaf4f9fc3cb9fcea0b47f3ed89588a27b Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix a crash in QFactoryLoaderJonas Rabbe2012-03-291-1/+2
| | | | | | | | | | | | | | The change in plugin loading has meant that different plugins in the same plugin folder will not be handled properly when loaded with different instances of QFactoryLoader. A solution is to only unload compatability plugins from QFactoryLoader::update() since they are the only plugins that are actually loaded in that method. This auto test shows the error on the current version of QFactoryLoader and passes with the fix described above. Change-Id: I12001525d51bb631d6742c5965357598322f247c Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Don't reject plugins that have empty meta-dataLincoln Ramsay2012-03-171-2/+1
| | | | | | | | | Having an empty Json object ({}) should be valid meta-data but this check means that there needs to be at least one key-value pair or the plugin will be rejected. Change-Id: I578ccc35016af16fd30b3807e796fa63c0282f30 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Support new-style plugins without a "Keys" json propertyAlex Wilson2012-03-061-1/+12
| | | | | | | | | As per discussion with Lars, intent here was to allow plugins without a "Keys" property to still function correctly, but this particular if statement was blocking any such plugins from being detected. Change-Id: Icb343ca8bd95a508d62565cd816fe2a57a4f82bd Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Plugin loader: Output offending plugin name in warning.Friedemann Kleint2012-02-171-1/+2
| | | | | Change-Id: I0aba0cf04f703b893459af55263685c5548a92f9 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>