about summary refs log tree commit diff
path: root/gn
diff options
context:
space:
mode:
Diffstat (limited to 'gn')
-rw-r--r--gn/packages/bioinformatics.scm435
-rw-r--r--gn/packages/perl.scm196
2 files changed, 627 insertions, 4 deletions
diff --git a/gn/packages/bioinformatics.scm b/gn/packages/bioinformatics.scm
index 91901a6..677de1d 100644
--- a/gn/packages/bioinformatics.scm
+++ b/gn/packages/bioinformatics.scm
@@ -12,12 +12,14 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
+  #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system waf)
   #:use-module (gnu packages)
   #:use-module (gn packages crates-io)
   #:use-module (gn packages java)
+  #:use-module (gn packages perl)
   #:use-module (gn packages python)
   #:use-module (gn packages twint)
   #:use-module (gnu packages algebra)
@@ -2407,3 +2409,436 @@ To run the bundled rtg-tools software you will also need java.  The
 @code{icedtea:jdk} output should work nicely.")
    (license (list license:expat     ; bundled jsoncpp, klib
                   license:bsd-2))))
+
+(define-public braker
+  (package
+    (name "braker")
+    (version "2.1.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/Gaius-Augustus/BRAKER")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0jx9ycyh8s42yb4va84mcjyh7m95wzvf42skc3p4pvc5r7c5ns41"))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:modules ((srfi srfi-26)
+                  (guix build perl-build-system)
+                  (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "prove" "-l" "t"))))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (with-directory-excursion "scripts"
+                 (for-each (cut install-file <> bin)
+                           (find-files "." "\\.(py|pl|pm)$"))
+                 (for-each
+                   (cut wrap-script <>
+                        `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")
+                                                 ,bin)))
+                   ;; braker.pl is the entry point so wrap it separately.
+                   (delete (string-append bin "/braker.pl")
+                           (find-files bin "\\.pl$")))
+                 (wrap-script (string-append bin "/braker.pl")
+                   `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")
+                                             ,bin))
+                   `("PATH" ":" prefix (;,(assoc-ref inputs "augustus")
+                                        ;,(assoc-ref inputs "genemark")
+                                        ,(assoc-ref inputs "bamtools")
+                                        ,(assoc-ref inputs "samtools")
+                                        ,(assoc-ref inputs "prothint")
+                                        ;,(assoc-ref inputs "genomethreader")
+                                        ,(assoc-ref inputs "spaln")
+                                        ,(assoc-ref inputs "exonerate")
+                                        ,(assoc-ref inputs "ncbi-blast")
+                                        ,(assoc-ref inputs "diamond")
+                                        ,(assoc-ref inputs "cdbfasta")
+                                        ;,(assoc-ref inputs "gushr")
+                                        ;,(assoc-ref inputs "ucsc")
+                                        ))
+                   ;`("GENEMARK_PATH" "=" (,(string-append (assoc-ref inputs "genemark") "/bin")))
+                   ;`("AUGUSTUS_BIN_PATH" "=" (,(string-append (assoc-ref inputs "augustus") "/bin")))
+                   ;`("AUGUSTUS_AUGUSTUS_SCRIPTS_PATH" "=" (,(string-append (assoc-ref inputs "augustus") "/bin/augustus_scripts")))
+                   `("PYTHON3_PATH" "=" (,(string-append (assoc-ref inputs "python") "/bin")))
+                   `("BAMTOOLS_PATH" "=" (,(string-append (assoc-ref inputs "bamtools") "/bin")))
+                   `("DIAMOND_PATH" "=" (,(string-append (assoc-ref inputs "diamond") "/bin")))
+                   `("BLAST_PATH" "=" (,(string-append (assoc-ref inputs "blast+") "/bin")))
+                   `("PROTHINT_PATH" "=" (,(string-append (assoc-ref inputs "prothint") "/bin")))
+                   `("SAMTOOLS_PATH" "=" (,(string-append (assoc-ref inputs "samtools") "/bin")))
+                   `("CDBTOOLS_PATH" "=" (,(string-append (assoc-ref inputs "cdbfasta") "/bin")))
+                   `("ALIGNMENT_TOOL_PATH" "=" (,(string-append (assoc-ref inputs "spaln") "/bin/spaln")
+                                                ,(string-append (assoc-ref inputs "exonerate") "/bin/exonerate")))
+                   ;`("MAKEHUB_PATH" "=" (,(string-append (assoc-ref inputs "makehub") "/bin")))
+                   )
+                 ))))
+         )))
+    (inputs
+     `(
+       ("guile" ,guile-3.0)             ; for wrap-script
+
+       ;("augustus" ,augustus)
+       ;("genemark" ,genemark)
+       ("bamtools" ,bamtools)
+       ("samtools" ,samtools)
+       ("prothint" ,prothint)
+       ;("genometracker" ,genometracker)
+       ("spaln" ,spaln)
+       ("exonerate" ,exonerate)
+       ("ncbi-blast" ,blast+)
+       ("diamond" ,diamond)
+       ("cbdfasta" ,cbdfasta)           ; provides cdbfasta and cdbyank
+       ;("gushr" ,gushr)
+       ;("makehub" ,makehub)
+       ;("ucsc" ,ucsc-genome-browser)       ; provides bin/twoBitInfo and bin/faToTwoBit
+
+       ("perl" ,perl)
+       ("perl-hash-merge" ,perl-hash-merge)
+       ("perl-math-utils" ,perl-math-utils)
+       ("perl-mce" ,perl-mce)
+       ("perl-module-load-conditional" ,perl-module-load-conditional)
+       ("perl-parallel-forkmanager" ,perl-parallel-forkmanager)
+       ("perl-yaml" ,perl-yaml)
+       ("python" ,python)
+       ))
+    (native-inputs
+     `(
+       ))
+    (home-page "https://github.com/Gaius-Augustus/BRAKER")
+    (synopsis
+     "Pipeline for fully automated prediction of protein coding gene structures")
+    (description "The rapidly growing number of sequenced genomes requires
+fully automated methods for accurate gene structure annotation.  With this goal
+in mind, we have developed BRAKER1, a combination of GeneMark-ET and AUGUSTUS
+that uses genomic and RNA-Seq data to automatically generate full gene structure
+annotations in novel genome.
+However, the quality of RNA-Seq data that is available for annotating a novel
+genome is variable, and in some cases, RNA-Seq data is not available, at all.
+BRAKER2 is an extension of BRAKER1 which allows for fully automated training of
+the gene prediction tools GeneMark-EX and AUGUSTUS from RNA-Seq and/or protein
+homology information, and that integrates the extrinsic evidence from RNA-Seq
+and protein homology information into the prediction.
+In contrast to other available methods that rely on protein homology
+information, BRAKER2 reaches high gene prediction accuracy even in the absence
+of the annotation of very closely related species and in the absence of
+RNA-Seq data.")
+    (license license:artistic2.0)))
+
+(define-public prothint
+  (package
+    (name "prothint")
+    (version "2.6.0")
+    (source
+     (origin
+       ;; Tests not included in release.
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/gatech-genemark/ProtHint")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0fwz8rxlmfxn5im2ck0jnqi3qaps1rnpkbh0l8k0waw2di5982zf"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Lets at least remove the executables ...
+           (delete-file "dependencies/diamond")
+           (delete-file "dependencies/probuild")
+           (delete-file "dependencies/spaln")
+           (delete-file "dependencies/spaln_boundary_scorer")))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:tests? #f          ; TODO: Test suite fails, or packaging is wrong?
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'adjust-source
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "bin/spalnBatch.sh"
+               (("\\$binDir/\\.\\./dependencies/spaln\\\"")
+                (string-append (assoc-ref inputs "spaln") "/bin/spaln\""))
+               (("\\$binDir/\\.\\./dependencies/spaln_boundary_scorer\\\"")
+                (string-append (assoc-ref inputs "spaln-boundary-scorer")
+                               "/bin/spaln_boundary_scorer\""))
+               (("\\$binDir/\\.\\./dependencies/spaln_table\\\"")
+                (string-append (assoc-ref inputs "spaln")
+                               "/share/spaln/table\""))
+               )))
+         (delete 'configure)
+         (delete 'build)
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (substitute* "tests/common.py"
+                 (("/bin/bash") (which "bash")))
+               (invoke "./tests/test_ProtHint.py")
+               (invoke "./tests/test_Spaln.py")
+               (invoke "./tests/test_iter.py"))))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (with-directory-excursion "scripts"
+                 (for-each (cut install-file <> bin)
+                           (find-files "bin" "\\.(pl|py|sh)$"))
+                 (for-each
+                   (cut wrap-script <>
+                        `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB"))))
+                   (find-files bin "\\.pl$"))
+                 (for-each
+                   (cut wrap-script <>
+                        `("PATH" ":" prefix (,(assoc-ref inputs "coreutils")
+                                             ,(assoc-ref inputs "diamond")
+                                             ;,(assoc-ref inputs "genemark")
+                                             ,(assoc-ref inputs "grep")
+                                             ,(assoc-ref inputs "spaln"))))
+                   (find-files bin "\\.py$")))))))))
+    (inputs
+     `(("guile" ,guile-3.0)             ; for wrap-script
+
+       ;("genemark" ,genemark)
+       ("spaln" ,spaln)
+       ("spaln-boundary-scorer" ,spaln-boundary-scorer)
+       ("diamond" ,diamond)
+       ("grep" ,grep)
+
+       ("perl" ,perl)
+       ("perl-mce" ,perl-mce)
+       ("perl-math-utils" ,perl-math-utils)
+       ("perl-yaml" ,perl-yaml)
+       ("python" ,python)))
+    (home-page "https://github.com/gatech-genemark/ProtHint")
+    (synopsis
+     "Protein hint generation pipeline for gene finding in eukaryotic genomes")
+    (description "ProtHint is a pipeline for predicting and scoring hints (in
+the form of introns, start and stop codons) in the genome of interest by mapping
+and spliced aligning predicted genes to a database of reference protein
+sequences.")
+    ;; Licensee may use the Product solely for Licensee's own internal research purposes.
+    (license license:non-copyleft)))
+
+(define-public cdbfasta
+  (let ((commit "014498c66eebdd59b6f1b97e8aad0fcedbdd20b1")             ; Oct 5, 2018
+        (revision "4"))
+    (package
+      (name "cdbfasta")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/gpertea/cdbfasta")
+                     (commit commit)))
+               (file-name (git-file-name name version))
+               (sha256
+                (base32
+                 "1gqgv3q9qwdq6lqnxd9xnfc7bzkxkiz4crr0vmywafsvwvg6nghk"))))
+      (build-system gnu-build-system)
+      (arguments
+       '(#:tests? #f                ; TODO: run test suite.
+         #:phases
+         (modify-phases %standard-phases
+          (delete 'configure)       ; No configure script.
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "perl" "perltest.pl" "<fasta.cidx>" "<key>"))))
+          (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((bin (string-append (assoc-ref outputs "out")
+                                        "/bin/")))
+                (install-file "cdbfasta" bin)
+                (install-file "cdbyank" bin)
+                #t))))))
+      (inputs
+       `(("zlib" ,zlib)))
+      (native-inputs
+       `(("perl" ,perl)))
+      (home-page "https://github.com/gpertea/cdbfasta")
+      (synopsis "CDB (Constant DataBase) indexing and retrieval tools for FASTA files")
+      (description
+       "This package provides platform independent file-based hashing tools
+(cdbfasta and cdbyank) that can be used for creating indices for quick retrieval
+of any particular sequences from large multi-FASTA files.")
+      (license license:artistic2.0))))
+
+(define-public spaln
+  (package
+    (name "spaln")
+    (version "2.4.11")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/ogotoh/spaln")
+              (commit (string-append "ver." version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "049jmaf06v8h8b7fxnwf713dg1hkpb1nf3v4glkvxmq9jwv3d90y"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list "--use_zlib=1"
+               (string-append "--exec_prefix=" out "/bin")
+               (string-append "--table_dir=" out "/share/spaln/table")
+               (string-append "--alndbs_dir=" out "/share/spaln/seqdb")))
+       #:test-target "test"
+       #:tests? #f                          ; test.sh not included in source
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _
+             (chdir "src")))
+         (add-before 'configure 'adjust-source
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "Makefile.in"
+               (("CFLAGS =") "CFLAGS +=")
+               (("(\\s+)\\./makmdm.*" all space)
+                (string-append space "chmod +w $(table_dir)/mdm_*\n" all
+                               space "chmod -w $(table_dir)/mdm_*\n")))))
+         (replace 'configure
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             ;; The custom configure script doesn't recognize some common flags.
+             (apply invoke "./configure" configure-flags)))
+         ;; Move 'check phase to after 'install.
+         (delete 'check)
+         (add-after 'install 'check
+           (assoc-ref %standard-phases 'check))
+         (add-after 'install 'make-tarballs-writable
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each make-file-writable (find-files out "\\.gz$")))))
+         (add-after 'install 'install-manpages
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((man1 (string-append (assoc-ref outputs "out")
+                                        "/share/man/man1")))
+               (mkdir-p man1)
+               (install-file "../spaln.1" man1)
+               (install-file "../sortgrcd.1" man1))))
+         (add-before 'install-license-files 'chdir
+           (lambda _
+             (chdir "../"))))))
+    (inputs
+     `(("zlib" ,zlib)))
+    (home-page "https://github.com/ogotoh/spaln")
+    (synopsis
+     "Genome mapping and spliced alignment of cDNA or amino acid sequences")
+    (description "@acronym{Spaln, space-efficient spliced alignment} is a
+stand-alone program that maps and aligns a set of cDNA or protein sequences onto
+a whole genomic sequence in a single job.  Spaln also performs spliced or
+ordinary alignment after rapid similarity search against a protein sequence
+database, if a genomic segment or an amino acid sequence is given as a query.")
+    (license license:gpl2+)))
+
+(define-public spaln-boundary-scorer
+  (let ((commit "b48977154a75a8559ff0398b8858dc2a51768632")
+        (revision "1"))
+    (package
+      (name "spaln-boundary-scorer")
+      (version "0.0.0")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+                (url "https://github.com/gatech-genemark/spaln-boundary-scorer")
+                (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1f2q37kgw1vk0g3xqq7dkq2wvl6vsfbc58g9g487mq7prjb7nkqc"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:test-target "test"
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (replace 'check
+             (lambda* (#:key tests? test-target #:allow-other-keys)
+               (when tests?
+                 (invoke "make" test-target)
+                 (invoke "./test/t_spaln_boundary_scorer"))))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (install-file "spaln_boundary_scorer" bin)))))))
+      (home-page "https://github.com/gatech-genemark/spaln-boundary-scorer")
+      (synopsis
+       "Parse introns, starts, stops and exons from Spaln's alignment output and scores them")
+      (description "Spaln boundary scorer parses introns, starts, stops and
+exons from Spaln's alignment output and scores them.  Introns, starts and stops
+are scored based on local alignment quality around their boundaries.")
+      ;; https://github.com/gatech-genemark/spaln-boundary-scorer/issues/1
+      (license license:non-copyleft))))
+
+;; Not currently working
+(define-public genemark
+  (package
+    (name "genemark")
+    (version "4.68")
+    (source
+     (origin
+       (method url-fetch)
+       (uri "file:///gnu/store/1xjfwgqz6kif8a9dy0hlc3a67vjrpipx-gmes_linux_64.tar.gz")
+       (file-name "gmes_linux_64.tar.gz")
+       (sha256
+        (base32
+         "11j7fr3jmammicvdphq69sh8wmi56aipxiimb6vdfc9z3lafz308"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (delete-file-recursively "ProtHint")))))
+    (build-system gnu-build-system)
+    (arguments
+     `(
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (add-after 'unpack 'add-license-key
+           (lambda _
+             (setenv "HOME" (getcwd))
+             ;; Provided key good until ~ 2022-09-04
+             (with-output-to-file ".gm_key"
+               (lambda _
+                 (format #t
+                         "AACCCACTCACGGGCCAGGGTTTGAGCACTCGAGCTAGTGCAGCATGTTTTTTTTTTTTTTTTCATATGAGCGCCAGTGG~@
+                          454168340~%")))))
+         ;; This doesn't work, it's statically linked
+         ;(add-after 'unpack 'set-interpreter
+         ;  (lambda* (#:key inputs #:allow-other-keys)
+         ;    (invoke "patchelf" "--set-interpreter" (car (find-files (assoc-ref inputs "libc") "ld-linux.*\\.so")) "gmhmme3")))
+         (replace 'check
+           (lambda _
+             (invoke "bash" "check_install.bash")))
+         )))
+    (inputs
+     `(("perl" ,perl)
+       ("perl-hash-merge" ,perl-hash-merge)
+       ("perl-mce" ,perl-mce)
+       ("perl-math-utils" ,perl-math-utils)
+       ("perl-parallel-forkmanager" ,perl-parallel-forkmanager)
+       ("perl-yaml" ,perl-yaml)
+       ("python" ,python)))
+    (native-inputs
+     `(
+       ;("patchelf" ,patchelf)
+       ))
+    (home-page "http://exon.gatech.edu/GeneMark/license_download.cgi")
+    (synopsis "")
+    (description "")
+    ;; Precompiled binary
+    (supported-systems '("x86_64-linux"))
+    ;; Licensee may use the Product solely for Licensee's own internal research purposes.
+    (license license:non-copyleft)))
diff --git a/gn/packages/perl.scm b/gn/packages/perl.scm
index 7945b15..65f3d30 100644
--- a/gn/packages/perl.scm
+++ b/gn/packages/perl.scm
@@ -19,24 +19,26 @@
 (define-module (gn packages perl)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
-  #:use-module (gnu packages readline)
-  #:use-module (gnu packages autotools)
   #:use-module (gnu packages java)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl-check)
   #:use-module (gnu packages python)
   #:use-module (gnu packages ragel)
+  #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages version-control)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
-  #:use-module (gnu packages xml)
-  #:use-module (gnu packages web)
   #:use-module (guix build-system perl))
 
 (define-public perl-time-parsedate ; guix: old lib and tests failing - works though
@@ -96,3 +98,189 @@
     (synopsis "Pjotr's time logger")
     (description "None")
     (license license:gpl2+))))
+
+(define-public perl-mce
+  (package
+    (name "perl-mce")
+    (version "1.874")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "mirror://cpan/authors/id/M/MA/MARIOROY/MCE-"
+               version
+               ".tar.gz"))
+        (sha256
+         (base32
+          "1l6khsmwzfr88xb81kdvmdskxgz3pm4yz2ybxkbml4bmhh0y62fq"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-sereal-decoder" ,perl-sereal-decoder)
+       ("perl-sereal-encoder" ,perl-sereal-encoder)))
+    (home-page "https://metacpan.org/release/MCE")
+    (synopsis
+     "Many-Core Engine for Perl providing parallel processing capabilities")
+    (description "MCE spawns a pool of workers and therefore does not fork a
+new process per each element of data.  Instead, MCE follows a bank queuine
+model.  MCE enhances that model by adding the ability to chunk the next n
+elements from the input stream to the next available worker.")
+    (license license:perl-license)))
+
+(define-public perl-sereal-decoder
+  (package
+    (name "perl-sereal-decoder")
+    (version "4.018")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "mirror://cpan/authors/id/Y/YV/YVES/Sereal-Decoder-"
+               version
+               ".tar.gz"))
+        (sha256
+         (base32
+          "0wfdixpm3p94mnng474l0nh9mjiy8q8hbrbh2af4vwn2hmazr91f"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            (delete-file-recursively "zstd")))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "inc/Sereal/BuildTools.pm"
+               (("-lzstd")
+                (string-append "-L" (assoc-ref inputs "zstd:lib")
+                               "/lib -lzstd"))))))))
+    (native-inputs
+     `(("perl-test-deep" ,perl-test-deep)
+       ("perl-test-differences" ,perl-test-differences)
+       ("perl-test-longstring" ,perl-test-longstring)
+       ("perl-test-warn" ,perl-test-warn)))
+    (inputs
+     `(("zstd:lib" ,zstd "lib")))
+    (home-page "https://metacpan.org/release/Sereal-Decoder")
+    (synopsis "Fast, compact, powerful binary deserialization")
+    (description
+     "Sereal::Decoder implements a deserializer for an efficient,
+compact-output, and feature-rich binary protocol called Sereal.")
+    (license license:perl-license)))
+
+(define-public perl-sereal-encoder
+  (package
+    (name "perl-sereal-encoder")
+    (version "4.018")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "mirror://cpan/authors/id/Y/YV/YVES/Sereal-Encoder-"
+               version
+               ".tar.gz"))
+        (sha256
+         (base32
+          "0z9dbkr8ggjqb5g1sikxhy1a359bg08gs3vfg9icqm6xx4gjsv6p"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            (delete-file-recursively "zstd")))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "inc/Sereal/BuildTools.pm"
+               (("-lzstd")
+                (string-append "-L" (assoc-ref inputs "zstd:lib")
+                               "/lib -lzstd"))))))))
+    (native-inputs
+     `(("perl-sereal-decoder" ,perl-sereal-decoder)
+       ("perl-test-deep" ,perl-test-deep)
+       ("perl-test-differences" ,perl-test-differences)
+       ("perl-test-longstring" ,perl-test-longstring)
+       ("perl-test-warn" ,perl-test-warn)))
+    (inputs
+     `(("zstd:lib" ,zstd "lib")))
+    (home-page "https://metacpan.org/release/Sereal-Encoder")
+    (synopsis "Fast, compact, powerful binary serialization")
+    (description
+     "Sereal::Encoder implements an efficient, compact-output, and feature-rich
+serializer using a binary protocol called Sereal.")
+    (license license:perl-license)))
+
+(define-public perl-module-load-conditional
+  (package
+    (name "perl-module-load-conditional")
+    (version "0.74")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "mirror://cpan/authors/id/B/BI/BINGOS/Module-Load-Conditional-"
+               version
+               ".tar.gz"))
+        (sha256
+         (base32
+          "0c57c3632657hyhkijxhrk5jsfd09q4dm5d0qbmz281q76lm9hsl"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/Module-Load-Conditional")
+    (synopsis "Looking up module information / loading at runtime")
+    (description
+     "Module::Load::Conditional provides simple ways to query and possibly load
+any of the modules you have installed on your system during runtime.  It is able
+to load multiple modules at once or none at all if one of them was not able to
+load.  It also takes care of any error checking and so forth.")
+    (license license:perl-license)))
+
+(define-public perl-scalar-util-numeric
+  (package
+    (name "perl-scalar-util-numeric")
+    (version "0.40")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "mirror://cpan/authors/id/C/CH/CHOCOLATE/Scalar-Util-Numeric-"
+               version
+               ".tar.gz"))
+        (sha256
+         (base32
+          "0h24rji5rkwa0mkggmr5anin92dg87ygnhhr3idxn0q785ninl6p"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/Scalar-Util-Numeric")
+    (synopsis "numeric tests for perl scalars")
+    (description
+     "Scalar::Util::Numeric exports a number of wrappers around perl's builtin
+@code{looks_like_number} function, which returns the numeric type of its
+argument, or 0 if it isn't numeric.")
+    (license license:perl-license)))
+
+(define-public perl-math-utils
+  (package
+    (name "perl-math-utils")
+    (version "1.14")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "mirror://cpan/authors/id/J/JG/JGAMBLE/Math-Utils-"
+               version
+               ".tar.gz"))
+        (sha256
+         (base32
+          "1596bwij103w4w5m7102c7bj9x4sjr8a7cibp5qjcqkafgh0m8l8"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
+    (home-page "https://metacpan.org/release/Math-Utils")
+    (synopsis "Useful mathematical functions not in Perl")
+    (description
+     "Math::Utils is a broad collection of useful mathematical functions not
+available in core perl. In addition to general-purpose functions such as
+log10(), log2(), floor() or fsum(), there are generators to create comparison
+functions for floating point (non-integer) numbers as well as some polynomial
+operations on plain lists of coefficients.")
+    (license license:perl-license)))