diff mbox series

[3/4] kernel-shark: Allow installing polkit policy separately

Message ID 20210317164101.30848-4-michal.sojka@cvut.cz (mailing list archive)
State Accepted
Commit c09344da7b28e50c49c63f790f6267ac16dbd4e1
Headers show
Series kernel-shark: CMake changes | expand

Commit Message

Michal Sojka March 17, 2021, 4:41 p.m. UTC
For a polkit policy to be found by polkit daemon, it must be installed
to a single system-wide location, typically /usr/share/polkit-1/actions.
CMakeLists file reflects that and always installs the policy under /usr.
But when one wants to install kernel-shark to a non-standard location,
e.g., by configuring it as follows:

    cmake -D_INSTALL_PREFIX=$HOME ...

then "make install" fails, with the following error:

    CMake Error at src/cmake_install.cmake:225 (file):
      file INSTALL cannot copy file
      "/home/user/src/trace-cmd/kernel-shark/org.freedesktop.kshark-record.policy"
      to "/usr/share/polkit-1/actions/org.freedesktop.kshark-record.policy".

This commit fixes that by changing two things:
- custom location where to install polkit policy can be specified via
  cmake command line argument -D_POLKIT_INSTALL_PREFIX=... This will
  also help distributions where polkit is configured with different
  prefix than /usr.
- polkit policy is now a separate cmake component, which can be
  installed separately from the rest.

The later allows generating better messages for the user to understand
that the failed polkit policy installation is not a critical error.

Signed-off-by: Michal Sojka <michal.sojka@cvut.cz>
---
 CMakeLists.txt       |  6 ++++++
 build/install_gui.sh | 10 +++++++++-
 src/CMakeLists.txt   |  4 ++--
 3 files changed, 17 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/CMakeLists.txt b/CMakeLists.txt
index c4731c1..94023a8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -36,6 +36,12 @@  elseif (NOT _LIBDIR)
 
 endif ()
 
+if (NOT _POLKIT_INSTALL_PREFIX)
+
+    set(_POLKIT_INSTALL_PREFIX "/usr")
+
+endif ()
+
 set(CMAKE_MODULE_PATH "${KS_DIR}/build")
 find_package(TraceEvent REQUIRED)
 find_package(TraceFS    REQUIRED)
diff --git a/build/install_gui.sh b/build/install_gui.sh
index 1583fb9..d262f79 100755
--- a/build/install_gui.sh
+++ b/build/install_gui.sh
@@ -1 +1,9 @@ 
-sudo cmake -DCOMPONENT=kernelshark -P cmake_install.cmake
+if sudo cmake -DCOMPONENT=kernelshark -P cmake_install.cmake; then
+    echo "Kernelshark installed correctly"
+else
+    exit 1
+fi
+
+if ! sudo cmake -DCOMPONENT=polkit-policy -P cmake_install.cmake; then
+    echo >&2 "Warning: polkit policy not installed"
+fi
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b81d7d9..b557eb7 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -127,8 +127,8 @@  if (Qt5Widgets_FOUND AND Qt5Network_FOUND AND TT_FONT_FILE)
                 COMPONENT                 kernelshark)
 
     install(FILES "${KS_DIR}/org.freedesktop.kshark-record.policy"
-            DESTINATION /usr/share/polkit-1/actions/
-                COMPONENT                 kernelshark)
+            DESTINATION ${_POLKIT_INSTALL_PREFIX}/share/polkit-1/actions/
+                COMPONENT                 polkit-policy)
 
     install(PROGRAMS "${KS_DIR}/bin/kshark-su-record"
             DESTINATION ${_INSTALL_PREFIX}/bin/