Subject: [bug#62822] [PATCH] gnu: js8call: Improve package style.

From: Sharlatan Hellseher <[email-masked]>
Date: Thu, 13 Apr 2023 23:27:14 +0100

* gnu/packages/radio.scm (js8call):
  Use Gexp and shift order of components.
  [tests]: Enable them.
  [arguments]<phases>: In fix-paths phase add more steps to modify test
  script. Replace check phase with in-project script.
  [native-inputs]: Remove labels.
  [inputs]: As above.
---
 gnu/packages/radio.scm | 83 +++++++++++++++++++++++++-----------------
 1 file changed, 49 insertions(+), 34 deletions(-)

diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index c589f95954..6f8b2ec9f7 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2022 Sheng Yang <[email-masked]>
 ;;; Copyright © 2022 Greg Hogan <[email-masked]>
 ;;; Copyright © 2022 Ryan Tolboom <[email-masked]>
+;;; Copyright © 2023 Sharlatan Hellseher <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1603,49 +1604,63 @@ (define-public js8call
         (base32 "149sjwc4zg6ckgq26af93p4fxappa4k9dh7rdy67g8ajfjad4cd8"))
        (modules '((guix build utils)))
        (snippet
-        '(begin
-           ;; Delete bundled boost to use the shared one.
-           (delete-file-recursively "boost")
-           #t))))
+        #~(begin
+            ;; Delete bundled boost to use the shared one.
+            (delete-file-recursively "boost")))))
     (build-system qt-build-system)
-    (native-inputs
-     (list asciidoc gfortran pkg-config qttools-5 ruby-asciidoctor))
-    (inputs
-     `(("boost" ,boost)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("hamlib" ,wsjtx-hamlib)
-       ("libusb" ,libusb)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia-5" ,qtmultimedia-5)
-       ("qtserialport" ,qtserialport)))
     (arguments
-     `(#:tests? #f ; No test suite
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-paths
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "CMakeLists.txt"
-               (("DESTINATION /usr/share")
-                (string-append "DESTINATION "
-                               (assoc-ref outputs "out")
-                               "/share")))))
-         (add-after 'unpack 'fix-hamlib
-           (lambda _
-             (substitute* "CMake/Modules/Findhamlib.cmake"
-               (("set \\(ENV\\{PKG_CONFIG_PATH\\}.*\\)")
-                "set (__pc_path $ENV{PKG_CONFIG_PATH})
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-paths
+            (lambda _
+              ;; XXX: How to get the /tmp/<build-name>.drv-<num> path? Use
+              ;; output path for after install check phase instead.
+              (substitute* "media/tests/test"
+                (("~/js8call-prefix/build/js8")
+                 (string-append #$output "/bin/js8"))
+                (("/opt/js8call/bin/js8")
+                 (string-append #$output "/bin/js8")))
+              (substitute* "CMakeLists.txt"
+                (("DESTINATION /usr/share")
+                 (string-append "DESTINATION " #$output "/share")))))
+          (add-after 'unpack 'fix-hamlib
+            (lambda _
+              (substitute* "CMake/Modules/Findhamlib.cmake"
+                (("set \\(ENV\\{PKG_CONFIG_PATH\\}.*\\)")
+                 "set (__pc_path $ENV{PKG_CONFIG_PATH})
   list (APPEND __pc_path \"${__hamlib_pc_path}\")
   set (ENV{PKG_CONFIG_PATH} \"${__pc_path}\")"))
-             (substitute* "HamlibTransceiver.hpp"
-               (("#ifdef JS8_USE_LEGACY_HAMLIB")
-                "#if 1")))))))
+              (substitute* "HamlibTransceiver.hpp"
+                (("#ifdef JS8_USE_LEGACY_HAMLIB")
+                 "#if 1"))))
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (with-directory-excursion "../js8call/media/tests"
+                  (invoke "./test"))))))))
+    (native-inputs
+     (list asciidoc
+           gfortran
+           pkg-config
+           qttools-5
+           ruby-asciidoctor))
+    (inputs
+     (list boost
+           fftw
+           fftwf
+           libusb
+           qtbase-5
+           qtmultimedia-5
+           qtserialport
+           wsjtx-hamlib))
+    (home-page "http://js8call.com/")
     (synopsis "Weak-signal ham radio communication program")
     (description
      "JS8Call is a software using the JS8 digital mode (a derivative of the FT8
 mode) providing weak signal keyboard to keyboard messaging to amateur radio
 operators.")
-    (home-page "http://js8call.com/")
     (license license:gpl3)))
 
 (define-public xnec2c
-- 
2.39.2