~ruther/guix-local

986245daca2fb50d58cf0f2b9273f0d670d38af2 — Nicolas Graves 1 year, 7 months ago d77c800
gnu: clamav: Unbundle rust dependencies.

* gnu/packages/antivirus.scm (clamav)
[origin]<snippet>: 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 <efraim@flashner.co.il>
Change-Id: Ibcd53f61e51e8a099050e98ca89371f9af243753
1 files changed, 71 insertions(+), 22 deletions(-)

M gnu/packages/antivirus.scm
M gnu/packages/antivirus.scm => gnu/packages/antivirus.scm +71 -22
@@ 31,12 31,18 @@
  #: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 @@
              (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 @@
                    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