diff options
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/bioinformatics.scm | 70 | ||||
-rw-r--r-- | gnu/packages/patches/vcflib-use-shared-libraries.patch | 135 |
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 + |