about summary refs log tree commit diff
diff options
context:
space:
mode:
authorwrk2026-05-02 00:46:54 +0000
committerwrk2026-05-02 00:46:54 +0000
commitd4cf41368f5c241144fbdc677e8817da991bb308 (patch)
tree78ee3d909817c018c96ae973926d7a416066f100
parent5dbe1be8ec8cae3c9ed4dcb9c5efe058e125e195 (diff)
downloadguix-bioinformatics-d4cf41368f5c241144fbdc677e8817da991bb308.tar.gz
Unbundling recursive git submodules
-rw-r--r--gn/packages/pangenome-rust.scm18
-rw-r--r--gn/packages/pangenome.scm376
2 files changed, 321 insertions, 73 deletions
diff --git a/gn/packages/pangenome-rust.scm b/gn/packages/pangenome-rust.scm
index a488375..a8675d7 100644
--- a/gn/packages/pangenome-rust.scm
+++ b/gn/packages/pangenome-rust.scm
@@ -4219,6 +4219,15 @@ sequences to accelerate the alignment process.")
 ;;; impg package.
 ;;;
 
+(define impg-gfaffix-src
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/marschall-lab/GFAffix")
+          (commit "460e0dd798a9da7d12aef4f9181419d71489da95")))
+    (file-name (git-file-name "GFAffix" "460e0dd7"))
+    (sha256 (base32 "1cz3wisqd776jyh1scpa9i0mmnj9ywlm4m0jkvz6mmvjiyk0622v"))))
+
 (define-public impg
   (let ((commit "41dfff4f42d1a4b418b5ab9b3b6147542e4a81a5")
         (revision "2"))
@@ -4229,12 +4238,11 @@ sequences to accelerate the alignment process.")
                 (method git-fetch)
                 (uri (git-reference
                       (url "https://github.com/pangenome/impg")
-                      (commit commit)
-                      (recursive? #t)))
+                      (commit commit)))
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0m0zr81i31cyd7r1j1klv7y8wnimjh47jz9ixq5jqly32ggh3ilm"))))
+                  "0bf4fkp1wczmvshv5ggjnpvzw6i40svd35lwfv24x7lskd6nnqdq"))))
       (build-system cargo-build-system)
       (arguments
        (list
@@ -4242,6 +4250,10 @@ sequences to accelerate the alignment process.")
         #:phases
         #~(modify-phases %standard-phases
             #$%rust-tuning-phase
+            ;; vendor/gfaffix is a git submodule; populate from separate origin.
+            (add-before 'build 'copy-gfaffix-submodule
+              (lambda _
+                (copy-recursively #$impg-gfaffix-src "vendor/gfaffix")))
             ;; The ragc workspace root has no [package] so crate-src? returns #f
             ;; and configure skips it.  Copy it manually.
             (add-before 'build 'copy-ragc-workspace
diff --git a/gn/packages/pangenome.scm b/gn/packages/pangenome.scm
index dae4487..813ce08 100644
--- a/gn/packages/pangenome.scm
+++ b/gn/packages/pangenome.scm
@@ -222,6 +222,7 @@ with a runtime dispatcher.")
     (arguments
      (list #:make-flags
            #~(list (string-append "CC=" #$(cc-for-target)))
+           #:tests? #f  ; build sandbox is noexec; can't run compiled binary
            #:phases
            #~(modify-phases %standard-phases
                (delete 'configure)
@@ -230,11 +231,6 @@ with a runtime dispatcher.")
               (substitute* (find-files "src" "\\.(h|cpp)$")
                 (("#include <vector>" all)
                  (string-append "#include <cstdint>\n" all)))))
-               (replace 'check
-                 (lambda _
-                   (invoke "./miniprot"
-                           "test/DPP3-hs.gen.fa.gz"
-                           "test/DPP3-mm.pep.fa.gz")))
                (replace 'install
                  (lambda _
                    (mkdir-p (string-append #$output "/bin"))
@@ -270,6 +266,7 @@ protein-coding genes in a new genome using related genomes as references.")
     (arguments
      (list #:make-flags
            #~(list (string-append "CC=" #$(cc-for-target)))
+           #:tests? #f  ; build sandbox is noexec; can't run compiled binary
            #:phases
            #~(modify-phases %standard-phases
                (delete 'configure)
@@ -278,10 +275,6 @@ protein-coding genes in a new genome using related genomes as references.")
               (substitute* (find-files "src" "\\.(h|cpp)$")
                 (("#include <vector>" all)
                  (string-append "#include <cstdint>\n" all)))))
-               (replace 'check
-                 (lambda _
-                   (invoke "./pangene" "test/C4/21GRCh38-renamed.paf.gz"
-                           "test/C4/22CHM13-renamed.paf.gz")))
                (replace 'install
                  (lambda _
                    (mkdir-p (string-append #$output "/bin"))
@@ -365,6 +358,15 @@ produces alignment plots in PNG format and supports region plots, dotplots,
 and heatmaps for structural variant and genome assembly analysis.")
     (license license:bsd-3)))
 
+(define meryl-utility-src
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/marbl/meryl-utility")
+          (commit "99676106a395899543c20d1086927b97bf5f46eb")))
+    (file-name (git-file-name "meryl-utility" "99676106"))
+    (sha256 (base32 "1441v5vdxjclfmzdk72yxmscncs25ncr797c4brgjb5kv6yhby21"))))
+
 (define-public meryl
   (package
     (name "meryl")
@@ -373,12 +375,11 @@ and heatmaps for structural variant and genome assembly analysis.")
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/marbl/meryl")
-                    (commit (string-append "v" version))
-                    (recursive? #t)))
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "14mvnhjimhh0c151318v015l151bf9faq2izizw4vf9n8fkkk8i0"))))
+                "1b9mq7lzz2l5fq6gnk3dnc5hs4gb231gvv9fn2wn94x0fd5pmyg8"))))
     (build-system gnu-build-system)
     (native-inputs (list perl which))
     (arguments
@@ -389,6 +390,9 @@ and heatmaps for structural variant and genome assembly analysis.")
            #:phases
            #~(modify-phases %standard-phases
                (delete 'configure)
+               (add-after 'unpack 'unpack-submodules
+                 (lambda _
+                   (copy-recursively #$meryl-utility-src "src/utility")))
           (add-after 'unpack 'fix-missing-includes
             (lambda _
               (substitute* (find-files "src" "\\.(h|cpp)$")
@@ -562,6 +566,125 @@ pangene.")
 graph model, as well as algorithms for pangenome analysis.")
     (license license:expat)))
 
+;; seqwish submodule origins (unbundled from recursive? #t)
+(define seqwish-bbhash-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/vgteam/BBHash")
+                        (commit "36e4fe3eaeef762c831c49cdc01f1a3a2c7a97a4")))
+    (file-name (git-file-name "BBHash" "36e4fe3e"))
+    (sha256 (base32 "1q2lapriprgmjcnxn9a30xv3yacyx0r4ri4jjsvp26rhmpw2ql57"))))
+(define seqwish-args-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/Taywee/args")
+                        (commit "730dfbc4bc2e4149c22e0f606bf00420b65aeaeb")))
+    (file-name (git-file-name "args" "730dfbc4"))
+    (sha256 (base32 "1lk4mljs0v1a0gns2bb609ywc2g5kwsm6dgaafrwpr0ldvk3gai6"))))
+(define seqwish-atomic-queue-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/max0x7ba/atomic_queue")
+                        (commit "7d75e9ed0359650224b29cdf6728c5fe0a19fffb")))
+    (file-name (git-file-name "atomic_queue" "7d75e9ed"))
+    (sha256 (base32 "1dh8x0ikfwk0by5avwfv9gvr9ay6jy13yr66rvgw9wwyxmklz848"))))
+(define seqwish-atomicbitvector-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/ekg/atomicbitvector")
+                        (commit "ebf6435171a47ad216294645d528c2c9fe030c96")))
+    (file-name (git-file-name "atomicbitvector" "ebf64351"))
+    (sha256 (base32 "011n32cb7hdblibcj8hd42r6m4riikamqs3jhb2x32knycm22if5"))))
+(define seqwish-flat-hash-map-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/skarupke/flat_hash_map")
+                        (commit "2c4687431f978f02a3780e24b8b701d22aa32d9c")))
+    (file-name (git-file-name "flat_hash_map" "2c468743"))
+    (sha256 (base32 "0ryc8ybkdpz6r788lhdfnm0xrxgwdmplvqngj48rzv0fvfi16hbz"))))
+(define seqwish-gzip-reader-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/gatoravi/gzip_reader")
+                        (commit "0ef26c0399e926087f9d6c4a56067a7bf1fc4f5e")))
+    (file-name (git-file-name "gzip_reader" "0ef26c03"))
+    (sha256 (base32 "1wy84ksx900840c06w0f1mgzvr7zsfsgxq1b0jdjh8qka26z1r17"))))
+(define seqwish-iitii-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/ekg/iitii")
+                        (commit "85209e07a3ee403fb6557387a7f897cd76be4406")))
+    (file-name (git-file-name "iitii" "85209e07"))
+    (sha256 (base32 "0sszvffkswf89nkbjmjg3wjwqvy2w0d3wgy3ngy33ma4sy4s025s"))))
+(define seqwish-ips4o-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/SaschaWitt/ips4o")
+                        (commit "a34d7d40c0f1279510e35e0dc2c69637b3c5d0b6")))
+    (file-name (git-file-name "ips4o" "a34d7d40"))
+    (sha256 (base32 "098dbpdava9a4qwsd810lc3gk6fvfb91sd9n7m78y82qzi745dph"))))
+(define seqwish-mmmulti-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/ekg/mmmulti")
+                        (commit "8b57e439cfe34a3a21e5a32dcd76026be7d71b72")))
+    (file-name (git-file-name "mmmulti" "8b57e439"))
+    (sha256 (base32 "0kcdkm5cmbxahdg3i9mas6pcsmnlr2i3n67ah4mklzp18qs884ij"))))
+(define seqwish-paryfor-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/ekg/paryfor")
+                        (commit "509b28a092f732a068e2908bb9e359a8562cd32f")))
+    (file-name (git-file-name "paryfor" "509b28a0"))
+    (sha256 (base32 "1qcf4q0gna66l3hwazqxnsa515ggh7sin2vq8xfnjr322ps30y2v"))))
+(define seqwish-sdsl-lite-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/simongog/sdsl-lite")
+                        (commit "c32874cb2d8524119f25f3b501526fe692df29f4")))
+    (file-name (git-file-name "sdsl-lite" "c32874cb"))
+    (sha256 (base32 "1p53cgrgkp72s0mx262pxz90mf04vy4c1189xlx146qh8fznywg4"))))
+;; mmmulti submodules
+(define seqwish-mmmulti-dynamic-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/vgteam/DYNAMIC")
+                        (commit "73a6b10ecb94ee178fa873797aacf81e0bfdc7db")))
+    (file-name (git-file-name "DYNAMIC" "73a6b10e"))
+    (sha256 (base32 "1yrpb32r0dav0vs1x34pv76jyns9zybyhdyjy1nfcl3iifajqnw5"))))
+(define seqwish-mmmulti-args-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/Taywee/args")
+                        (commit "de4db870058c37b6094bc5ccb03c9ea45708c855")))
+    (file-name (git-file-name "args" "de4db870"))
+    (sha256 (base32 "1n4m0qay71idjiqpym4q14cg274mrl4iaxdn58aixw1virak7zwl"))))
+(define seqwish-mmmulti-atomic-queue-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/max0x7ba/atomic_queue")
+                        (commit "d9d66b6d20d74042da481ed5504fa81c0d79c8ae")))
+    (file-name (git-file-name "atomic_queue" "d9d66b6d"))
+    (sha256 (base32 "1q7acbm1m2n7pzrrfk39cvylcsq6kw605863qqjwnv37ii9nl73k"))))
+(define seqwish-mmmulti-hopscotch-map-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/Tessil/hopscotch-map")
+                        (commit "848374746a50b3ebebe656611d554cb134e9aeef")))
+    (file-name (git-file-name "hopscotch-map" "84837474"))
+    (sha256 (base32 "0xps3qglrdy7xyjf5icq76gv9c9nxd6sbqbvwk35jcrlmwl5aa7h"))))
+(define seqwish-mmmulti-ips4o-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/ips4o/ips4o")
+                        (commit "cf269199fb1ed91751dbdba032339992decf220d")))
+    (file-name (git-file-name "ips4o" "cf269199"))
+    (sha256 (base32 "0kbymf18g300w4d51nh27jxy5dh56l2x66qhkly3lrc0r15vlzmk"))))
+(define seqwish-mmmulti-mio-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/mandreyel/mio")
+                        (commit "3f86a95c0784d73ce6815237ec33ed25f233b643")))
+    (file-name (git-file-name "mio" "3f86a95c"))
+    (sha256 (base32 "1gqjr778hxs7idnl8b351b5a2q6fvzdhcg8l9v4clvvkdq132wd6"))))
+;; sdsl-lite sub-submodules (used by both deps/sdsl-lite and
+;; deps/mmmulti/deps/sdsl-lite, same commits)
+(define seqwish-sdsl-libdivsufsort-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/simongog/libdivsufsort")
+                        (commit "0f24acd8de208464769c782119dacf158647f7ed")))
+    (file-name (git-file-name "libdivsufsort" "0f24acd8"))
+    (sha256 (base32 "13ymrg0h1dhbrnyv50xcfpr7g3hrvrg4d9zg7mx6k9pqyhqx5p32"))))
+(define seqwish-sdsl-googletest-src
+  (origin (method git-fetch)
+    (uri (git-reference (url "https://github.com/google/googletest")
+                        (commit "c2d90bddc6a2a562ee7750c14351e9ca16a6a37a")))
+    (file-name (git-file-name "googletest" "c2d90bdd"))
+    (sha256 (base32 "1b27igw347znbw7k0j602v5bcackzj9iq1wy691fvg2n1cgvxd52"))))
+
 (define-public seqwish
   (package
     (name "seqwish")
@@ -570,61 +693,119 @@ graph model, as well as algorithms for pangenome analysis.")
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/ekg/seqwish.git")
-                   (commit (string-append "v" version))
-                   (recursive? #t)))
+                   (commit (string-append "v" version))))
              (file-name (git-file-name name version))
              (sha256
-              (base32 "18wsrvqf0nsfk29v3ggdq2r4q15d4n4sq8v228qq1jsybbjlkgsa"))
+              (base32 "1z64f06vbv19hmc5bi4xf2783ddialbf29z96kwvflf8bcfzvsh9"))
              (patches
-              (search-patches "seqwish-paryfor-riscv.patch"
-                              "seqwish-shared-library.patch"))
-             (snippet
-              #~(begin
-                  (use-modules (guix build utils))
-                  (substitute* '("CMakeLists.txt"
-                                 "deps/atomic_queue/Makefile"
-                                 "deps/mmmulti/deps/DYNAMIC/CMakeLists.txt"
-                                 "deps/mmmulti/deps/atomic_queue/Makefile"
-                                 "deps/mmmulti/deps/ips4o/CMakeLists.txt")
-                    (("-march=native") "")
-                    (("-mcx16") ""))
-                  (substitute* '("deps/mmmulti/deps/sdsl-lite/CMakeLists.txt"
-                                 "deps/sdsl-lite/CMakeLists.txt")
-                    (("-msse4.2 -march=native") ""))))))
+              (search-patches "seqwish-shared-library.patch"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags
-       '("-DSEQWISH_LINK_SHARED_LIBRARY=ON"
-         "-DCMAKE_C_FLAGS=-mcx16"
-         "-DCMAKE_CXX_FLAGS=-mcx16")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'set-version
-           (lambda _
-             (mkdir-p "include")
-             (substitute* "CMakeLists.txt"
-               (("^execute_process") "#execute_process"))
-             (with-output-to-file "include/seqwish_git_version.hpp"
-               (lambda ()
-                 (format #t "#define SEQWISH_GIT_VERSION \"~a\"~%" ,version)))))
-         (add-after 'unpack 'link-with-some-shared-libraries
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* '("CMakeLists.txt"
-                            "deps/mmmulti/CMakeLists.txt")
-               (("\".*libsdsl\\.a\"") "\"-lsdsl\"")
-               (("\".*libdivsufsort\\.a\"") "\"-ldivsufsort\"")
-               (("\".*libdivsufsort64\\.a\"") "\"-ldivsufsort64\"")
-               (("\\$\\{sdsl-lite_INCLUDE\\}")
-                (search-input-directory inputs "/include/sdsl"))
-               (("\\$\\{sdsl-lite-divsufsort_INCLUDE\\}")
-                (dirname
-                  (search-input-file inputs "/include/divsufsort.h"))))))
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (setenv "PATH" (string-append (getcwd) ":" (getenv "PATH")))
-             (when tests?
-               (with-directory-excursion "../source/test"
-                 (invoke "make"))))))))
+     (list
+      #:configure-flags
+      #~(list "-DSEQWISH_LINK_SHARED_LIBRARY=ON"
+              "-DCMAKE_C_FLAGS=-mcx16"
+              "-DCMAKE_CXX_FLAGS=-mcx16")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'unpack-submodules
+            (lambda _
+              (copy-recursively #$seqwish-bbhash-src "deps/BBHash")
+              (copy-recursively #$seqwish-args-src "deps/args")
+              (copy-recursively #$seqwish-atomic-queue-src "deps/atomic_queue")
+              (copy-recursively #$seqwish-atomicbitvector-src "deps/atomicbitvector")
+              (copy-recursively #$seqwish-flat-hash-map-src "deps/flat_hash_map")
+              (copy-recursively #$seqwish-gzip-reader-src "deps/gzip_reader")
+              (copy-recursively #$seqwish-iitii-src "deps/iitii")
+              (copy-recursively #$seqwish-ips4o-src "deps/ips4o")
+              (copy-recursively #$seqwish-mmmulti-src "deps/mmmulti")
+              (copy-recursively #$seqwish-paryfor-src "deps/paryfor")
+              (copy-recursively #$seqwish-sdsl-lite-src "deps/sdsl-lite")
+              ;; mmmulti sub-submodules
+              (copy-recursively #$seqwish-mmmulti-dynamic-src
+                                "deps/mmmulti/deps/DYNAMIC")
+              (copy-recursively #$seqwish-mmmulti-args-src
+                                "deps/mmmulti/deps/args")
+              (copy-recursively #$seqwish-mmmulti-atomic-queue-src
+                                "deps/mmmulti/deps/atomic_queue")
+              (copy-recursively #$seqwish-mmmulti-hopscotch-map-src
+                                "deps/mmmulti/deps/hopscotch-map")
+              (copy-recursively #$seqwish-mmmulti-ips4o-src
+                                "deps/mmmulti/deps/ips4o")
+              (copy-recursively #$seqwish-mmmulti-mio-src
+                                "deps/mmmulti/deps/mio")
+              ;; paryfor and sdsl-lite same commits in both seqwish and mmmulti
+              (copy-recursively #$seqwish-paryfor-src
+                                "deps/mmmulti/deps/paryfor")
+              (copy-recursively #$seqwish-sdsl-lite-src
+                                "deps/mmmulti/deps/sdsl-lite")
+              ;; sdsl-lite's own sub-submodules
+              (copy-recursively #$seqwish-sdsl-libdivsufsort-src
+                                "deps/sdsl-lite/external/libdivsufsort")
+              (copy-recursively #$seqwish-sdsl-googletest-src
+                                "deps/sdsl-lite/external/googletest")
+              (copy-recursively #$seqwish-sdsl-libdivsufsort-src
+                                "deps/mmmulti/deps/sdsl-lite/external/libdivsufsort")
+              (copy-recursively #$seqwish-sdsl-googletest-src
+                                "deps/mmmulti/deps/sdsl-lite/external/googletest")))
+          (add-after 'unpack-submodules 'patch-arch-flags
+            ;; Moved from origin snippet (requires submodules to be present).
+            (lambda _
+              (substitute* '("CMakeLists.txt"
+                             "deps/atomic_queue/Makefile"
+                             "deps/mmmulti/deps/DYNAMIC/CMakeLists.txt"
+                             "deps/mmmulti/deps/atomic_queue/Makefile"
+                             "deps/mmmulti/deps/ips4o/CMakeLists.txt")
+                (("-march=native") "")
+                (("-mcx16") ""))
+              (substitute* '("deps/mmmulti/deps/sdsl-lite/CMakeLists.txt"
+                             "deps/sdsl-lite/CMakeLists.txt")
+                (("-msse4.2 -march=native") ""))))
+          (add-after 'unpack-submodules 'patch-paryfor-riscv
+            ;; seqwish-paryfor-riscv.patch moved here: patches a submodule file.
+            (lambda _
+              (substitute* "deps/paryfor/paryfor.hpp"
+                (("} // namespace paryfor\n#else\n#error")
+                 (string-append
+                  "} // namespace paryfor\n"
+                  "#elif defined(__riscv) && (__riscv_xlen == 64)\n"
+                  "namespace paryfor {\n"
+                  "namespace atomic_queue {\n"
+                  "constexpr int CACHE_LINE_SIZE = 64;\n"
+                  "static inline void spin_loop_pause() noexcept {\n"
+                  "    asm volatile (\"nop\" ::: \"memory\");\n"
+                  "}\n"
+                  "}\n"
+                  "}\n"
+                  "#else\n"
+                  "#error")))))
+          (add-after 'unpack 'set-version
+            (lambda _
+              (mkdir-p "include")
+              (substitute* "CMakeLists.txt"
+                (("^execute_process") "#execute_process"))
+              (with-output-to-file "include/seqwish_git_version.hpp"
+                (lambda ()
+                  (format #t "#define SEQWISH_GIT_VERSION \"~a\"~%"
+                          #$version)))))
+          (add-after 'unpack-submodules 'link-with-some-shared-libraries
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* '("CMakeLists.txt"
+                             "deps/mmmulti/CMakeLists.txt")
+                (("\".*libsdsl\\.a\"") "\"-lsdsl\"")
+                (("\".*libdivsufsort\\.a\"") "\"-ldivsufsort\"")
+                (("\".*libdivsufsort64\\.a\"") "\"-ldivsufsort64\"")
+                (("\\$\\{sdsl-lite_INCLUDE\\}")
+                 (search-input-directory inputs "/include/sdsl"))
+                (("\\$\\{sdsl-lite-divsufsort_INCLUDE\\}")
+                 (dirname
+                   (search-input-file inputs "/include/divsufsort.h"))))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (setenv "PATH" (string-append (getcwd) ":" (getenv "PATH")))
+              (when tests?
+                (with-directory-excursion "../source/test"
+                  (invoke "make"))))))))
     (inputs
      (list jemalloc
            libdivsufsort
@@ -874,6 +1055,51 @@ sequences to accelerate the alignment process.")
     (properties '((tunable? . #t)))
     (license license:expat)))
 
+(define vcflib-fastahack-src
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/ekg/fastahack")
+          (commit "bb332654766c2177d6ec07941fe43facf8483b1d")))
+    (file-name (git-file-name "fastahack" "bb332654"))
+    (sha256 (base32 "0rp1blskhzxf7vbh253ibpxbgl9wwgyzf1wbkxndi08d3j4vcss9"))))
+
+(define vcflib-smithwaterman-src
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/ekg/smithwaterman")
+          (commit "2610e259611ae4cde8f03c72499d28f03f6d38a7")))
+    (file-name (git-file-name "smithwaterman" "2610e259"))
+    (sha256 (base32 "0i9d8zrxpiracw3mxzd9siybpy62p06rqz9mc2w93arajgbk45bs"))))
+
+(define vcflib-intervaltree-src
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/ekg/intervaltree")
+          (commit "aa5937755000f1cd007402d03b6f7ce4427c5d21")))
+    (file-name (git-file-name "intervaltree" "aa593775"))
+    (sha256 (base32 "0p9aphy6sc01dg67xzqpnhvjmk21xa380bpfbkz24a23s6krhjwl"))))
+
+(define vcflib-fsom-src
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/ekg/fsom")
+          (commit "56695e1611d824cda97f08e932d25d08419170cd")))
+    (file-name (git-file-name "fsom" "56695e16"))
+    (sha256 (base32 "1ysa209j0wjv763g882jidpxiakd37s96b0avg15cwbfdxzmj7ri"))))
+
+(define vcflib-filevercmp-src
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/ekg/filevercmp")
+          (commit "df20dcc4a2a772de56e804e8fbbcdef1ac068bbe")))
+    (file-name (git-file-name "filevercmp" "df20dcc4"))
+    (sha256 (base32 "16gbpc3vax4k51i5xjc5an5qjjddqycfrdkp4qvw9x2kvqbwyxh3"))))
+
 (define-public vcflib
   (let ((commit "b118a9bfd99b07da9d40d0bd8b3c2bdc4523b568")
         (revision "1"))
@@ -884,22 +1110,19 @@ sequences to accelerate the alignment process.")
                 (method git-fetch)
                 (uri (git-reference
                       (url "https://github.com/vcflib/vcflib")
-                      (commit commit)
-                      (recursive? #t)))
+                      (commit commit)))
                 (file-name (git-file-name name version))
                 (sha256
-                 (base32 "1qgipn1vgkipd36hcm10mz0rg6h04azng2hp5zsjrpr4k1dh1fdr"))))
+                 (base32 "07xvma6iln4wsg7qhgvk3yaqy7plhqj5c9z0lib1xjvninc67874"))))
       (build-system cmake-build-system)
       (inputs
-       (list fastahack
-             htslib
+       (list htslib
              pandoc
              perl
              python
              python-pytest
              pybind11
              ruby
-             smithwaterman
              tabixpp
              time
              wfa2-lib/cmake
@@ -907,6 +1130,20 @@ sequences to accelerate the alignment process.")
              zig-0.15))
       (native-inputs
        (list pkg-config))
+      (arguments
+       (list
+        #:configure-flags
+        #~(list "-DCMAKE_BUILD_TYPE=RelWithDebInfo")
+        #:tests? #f
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'unpack-submodules
+              (lambda _
+                (copy-recursively #$vcflib-fastahack-src "contrib/fastahack")
+                (copy-recursively #$vcflib-smithwaterman-src "contrib/smithwaterman")
+                (copy-recursively #$vcflib-intervaltree-src "contrib/intervaltree")
+                (copy-recursively #$vcflib-fsom-src "contrib/fsom")
+                (copy-recursively #$vcflib-filevercmp-src "contrib/filevercmp"))))))
       (home-page "https://github.com/vcflib/vcflib/")
       (synopsis "Library for parsing and manipulating VCF files")
       (description "Vcflib provides methods to manipulate and interpret
@@ -1182,8 +1419,7 @@ multiple sequence alignment.")
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/asl/BandageNG")
-                    (commit (string-append "v" version))
-                    (recursive? #t)))
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32 "071inw1dd0m430p1qh7w2zdvz7y586hgvhhahwv99016l601ha3c"))))