civodul pushed a commit to branch master
in repository guix.

commit 6b10633062931e7fc765824012f7cd57e97efd73
Author: Arseniy Zaostrovnykh <necto...@gmail.com>
AuthorDate: Sat Mar 15 18:56:25 2025 +0100

    gnu: uftrace: Enable python and lua scripting and fix tests.
    
    * gnu/packages/patches/uftrace-fix-tests.patch: New file.
    * gnu/local.mk (dist_patch_DATA): Add it.
    * gnu/packages/instrumentation.scm (uftrace): Enable scripting & fix tests
    [source]: use the new patch to fix some stale expectations
    <#:phases>: Adjust shebang embedded in onf of the tests and remove
    tests that expect network capability
    [inputs]: add python and luajit to enable uftrace script
    
    Change-Id: Id3047753a1bb1e41e637004b4b8e4a4865bb3188
    Signed-off-by: Ludovic Courtès <l...@gnu.org>
    Modified-by: Ludovic Courtès <l...@gnu.org>
---
 gnu/local.mk                                 |  1 +
 gnu/packages/instrumentation.scm             | 34 +++++++++++++++++------
 gnu/packages/patches/uftrace-fix-tests.patch | 40 ++++++++++++++++++++++++++++
 3 files changed, 67 insertions(+), 8 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index 8a5f38f4bb..acc1a2bfa7 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2341,6 +2341,7 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/u-boot-nintendo-nes-serial.patch                \
   %D%/packages/patches/u-boot-rockchip-inno-usb.patch          \
   %D%/packages/patches/ucx-tcp-iface-ioctl.patch               \
+  %D%/packages/patches/uftrace-fix-tests.patch                 \
   %D%/packages/patches/ultrastar-deluxe-no-freesans.patch              \
   %D%/packages/patches/ungoogled-chromium-extension-search-path.patch  \
   %D%/packages/patches/ungoogled-chromium-ffmpeg-compat.patch  \
diff --git a/gnu/packages/instrumentation.scm b/gnu/packages/instrumentation.scm
index b42aaa2e2f..b2d65f790e 100644
--- a/gnu/packages/instrumentation.scm
+++ b/gnu/packages/instrumentation.scm
@@ -577,7 +577,8 @@ whole-system symbolic access, and can also handle simple 
tracing jobs.")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32 
"0gk0hv3rnf5czvazz1prg21rf9qlniz42g5b389n8a29hqj4q6xr"))))
+               (base32 "0gk0hv3rnf5czvazz1prg21rf9qlniz42g5b389n8a29hqj4q6xr"))
+              (patches (search-patches "uftrace-fix-tests.patch"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -587,10 +588,7 @@ whole-system symbolic access, and can also handle simple 
tracing jobs.")
       #:make-flags
       #~(list
          (string-append "CC=" #$(cc-for-target)))
-      ;; runtest hangs at some point -- probably due to
-      ;; failed socket connection -- but we want to keep the
-      ;; unit tests.  Change the target to "test" when fixed.
-      #:test-target "unittest"
+      #:test-target "test"
       #:phases
       #~(modify-phases %standard-phases
           (replace 'configure
@@ -606,13 +604,34 @@ whole-system symbolic access, and can also handle simple 
tracing jobs.")
                 (when target
                   (setenv "CROSS_COMPILE" (string-append target "-"))))
               (setenv "SHELL" (which "sh"))
+              (let ((python #$(this-package-input "python"))
+                    (luajit #$(this-package-input "luajit")))
+                (setenv "LDFLAGS" (string-append "-Wl," "-rpath=" python "/lib"
+                                                 ":" luajit "/lib")))
               (invoke "./configure"
                       (string-append "--prefix="
-                                     #$output)))))))
+                                     #$output))))
+          (add-before 'check 'fix-shebang
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "tests/t220_trace_script.py"
+                (("/bin/sh")
+                 (search-input-file inputs "bin/sh")))))
+          (add-after 'unpack 'delete-network-tests
+            (lambda _
+              ;; These tests require network capability (localhost)
+              (for-each delete-file
+                        '("tests/t141_recv_basic.py"
+                          "tests/t142_recv_multi.py"
+                          "tests/t143_recv_kernel.py"
+                          "tests/t150_recv_event.py"
+                          "tests/t151_recv_runcmd.py"
+                          "tests/t167_recv_sched.py")))))))
     (inputs
      (list capstone
            elfutils
            libunwind
+           python ;; libpython3.10.so for python scripting
+           luajit ;; libluajit-5.1.so for lua scripting
            ncurses))
     (native-inputs
      (list luajit
@@ -625,6 +644,5 @@ whole-system symbolic access, and can also handle simple 
tracing jobs.")
 programs written in C/C++.  It is heavily inspired by the ftrace framework of
 the Linux kernel, while supporting userspace programs.  It supports various
 kind of commands and filters to help analysis of the program execution and
-performance.  It provides the command @command{uftrace}.  User that want to do
-scripting need to install python-3 or luajit in their profile.")
+performance.  It provides the command @command{uftrace}.")
     (license license:gpl2)))
diff --git a/gnu/packages/patches/uftrace-fix-tests.patch 
b/gnu/packages/patches/uftrace-fix-tests.patch
new file mode 100644
index 0000000000..c95610e308
--- /dev/null
+++ b/gnu/packages/patches/uftrace-fix-tests.patch
@@ -0,0 +1,40 @@
+Adjust test expectations to match the guix platform
+--- a/tests/t192_lib_name.py
++++ b/tests/t192_lib_name.py
+@@ -44,4 +44,4 @@ class TestCase(TestBase):
+         ver = v.split('\n')[0].split(') ')[1]
+         ver.strip()
+ 
+-        return re.sub("libc-[\d.]+.so", "libc-%s.so" % ver, result)
++        return re.sub("libc-2.26.so", "libc.so.6", result)
+--- a/tests/t251_exception4.py
++++ b/tests/t251_exception4.py
+@@ -5,16 +5,18 @@ from runtest import TestBase
+ class TestCase(TestBase):
+     def __init__(self):
+         TestBase.__init__(self, 'libexcept-main', lang='C++', result="""
+-# DURATION    TID     FUNCTION
+-            [423633] | main() {
+-            [423633] |   XXX::XXX() {
+-  30.679 us [423633] |     XXX::XXX();
+-  31.490 us [423633] |   } /* XXX::XXX */
+-            [423633] |   YYY::YYY() {
+-   0.509 us [423633] |     __cxa_allocate_exception();
+-   0.541 us [423633] |     std::runtime_error::runtime_error();
+-   5.670 us [423633] |   } /* YYY::YYY */
+-  42.354 us [423633] | } /* main */
++# DURATION     TID     FUNCTION
++            [ 39887] | main() {
++            [ 39887] |   XXX::XXX() {
++  35.591 us [ 39887] |     XXX::XXX();
++  36.215 us [ 39887] |   } /* XXX::XXX */
++   5.617 us [ 39887] |   std::runtime_error::~runtime_error();
++            [ 39887] |   YYY::YYY() {
++   0.291 us [ 39887] |     __cxa_allocate_exception();
++   0.399 us [ 39887] |     std::runtime_error::runtime_error();
++   3.683 us [ 39887] |   } /* YYY::YYY */
++   0.122 us [ 39887] |   std::runtime_error::~runtime_error();
++  48.809 us [ 39887] | } /* main */
+ """)
+ 
+     def build(self, name, cflags='', ldflags=''):

Reply via email to