diff -Nru vsearch-2.21.0/configure.ac vsearch-2.21.1/configure.ac --- vsearch-2.21.0/configure.ac 2022-01-12 17:30:23.000000000 +0000 +++ vsearch-2.21.1/configure.ac 2022-01-18 17:26:39.000000000 +0000 @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ([2.63]) -AC_INIT([vsearch], [2.21.0], [torognes@ifi.uio.no], [vsearch], [https://github.com/torognes/vsearch]) +AC_INIT([vsearch], [2.21.1], [torognes@ifi.uio.no], [vsearch], [https://github.com/torognes/vsearch]) AC_CANONICAL_TARGET AM_INIT_AUTOMAKE([subdir-objects]) AC_LANG([C++]) diff -Nru vsearch-2.21.0/debian/changelog vsearch-2.21.1/debian/changelog --- vsearch-2.21.0/debian/changelog 2022-01-17 14:44:41.000000000 +0000 +++ vsearch-2.21.1/debian/changelog 2022-01-22 11:11:02.000000000 +0000 @@ -1,3 +1,9 @@ +vsearch (2.21.1-1) unstable; urgency=medium + + * New upstream version 2.21.1 + + -- Nilesh Patra Sat, 22 Jan 2022 16:41:02 +0530 + vsearch (2.21.0-1) unstable; urgency=medium * Fix watchfile to detect new versions on github diff -Nru vsearch-2.21.0/man/vsearch.1 vsearch-2.21.1/man/vsearch.1 --- vsearch-2.21.0/man/vsearch.1 2022-01-12 17:30:23.000000000 +0000 +++ vsearch-2.21.1/man/vsearch.1 2022-01-18 17:26:39.000000000 +0000 @@ -1,5 +1,5 @@ .\" ============================================================================ -.TH vsearch 1 "January 12, 2022" "version 2.21.0" "USER COMMANDS" +.TH vsearch 1 "January 18, 2022" "version 2.21.1" "USER COMMANDS" .\" ============================================================================ .SH NAME vsearch \(em a versatile open-source tool for microbiome analysis, @@ -4627,6 +4627,10 @@ .BR v2.21.0\~ "released January 12th, 2022" This version adds the sample, qsegout and tsegout options. It enables the use of UDB databases with uchime_ref. +.TP +.BR v2.21.1\~ "released January 18th, 2022" +Fix a problem with dereplication of empty input files. Update Altivec +code on ppc64le for improved compiler compatibility (vector->__vector). .LP .\" ============================================================================ .\" TODO: diff -Nru vsearch-2.21.0/README.md vsearch-2.21.1/README.md --- vsearch-2.21.0/README.md 2022-01-12 17:30:23.000000000 +0000 +++ vsearch-2.21.1/README.md 2022-01-18 17:26:39.000000000 +0000 @@ -37,7 +37,7 @@ ## Getting Help -If you can't find an answer in the [VSEARCH documentation](https://github.com/torognes/vsearch/releases/download/v2.21.0/vsearch_manual.pdf), please visit the [VSEARCH Web Forum](https://groups.google.com/forum/#!forum/vsearch-forum) to post a question or start a discussion. +If you can't find an answer in the [VSEARCH documentation](https://github.com/torognes/vsearch/releases/download/v2.21.1/vsearch_manual.pdf), please visit the [VSEARCH Web Forum](https://groups.google.com/forum/#!forum/vsearch-forum) to post a question or start a discussion. ## Example @@ -50,9 +50,9 @@ **Source distribution** To download the source distribution from a [release](https://github.com/torognes/vsearch/releases) and build the executable and the documentation, use the following commands: ``` -wget https://github.com/torognes/vsearch/archive/v2.21.0.tar.gz -tar xzf v2.21.0.tar.gz -cd vsearch-2.21.0 +wget https://github.com/torognes/vsearch/archive/v2.21.1.tar.gz +tar xzf v2.21.1.tar.gz +cd vsearch-2.21.1 ./autogen.sh ./configure CFLAGS="-O3" CXXFLAGS="-O3" make @@ -81,43 +81,43 @@ Download the appropriate executable for your system using the following commands if you are using a Linux x86_64 system: ```sh -wget https://github.com/torognes/vsearch/releases/download/v2.21.0/vsearch-2.21.0-linux-x86_64.tar.gz -tar xzf vsearch-2.21.0-linux-x86_64.tar.gz +wget https://github.com/torognes/vsearch/releases/download/v2.21.1/vsearch-2.21.1-linux-x86_64.tar.gz +tar xzf vsearch-2.21.1-linux-x86_64.tar.gz ``` Or these commands if you are using a Linux ppc64le system: ```sh -wget https://github.com/torognes/vsearch/releases/download/v2.21.0/vsearch-2.21.0-linux-ppc64le.tar.gz -tar xzf vsearch-2.21.0-linux-ppc64le.tar.gz +wget https://github.com/torognes/vsearch/releases/download/v2.21.1/vsearch-2.21.1-linux-ppc64le.tar.gz +tar xzf vsearch-2.21.1-linux-ppc64le.tar.gz ``` Or these commands if you are using a Linux aarch64 (arm64) system: ```sh -wget https://github.com/torognes/vsearch/releases/download/v2.21.0/vsearch-2.21.0-linux-aarch64.tar.gz -tar xzf vsearch-2.21.0-linux-aarch64.tar.gz +wget https://github.com/torognes/vsearch/releases/download/v2.21.1/vsearch-2.21.1-linux-aarch64.tar.gz +tar xzf vsearch-2.21.1-linux-aarch64.tar.gz ``` Or these commands if you are using a Mac: ```sh -wget https://github.com/torognes/vsearch/releases/download/v2.21.0/vsearch-2.21.0-macos-x86_64.tar.gz -tar xzf vsearch-2.21.0-macos-x86_64.tar.gz +wget https://github.com/torognes/vsearch/releases/download/v2.21.1/vsearch-2.21.1-macos-x86_64.tar.gz +tar xzf vsearch-2.21.1-macos-x86_64.tar.gz ``` Or if you are using Windows, download and extract (unzip) the contents of this file: ``` -https://github.com/torognes/vsearch/releases/download/v2.21.0/vsearch-2.21.0-win-x86_64.zip +https://github.com/torognes/vsearch/releases/download/v2.21.1/vsearch-2.21.1-win-x86_64.zip ``` -Linux and Mac: You will now have the binary distribution in a folder called `vsearch-2.21.0-linux-x86_64` or `vsearch-2.21.0-macos-x86_64` in which you will find three subfolders `bin`, `man` and `doc`. We recommend making a copy or a symbolic link to the vsearch binary `bin/vsearch` in a folder included in your `$PATH`, and a copy or a symbolic link to the vsearch man page `man/vsearch.1` in a folder included in your `$MANPATH`. The PDF version of the manual is available in `doc/vsearch_manual.pdf`. Versions with statically compiled libraries are available for Linux systems. These have "-static" in their name, and could be used on systems that do not have all the necessary libraries installed. +Linux and Mac: You will now have the binary distribution in a folder called `vsearch-2.21.1-linux-x86_64` or `vsearch-2.21.1-macos-x86_64` in which you will find three subfolders `bin`, `man` and `doc`. We recommend making a copy or a symbolic link to the vsearch binary `bin/vsearch` in a folder included in your `$PATH`, and a copy or a symbolic link to the vsearch man page `man/vsearch.1` in a folder included in your `$MANPATH`. The PDF version of the manual is available in `doc/vsearch_manual.pdf`. Versions with statically compiled libraries are available for Linux systems. These have "-static" in their name, and could be used on systems that do not have all the necessary libraries installed. -Windows: You will now have the binary distribution in a folder called `vsearch-2.21.0-win-x86_64`. The vsearch executable is called `vsearch.exe`. The manual in PDF format is called `vsearch_manual.pdf`. +Windows: You will now have the binary distribution in a folder called `vsearch-2.21.1-win-x86_64`. The vsearch executable is called `vsearch.exe`. The manual in PDF format is called `vsearch_manual.pdf`. -**Documentation** The VSEARCH user's manual is available in the `man` folder in the form of a [man page](https://github.com/torognes/vsearch/blob/master/man/vsearch.1). A pdf version ([vsearch_manual.pdf](https://github.com/torognes/vsearch/releases/download/v2.21.0/vsearch_manual.pdf)) will be generated by `make`. To install the manpage manually, copy the `vsearch.1` file or a create a symbolic link to `vsearch.1` in a folder included in your `$MANPATH`. The manual in both formats is also available with the binary distribution. The manual in PDF form ([vsearch_manual.pdf](https://github.com/torognes/vsearch/releases/download/v2.21.0/vsearch_manual.pdf)) is also attached to the latest [release](https://github.com/torognes/vsearch/releases). +**Documentation** The VSEARCH user's manual is available in the `man` folder in the form of a [man page](https://github.com/torognes/vsearch/blob/master/man/vsearch.1). A pdf version ([vsearch_manual.pdf](https://github.com/torognes/vsearch/releases/download/v2.21.1/vsearch_manual.pdf)) will be generated by `make`. To install the manpage manually, copy the `vsearch.1` file or a create a symbolic link to `vsearch.1` in a folder included in your `$MANPATH`. The manual in both formats is also available with the binary distribution. The manual in PDF form ([vsearch_manual.pdf](https://github.com/torognes/vsearch/releases/download/v2.21.1/vsearch_manual.pdf)) is also attached to the latest [release](https://github.com/torognes/vsearch/releases). ## Packages, plugins, and wrappers diff -Nru vsearch-2.21.0/src/align_simd.cc vsearch-2.21.1/src/align_simd.cc --- vsearch-2.21.0/src/align_simd.cc 2022-01-12 17:30:23.000000000 +0000 +++ vsearch-2.21.1/src/align_simd.cc 2022-01-18 17:26:39.000000000 +0000 @@ -102,25 +102,25 @@ #ifdef __PPC__ -typedef vector signed short VECTOR_SHORT; +typedef __vector signed short VECTOR_SHORT; -const vector unsigned char perm_merge_long_low = +const __vector unsigned char perm_merge_long_low = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17}; -const vector unsigned char perm_merge_long_high = +const __vector unsigned char perm_merge_long_high = {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}; #define v_init(a,b,c,d,e,f,g,h) (const VECTOR_SHORT){a,b,c,d,e,f,g,h} #define v_load(a) vec_ld(0, (VECTOR_SHORT *)(a)) -#define v_store(a, b) vec_st((vector unsigned char)(b), 0, \ - (vector unsigned char *)(a)) +#define v_store(a, b) vec_st((__vector unsigned char)(b), 0, \ + (__vector unsigned char *)(a)) #define v_add(a, b) vec_adds((a), (b)) #define v_sub(a, b) vec_subs((a), (b)) #define v_sub_unsigned(a, b) ((VECTOR_SHORT) \ - vec_subs((vector unsigned short) (a), \ - (vector unsigned short) (b))) + vec_subs((__vector unsigned short) (a), \ + (__vector unsigned short) (b))) #define v_max(a, b) vec_max((a), (b)) #define v_min(a, b) vec_min((a), (b)) #define v_dup(a) vec_splat((VECTOR_SHORT){(short)(a), 0, 0, 0, 0, 0, 0, 0}, 0); @@ -298,13 +298,13 @@ { #ifdef __PPC__ - vector signed short reg0, reg1, reg2, reg3, + __vector signed short reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7; - vector signed int reg8, reg9, reg10,reg11, + __vector signed int reg8, reg9, reg10,reg11, reg12,reg13,reg14,reg15; - vector signed long long reg16,reg17,reg18,reg19, + __vector signed long long reg16,reg17,reg18,reg19, reg20,reg21,reg22,reg23; - vector signed long long reg24,reg25,reg26,reg27, + __vector signed long long reg24,reg25,reg26,reg27, reg28,reg29,reg30,reg31; #else VECTOR_SHORT reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7; @@ -323,39 +323,39 @@ reg7 = v_load(score_matrix_word + d[7] + i); #ifdef __PPC__ - reg8 = (vector signed int) vec_mergeh(reg0, reg1); - reg9 = (vector signed int) vec_mergel(reg0, reg1); - reg10 = (vector signed int) vec_mergeh(reg2, reg3); - reg11 = (vector signed int) vec_mergel(reg2, reg3); - reg12 = (vector signed int) vec_mergeh(reg4, reg5); - reg13 = (vector signed int) vec_mergel(reg4, reg5); - reg14 = (vector signed int) vec_mergeh(reg6, reg7); - reg15 = (vector signed int) vec_mergel(reg6, reg7); - - reg16 = (vector signed long long) vec_mergeh(reg8, reg10); - reg17 = (vector signed long long) vec_mergel(reg8, reg10); - reg18 = (vector signed long long) vec_mergeh(reg12, reg14); - reg19 = (vector signed long long) vec_mergel(reg12, reg14); - reg20 = (vector signed long long) vec_mergeh(reg9, reg11); - reg21 = (vector signed long long) vec_mergel(reg9, reg11); - reg22 = (vector signed long long) vec_mergeh(reg13, reg15); - reg23 = (vector signed long long) vec_mergel(reg13, reg15); + reg8 = (__vector signed int) vec_mergeh(reg0, reg1); + reg9 = (__vector signed int) vec_mergel(reg0, reg1); + reg10 = (__vector signed int) vec_mergeh(reg2, reg3); + reg11 = (__vector signed int) vec_mergel(reg2, reg3); + reg12 = (__vector signed int) vec_mergeh(reg4, reg5); + reg13 = (__vector signed int) vec_mergel(reg4, reg5); + reg14 = (__vector signed int) vec_mergeh(reg6, reg7); + reg15 = (__vector signed int) vec_mergel(reg6, reg7); + + reg16 = (__vector signed long long) vec_mergeh(reg8, reg10); + reg17 = (__vector signed long long) vec_mergel(reg8, reg10); + reg18 = (__vector signed long long) vec_mergeh(reg12, reg14); + reg19 = (__vector signed long long) vec_mergel(reg12, reg14); + reg20 = (__vector signed long long) vec_mergeh(reg9, reg11); + reg21 = (__vector signed long long) vec_mergel(reg9, reg11); + reg22 = (__vector signed long long) vec_mergeh(reg13, reg15); + reg23 = (__vector signed long long) vec_mergel(reg13, reg15); - reg24 = (vector signed long long) vec_perm + reg24 = (__vector signed long long) vec_perm (reg16, reg18, perm_merge_long_low); - reg25 = (vector signed long long) vec_perm + reg25 = (__vector signed long long) vec_perm (reg16, reg18, perm_merge_long_high); - reg26 = (vector signed long long) vec_perm + reg26 = (__vector signed long long) vec_perm (reg17, reg19, perm_merge_long_low); - reg27 = (vector signed long long) vec_perm + reg27 = (__vector signed long long) vec_perm (reg17, reg19, perm_merge_long_high); - reg28 = (vector signed long long) vec_perm + reg28 = (__vector signed long long) vec_perm (reg20, reg22, perm_merge_long_low); - reg29 = (vector signed long long) vec_perm + reg29 = (__vector signed long long) vec_perm (reg20, reg22, perm_merge_long_high); - reg30 = (vector signed long long) vec_perm + reg30 = (__vector signed long long) vec_perm (reg21, reg23, perm_merge_long_low); - reg31 = (vector signed long long) vec_perm + reg31 = (__vector signed long long) vec_perm (reg21, reg23, perm_merge_long_high); #else reg8 = v_merge_lo_16(reg0, reg1); @@ -428,38 +428,38 @@ /* The VSX vec_bperm instruction puts the 16 selected bits of the first source into bits 48-63 of the destination. */ -const vector unsigned char perm = { 120, 112, 104, 96, 88, 80, 72, 64, +const __vector unsigned char perm = { 120, 112, 104, 96, 88, 80, 72, 64, 56, 48, 40, 32, 24, 16, 8, 0 }; #define ALIGNCORE(H, N, F, V, RES, QR_q, R_q, QR_t, R_t, H_MIN, H_MAX) \ { \ - vector unsigned short W, X, Y, Z; \ - vector unsigned int WX, YZ; \ - vector short VV; \ + __vector unsigned short W, X, Y, Z; \ + __vector unsigned int WX, YZ; \ + __vector short VV; \ VV = v_load(&V); \ H = v_add(H, VV); \ - W = (vector unsigned short) VECTORBYTEPERMUTE \ - ((vector unsigned char) vec_cmpgt(F, H), perm); \ + W = (__vector unsigned short) VECTORBYTEPERMUTE \ + ((__vector unsigned char) vec_cmpgt(F, H), perm); \ H = v_max(H, F); \ - X = (vector unsigned short) VECTORBYTEPERMUTE \ - ((vector unsigned char) vec_cmpgt(E, H), perm); \ + X = (__vector unsigned short) VECTORBYTEPERMUTE \ + ((__vector unsigned char) vec_cmpgt(E, H), perm); \ H = v_max(H, E); \ H_MIN = v_min(H_MIN, H); \ H_MAX = v_max(H_MAX, H); \ N = H; \ HF = v_sub(H, QR_t); \ F = v_sub(F, R_t); \ - Y = (vector unsigned short) VECTORBYTEPERMUTE \ - ((vector unsigned char) vec_cmpgt(F, HF), perm); \ + Y = (__vector unsigned short) VECTORBYTEPERMUTE \ + ((__vector unsigned char) vec_cmpgt(F, HF), perm); \ F = v_max(F, HF); \ HE = v_sub(H, QR_q); \ E = v_sub(E, R_q); \ - Z = (vector unsigned short) VECTORBYTEPERMUTE \ - ((vector unsigned char) vec_cmpgt(E, HE), perm); \ + Z = (__vector unsigned short) VECTORBYTEPERMUTE \ + ((__vector unsigned char) vec_cmpgt(E, HE), perm); \ E = v_max(E, HE); \ - WX = (vector unsigned int) vec_mergel(W, X); \ - YZ = (vector unsigned int) vec_mergel(Y, Z); \ - RES = (vector unsigned long long) vec_mergeh(WX, YZ); \ + WX = (__vector unsigned int) vec_mergel(W, X); \ + YZ = (__vector unsigned int) vec_mergel(Y, Z); \ + RES = (__vector unsigned long long) vec_mergeh(WX, YZ); \ } #else @@ -527,7 +527,7 @@ VECTOR_SHORT h_max = v_zero; #ifdef __PPC__ - vector unsigned long long RES1, RES2, RES; + __vector unsigned long long RES1, RES2, RES; #endif int64_t i; @@ -679,7 +679,7 @@ VECTOR_SHORT h_max = v_zero; #ifdef __PPC__ - vector unsigned long long RES1, RES2, RES; + __vector unsigned long long RES1, RES2, RES; #endif int64_t i; diff -Nru vsearch-2.21.0/src/cpu.cc vsearch-2.21.1/src/cpu.cc --- vsearch-2.21.0/src/cpu.cc 2022-01-12 17:30:23.000000000 +0000 +++ vsearch-2.21.1/src/cpu.cc 2022-01-18 17:26:39.000000000 +0000 @@ -121,32 +121,32 @@ unsigned char * bitmap, unsigned int totalbits) { - const vector unsigned char c1 = + const __vector unsigned char c1 = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; - const vector unsigned char c2 = + const __vector unsigned char c2 = { 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f }; - const vector unsigned char c3 = + const __vector unsigned char c3 = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; unsigned short * p = (unsigned short *)(bitmap); - vector signed short * q = (vector signed short *) (counters); + __vector signed short * q = (__vector signed short *) (counters); int r = (totalbits + 15) / 16; for(int j=0; jis_fastq || h->is_empty; } +bool fastx_is_empty(fastx_handle h) +{ + return h->is_empty; +} + void fastx_close(fastx_handle h) { /* Warn about stripped chars */ diff -Nru vsearch-2.21.0/src/fastx.h vsearch-2.21.1/src/fastx.h --- vsearch-2.21.0/src/fastx.h 2022-01-12 17:30:23.000000000 +0000 +++ vsearch-2.21.1/src/fastx.h 2022-01-18 17:26:39.000000000 +0000 @@ -115,6 +115,7 @@ /* fastx input */ bool fastx_is_fastq(fastx_handle h); +bool fastx_is_empty(fastx_handle h); void fastx_filter_header(fastx_handle h, bool truncateatspace); fastx_handle fastx_open(const char * filename); void fastx_close(fastx_handle h); diff -Nru vsearch-2.21.0/.travis.yml vsearch-2.21.1/.travis.yml --- vsearch-2.21.0/.travis.yml 2022-01-12 17:30:23.000000000 +0000 +++ vsearch-2.21.1/.travis.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -language: -- cpp - -arch: -#- amd64 -- arm64 -- ppc64le - -os: -- linux -#- osx - -dist: -- xenial - -osx_image: -- xcode12.5 - -addons: - apt: - packages: - - ghostscript - - valgrind - - groff - homebrew: - packages: - - ghostscript - -compiler: -- g++ -- clang - -script: -- ./autogen.sh -- ./configure -- make -- export PATH=$PWD/bin:$PATH -- git clone https://github.com/frederic-mahe/vsearch-tests.git -- cd vsearch-tests -- bash ./run_all_tests.sh