From 986245daca2fb50d58cf0f2b9273f0d670d38af2 Mon Sep 17 00:00:00 2001 From: Nicolas Graves Date: Wed, 6 Nov 2024 00:15:08 +0100 Subject: [PATCH] gnu: clamav: Unbundle rust dependencies. * gnu/packages/antivirus.scm (clamav) [origin]: Unbundle rust dependencies. [build-system]: Switch to cargo-build-system. [arguments]: Adapt to the change of base build-system. [native-inputs]: Add cmake-minimal. Remove rust and rust:cargo. Signed-off-by: Efraim Flashner Change-Id: Ibcd53f61e51e8a099050e98ca89371f9af243753 --- gnu/packages/antivirus.scm | 93 +++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 22 deletions(-) diff --git a/gnu/packages/antivirus.scm b/gnu/packages/antivirus.scm index 1a23657a61..7ee4adddec 100644 --- a/gnu/packages/antivirus.scm +++ b/gnu/packages/antivirus.scm @@ -31,12 +31,18 @@ (define-module (gnu packages antivirus) #:use-module (gnu packages) #:use-module (gnu packages check) #:use-module (gnu packages compression) + #:use-module (gnu packages cmake) + #:use-module (gnu packages crates-compression) + #:use-module (gnu packages crates-crypto) + #:use-module (gnu packages crates-graphics) + #:use-module (gnu packages crates-io) #:use-module (gnu packages curl) #: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-apps) #:use-module (gnu packages rust) #:use-module (gnu packages tls) #:use-module (gnu packages web) @@ -61,34 +67,78 @@ (define-public clamav (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 + '(".cargo" ; vendored rust inputs + "win32" ; unnecessary "libclamunrar")))))) ; non-free license - (build-system cmake-build-system) + (build-system cargo-build-system) (arguments (list - #:configure-flags - #~(list "-DENABLE_MILTER=OFF" "-DENABLE_UNRAR=OFF") - #:imported-modules `((guix build cargo-utils) - ,@%cmake-build-system-modules) + #:install-source? #f + #:cargo-inputs + `(("rust-flate2" ,rust-flate2-1) + ("rust-hex" ,rust-hex-0.4) + ("rust-libc" ,rust-libc-0.2) + ("rust-log" ,rust-log-0.4) + ("rust-sha2" ,rust-sha2-0.10) + ("rust-tempfile" ,rust-tempfile-3) + ("rust-thiserror" ,rust-thiserror-1) + ("rust-image" ,rust-image-0.24) + ("rust-rustdct" ,rust-rustdct-0.7) + ("rust-transpose" ,rust-transpose-0.2) + ("rust-num-traits" ,rust-num-traits-0.2) + ("rust-base64" ,rust-base64-0.21) + ("rust-sha1" ,rust-sha1-0.10) + ("rust-unicode-segmentation" ,rust-unicode-segmentation-1) + ("rust-bindgen" ,rust-bindgen-0.65) + ("rust-onenote-parser-for-clamav" ,rust-onenote-parser-for-clamav) + ("rust-hex-literal" ,rust-hex-literal-0.4) + ("rust-inflate" ,rust-inflate-0.4) + ("rust-bzip2-rs" ,rust-bzip2-rs-0.1) + ("rust-byteorder" ,rust-byteorder-1) + ("rust-delharc" ,rust-delharc-0.6) + ("rust-cbindgen" ,rust-cbindgen)) + #:vendor-dir ".cargo/vendor" + #:imported-modules `(,@%cmake-build-system-modules + ,@%cargo-build-system-modules) + #:modules '((guix build cargo-build-system) + ((guix build cmake-build-system) #:prefix cmake:) + (guix build utils)) #:phases #~(modify-phases %standard-phases - (add-after 'unpack 'inject-rust-onenote + ;; There is a test.exe file used in unit tests. + (delete 'check-for-pregenerated-files) + (add-after 'configure 'fix-cargo-inputs-vendoring + (lambda _ + ;; Reproduce the original layout, fails with config. + (rename-file ".cargo/config" ".cargo/config.toml") + ;; Wrongly placed by configure + (delete-file-recursively + (string-append ".cargo/vendor/clamav-" #$version ".tar.zst")))) + (add-after 'patch-cargo-checksums 'cmake-configure + (lambda* (#:key outputs #:allow-other-keys) + ((assoc-ref cmake:%standard-phases 'configure) + #:configure-flags + (list "-DENABLE_MILTER=OFF" "-DENABLE_UNRAR=OFF") + #:outputs outputs))) + (replace 'build + (assoc-ref cmake:%standard-phases 'build)) + (add-after 'patch-cargo-checksums 'patch-rust-requirements (lambda _ (substitute* "libclamav_rust/Cargo.toml" + ;; We make sure we use their fork. (("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 "."))))))) + "onenote_parser = \"*\"\n") + ;; As long as it builds later versions of (c)bindgen are fine + (("cbindgen = \\{ version =\".*\",") + "cbindgen = { version = \"*\",")))) + (replace 'install + (assoc-ref cmake:%standard-phases 'install)) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + ((assoc-ref cmake:%standard-phases 'check) + #:tests? tests? + #:test-target "test"))) (add-after 'unpack 'skip-clamd-tests ;; XXX: The check?_clamd tests fail inside the build ;; chroot, but pass outside. @@ -100,11 +150,10 @@ (define-public clamav test " -k \"not test_clamd_08_VirusEvent\""))))))))) (native-inputs (list check ; for tests + cmake-minimal pkg-config python-minimal - python-pytest - rust - (list rust "cargo"))) + python-pytest)) (inputs (list bzip2 curl