Subject: [bug#73896] [PATCH v4 06/20] gnu: clamav: Update to 1.4.1.

From: Nicolas Graves <[email-masked]>
Date: Wed, 6 Nov 2024 00:14:54 +0100

* gnu/packages/antivirus.scm (clamav): Update to 1.4.1.
[source]<origin>: Adapt source. This currently is not unbundling all
cargo vendored packages.
[build-system]: Switch to cmake-build-system.
[arguments]: Move field up.
<#:configure-flags>: Set option.
<#:imported-modules>: Set option for patching cargo checksums.
<#:phases>: Remove all phases except adapted 'skip-clamd_tests. Add
phases 'inject-rust-onenote and 'patch-cargo-checksums.
[native-inputs]: Remove autoconf, automake, libtool. Add
python-minimal, python-pytest, rust and rust:cargo.
[inputs]: Remove libltdl, libmspack, llvm-3.6, cyrus-sasl,
tomsfastmath.
---
 gnu/packages/antivirus.scm | 129 +++++++++++++++----------------------
 1 file changed, 51 insertions(+), 78 deletions(-)

diff --git a/gnu/packages/antivirus.scm b/gnu/packages/antivirus.scm
index 2161d60398..1a23657a61 100644
--- a/gnu/packages/antivirus.scm
+++ b/gnu/packages/antivirus.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Eric Bavier <[email-masked]>
 ;;; Copyright © 2018 Christopher Baines <[email-masked]>
 ;;; Copyright © 2019–2021 Tobias Geerinckx-Rice <[email-masked]>
+;;; Copyright © 2024 Nicolas Graves <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,24 +21,23 @@
 
 (define-module (gnu packages antivirus)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system cargo)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
   #:use-module (gnu packages)
-  #:use-module (gnu packages autotools)
-  #:use-module (gnu packages bison)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
-  #:use-module (gnu packages cyrus-sasl)
-  #:use-module (gnu packages flex)
-  #:use-module (gnu packages llvm)
-  #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
+  #:use-module (gnu packages rust)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml))
@@ -45,7 +45,7 @@ (define-module (gnu packages antivirus)
 (define-public clamav
   (package
     (name "clamav")
-    (version "0.103.11")
+    (version "1.4.1")
     (source (origin
               (method url-fetch)
               (uri
@@ -57,90 +57,63 @@ (define-public clamav
                                "/clamav-" version ".tar.gz")))
               (sha256
                (base32
-                "04by1g3p6awhi3j1y6zpwzmasdnvjgi6lwm34l2gadlwgkdfpmv1"))
+                "1n3a87niad76h3mn3qxq9379gppdjqpkhwb9qkbb79irmj0ff653"))
               (modules '((guix build utils)))
               (snippet
                '(begin
+                  (delete-file "Cargo.lock")
+                  (for-each
+                   delete-file
+                   (find-files ".cargo/vendor" ".cargo-checksum\\.json"))
                   (for-each delete-file-recursively
                             '("win32"                  ; unnecessary
-                              "libclamav/c++/llvm"     ; use system llvm
-                              "libclamav/tomsfastmath" ; use system tomsfastmath
-                              "libclamunrar"))))       ; non-free license
-              (patches
-               (search-patches "clamav-system-tomsfastmath.patch"
-                               "clamav-config-llvm-libs.patch"))))
-    (build-system gnu-build-system)
+                              "libclamunrar"))))))     ; non-free license
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:configure-flags
+      #~(list "-DENABLE_MILTER=OFF" "-DENABLE_UNRAR=OFF")
+      #:imported-modules `((guix build cargo-utils)
+                           ,@%cmake-build-system-modules)
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'inject-rust-onenote
+            (lambda _
+              (substitute* "libclamav_rust/Cargo.toml"
+                (("onenote_parser = .*")
+                 "onenote_parser = \"0.3.1\"\n"))))
+          (add-after 'patch-source-shebangs 'patch-cargo-checksums
+            (lambda _
+              (use-modules
+               (srfi srfi-1) (ice-9 ftw) (guix build cargo-utils))
+              (with-directory-excursion ".cargo/vendor"
+                (for-each generate-all-checksums
+                          (delete "." (delete ".." (scandir ".")))))))
+          (add-after 'unpack 'skip-clamd-tests
+            ;; XXX: The check?_clamd tests fail inside the build
+            ;; chroot, but pass outside.
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (substitute* "unit_tests/CMakeLists.txt"
+                  (("clamd_test\\.py" test)
+                   (string-append
+                    test " -k \"not test_clamd_08_VirusEvent\"")))))))))
     (native-inputs
-     (list autoconf
-           automake
-           check ; for tests
-           libtool
-           pkg-config))
+     (list check ; for tests
+           pkg-config
+           python-minimal
+           python-pytest
+           rust
+           (list rust "cargo")))
     (inputs
       (list bzip2
             curl
             json-c
-            libltdl
-            libmspack
-            llvm-3.6               ; requires <3.7, for JIT/verifier
-            ncurses
             libressl
-            pcre2
-            cyrus-sasl             ; for linking curl with libtool
-            tomsfastmath
             libxml2
+            ncurses
+            pcre2
             zlib))
-    (arguments
-      (list #:configure-flags
-            #~(let-syntax ((with (syntax-rules ()
-                            ((_ name use)
-                             (string-append "--with-" name "="
-                                            (assoc-ref %build-inputs use))))))
-              (list "--disable-unrar"
-                    "--enable-llvm"
-                    "--with-system-llvm"
-                    "--with-system-libmspack"
-                    "--without-included-ltdl"
-                    (with "xml" "libxml2")
-                    (with "openssl" "libressl")
-                    (with "libjson" "json-c")
-                    (with "pcre2" "pcre2")
-                    (with "zlib" "zlib")
-                    (with "libcurl" "curl")
-                    ;; For sanity, specifying --enable-* flags turns
-                    ;; "support unavailable" warnings into errors.
-                    "--enable-bzip2"
-                    "--enable-check"
-                    "--sysconfdir=/etc/clamav"
-                    ;; Default database directory needs to be writeable
-                    "--with-dbdir=/var/db/clamav"))
-            ;; install sample .conf files to %output/etc rather than /etc/clamav
-            #:make-flags
-            #~(list (string-append "sysconfdir=" %output "/etc"))
-            #:phases
-            #~(modify-phases %standard-phases
-                ;; Regenerate configure script.  Without this we don't get
-                ;; the correct value for LLVM linker variables.
-                (add-after 'unpack 'reconf
-                  (lambda _ (invoke "autoreconf" "-vfi")))
-                (add-before 'configure 'patch-llvm-config
-                  (lambda _
-                    (substitute* '("libclamav/c++/detect.cpp"
-                                   "libclamav/c++/ClamBCRTChecks.cpp"
-                                   "libclamav/c++/bytecode2llvm.cpp")
-                      (("llvm/Config/config.h") "llvm/Config/llvm-config.h"))
-                    ;; `llvm-config --libfiles` inappropriately lists lib*.a
-                    ;; libraries, rather than the lib*.so's that our llvm
-                    ;; contains.  They're used only for listing extra build
-                    ;; dependencies, so ignore them until that's fixed.
-                    (substitute* "libclamav/c++/Makefile.in"
-                      (("@LLVMCONFIG_LIBFILES@") ""))))
-                (add-before 'check 'skip-clamd-tests
-                  ;; XXX: The check?_clamd tests fail inside the build
-                  ;; chroot, but pass outside.
-                  (lambda _
-                    (substitute* "unit_tests/Makefile"
-                      (("check2_clamd.sh.*check4_clamd.sh") "")))))))
     (home-page "https://www.clamav.net")
     (synopsis "Antivirus engine")
     (description
-- 
2.46.0