aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/bioinformatics.scm70
-rw-r--r--gnu/packages/patches/vcflib-use-shared-libraries.patch135
3 files changed, 169 insertions, 37 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 97a494f24a..76f6fe6be5 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1639,6 +1639,7 @@ dist_patch_DATA = \
%D%/packages/patches/vboot-utils-fix-format-load-address.patch \
%D%/packages/patches/vboot-utils-fix-tests-show-contents.patch \
%D%/packages/patches/vboot-utils-skip-test-workbuf.patch \
+ %D%/packages/patches/vcflib-use-shared-libraries.patch \
%D%/packages/patches/vigra-python-compat.patch \
%D%/packages/patches/vinagre-newer-freerdp.patch \
%D%/packages/patches/vinagre-newer-rdp-parameters.patch \
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index afade365ca..db69819055 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -15641,9 +15641,16 @@ library automatically handles index file generation and use.")
"/vcflib-" version "-src.tar.gz"))
(sha256
(base32 "14zzrg8hg8cq9cvq2wdvp21j7nmxxkjrbagw2apd2yqv2kyx42lm"))
+ (patches (search-patches "vcflib-use-shared-libraries.patch"))
(modules '((guix build utils)))
(snippet
`(begin
+ (substitute* (find-files "." "\\.(h|c)(pp)?$")
+ (("\"SmithWatermanGotoh.h\"") "<smithwaterman/SmithWatermanGotoh.h>")
+ (("\"convert.h\"") "<smithwaterman/convert.h>")
+ (("\"disorder.h\"") "<smithwaterman/disorder.h>")
+ (("\"tabix.hpp\"") "<tabix.hpp>")
+ (("\"Fasta.h\"") "<fastahack/Fasta.h>"))
(for-each delete-file-recursively
'("fastahack" "filevercmp" "fsom" "googletest" "intervaltree"
"libVCFH" "multichoose" "smithwaterman" "tabixpp"))
@@ -15651,34 +15658,34 @@ library automatically handles index file generation and use.")
(build-system gnu-build-system)
(inputs
`(("htslib" ,htslib)
+ ("fastahack" ,fastahack)
("perl" ,perl)
("python" ,python)
+ ("smithwaterman" ,smithwaterman)
+ ("tabixpp" ,tabixpp)
+ ("xz" ,xz)
("zlib" ,zlib)))
(native-inputs
- `(;; Submodules.
+ `(("pkg-config" ,pkg-config)
+ ;; Submodules.
;; This package builds against the .o files so we need to extract the source.
- ("fastahack-src" ,(package-source fastahack))
("filevercmp-src" ,(package-source filevercmp))
- ("fsom-src" ,(package-source fsom))
("intervaltree-src" ,(package-source intervaltree))
- ("multichoose-src" ,(package-source multichoose))
- ("smithwaterman-src" ,(package-source smithwaterman))
- ("tabixpp-src" ,(package-source tabixpp))))
+ ("multichoose-src" ,(package-source multichoose))))
(arguments
`(#:tests? #f ; no tests
- #:make-flags (list (string-append "HTS_LIB="
- (assoc-ref %build-inputs "htslib")
- "/lib/libhts.a")
- (string-append "HTS_INCLUDES= -I"
- (assoc-ref %build-inputs "htslib")
- "/include/htslib")
- (string-append "HTS_LDFLAGS= -L"
- (assoc-ref %build-inputs "htslib")
- "/include/htslib" " -lhts"))
#:phases
(modify-phases %standard-phases
+ (add-after 'unpack 'set-flags
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "Makefile"
+ (("LDFLAGS =")
+ (string-append "LDFLAGS = -Wl,-rpath="
+ (assoc-ref outputs "out") "/lib ")))
+ (substitute* "filevercmp/Makefile"
+ (("-c") "-c -fPIC"))
+ #t))
(delete 'configure)
- (delete 'check)
(add-after 'unpack 'unpack-submodule-sources
(lambda* (#:key inputs #:allow-other-keys)
(let ((unpack (lambda (source target)
@@ -15690,34 +15697,23 @@ library automatically handles index file generation and use.")
(assoc-ref inputs source)
"--strip-components=1"))))))
(and
- (unpack "fastahack-src" "fastahack")
(unpack "filevercmp-src" "filevercmp")
- (unpack "fsom-src" "fsom")
(unpack "intervaltree-src" "intervaltree")
- (unpack "multichoose-src" "multichoose")
- (unpack "smithwaterman-src" "smithwaterman")
- (unpack "tabixpp-src" "tabixpp")))))
- (replace 'build
- (lambda* (#:key inputs make-flags #:allow-other-keys)
- (let ((htslib (assoc-ref inputs "htslib")))
- (with-directory-excursion "tabixpp"
- (substitute* "Makefile"
- (("-Ihtslib") (string-append "-I" htslib "/include/htslib"))
- (("-Lhtslib") (string-append "-L" htslib "/lib/htslib"))
- (("htslib/htslib") (string-append htslib "/include/htslib")))
- (invoke "make"
- (string-append "HTS_LIB=" htslib "/lib/libhts.a")))
- (apply invoke "make" "CC=gcc" "CFLAGS=-Itabixpp" make-flags))))
+ (unpack "multichoose-src" "multichoose")))))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
- (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
- (lib (string-append (assoc-ref outputs "out") "/lib")))
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin"))
+ (lib (string-append out "/lib")))
(for-each (lambda (file)
(install-file file bin))
(find-files "bin" ".*"))
- ;; The header files in src/ do not interface libvcflib,
- ;; therefore they are left out.
- (install-file "libvcflib.a" lib))
+ (install-file "libvcflib.so" lib)
+ (install-file "libvcflib.a" lib)
+ (for-each
+ (lambda (file)
+ (install-file file (string-append out "/include")))
+ (find-files "include" "\\.h(pp)?$")))
#t)))))
(home-page "https://github.com/vcflib/vcflib/")
(synopsis "Library for parsing and manipulating VCF files")
diff --git a/gnu/packages/patches/vcflib-use-shared-libraries.patch b/gnu/packages/patches/vcflib-use-shared-libraries.patch
new file mode 100644
index 0000000000..e198ec663c
--- /dev/null
+++ b/gnu/packages/patches/vcflib-use-shared-libraries.patch
@@ -0,0 +1,135 @@
+This patch is a combination of many of the patches from Debian:
+https://sources.debian.org/src/libvcflib/1.0.1+dfsg-3/debian/patches/
+
+---
+ Makefile | 63 +++++++++++---------------------------------------------
+ 1 file changed, 12 insertions(+), 51 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 6b13350..be85f22 100644
+--- a/Makefile
++++ b/Makefile
+@@ -114,43 +114,25 @@ BIN_SOURCES = src/vcfecho.cpp \
+ src/vcfnull2ref.cpp \
+ src/vcfinfosummarize.cpp
+
+-# when we can figure out how to build on mac
+-# src/vcfsom.cpp
+-
+ #BINS = $(BIN_SOURCES:.cpp=)
+ BINS = $(addprefix $(BIN_DIR)/,$(notdir $(BIN_SOURCES:.cpp=)))
+ SHORTBINS = $(notdir $(BIN_SOURCES:.cpp=))
+
+-TABIX = tabixpp/tabix.o
+-FASTAHACK = fastahack/Fasta.o
+-SMITHWATERMAN = smithwaterman/SmithWatermanGotoh.o
+-REPEATS = smithwaterman/Repeats.o
+-INDELALLELE = smithwaterman/IndelAllele.o
+-DISORDER = smithwaterman/disorder.o
+-LEFTALIGN = smithwaterman/LeftAlign.o
+-FSOM = fsom/fsom.o
+ FILEVERCMP = filevercmp/filevercmp.o
+
+-# Work out how to find htslib
+-# Use the one we ship in tabixpp unless told otherwise by the environment
+-HTS_LIB ?= $(VCF_LIB_LOCAL)/tabixpp/htslib/libhts.a
+-HTS_INCLUDES ?= -I$(VCF_LIB_LOCAL)/tabixpp/htslib
+-HTS_LDFLAGS ?= -L$(VCF_LIB_LOCAL)/tabixpp/htslib -lhts -lbz2 -lm -lz -llzma -pthread
+-
+-
+-INCLUDES = $(HTS_INCLUDES) -I$(INC_DIR)
+-LDFLAGS = -L$(LIB_DIR) -lvcflib $(HTS_LDFLAGS) -lpthread -lz -lm -llzma -lbz2
++INCLUDES = -I$(INC_DIR) $(shell pkg-config --cflags htslib fastahack smithwaterman tabixpp)
++LDFLAGS = -L$(LIB_DIR) -lvcflib -lpthread -lz -lstdc++ -lm -llzma -lbz2 $(shell pkg-config --libs htslib fastahack smithwaterman tabixpp)
+
+
+
+-all: $(OBJECTS) $(BINS) scriptToBin
++all: $(OBJECTS) $(BINS) scriptToBin libvcflib.a
+
+ scriptToBin: $(BINS)
+ $(CP) scripts/* $(BIN_DIR)
+
+ GIT_VERSION += $(shell git describe --abbrev=4 --dirty --always)
+
+-CXXFLAGS = -Ofast -D_FILE_OFFSET_BITS=64 -std=c++0x
++CXXFLAGS = -Ofast -D_FILE_OFFSET_BITS=64 -std=c++0x -fPIC
+ #CXXFLAGS = -O2
+ #CXXFLAGS = -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual
+
+@@ -168,7 +150,7 @@ profiling:
+ gprof:
+ $(MAKE) CXXFLAGS="$(CXXFLAGS) -pg" all
+
+-$(OBJECTS): $(SOURCES) $(HEADERS) $(TABIX) multichoose pre $(SMITHWATERMAN) $(FILEVERCMP) $(FASTAHACK)
++$(OBJECTS): $(SOURCES) $(HEADERS) multichoose pre $(FILEVERCMP)
+ $(CXX) -c -o $@ src/$(*F).cpp $(INCLUDES) $(LDFLAGS) $(CXXFLAGS) && $(CP) src/*.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/
+
+ multichoose: pre
+@@ -177,39 +159,22 @@ multichoose: pre
+ intervaltree: pre
+ cd intervaltree && $(MAKE) && $(CP) *.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/
+
+-$(TABIX): pre
+- cd tabixpp && INCLUDES="$(HTS_INCLUDES)" LIBPATH="-L. $(HTS_LDFLAGS)" HTSLIB="$(HTS_LIB)" $(MAKE) && $(CP) *.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/
+-
+-$(SMITHWATERMAN): pre
+- cd smithwaterman && $(MAKE) && $(CP) *.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/ && $(CP) *.o $(VCF_LIB_LOCAL)/$(OBJ_DIR)/
+-
+-$(DISORDER): $(SMITHWATERMAN)
+-
+-$(REPEATS): $(SMITHWATERMAN)
+-
+-$(LEFTALIGN): $(SMITHWATERMAN)
+-
+-$(INDELALLELE): $(SMITHWATERMAN)
+-
+-$(FASTAHACK): pre
+- cd fastahack && $(MAKE) && $(CP) *.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/ && $(CP) Fasta.o $(VCF_LIB_LOCAL)/$(OBJ_DIR)/
+-
+-#$(FSOM):
+-# cd fsom && $(CXX) $(CXXFLAGS) -c fsom.c -lm
+-
+ $(FILEVERCMP): pre
+ cd filevercmp && make && $(CP) *.h* $(VCF_LIB_LOCAL)/$(INC_DIR)/ && $(CP) *.o $(VCF_LIB_LOCAL)/$(INC_DIR)/
+
+ $(SHORTBINS): pre
+ $(MAKE) $(BIN_DIR)/$@
+
+-$(BINS): $(BIN_SOURCES) libvcflib.a $(OBJECTS) $(SMITHWATERMAN) $(FASTAHACK) $(DISORDER) $(LEFTALIGN) $(INDELALLELE) $(SSW) $(FILEVERCMP) pre intervaltree
++$(BINS): $(BIN_SOURCES) libvcflib.so $(OBJECTS) $(SSW) $(FILEVERCMP) pre intervaltree
+ $(CXX) src/$(notdir $@).cpp -o $@ $(INCLUDES) $(LDFLAGS) $(CXXFLAGS) -DVERSION=\"$(GIT_VERSION)\"
+
+-libvcflib.a: $(OBJECTS) $(SMITHWATERMAN) $(REPEATS) $(FASTAHACK) $(DISORDER) $(LEFTALIGN) $(INDELALLELE) $(SSW) $(FILEVERCMP) $(TABIX) pre
+- ar rs libvcflib.a $(OBJECTS) smithwaterman/sw.o $(FASTAHACK) $(SSW) $(FILEVERCMP) $(TABIX)
++libvcflib.a: $(OBJECTS) $(SSW) $(FILEVERCMP) pre
++ ar rs libvcflib.a $(OBJECTS) $(SSW) $(FILEVERCMP)
+ $(CP) libvcflib.a $(LIB_DIR)
+
++libvcflib.so: $(OBJECTS) $(SSW) $(FILEVERCMP) pre
++ $(CXX) -shared -o libvcflib.so $(OBJECTS) $(SSW) $(FILEVERCMP)
++ $(CP) libvcflib.so $(LIB_DIR)
+
+ test: $(BINS)
+ @prove -Itests/lib -w tests/*.t
+@@ -230,16 +195,12 @@ clean:
+ $(RM) $(BINS) $(OBJECTS)
+ $(RM) ssw_cpp.o ssw.o
+ $(RM) libvcflib.a
++ $(RM) libvcflib.so
+ $(RM) -r $(BIN_DIR)
+ $(RM) -r $(LIB_DIR)
+ $(RM) -r $(INC_DIR)
+ $(RM) -r $(OBJ_DIR)
+- $(MAKE) clean -C tabixpp
+- $(MAKE) clean -C smithwaterman
+- $(MAKE) clean -C fastahack
+ $(MAKE) clean -C multichoose
+- $(MAKE) clean -C fsom
+- $(MAKE) clean -C libVCFH
+ $(MAKE) clean -C test
+ $(MAKE) clean -C filevercmp
+ $(MAKE) clean -C intervaltree
+--
+2.28.0
+