Subject: [PATCH v2 2/3] gnu: Add corectrl.

From: Ashvith Shetty <[email-masked]>
Date: Tue, 31 Dec 2024 23:39:48 +0530

From: Ashvith Shetty <[email-masked]>

* gnu/packages/admin.scm (corectrl): New variable.
* gnu/packages/patches/corectrl-polkit-install-dir.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add reference to it.

Change-Id: I7b0f85c917eb58d7518d7ee7c5b22ef2debde7d9
---
 gnu/local.mk                                  |  2 +
 gnu/packages/admin.scm                        | 73 +++++++++++++++++++
 .../patches/corectrl-polkit-install-dir.patch | 21 ++++++
 3 files changed, 96 insertions(+)
 create mode 100644 gnu/packages/patches/corectrl-polkit-install-dir.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 02a6fa616e..799a1ce591 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -69,6 +69,7 @@
 # Copyright © 2024 Fabio Natali <[email-masked]>
 # Copyright © 2024 Noé Lopez <[email-masked]>
 # Copyright © 2024 Runciter <[email-masked]>
+# Copyright © 2024 Ashvith Shetty <[email-masked]>
 #
 # This file is part of GNU Guix.
 #
@@ -1121,6 +1122,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/converseen-hide-non-free-pointers.patch	\
   %D%/packages/patches/cool-retro-term-wctype.patch		\
   %D%/packages/patches/coq-autosubst-1.8-remove-deprecated-files.patch		\
+  %D%/packages/patches/corectrl-polkit-install-dir.patch	\
   %D%/packages/patches/corefx-mono-5.4.0-patches.patch		\
   %D%/packages/patches/corefx-mono-pre-5.8.0-patches.patch	\
   %D%/packages/patches/coreutils-gnulib-tests.patch		\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index dce93e4f3a..3759b53d52 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -70,6 +70,7 @@
 ;;; Copyright © 2024 Vinicius Monego <[email-masked]>
 ;;; Copyright © 2024 nathan <[email-masked]>
 ;;; Copyright © 2024 Nikita Domnitskii <[email-masked]>
+;;; Copyright © 2024 Ashvith Shetty <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -137,6 +138,7 @@ (define-module (gnu packages admin)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -157,10 +159,12 @@ (define-module (gnu packages admin)
   #:use-module (gnu packages libunwind)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages logging)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages mail)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages markup)
   #:use-module (gnu packages mcrypt)
   #:use-module (gnu packages mpi)
@@ -195,6 +199,7 @@ (define-module (gnu packages admin)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages vulkan)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
@@ -6484,3 +6489,71 @@ (define-public sshguard
 services.  It aggregates system logs and blocks repeat offenders using one of
 several firewall backends.")
     (license license:isc)))
+
+(define-public corectrl
+  (package
+    (name "corectrl")
+    (version "1.4.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/corectrl/corectrl")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "0qpc04xxzv4jbqqlraqriipix4ph7bm1hfiry807jjp668i9n25d"))
+       (file-name (git-file-name name version))
+       (patches (search-patches "corectrl-polkit-install-dir.patch"))))
+    (build-system qt-build-system)
+    (arguments
+     (list
+      #:qtbase qtbase-5
+      #:configure-flags #~(list "-DINSTALL_DBUS_FILES_IN_PREFIX=true"
+                                (string-append "-DPOLKIT_POLICY_INSTALL_DIR="
+                                               #$output
+                                               "/share/polkit-1/actions")
+                                (string-append "-DWITH_PCI_IDS_PATH="
+                                               #$(this-package-input "hwdata")
+                                               "/share/hwdata/pci.ids"))
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'install 'wrap-program
+                     (lambda* (#:key inputs #:allow-other-keys)
+                       (wrap-program (string-append #$output "/bin/corectrl")
+                         (list "PATH"
+                               'prefix
+                               (map (lambda (binary)
+                                      (dirname (search-input-file inputs
+                                                                  (string-append
+                                                                   "bin/"
+                                                                   binary))))
+                                    '("glxinfo" "lscpu" "vulkaninfo")))))))))
+    ;; Text formatting only supported since C++20, which is available in gcc-13.
+    ;; https://en.cppreference.com/w/cpp/compiler_support#cpp_lib_format_201907L
+    (native-inputs (list pkg-config gcc-13))
+    (inputs (list dbus
+                  botan
+                  catch2-3
+                  hwdata
+                  mesa-utils
+                  polkit
+                  procps
+                  pugixml
+                  qtcharts-5
+                  qtdeclarative-5
+                  qtquickcontrols2-5
+                  qtsvg-5
+                  qttools-5
+                  quazip
+                  spdlog
+                  trompeloeil
+                  units
+                  util-linux
+                  vulkan-tools
+                  zlib))
+    (home-page "https://gitlab.com/corectrl/corectrl")
+    (synopsis "Profile based system control utility")
+    (description
+     "CoreCtrl is a Free and Open Source GNU/Linux application that allows 
+you to control with ease your computer hardware using application profiles. 
+It aims to be flexible, comfortable and accessible to regular users.")
+    (license (list license:gpl3))))
diff --git a/gnu/packages/patches/corectrl-polkit-install-dir.patch b/gnu/packages/patches/corectrl-polkit-install-dir.patch
new file mode 100644
index 0000000000..586e096cf4
--- /dev/null
+++ b/gnu/packages/patches/corectrl-polkit-install-dir.patch
@@ -0,0 +1,21 @@
+diff --git a/src/helper/CMakeLists.txt b/src/helper/CMakeLists.txt
+index c262086..523ea97 100644
+--- a/src/helper/CMakeLists.txt
++++ b/src/helper/CMakeLists.txt
+@@ -26,15 +26,7 @@ message("D-Bus files will be installed into ${DBUS_DATADIR_PREFIX_DIR}/dbus-1")
+ 
+ # Find polkit
+ pkg_check_modules(POLKIT REQUIRED polkit-gobject-1)
+-execute_process(
+-  COMMAND pkg-config --variable=policydir polkit-gobject-1
+-  RESULT_VARIABLE POLKIT_POLICY_INSTALL_DIR_RESULT
+-  OUTPUT_VARIABLE POLKIT_POLICY_INSTALL_DIR
+-  OUTPUT_STRIP_TRAILING_WHITESPACE
+-)
+-if(NOT POLKIT_POLICY_INSTALL_DIR_RESULT EQUAL "0")
+-  message(FATAL_ERROR "Failed to retrieve Polkit `policydir` variable using pkg-config")
+-endif()
++option(POLKIT_POLICY_INSTALL_DIR "Polkit policy directory")
+ 
+ list(APPEND HELPER_COMPILE_DEFINITIONS
+   SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE
-- 
2.46.0