kcoreaddons_add_plugin executable/plugin directory conflict

David Faure faure at kde.org
Tue May 12 00:20:02 BST 2020


On lundi 11 mai 2020 14:07:28 CEST Friedrich W. H. Kossebau wrote:
> Am Montag, 11. Mai 2020, 10:21:10 CEST schrieb Daniel Vrátil:
> > Hi all,
> > 
> > I'm moving some plugins in kaddressbook and I ran into a problem with
> 
> > kcoreaddons_add_plugin:
> Problem found because you require ECM >= 5.38, triggering the use of the
> CMAKE_BUILD_DIR/bin as executable artifact placement dir by
> KDECMakeSettings, compare
> https://api.kde.org/ecm/kde-module/KDECMakeSettings.html#build-settings
> > I have this in the plugin CMakeLists.txt:
> > 
> > kaddressbook_add_plugin(
> > 
> > 	kaddressbook_importexportvcardplugin
> > 	JSON kaddressbook_importexportvcardplugin.json
> > 	SOURCES ${kaddressbook_importexport_vcard_SRCS}
> > 	INSTALL_NAMESPACE kaddressbook/importexportplugin
> > 
> > )
> > 
> > When I run make on the entire project, it fails with
> > 
> > [ 65%] Linking CXX shared module ../../../../bin/kaddressbook/
> > importexportplugin/kaddressbook_importexportvcardplugin.so
> > ld: error: cannot open output file ../../../../bin/kaddressbook/
> > importexportplugin/kaddressbook_importexportvcardplugin.so: Not a
> > directory
> > 
> > Alternatively, if a plugin gets created first, it fails on
> > 
> > [ 96%] Linking CXX executable ../bin/kaddressbook
> > ld: error: cannot open output file ../bin/kaddressbook: Is a directory
> > 
> > I realized the problem is that CMake is unable to create the plugin in
> > $BUILDDIR/bin/kaddressbook/importexportplugin/ directory, because there's
> > already $BUILDDIR/bin/kaddressbook executable (or vice versa).
> > 
> > I would assume this is a very common problem - having plugins "namespaced"
> > in the same directory as is the name of the program (and executable).

I didn't anticipate this because that name conflict with an executable doesn't happen in KDE Frameworks,
where the install namespace starts with kf5 :(

> > Should the macro maybe put the plugins into
> > "$BUILDDIR/bin/plugins/$INSTALL_NAMESPACE/"? Would that make the lookup
> > any more complicated?

Yes, at least that was the initial reasoning, because "." is a default search path for plugins in Qt. But see below.

> > Is there some known solution/workaround to this? I'd prefer not to have to
> > rename the executable or the plugins namespaces, since having different
> > name for the program and the plugin "namespace" somewhat defeats the
> > purpose of a namespace...

Well, for kontact I used kontact5 as plugin namespace, to avoid ever risking a mixup between qt5/kf5-based plugins and qt6/kf6-based plugins.
This sounds like a good solution to both problems.

But otherwise:

I later realized that while '.' is in the search path, it has less priority than QT_PLUGIN_PATH,
so it was picking up my installed plugins instead of the locally built ones.
So now modules/ECMAddTests.cmake sets the QT_PLUGIN_PATH env var for when running tests (https://phabricator.kde.org/D8660).
Therefore we could indeed move all plugins to a subdir.
The attached patches do that.

We however lose the magic of finding plugins in $PWD, when running a test/program directly (rather than via ctest)
(i.e. like an IDE would run them), if the plugins aren't otherwise available in the system.

So I'm thinking.... how about just adding a 5? :-)

-- 
David Faure, faure at kde.org, http://www.davidfaure.fr
Working on KDE Frameworks 5
-------------- next part --------------
A non-text attachment was scrubbed...
Name: kcoreaddons.diff
Type: text/x-patch
Size: 850 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20200512/73f9475c/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ecm.diff
Type: text/x-patch
Size: 659 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20200512/73f9475c/attachment-0001.bin>


More information about the Kde-frameworks-devel mailing list