~ruther/guix-local

1a237ebc73dbdcbf64b7489bfc1dbbc01bbb2e51 — Maxim Cournoyer 2 years ago 98bc6d7
gnu: Add hotspot.

* gnu/packages/linux.scm (hotspot): New variable.

Change-Id: Id6a0baae459bccf78c80d17f884f3fa7344ff1ac
1 files changed, 130 insertions(+), 1 deletions(-)

M gnu/packages/linux.scm
M gnu/packages/linux.scm => gnu/packages/linux.scm +130 -1
@@ 34,7 34,7 @@
;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com>
;;; Copyright © 2019 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
;;; Copyright © 2019 mikadoZero <mikadozero@yandex.com>
;;; Copyright © 2019, 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2019, 2020, 2021, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2019 Stefan Stefanović <stefanx2ovic@gmail.com>
;;; Copyright © 2019-2022 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2019 Kei Kebreau <kkebreau@posteo.net>


@@ 114,6 114,7 @@
  #:use-module (gnu packages calendar)
  #:use-module (gnu packages check)
  #:use-module (gnu packages cpio)
  #:use-module (gnu packages crates-io)
  #:use-module (gnu packages crypto)
  #:use-module (gnu packages cryptsetup)
  #:use-module (gnu packages compression)


@@ 123,6 124,7 @@
  #:use-module (gnu packages disk)
  #:use-module (gnu packages docbook)
  #:use-module (gnu packages documentation)
  #:use-module (gnu packages dlang)
  #:use-module (gnu packages elf)
  #:use-module (gnu packages file)
  #:use-module (gnu packages flex)


@@ 143,6 145,7 @@
  #:use-module (gnu packages haskell-apps)
  #:use-module (gnu packages haskell-xyz)
  #:use-module (gnu packages image)
  #:use-module (gnu packages kde-frameworks)
  #:use-module (gnu packages libunwind)
  #:use-module (gnu packages libusb)
  #:use-module (gnu packages llvm)


@@ 166,6 169,7 @@
  #:use-module (gnu packages pulseaudio)
  #:use-module (gnu packages python)
  #:use-module (gnu packages python-xyz)
  #:use-module (gnu packages qt)
  #:use-module (gnu packages readline)
  #:use-module (gnu packages rrdtool)
  #:use-module (gnu packages rsync)


@@ 197,6 201,7 @@
  #:use-module (guix build-system meson)
  #:use-module (guix build-system pyproject)
  #:use-module (guix build-system python)
  #:use-module (guix build-system qt)
  #:use-module (guix build-system trivial)
  #:use-module (guix build-system linux-module)
  #:use-module (guix download)


@@ 7134,6 7139,130 @@ not as a replacement for it.")
                   license:public-domain        ; nist/dfft.c
                   license:gpl3+))))            ; everything else

(define-public hotspot
  (package
    (name "hotspot")
    (version "1.4.1")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/KDAB/hotspot")
                    (commit (string-append "v" version))
                    ;; Include the bundled perfparser and PrefixTickLabels
                    ;; libraries, which are to be used in source form.
                    (recursive? #t)))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "0wz4qr3dwjji79x7kj44g7xp11qsscp3b95h6627k8p7xbpi2vhd"))))
    (build-system qt-build-system)
    (arguments
     (list
      ;; As mentioned in the option help text, the KAuth helper cannot be
      ;; installed to a custom prefix and the build fails with "file cannot
      ;; create directory: /polkit-1/actions.  Maybe need administrative"
      ;; (see: https://bugs.kde.org/show_bug.cgi?id=363678).
      #:configure-flags #~(list "-DINSTALL_KAUTH_HELPER=OFF")
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'patch-perfparser
            ;; XXX: This phase is copied from qt-creator: keep them in sync!
            (lambda* (#:key inputs #:allow-other-keys)
              ;; perfparser attempts to dynamically load the demangle
              ;; libraries; use their absolute file name to avoid having to
              ;; set LD_LIBRARY_PATH.
              (let ((librustc_demangle.so
                     (with-exception-handler (lambda (ex)
                                               (if (search-error? ex)
                                                   #f
                                                   (raise-exception ex)))
                       (lambda ()
                         (search-input-file inputs "lib/librustc_demangle.so"))
                       #:unwind? #t)))
                (substitute* "3rdparty/perfparser/app/demangler.cpp"
                  (("loadDemangleLib\\(QStringLiteral\\(\"rustc_demangle\")"
                    all)
                   (if librustc_demangle.so
                       (format #f "loadDemangleLib(QStringLiteral(~s)"
                               librustc_demangle.so)
                       all))            ;no rustc_demangle; leave unchanged
                  (("loadDemangleLib\\(QStringLiteral\\(\"d_demangle\")")
                   (format #f "loadDemangleLib(QStringLiteral(~s)"
                           (search-input-file inputs
                                              "lib/libd_demangle.so")))))))
          (add-after 'unpack 'path-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/perfoutputwidgetkonsole.cpp"
                (("\"tail\"")
                 (format #f "~s" (search-input-file inputs "bin/tail"))))
              (substitute* "src/perfrecord.cpp"
                (("\"perf( )?\"" _ space)
                 (string-append "\"" (search-input-file inputs "bin/perf")
                                (or space "") "\"")))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                ;; The 'tst_models' and 'tst_callgraphgenerator' fail, with
                ;; the later seemingly requiring sudo or access to the kernel
                ;; trace points.
                (invoke "ctest" "-E"
                        (string-append
                         "("
                         (string-join
                          ;; The 'tst_models' expected output doesn't exactly
                          ;; match.
                          '("tst_models"
                            ;; The 'tst_callgraphgenerator' perf invocation
                            ;; fails when run in the build container.
                            "tst_callgraphgenerator"
                            ;; The 'tst_perfparser' test requires sudo/access
                            ;; to the kernel scheduler trace points.
                            "tst_perfparser")
                          "|")
                         ")"))))))))
    (native-inputs
     (list extra-cmake-modules
           vulkan-headers))
    (inputs
     (append
      (list coreutils-minimal
            d-demangler
            elfutils
            karchive
            kconfig
            kcoreaddons
            kddockwidgets-1    ;see https://github.com/KDAB/hotspot/issues/610
            kgraphviewer
            kio
            kiconthemes
            kitemmodels
            kitemviews
            knotifications
            kparts
            ksyntaxhighlighting
            kwindowsystem
            libxkbcommon
            perf
            qcustomplot
            qtbase-5
            qtdeclarative-5
            qtquickcontrols2-5
            qtsvg-5
            qtx11extras
            solid
            threadweaver
            `(,zstd "lib"))
      (if (supported-package? rust-rustc-demangle-capi-0.1)
          (list rust-rustc-demangle-capi-0.1)
          '())))
    (home-page "https://github.com/KDAB/hotspot")
    (synopsis "Performance analysis GUI for Linux perf")
    (description "Hotspot is a standalone GUI for performance data analysis.
It aims to be similar to KCachegrind, but for data collected with the
@command{perf}, a profiler for use with the kernel Linux.  Its main feature is
graphically visualizing a @file{perf.data} file.")
    (license (list license:gpl2+ license:gpl3+)))) ;dual licensed

(define-public ecryptfs-utils
  (package
    (name "ecryptfs-utils")