CMake kauth_install_* with system kauth and user CMAKE_INSTALL_PREFIX

Harald Sitter sitter at kde.org
Mon Oct 19 16:21:28 BST 2020


On 19.10.20 17:06, Milian Wolff wrote:
> On Montag, 19. Oktober 2020 16:56:27 CEST Harald Sitter wrote:
>> On 19.10.20 12:30, Milian Wolff wrote:
>>> On Montag, 19. Oktober 2020 11:27:29 CEST Harald Sitter wrote:
>>>> Yo
>>>>
>>>> On 18.10.20 10:11, Milian Wolff wrote:
>>>>> Hey all,
>>>>>
>>>>> since some time now I'm only compiling parts of KF5 selectively into a
>>>>> custom prefix. Most notably, I'm only interested in ktexteditor and
>>>>> syntax- highlighting, and would like to obtain all other frameworks
>>>>> through my distribution packages.
>>>>>
>>>>> Sadly, this doesn't work as easily, as ktexteditor is trying to do this:
>>>>>
>>>>> ```
>>>>> install(TARGETS kauth_ktexteditor_helper DESTINATION $
>>>>> {KAUTH_HELPER_INSTALL_DIR} )
>>>>> kauth_install_helper_files(kauth_ktexteditor_helper
>>>>> org.kde.ktexteditor.katetextbuffer root)
>>>>> kauth_install_actions(org.kde.ktexteditor.katetextbuffer buffer/
>>>>> org.kde.ktexteditor.katetextbuffer.actions)
>>>>> ```
>>>>>
>>>>> Because my KAuth is a system-provided installation, and KTextEditor
>>>>> should
>>>>> be installed into a user-writable prefix, I get this error on `ninja
>>>>> install`:
>>>>>
>>>>> ```
>>>>>
>>>>> CMake Error at src/cmake_install.cmake:143 (file):
>>>>>   file INSTALL cannot copy file
>>>>>   "/home/milian/projects/kf5/build/frameworks/ktexteditor/src/
>>>>>
>>>>> org.kde.ktexteditor.katetextbuffer.policy"
>>>>>
>>>>>   to
>>>>>   "/usr/share/polkit-1/actions/org.kde.ktexteditor.katetextbuffer.policy
>>>>>   "
>>>>>   
>>>>>   Permission denied.
>>>>>
>>>>> Call Stack (most recent call first):
>>>>>   cmake_install.cmake:77 (include)
>>>>>
>>>>> ```
>>>>>
>>>>> I can workaround this by either commenting out the kauth install bits in
>>>>> ktexteditor or by installing kauth seperately too. But both are in my
>>>>> opinion not ideal.
>>>>>
>>>>> I don't think it's currently possible to overwrite the KAuth install
>>>>> directory at cmake configure time. I would like to change that, unless
>>>>> there is something I'm missing which would prevent this? I am hoping
>>>>> that
>>>>> any folder works as long as it's listed in the `XDG_DATA_DIRS` env var -
>>>>> can someone confirm this?
>>>>
>>>> Alas, the path is hardcoded at buildtime from what I see:
>>>> https://gitlab.freedesktop.org/polkit/polkit/-/blob/master/src/polkitback
>>>> end /polkitbackendinteractiveauthority.c#L302
>>>>
>>>> Relevant: https://bugs.kde.org/show_bug.cgi?id=425272
>>>
>>> So the path that needs to be used is actually the polkit path?
>>
>> That's my understanding of the code, yes.
>>
>>> Meaning the
>>> question where KAuth is being installed to doesn't really matter? That
>>> would imply that KAuth is broken anyways when it's not installed to the
>>> same prefix that polkit is being installed to, no?
>>
>> Nope. If the policy was installed to a different path it would be
>> broken, but the very error you posted is because kauth is insisting on
>> putting the policy in the correct path rather than the prefix the rest
>> of the build is installing to.
> 
> No, it's using the install location of kauth, it doesn't query polkit itself. 
> I.e. if I hand-compile KAuth and install into a custom prefix, then I will 
> have:
> 
> ```
> $ grep INSTALL /home/milian/projects/compiled/kf5-dbg/lib/cmake/KF5Auth/
> KF5AuthConfig.cmake
> set(KAUTH_POLICY_FILES_INSTALL_DIR "/home/milian/projects/compiled/kf5/share/
> polkit-1/actions")
> set(KAUTH_HELPER_INSTALL_DIR "lib/libexec/kauth")
> set(KAUTH_HELPER_INSTALL_ABSOLUTE_DIR "/home/milian/projects/compiled/kf5/lib/
> libexec/kauth")
> ```

Ohh! This is indeed plain silly. I had thought it would use the value
from pkgconfig :S

> Now I can happily compile e.g. ktexteditor against this, but it would be just 
> as broken as the polkit files it installed will never be found anyways.
> 
> So, I guess there are two things to solve here:
> 
> a) make it easy to opt-out / disable kauth polkit file installation via a 
> cache var in the `kauth_install_*` cmake macros, such that I can just disable 
> that when building ktexteditor.

I'm not sure it's a good idea, but we could treat this like
KDE_INSTALL_USE_QT_SYS_PATHS. By default we'll simply install to
$CMAKE_PREFIX/share/polkit-1/actions/ unless explicitly configured with
KDE_INSTALL_USE_POLKIT_PATHS in which case we'll use whatever polkit uses.
What sets this apart from qt_syspath of course is that not using the
polkit path basically never makes sense as it'd be broken. So maybe the
default state should be ON and when one is sure that polkit isn't needed
one could turn it OFF.

> b) find a way to query polkit for the right path to use and use that by 
> default instead of the kauth install prefix.

polkit-gobject-1's pkgconfig encodes the path. So that's easy.

HS

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20201019/ccf96dfe/attachment.sig>


More information about the kde-core-devel mailing list