[med-svn] [Git][med-team/libtabixpp][upstream] New upstream version 1.1.1

Andreas Tille (@tille) gitlab at salsa.debian.org
Mon May 2 13:07:10 BST 2022



Andreas Tille pushed to branch upstream at Debian Med / libtabixpp


Commits:
4197795a by Andreas Tille at 2022-04-29T12:04:20+02:00
New upstream version 1.1.1
- - - - -


10 changed files:

- .gitignore
- Makefile
- README.md
- + guix.scm
- main.cpp
- tabix.cpp
- tabix.hpp
- + test/vcf_file.vcf.gz
- + test/vcf_file.vcf.gz.gzi
- + test/vcf_file.vcf.gz.tbi


Changes:

=====================================
.gitignore
=====================================
@@ -1,5 +1,6 @@
 *.a
 *.o
+libtabix.so*
 tabix
 tabix++
 bgzip


=====================================
Makefile
=====================================
@@ -1,26 +1,40 @@
 
-# Use ?= to allow override from the env or command-line.
-
-CC?=		gcc
-CXX?= 		g++
-CXXFLAGS?=	-g -Wall -O2 -fPIC #-m64 #-arch ppc
-INCLUDES?=	-Ihtslib
-HTS_HEADERS?=	htslib/htslib/bgzf.h htslib/htslib/tbx.h
-HTS_LIB?=	htslib/libhts.a
-LIBPATH?=	-L. -Lhtslib
-LIBS?=	-lhts -lpthread -lm -lbz2 -llzma -lz
-DFLAGS=		-D_FILE_OFFSET_BITS=64 -D_USE_KNETFILE
-PROG=		tabix++
-SUBDIRS=.
-
-ifeq ($(OS),Windows_NT)
-	LIBS += -lws2_32
-endif
+# Use ?= to allow overriding from the env or command-line, e.g.
+#
+#       make CXXFLAGS="-O3 -fPIC" install
+#
+# Package managers will override many of these variables automatically, so
+# this is aimed at making it easy to create packages (Debian packages,
+# FreeBSD ports, MacPorts, pkgsrc, etc.)
+
+CC ?=		cc
+CXX ?= 		c++
+CXXFLAGS ?=	-g -Wall -O2 #-m64 #-arch ppc
+CXXFLAGS +=	-fPIC
+INCLUDES ?=	-Ihtslib
+HTS_HEADERS ?=	htslib/htslib/bgzf.h htslib/htslib/tbx.h
+HTS_LIB ?=	htslib/libhts.a
+LIBPATH ?=	-L. -Lhtslib
+
+DESTDIR ?=	stage
+PREFIX ?=	/usr/local
+STRIP ?=	strip
+INSTALL ?=	install -c
+MKDIR ?=	mkdir -p
+AR ?=		ar
+
+DFLAGS =	-D_FILE_OFFSET_BITS=64 -D_USE_KNETFILE
+BIN =		tabix++
+LIB =		libtabix.a
+SOVERSION =	1
+SLIB =		libtabix.so.$(SOVERSION)
+OBJS =		tabix.o
+SUBDIRS =	.
 
 .SUFFIXES:.c .o
 
 .c.o:
-	$(CC) $(CPPFLAGS) -c $(CXXFLAGS) $(DFLAGS) $(INCLUDES) $< -o $@
+	$(CC) -c $(CXXFLAGS) $(DFLAGS) $(INCLUDES) $< -o $@
 
 all-recur lib-recur clean-recur cleanlocal-recur install-recur:
 	@target=`echo $@ | sed s/-recur//`; \
@@ -33,20 +47,42 @@ all-recur lib-recur clean-recur cleanlocal-recur install-recur:
 		cd $$wdir; \
 	done;
 
-all:	$(PROG)
+all:	$(BIN) $(LIB) $(SLIB)
 
 tabix.o: $(HTS_HEADERS) tabix.cpp tabix.hpp
-	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c tabix.cpp $(INCLUDES)
+	$(CXX) $(CXXFLAGS) -c tabix.cpp $(INCLUDES)
 
 htslib/libhts.a:
 	cd htslib && $(MAKE) lib-static
 
-tabix++: tabix.o main.cpp $(HTS_LIB)
-	$(CXX) $(LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) -o $@ main.cpp tabix.o $(INCLUDES) $(LIBPATH) $(LIBS)
+$(LIB): $(OBJS)
+	$(AR) rs $(LIB) $(OBJS)
+
+$(SLIB): $(OBJS)
+	$(CXX) -shared -Wl,-soname,$(SLIB) -o $(SLIB) $(OBJS)
+
+tabix++: $(OBJS) main.cpp $(HTS_LIB)
+	$(CXX) $(CXXFLAGS) -o $@ main.cpp $(OBJS) $(INCLUDES) $(LIBPATH) \
+		-lhts -lpthread -lm -lz -lcurl -llzma -lbz2
+
+test: all
+	./tabix++ test/vcf_file.vcf.gz
+
+install: all
+	$(MKDIR) $(DESTDIR)$(PREFIX)/bin
+	$(MKDIR) $(DESTDIR)$(PREFIX)/include
+	$(MKDIR) $(DESTDIR)$(PREFIX)/lib
+	$(INSTALL) $(BIN) $(DESTDIR)$(PREFIX)/bin
+	$(INSTALL) *.hpp $(DESTDIR)$(PREFIX)/include
+	$(INSTALL) $(LIB) $(SLIB) $(DESTDIR)$(PREFIX)/lib
+
+install-strip: install
+	$(STRIP) $(DESTDIR)$(PREFIX)/bin/$(BIN) $(DESTDIR)$(PREFIX)/lib/$(SLIB)
 
 cleanlocal:
-	rm -fr gmon.out *.o a.out *.dSYM $(PROG) *~ *.a tabix.aux tabix.log \
-		tabix.pdf *.class libtabix.*.dylib libtabix.so*
+	rm -rf $(BIN) $(LIB) $(SLIB) $(OBJS) $(DESTDIR)
+	rm -fr gmon.out *.o a.out *.dSYM $(BIN) *~ *.a tabix.aux tabix.log \
+		tabix.pdf *.class libtabix.*.dylib
 	cd htslib && $(MAKE) clean
 
-clean:cleanlocal-recur
+clean:	cleanlocal-recur


=====================================
README.md
=====================================
@@ -1,5 +1,26 @@
-This is a C++ wrapper around [tabix
-project](http://samtools.sourceforge.net/tabix.shtml) which abstracts some
-of the details of opening and jumping in tabix-indexed files.
+This is a C++ wrapper around [tabix project](http://samtools.sourceforge.net/tabix.shtml) which abstracts some of the details of opening and jumping in tabix-indexed files.
+
+# Build
+
+```sh
+git submodule update --init --recursive
+make CC=gcc -j 16
+make test
+```
+
+See also [guix.scm](./guix.scm) for the build environment we test with.
+
+# Dependencies
+
+tabixpp has htslib as a dependency. If you want to build from the included submodule make sure that the following dependencies are available:
+
+```
+libcurl   libcurl - Library to transfer files with ftp, http, etc.
+zlib      zlib - zlib compression library
+liblzma   liblzma - General purpose data compression library
+```
+
+It is also possible to disable these inside htslib/config.h --- generated after the first build.
+
 
 Author: Erik Garrison <erik.garrison at gmail.com>


=====================================
guix.scm
=====================================
@@ -0,0 +1,75 @@
+;; To use this file to build HEAD of tabixpp:
+;;
+;;   guix build -f guix.scm
+;;
+;; To get a development container (emacs shell will work)
+;;
+;;   guix shell -C -D -f guix.scm
+;;
+;; For the tests you need /usr/bin/env. In a container create it with
+;;
+;;   mkdir -p /usr/bin ; ln -s $GUIX_ENVIRONMENT/bin/env /usr/bin/env
+;;
+;; or in one go
+;;
+;;   guix shell -C -D -f guix.scm -- bash --init-file <(echo "mkdir -p /usr/bin && ln -s \$GUIX_ENVIRONMENT/bin/env /usr/bin/env")
+;;
+;;   make CC=gcc -j 16
+
+(use-modules
+  ((guix licenses) #:prefix license:)
+  (guix gexp)
+  (guix packages)
+  (guix git-download)
+  (guix build-system cmake)
+  (gnu packages algebra)
+  (gnu packages base)
+  (gnu packages compression)
+  (gnu packages bioinformatics)
+  (gnu packages build-tools)
+  (gnu packages curl)
+  (gnu packages gcc)
+  (gnu packages gdb)
+  (gnu packages haskell-xyz) ; pandoc for help files
+  (gnu packages llvm)
+  (gnu packages parallel)
+  (gnu packages perl)
+  (gnu packages perl6)
+  (gnu packages pkg-config)
+  (gnu packages python)
+  (gnu packages python-xyz) ; for pybind11
+  (gnu packages ruby)
+  (gnu packages version-control)
+  (srfi srfi-1)
+  (ice-9 popen)
+  (ice-9 rdelim))
+
+(define %source-dir (dirname (current-filename)))
+
+(define %git-commit
+    (read-string (open-pipe "git show HEAD | head -1 | cut -d ' ' -f 2" OPEN_READ)))
+
+(define-public tabixpp-git
+  (package
+    (name "tabixpp-git")
+    (version (git-version "1.0.0" "HEAD" %git-commit))
+    (source (local-file %source-dir #:recursive? #t))
+    (build-system cmake-build-system)
+    (inputs
+     `(("curl" ,curl)
+       ("gcc" ,gcc-11)    ;; test
+       ("gdb" ,gdb)
+       ;; ("htslib" ,htslib)
+       ;; ("tabixpp" ,tabixpp)
+       ("xz" ,xz)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("git" ,git)))
+    (home-page "https://github.com/tabixpp/tabixpp/")
+    (synopsis "C++ wrapper library for tabix")
+    (description "
+C++ wrapper around tabix project which abstracts some of the details of opening and jumping in tabix-indexed files.")
+    (license license:expat)))
+
+tabixpp-git


=====================================
main.cpp
=====================================
@@ -3,13 +3,16 @@
 
 using namespace std;
 
+const string VERSION = "1.1.1";
+
 int main(int argc, char** argv) {
 
     if (argc < 2) {
-        cerr << argv[0] << " [file] [ [region] ... ]" << endl
+        cout << argv[0] << " [file] [ [region] ... ]" << endl
              << "Writes out regions from bgzf-compressed, tabix-indexed file." << endl
              << "Supply 'header' to print out the header, and no regions to" << endl
-             << "print the contents of the entire file." << endl;
+             << "print the contents of the entire file." << endl << endl
+             << "Version " << VERSION << endl;
         return 1;
     }
 
@@ -22,7 +25,7 @@ int main(int argc, char** argv) {
     Tabix file(filename);
 
     if (!regions.empty()) {
-        for (vector<string>::iterator r = regions.begin(); r != regions.end(); ++r) { 
+        for (vector<string>::iterator r = regions.begin(); r != regions.end(); ++r) {
             string& region = *r;
             if (region == "header") {
                 string header;


=====================================
tabix.cpp
=====================================
@@ -12,18 +12,32 @@ Tabix::Tabix(string& file) {
     struct stat stat_tbi,stat_vcf;
     char *fnidx = (char*) calloc(strlen(cfilename) + 5, 1);
     strcat(strcpy(fnidx, cfilename), ".tbi");
-    if ( bgzf_is_bgzf(cfilename)!=1 )
+
+    hFILE *fp;
+    if (!(fp = hopen(cfilename, "r"))) {
+      cerr << "can't open " << cfilename;
+      return;
+    }
+
+    htsFormat fmt;
+    if ( hts_detect_format(fp,&fmt) < 0 )
     {
         cerr << "[tabix++] was bgzip used to compress this file? " << file << endl;
         free(fnidx);
         exit(1);
     }
+    if (hclose(fp) != 0) {
+        cerr << "can't close " << cfilename;
+        return;
+    }
+
     // Common source of errors: new VCF is used with an old index
     stat(fnidx, &stat_tbi);
     stat(cfilename, &stat_vcf);
     if ( stat_vcf.st_mtime > stat_tbi.st_mtime )
     {
         cerr << "[tabix++] the index file is older than the vcf file. Please use '-f' to overwrite or reindex." << endl;
+
         free(fnidx);
         exit(1);
     }
@@ -117,11 +131,11 @@ bool Tabix::getNextLine(string& line) {
 
 bool Tabix::getNextLineKS() {
     if (has_jumped) {
-        if (iter && 
+        if (iter &&
 	    tbx_itr_next(fn, tbx, iter, &str) >= 0) {
             //line = &str;
             return true;
-        } else 
+        } else
 	    return false;
     } else { // step through all sequences in the file
         // we've never jumped, so read everything


=====================================
tabix.hpp
=====================================
@@ -4,6 +4,7 @@
 #include "htslib/bgzf.h"
 #include "htslib/tbx.h"
 #include "htslib/kseq.h"
+#include "htslib/hfile.h"
 #include <iostream>
 #include <cstring>
 #include <vector>


=====================================
test/vcf_file.vcf.gz
=====================================
Binary files /dev/null and b/test/vcf_file.vcf.gz differ


=====================================
test/vcf_file.vcf.gz.gzi
=====================================
Binary files /dev/null and b/test/vcf_file.vcf.gz.gzi differ


=====================================
test/vcf_file.vcf.gz.tbi
=====================================
Binary files /dev/null and b/test/vcf_file.vcf.gz.tbi differ



View it on GitLab: https://salsa.debian.org/med-team/libtabixpp/-/commit/4197795abb96714b569d08e832a925e1fa72828b

-- 
View it on GitLab: https://salsa.debian.org/med-team/libtabixpp/-/commit/4197795abb96714b569d08e832a925e1fa72828b
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20220502/48659d04/attachment-0001.htm>


More information about the debian-med-commit mailing list