From: Peter Michael Green Date: Sat, 8 May 2021 10:58:01 +0000 (+0000) Subject: fermi-lite (0.1+git20190320.b499514-1+rpi1) bullseye-staging; urgency=medium X-Git-Tag: archive/raspbian/0.1+git20221215.85f159e-1+rpi1~10 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=9ef246afeb5be2eecea179cbeb13fa1eb777b661;p=fermi-lite.git fermi-lite (0.1+git20190320.b499514-1+rpi1) bullseye-staging; urgency=medium * Link with libatomic on armhf too. [dgit import unpatched fermi-lite 0.1+git20190320.b499514-1+rpi1] --- 9ef246afeb5be2eecea179cbeb13fa1eb777b661 diff --cc debian/TODO index 0000000,0000000..ec38be1 new file mode 100644 --- /dev/null +++ b/debian/TODO @@@ -1,0 -1,0 +1,2 @@@ ++- Add correct autopkgtests (still cloned from minimap) ++- Add man page diff --cc debian/changelog index 0000000,0000000..044c02e new file mode 100644 --- /dev/null +++ b/debian/changelog @@@ -1,0 -1,0 +1,129 @@@ ++fermi-lite (0.1+git20190320.b499514-1+rpi1) bullseye-staging; urgency=medium ++ ++ * Link with libatomic on armhf too. ++ ++ -- Peter Michael Green Sat, 08 May 2021 10:58:01 +0000 ++ ++fermi-lite (0.1+git20190320.b499514-1) unstable; urgency=medium ++ ++ [ Michael R. Crusoe ] ++ * Team upload. ++ * Switch to upstream HEAD using gitmode in watch file ++ * Remove trailing whitespace in debian/changelog (routine-update) ++ * Use the libsimde-dev package instead of our code copy ++ ++ [ Andreas Tille ] ++ * Standards-Version: 4.5.1 (routine-update) ++ * debhelper-compat 13 (routine-update) ++ ++ -- Andreas Tille Fri, 08 Jan 2021 10:47:39 +0100 ++ ++fermi-lite (0.1-13) unstable; urgency=medium ++ ++ * Fix package to build with gcc-10 (Closes: #957198) ++ ++ -- Nilesh Patra Sat, 18 Apr 2020 22:59:03 +0530 ++ ++fermi-lite (0.1-12) unstable; urgency=medium ++ ++ * Team upload. ++ * debian/patches/sync_instead_of_atomic: fix logic and re-enable (fetch the ++ previous value, not the new one). Fixes build on mipsel. ++ * Added a basic package time test & autopkgtest to confirm the patch using ++ fml-asm ++ ++ -- Michael R. Crusoe Mon, 30 Mar 2020 10:55:37 +0200 ++ ++fermi-lite (0.1-11) unstable; urgency=medium ++ ++ [ Steve Langasek ] ++ * Ensure that our variable checking for >= 0 is signed ++ Closes: #954127 ++ ++ -- Andreas Tille Sat, 28 Mar 2020 19:33:46 +0100 ++ ++fermi-lite (0.1-10) unstable; urgency=medium ++ ++ * Team upload. ++ * Revert change: Fix compatibility on mipsel, m68k, powerpc, and sh4 by using ++ __sync instead of __atomic from 0.1-8 since it breaks ariba ++ * Add salsa-ci file (routine-update) ++ * Rules-Requires-Root: no (routine-update) ++ * Set upstream metadata fields: Bug-Database, Bug-Submit, Repository, ++ Repository-Browse. ++ ++ -- Andreas Tille Thu, 12 Mar 2020 14:23:57 +0100 ++ ++fermi-lite (0.1-9) unstable; urgency=medium ++ ++ * Team upload. ++ * Mark libfml{0,-dev} as Multi-Arch: same ++ * Add armel to the -latomic group ++ ++ -- Michael R. Crusoe Sat, 15 Feb 2020 13:58:17 +0100 ++ ++fermi-lite (0.1-8) unstable; urgency=medium ++ ++ * Team upload. ++ * Fix compatibility on mipsel, m68k, powerpc, and sh4 by using __sync instead ++ of __atomic ++ * Standards-Version: 4.5.0 (routine-update) ++ * debhelper-compat 12 (routine-update) ++ ++ -- Michael R. Crusoe Sat, 15 Feb 2020 13:18:41 +0100 ++ ++fermi-lite (0.1-7) unstable; urgency=medium ++ ++ * Team upload. ++ * Add -latomic for those archs that need it ++ ++ -- Michael R. Crusoe Sat, 14 Dec 2019 15:33:59 +0100 ++ ++fermi-lite (0.1-6) unstable; urgency=medium ++ ++ * Team upload. ++ * Enable for all architectures using simde ++ * Ship a symbols file ++ ++ -- Michael R. Crusoe Fri, 13 Dec 2019 18:04:33 +0100 ++ ++fermi-lite (0.1-5) unstable; urgency=medium ++ ++ [ Steffen Möller ] ++ * Add new d/u/metadata file ++ ++ [ Sascha Steinbiss ] ++ * Update Vcs-* fields with Salsa addresses. ++ * Bump Standards-Version. ++ * Remove unnecessary Testsuite field. ++ * Use debhelper 11. ++ * Improve hardening. ++ ++ -- Sascha Steinbiss Wed, 04 Jul 2018 23:40:50 +0200 ++ ++fermi-lite (0.1-4) unstable; urgency=medium ++ ++ * Upload to unstable ++ ++ -- Andreas Tille Sun, 18 Jun 2017 08:12:35 +0200 ++ ++fermi-lite (0.1-3) experimental; urgency=medium ++ ++ * Team upload. ++ * Avoid name space conflict with bwa ++ ++ -- Andreas Tille Thu, 02 Feb 2017 10:59:28 +0100 ++ ++fermi-lite (0.1-2) unstable; urgency=medium ++ ++ * Autopkgtest: build example outside of upstream source tree. ++ * Restrict architectures to those with SSE2 support. ++ See also upstream's comment at https://github.com/lh3/fermi-lite/issues/4 ++ ++ -- Sascha Steinbiss Thu, 04 Aug 2016 05:37:30 +0000 ++ ++fermi-lite (0.1-1) unstable; urgency=low ++ ++ * Initial packaging (Closes: #832757) ++ ++ -- Sascha Steinbiss Thu, 28 Jul 2016 22:26:11 +0000 diff --cc debian/clean index 0000000,0000000..91fae9f new file mode 100644 --- /dev/null +++ b/debian/clean @@@ -1,0 -1,0 +1,1 @@@ ++libfml.so.0 diff --cc debian/control index 0000000,0000000..8a76c52 new file mode 100644 --- /dev/null +++ b/debian/control @@@ -1,0 -1,0 +1,58 @@@ ++Source: fermi-lite ++Maintainer: Debian Med Packaging Team ++Uploaders: Sascha Steinbiss , Nilesh Patra ++Section: science ++Priority: optional ++Build-Depends: debhelper-compat (= 13), ++ d-shlibs, ++ zlib1g-dev, ++ libsimde-dev, ++ help2man ++Standards-Version: 4.5.1 ++Vcs-Browser: https://salsa.debian.org/med-team/fermi-lite ++Vcs-Git: https://salsa.debian.org/med-team/fermi-lite.git ++Homepage: https://github.com/lh3/fermi-lite ++Rules-Requires-Root: no ++ ++Package: fml-asm ++Architecture: any ++Depends: ${misc:Depends}, ++ ${shlibs:Depends}, ++ zlib1g ++Description: tool for assembling Illumina short reads in small regions ++ Fml-asm is a command-line tool for assembling Illumina short reads in regions ++ from 100bp to 10 million bp in size, based on the fermi-lite library. ++ It is largely a light-weight in-memory version of fermikit without ++ generating any intermediate files. It inherits the performance, the relatively ++ small memory footprint and the features of fermikit. In particular, fermi-lite ++ is able to retain heterozygous events and thus can be used to assemble diploid ++ regions for the purpose of variant calling. ++ ++Package: libfml0 ++Section: libs ++Architecture: any ++Multi-Arch: same ++Depends: ${shlibs:Depends}, ++ ${misc:Depends}, ++ zlib1g ++Description: library for assembling Illumina short reads in small regions ++ Fermi-lite is a standalone C library tool for assembling Illumina short ++ reads in regions from 100bp to 10 million bp in size. ++ . ++ This package contains a shared library offering the fermi-lite API to custom C ++ programs. ++ ++Package: libfml-dev ++Section: libdevel ++Architecture: any ++Multi-Arch: same ++Depends: ${misc:Depends}, ++ libfml0 (= ${binary:Version}), ++ zlib1g-dev, ++ ${devlibs:Depends} ++Description: development headers for libfml ++ Fermi-lite is a standalone C library tool for assembling Illumina short ++ reads in regions from 100bp to 10 million bp in size. ++ . ++ This package contains the C library headers for using libfml in custom tools, ++ along with a static library. diff --cc debian/copyright index 0000000,0000000..0452df0 new file mode 100644 --- /dev/null +++ b/debian/copyright @@@ -1,0 -1,0 +1,71 @@@ ++Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ ++Upstream-Name: fermi-lite ++Source: https://github.com/lh3/fermi-lite ++Upstream-Contact: Heng Li ++ ++Files: * ++Copyright: © 2016 Broad Institute ++License: MIT ++ ++Files: khash.h kseq.h ++Copyright: (c) 2008, 2009, 2011 Attractive Chaos ++License: MIT ++ ++Files: ksort.h ++Copyright: (c) 2008, 2011 Attractive Chaos ++License: MIT ++ ++Files: kstring.h ++Copyright: (c) Attractive Chaos ++License: MIT ++ ++Files: ksw.h ++Copyright: (c) 2011 Attractive Chaos ++License: MIT ++ ++Files: kvec.h ++Copyright: (c) 2008 Attractive Chaos ++License: MIT ++ ++Files: debian/* ++Copyright: © 2016 Debian Med Packaging Team ++License: GPL-3+ ++ ++License: MIT ++ Permission is hereby granted, free of charge, to any person obtaining ++ a copy of this software and associated documentation files (the ++ "Software"), to deal in the Software without restriction, including ++ without limitation the rights to use, copy, modify, merge, publish, ++ distribute, sublicense, and/or sell copies of the Software, and to ++ permit persons to whom the Software is furnished to do so, subject to ++ the following conditions: ++ . ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ . ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS ++ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++ SOFTWARE. ++ ++License: GPL-3+ ++ This package is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ . ++ This package is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ . ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see ++ . ++ On Debian systems, the complete text of the GNU General ++ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". ++ diff --cc debian/install index 0000000,0000000..4cdf840 new file mode 100644 --- /dev/null +++ b/debian/install @@@ -1,0 -1,0 +1,1 @@@ ++fml-asm /usr/bin diff --cc debian/libfml0.symbols index 0000000,0000000..47cb7c2 new file mode 100644 --- /dev/null +++ b/debian/libfml0.symbols @@@ -1,0 -1,0 +1,194 @@@ ++libfml.so.0 libfml0 #MINVER# ++* Build-Depends-Package: libfml-dev ++ bfc_ch_count@Base 0.1 ++ bfc_ch_destroy@Base 0.1 ++ bfc_ch_get@Base 0.1 ++ bfc_ch_get_k@Base 0.1 ++ bfc_ch_hist@Base 0.1 ++ bfc_ch_init@Base 0.1 ++ bfc_ch_insert@Base 0.1 ++ bfc_ch_kmer_occ@Base 0.1 ++ bfc_ec1@Base 0.1 ++ bfc_ec_best_island@Base 0.1 ++ bfc_ec_first_kmer@Base 0.1 ++ bfc_ec_greedy_k@Base 0.1 ++ bfc_ec_kcov@Base 0.1 ++ bfc_kmer_null@Base 0.1 ++ bfc_opt_init@Base 0.1 ++ fm6_get_nei@Base 0.1 ++ fm6_is_contained@Base 0.1 ++ fm6_retrieve@Base 0.1 ++ fml_assemble@Base 0.1 ++ fml_correct@Base 0.1 ++ fml_correct_core@Base 0.1 ++ fml_count@Base 0.1 ++ fml_fltuniq@Base 0.1 ++ fml_fmi2mag@Base 0.1 ++ fml_fmi2mag_core@Base 0.1 ++ fml_fmi_destroy@Base 0.1 ++ fml_fmi_gen@Base 0.1 ++ fml_mag2utg@Base 0.1 ++ fml_mag_clean@Base 0.1 ++ fml_mag_destroy@Base 0.1 ++ fml_opt_adjust@Base 0.1 ++ fml_opt_init@Base 0.1 ++ fml_seq2fmi@Base 0.1 ++ fml_seq_read@Base 0.1 ++ fml_utg_destroy@Base 0.1 ++ fml_utg_print@Base 0.1 ++ g_defr@Base 0.1 ++ g_trinull@Base 0.1 ++ kh_clear_64@Base 0.1 ++ kh_del_64@Base 0.1 ++ kh_destroy_64@Base 0.1 ++ kh_get_64@Base 0.1 ++ kh_init_64@Base 0.1 ++ kh_put_64@Base 0.1 ++ kh_resize_64@Base 0.1 ++ kmer_correct@Base 0.1 ++ ks_combsort_128x@Base 0.1 ++ ks_combsort_128y@Base 0.1 ++ ks_combsort_ec@Base 0.1 ++ ks_combsort_infocmp@Base 0.1 ++ ks_combsort_uint64_t@Base 0.1 ++ ks_combsort_vlt1@Base 0.1 ++ ks_combsort_vlt2@Base 0.1 ++ ks_heapdown_128x@Base 0.1 ++ ks_heapdown_128y@Base 0.1 ++ ks_heapdown_ec@Base 0.1 ++ ks_heapdown_infocmp@Base 0.1 ++ ks_heapdown_uint64_t@Base 0.1 ++ ks_heapdown_vlt1@Base 0.1 ++ ks_heapdown_vlt2@Base 0.1 ++ ks_heapmake_128x@Base 0.1 ++ ks_heapmake_128y@Base 0.1 ++ ks_heapmake_ec@Base 0.1 ++ ks_heapmake_infocmp@Base 0.1 ++ ks_heapmake_uint64_t@Base 0.1 ++ ks_heapmake_vlt1@Base 0.1 ++ ks_heapmake_vlt2@Base 0.1 ++ ks_heapsort_128x@Base 0.1 ++ ks_heapsort_128y@Base 0.1 ++ ks_heapsort_ec@Base 0.1 ++ ks_heapsort_infocmp@Base 0.1 ++ ks_heapsort_uint64_t@Base 0.1 ++ ks_heapsort_vlt1@Base 0.1 ++ ks_heapsort_vlt2@Base 0.1 ++ ks_heapup_128x@Base 0.1 ++ ks_heapup_128y@Base 0.1 ++ ks_heapup_ec@Base 0.1 ++ ks_heapup_infocmp@Base 0.1 ++ ks_heapup_uint64_t@Base 0.1 ++ ks_heapup_vlt1@Base 0.1 ++ ks_heapup_vlt2@Base 0.1 ++ ks_introsort_128x@Base 0.1 ++ ks_introsort_128y@Base 0.1 ++ ks_introsort_ec@Base 0.1 ++ ks_introsort_infocmp@Base 0.1 ++ ks_introsort_uint64_t@Base 0.1 ++ ks_introsort_vlt1@Base 0.1 ++ ks_introsort_vlt2@Base 0.1 ++ ks_ksmall_128x@Base 0.1 ++ ks_ksmall_128y@Base 0.1 ++ ks_ksmall_ec@Base 0.1 ++ ks_ksmall_infocmp@Base 0.1 ++ ks_ksmall_uint64_t@Base 0.1 ++ ks_ksmall_vlt1@Base 0.1 ++ ks_ksmall_vlt2@Base 0.1 ++ ks_mergesort_128x@Base 0.1 ++ ks_mergesort_128y@Base 0.1 ++ ks_mergesort_ec@Base 0.1 ++ ks_mergesort_infocmp@Base 0.1 ++ ks_mergesort_uint64_t@Base 0.1 ++ ks_mergesort_vlt1@Base 0.1 ++ ks_mergesort_vlt2@Base 0.1 ++ ks_sample_128x@Base 0.1 ++ ks_sample_128y@Base 0.1 ++ ks_sample_ec@Base 0.1 ++ ks_sample_infocmp@Base 0.1 ++ ks_sample_uint64_t@Base 0.1 ++ ks_sample_vlt1@Base 0.1 ++ ks_sample_vlt2@Base 0.1 ++ ks_shuffle_128x@Base 0.1 ++ ks_shuffle_128y@Base 0.1 ++ ks_shuffle_ec@Base 0.1 ++ ks_shuffle_infocmp@Base 0.1 ++ ks_shuffle_uint64_t@Base 0.1 ++ ks_shuffle_vlt1@Base 0.1 ++ ks_shuffle_vlt2@Base 0.1 ++ ksw_align@Base 0.1 ++ ksw_i16@Base 0.1 ++ ksw_qinit@Base 0.1 ++ ksw_u8@Base 0.1 ++ kt_for@Base 0.1 ++ mag_b_destroyaux@Base 0.1 ++ mag_b_initaux@Base 0.1 ++ mag_cal_rdist@Base 0.1 ++ mag_eh_add@Base 0.1 ++ mag_eh_markdel@Base 0.1 ++ mag_g_amend@Base 0.1 ++ mag_g_build_hash@Base 0.1 ++ mag_g_clean@Base 0.1 ++ mag_g_destroy@Base 0.1 ++ mag_g_merge@Base 0.1 ++ mag_g_pop_open@Base 0.1 ++ mag_g_pop_simple@Base 0.1 ++ mag_g_print@Base 0.1 ++ mag_g_rm_edge@Base 0.1 ++ mag_g_rm_vext@Base 0.1 ++ mag_g_rm_vint@Base 0.1 ++ mag_g_simplify_bubble@Base 0.1 ++ mag_g_trim_open@Base 0.1 ++ mag_init_opt@Base 0.1 ++ mag_tid2idd@Base 0.1 ++ mag_v128_clean@Base 0.1 ++ mag_v_copy_to_empty@Base 0.1 ++ mag_v_del@Base 0.1 ++ mag_v_destroy@Base 0.1 ++ mag_v_flip@Base 0.1 ++ mag_v_pop_open@Base 0.1 ++ mag_v_transdel@Base 0.1 ++ mag_v_trim_open@Base 0.1 ++ mag_v_write@Base 0.1 ++ mag_vh_merge_try@Base 0.1 ++ mag_vh_pop_simple@Base 0.1 ++ mag_vh_simplify_bubble@Base 0.1 ++ mr_destroy@Base 0.1 ++ mr_init@Base 0.1 ++ mr_insert1@Base 0.1 ++ mr_insert_multi@Base 0.1 ++ mr_itr_first@Base 0.1 ++ mr_itr_next_block@Base 0.1 ++ mr_rank2a@Base 0.1 ++ mr_thr_min@Base 0.1 ++ rld_destroy@Base 0.1 ++ rld_dump@Base 0.1 ++ rld_enc@Base 0.1 ++ rld_enc_finish@Base 0.1 ++ rld_extend0@Base 0.1 ++ rld_extend@Base 0.1 ++ rld_init@Base 0.1 ++ rld_itr_init@Base 0.1 ++ rld_rank11@Base 0.1 ++ rld_rank1a@Base 0.1 ++ rld_rank21@Base 0.1 ++ rld_rank2a@Base 0.1 ++ rld_rank_index@Base 0.1 ++ rld_restore@Base 0.1 ++ rld_restore_mmap@Base 0.1 ++ rle_auxtab@Base 0.1 ++ rle_count@Base 0.1 ++ rle_insert@Base 0.1 ++ rle_insert_cached@Base 0.1 ++ rle_print@Base 0.1 ++ rle_rank2a@Base 0.1 ++ rle_split@Base 0.1 ++ rope_destroy@Base 0.1 ++ rope_init@Base 0.1 ++ rope_insert_run@Base 0.1 ++ rope_itr_first@Base 0.1 ++ rope_itr_next_block@Base 0.1 ++ rope_rank2a@Base 0.1 ++ seq_nt6_table@Base 0.1 ++ seq_revcomp6@Base 0.1 ++ seq_reverse@Base 0.1 diff --cc debian/manpages index 0000000,0000000..f7e585b new file mode 100644 --- /dev/null +++ b/debian/manpages @@@ -1,0 -1,0 +1,1 @@@ ++*.1 diff --cc debian/patches/bcf_seqlib.patch index 0000000,0000000..1035478 new file mode 100644 --- /dev/null +++ b/debian/patches/bcf_seqlib.patch @@@ -1,0 -1,0 +1,346 @@@ ++Description: Try to take over patches from libSeqLib which needs separate bfc.h ++ FIXME: Please check the FIXME at the end. I think I did things wrong to put a ++ static declaration into header file but I had no better idea to make ++ ec1buf_init known in libSeqLib ++Author: Andreas Tille ++Last-Update: Thu, 02 Feb 2017 10:57:56 +0100 ++ ++--- a/bfc.c +++++ b/bfc.c ++@@ -7,24 +7,12 @@ ++ #include "kmer.h" ++ #include "internal.h" ++ #include "fml.h" +++#include "bfc.h" ++ ++ /******************* ++ *** BFC options *** ++ *******************/ ++ ++-typedef struct { ++- int n_threads, q, k, l_pre; ++- int min_cov; // a k-mer is considered solid if the count is no less than this ++- ++- int max_end_ext; ++- int win_multi_ec; ++- float min_trim_frac; ++- ++- // these ec options cannot be changed on the command line ++- int w_ec, w_ec_high, w_absent, w_absent_high; ++- int max_path_diff, max_heap; ++-} bfc_opt_t; ++- ++ void bfc_opt_init(bfc_opt_t *opt) ++ { ++ memset(opt, 0, sizeof(bfc_opt_t)); ++@@ -46,26 +34,6 @@ void bfc_opt_init(bfc_opt_t *opt) ++ opt->max_heap = 100; ++ } ++ ++-/********************** ++- *** K-mer counting *** ++- **********************/ ++- ++-#define CNT_BUF_SIZE 256 ++- ++-typedef struct { // cache to reduce locking ++- uint64_t y[2]; ++- int is_high; ++-} insbuf_t; ++- ++-typedef struct { ++- int k, q; ++- int n_seqs; ++- const fml_seq1_t *seqs; ++- bfc_ch_t *ch; ++- int *n_buf; ++- insbuf_t **buf; ++-} cnt_step_t; ++- ++ bfc_kmer_t bfc_kmer_null = {{0,0,0,0}}; ++ ++ static int bfc_kmer_bufclear(cnt_step_t *cs, int forced, int tid) ++@@ -127,34 +95,6 @@ struct bfc_ch_s *fml_count(int n, const ++ return cs.ch; ++ } ++ ++-/*************** ++- *** Correct *** ++- ***************/ ++- ++-#define BFC_MAX_KMER 63 ++-#define BFC_MAX_BF_SHIFT 37 ++- ++-#define BFC_MAX_PATHS 4 ++-#define BFC_EC_HIST 5 ++-#define BFC_EC_HIST_HIGH 2 ++- ++-#define BFC_EC_MIN_COV_COEF .1 ++- ++-/************************** ++- * Sequence struct for ec * ++- **************************/ ++- ++-#include "kvec.h" ++- ++-typedef struct { // NOTE: unaligned memory ++- uint8_t b:3, q:1, ob:3, oq:1; ++- uint8_t dummy; ++- uint16_t lcov:6, hcov:6, solid_end:1, high_end:1, ec:1, absent:1; ++- int i; ++-} ecbase_t; ++- ++-typedef kvec_t(ecbase_t) ecseq_t; ++- ++ static int bfc_seq_conv(const char *s, const char *q, int qthres, ecseq_t *seq) ++ { ++ int i, l; ++@@ -264,53 +204,6 @@ uint64_t bfc_ec_best_island(int k, const ++ return max > 0? (uint64_t)(max_i - max - k + 1) << 32 | max_i : 0; ++ } ++ ++-/******************** ++- * Correct one read * ++- ********************/ ++- ++-#include "ksort.h" ++- ++-#define ECCODE_MISC 1 ++-#define ECCODE_MANY_N 2 ++-#define ECCODE_NO_SOLID 3 ++-#define ECCODE_UNCORR_N 4 ++-#define ECCODE_MANY_FAIL 5 ++- ++-typedef struct { ++- uint32_t ec_code:3, brute:1, n_ec:14, n_ec_high:14; ++- uint32_t n_absent:24, max_heap:8; ++-} ecstat_t; ++- ++-typedef struct { ++- uint8_t ec:1, ec_high:1, absent:1, absent_high:1, b:4; ++-} bfc_penalty_t; ++- ++-typedef struct { ++- int tot_pen; ++- int i; // base position ++- int k; // position in the stack ++- int32_t ecpos_high[BFC_EC_HIST_HIGH]; ++- int32_t ecpos[BFC_EC_HIST]; ++- bfc_kmer_t x; ++-} echeap1_t; ++- ++-typedef struct { ++- int parent, i, tot_pen; ++- uint8_t b; ++- bfc_penalty_t pen; ++- uint16_t cnt; ++-} ecstack1_t; ++- ++-typedef struct { ++- const bfc_opt_t *opt; ++- const bfc_ch_t *ch; ++- kvec_t(echeap1_t) heap; ++- kvec_t(ecstack1_t) stack; ++- ecseq_t seq, tmp, ec[2]; ++- int mode; ++- ecstat_t ori_st; ++-} bfc_ec1buf_t; ++- ++ #define heap_lt(a, b) ((a).tot_pen > (b).tot_pen) ++ KSORT_INIT(ec, echeap1_t, heap_lt) ++ ++@@ -567,19 +460,6 @@ ecstat_t bfc_ec1(bfc_ec1buf_t *e, char * ++ return s; ++ } ++ ++-/******************** ++- * Error correction * ++- ********************/ ++- ++-typedef struct { ++- const bfc_opt_t *opt; ++- const bfc_ch_t *ch; ++- bfc_ec1buf_t **e; ++- int64_t n_processed; ++- int n_seqs, flt_uniq; ++- fml_seq1_t *seqs; ++-} ec_step_t; ++- ++ static uint64_t max_streak(int k, const bfc_ch_t *ch, const fml_seq1_t *s) ++ { ++ int i, l; ++@@ -663,6 +543,18 @@ float fml_correct_core(const fml_opt_t * ++ return kcov; ++ } ++ +++// Added by jwala for use in libSeqLib +++void kmer_correct(ec_step_t * es, int mode, bfc_ch_t * ch) { +++ int i = 0; +++ es->e = (bfc_ec1buf_t**)calloc(es->opt->n_threads, sizeof(void*)); //jwala added cast +++ for (i = 0; i < es->opt->n_threads; ++i) +++ es->e[i] = ec1buf_init(es->opt, ch), es->e[i]->mode = mode; +++ kt_for(es->opt->n_threads, worker_ec, es, es->n_seqs); +++ for (i = 0; i < es->opt->n_threads; ++i) +++ ec1buf_destroy(es->e[i]); +++ free(es->e); +++} +++ ++ float fml_correct(const fml_opt_t *opt, int n, fml_seq1_t *seq) ++ { ++ return fml_correct_core(opt, 0, n, seq); ++--- /dev/null +++++ b/bfc.h ++@@ -0,0 +1,153 @@ +++#ifndef AC_BFC_H__ +++#define AC_BFC_H__ +++ +++#include +++#include +++#include +++#include +++#include +++#include "htab.h" +++/* #include "kmer.h" ... this is actually included by htab.h */ +++#include "internal.h" +++#include "fml.h" +++#include "khash.h" +++ +++/* Andreas Tille : Its not clear where jwala took this from and what its purpose might be - commenting out for the moment +++#define _cnt_eq(a, b) ((a)>>14 == (b)>>14) +++#define _cnt_hash(a) ((a)>>14) +++KHASH_INIT(cnt, uint64_t, char, 0, _cnt_hash, _cnt_eq) +++typedef khash_t(cnt) cnthash_t; +++ +++struct bfc_ch_s { +++ int k; +++ cnthash_t **h; +++ // private +++ int l_pre; +++}; +++*/ +++ +++typedef struct { +++ int n_threads, q, k, l_pre; +++ int min_cov; // a k-mer is considered solid if the count is no less than this +++ +++ int max_end_ext; +++ int win_multi_ec; +++ float min_trim_frac; +++ +++ // these ec options cannot be changed on the command line +++ int w_ec, w_ec_high, w_absent, w_absent_high; +++ int max_path_diff, max_heap; +++} bfc_opt_t; +++ +++/********************** +++ *** K-mer counting *** +++ **********************/ +++ +++#define CNT_BUF_SIZE 256 +++ +++typedef struct { // cache to reduce locking +++ uint64_t y[2]; +++ int is_high; +++} insbuf_t; +++ +++typedef struct { +++ int k, q; +++ int n_seqs; +++ const fml_seq1_t *seqs; +++ bfc_ch_t *ch; +++ int *n_buf; +++ insbuf_t **buf; +++} cnt_step_t; +++ +++/*************** +++ *** Correct *** +++ ***************/ +++ +++#define BFC_MAX_KMER 63 +++#define BFC_MAX_BF_SHIFT 37 +++ +++#define BFC_MAX_PATHS 4 +++#define BFC_EC_HIST 5 +++#define BFC_EC_HIST_HIGH 2 +++ +++#define BFC_EC_MIN_COV_COEF .1 +++ +++/************************** +++ * Sequence struct for ec * +++ **************************/ +++ +++#include "kvec.h" +++ +++typedef struct { // NOTE: unaligned memory +++ uint8_t b:3, q:1, ob:3, oq:1; +++ uint8_t dummy; +++ uint16_t lcov:6, hcov:6, solid_end:1, high_end:1, ec:1, absent:1; +++ int i; +++} ecbase_t; +++ +++typedef kvec_t(ecbase_t) ecseq_t; +++ +++/******************** +++ * Correct one read * +++ ********************/ +++ +++#include "ksort.h" +++ +++#define ECCODE_MISC 1 +++#define ECCODE_MANY_N 2 +++#define ECCODE_NO_SOLID 3 +++#define ECCODE_UNCORR_N 4 +++#define ECCODE_MANY_FAIL 5 +++ +++typedef struct { +++ uint32_t ec_code:3, brute:1, n_ec:14, n_ec_high:14; +++ uint32_t n_absent:24, max_heap:8; +++} ecstat_t; +++ +++typedef struct { +++ uint8_t ec:1, ec_high:1, absent:1, absent_high:1, b:4; +++} bfc_penalty_t; +++ +++typedef struct { +++ int tot_pen; +++ int i; // base position +++ int k; // position in the stack +++ int32_t ecpos_high[BFC_EC_HIST_HIGH]; +++ int32_t ecpos[BFC_EC_HIST]; +++ bfc_kmer_t x; +++} echeap1_t; +++ +++typedef struct { +++ int parent, i, tot_pen; +++ uint8_t b; +++ bfc_penalty_t pen; +++ uint16_t cnt; +++} ecstack1_t; +++ +++typedef struct { +++ const bfc_opt_t *opt; +++ const bfc_ch_t *ch; +++ kvec_t(echeap1_t) heap; +++ kvec_t(ecstack1_t) stack; +++ ecseq_t seq, tmp, ec[2]; +++ int mode; +++ ecstat_t ori_st; +++} bfc_ec1buf_t; +++ +++/******************** +++ * Error correction * +++ ********************/ +++ +++typedef struct { +++ const bfc_opt_t *opt; +++ const bfc_ch_t *ch; +++ bfc_ec1buf_t **e; +++ int64_t n_processed; +++ int n_seqs, flt_uniq; +++ fml_seq1_t *seqs; +++} ec_step_t; +++ +++void kmer_correct(ec_step_t * es, int mode, bfc_ch_t * ch); +++void bfc_opt_init(bfc_opt_t *opt); +++ +++#endif diff --cc debian/patches/ensure-signed-comparison.patch index 0000000,0000000..3e3384c new file mode 100644 --- /dev/null +++ b/debian/patches/ensure-signed-comparison.patch @@@ -1,0 -1,0 +1,22 @@@ ++Description: Ensure that our variable checking for >= 0 is signed ++ The type of v->n is size_t, which is an unsigned type, and we are assigning ++ v->n - 1 to i and looping while this is >= 0. If v->n == 0, on some ++ architectures (armhf) this results in i being set to a positive value ++ (specifically, UINT32_MAX). ++Author: Steve Langasek ++Last-Update: 2020-03-17 ++Bug-Debian: https://bugs.debian.org/954127 ++ ++Index: fermi-lite-0.1/mag.c ++=================================================================== ++--- fermi-lite-0.1.orig/mag.c +++++ fermi-lite-0.1/mag.c ++@@ -506,7 +506,7 @@ ++ ++ for (j = 0; j < 2; ++j) { ++ sum_n = sum_l = 0; ++- for (i = v->n - 1; i >= 0; --i) { +++ for (i = (int64_t)v->n - 1; i >= 0; --i) { ++ const magv_t *p = &v->a[srt[i]<<32>>32]; ++ int tmp1, tmp2; ++ tmp1 = tmp2 = 0; diff --cc debian/patches/gcc10.patch index 0000000,0000000..3e7f65f new file mode 100644 --- /dev/null +++ b/debian/patches/gcc10.patch @@@ -1,0 -1,0 +1,16 @@@ ++Description: Fix package to build with GCC-10 ++Bug-Debian: https://bugs.debian.org/957198 ++Author: Nilesh Patra ++Last-Update: Sat, 18 Apr 2020 22:55:21 +0530 ++ ++--- a/rle.h +++++ b/rle.h ++@@ -30,7 +30,7 @@ ++ *** 43+3 codec *** ++ ******************/ ++ ++-const uint8_t rle_auxtab[8]; +++extern const uint8_t rle_auxtab[8]; ++ ++ #define RLE_MIN_SPACE 18 ++ #define rle_nptr(block) ((uint16_t*)(block)) diff --cc debian/patches/hardening index 0000000,0000000..e416fe1 new file mode 100644 --- /dev/null +++ b/debian/patches/hardening @@@ -1,0 -1,0 +1,43 @@@ ++Description: add hardening flags ++ Adds necessary build flags for hardening. ++Author: Sascha Steinbiss ++Last-Update: 2016-01-08 ++--- fermi-lite.orig/Makefile +++++ fermi-lite/Makefile ++@@ -1,30 +1,27 @@ ++-CC= gcc ++-CFLAGS= -g -Wall -O2 -fPIC #-fno-inline-functions -fno-inline-functions-called-once ++-CPPFLAGS= +++CC?= gcc +++CFLAGS+= -g -Wall -O2 -fPIC #-fno-inline-functions -fno-inline-functions-called-once +++#CPPFLAGS= ++ INCLUDES= ++ OBJS= kthread.o misc.o \ ++ bseq.o htab.o bfc.o \ ++ rle.o rope.o mrope.o rld0.o \ ++ unitig.o mag.o bubble.o ksw.o ++ PROG= fml-asm ++-LIBS= -lm -lz -lpthread +++LDLIBS+= -lm -lz -lpthread ++ SONUMBER=0 ++ ++ .SUFFIXES:.c .o ++ ++-.c.o: ++- $(CC) -c $(CFLAGS) $(CPPFLAGS) $(INCLUDES) $< -o $@ ++- ++ all:$(PROG) libfml.so.$(SONUMBER) ++ ++ fml-asm:libfml.a example.o ++- $(CC) $(CFLAGS) $^ -o $@ -L. -lfml $(LIBS) +++ $(CC) $(LDFLAGS) $(CFLAGS) $^ -o $@ -L. -lfml $(LDLIBS) ++ ++ libfml.a:$(OBJS) ++ $(AR) -csru $@ $(OBJS) ++ ++ libfml.so.$(SONUMBER): $(OBJS) ++- $(CC) -shared -o $@ $(OBJS) -fPIC -Wl,-soname,libfml.so.$(SONUMBER) $(LIBS) $(LDFLAGS) +++ $(CC) $(LDFLAGS) -shared -o $@ $(OBJS) -fPIC -Wl,-soname,libfml.so.$(SONUMBER) $(LDLIBS) ++ ++ ++ clean: diff --cc debian/patches/make_shared_lib index 0000000,0000000..eec0747 new file mode 100644 --- /dev/null +++ b/debian/patches/make_shared_lib @@@ -1,0 -1,0 +1,40 @@@ ++Description: build shared library ++ Upstream only builds a static library, this adds a shared one. ++Author: Sascha Steinbiss ++Last-Update: 2016-01-08 ++--- a/Makefile +++++ b/Makefile ++@@ -1,5 +1,5 @@ ++ CC= gcc ++-CFLAGS= -g -Wall -O2 -Wno-unused-function #-fno-inline-functions -fno-inline-functions-called-once +++CFLAGS= -g -Wall -O2 -fPIC #-fno-inline-functions -fno-inline-functions-called-once ++ CPPFLAGS= ++ INCLUDES= ++ OBJS= kthread.o misc.o \ ++@@ -8,13 +8,14 @@ ++ unitig.o mag.o bubble.o ksw.o ++ PROG= fml-asm ++ LIBS= -lm -lz -lpthread +++SONUMBER=0 ++ ++ .SUFFIXES:.c .o ++ ++ .c.o: ++ $(CC) -c $(CFLAGS) $(CPPFLAGS) $(INCLUDES) $< -o $@ ++ ++-all:$(PROG) +++all:$(PROG) libfml.so.$(SONUMBER) ++ ++ fml-asm:libfml.a example.o ++ $(CC) $(CFLAGS) $^ -o $@ -L. -lfml $(LIBS) ++@@ -22,6 +23,10 @@ ++ libfml.a:$(OBJS) ++ $(AR) -csru $@ $(OBJS) ++ +++libfml.so.$(SONUMBER): $(OBJS) +++ $(CC) -shared -o $@ $(OBJS) -fPIC -Wl,-soname,libfml.so.$(SONUMBER) $(LIBS) $(LDFLAGS) +++ +++ ++ clean: ++ rm -fr gmon.out *.o ext/*.o a.out $(PROG) *~ *.a *.dSYM session* ++ diff --cc debian/patches/rename_bseq1_t.patch index 0000000,0000000..412eb33 new file mode 100644 --- /dev/null +++ b/debian/patches/rename_bseq1_t.patch @@@ -1,0 -1,0 +1,260 @@@ ++Description: Avoid name space conflict with bwa ++Bug-Upstream: https://github.com/lh3/fermi-lite/issues/5 ++Author: Andreas Tille ++Last-Update: Thu, 02 Feb 2017 10:57:56 +0100 ++ ++--- a/bfc.c +++++ b/bfc.c ++@@ -60,7 +60,7 @@ typedef struct { // cache to reduce lock ++ typedef struct { ++ int k, q; ++ int n_seqs; ++- const bseq1_t *seqs; +++ const fml_seq1_t *seqs; ++ bfc_ch_t *ch; ++ int *n_buf; ++ insbuf_t **buf; ++@@ -97,7 +97,7 @@ static void bfc_kmer_insert(cnt_step_t * ++ static void worker_count(void *_data, long k, int tid) ++ { ++ cnt_step_t *cs = (cnt_step_t*)_data; ++- const bseq1_t *s = &cs->seqs[k]; +++ const fml_seq1_t *s = &cs->seqs[k]; ++ int i, l; ++ bfc_kmer_t x = bfc_kmer_null; ++ uint64_t qmer = 0, mask = (1ULL<k) - 1; ++@@ -111,7 +111,7 @@ static void worker_count(void *_data, lo ++ } ++ } ++ ++-struct bfc_ch_s *fml_count(int n, const bseq1_t *seq, int k, int q, int l_pre, int n_threads) +++struct bfc_ch_s *fml_count(int n, const fml_seq1_t *seq, int k, int q, int l_pre, int n_threads) ++ { ++ int i; ++ cnt_step_t cs; ++@@ -577,10 +577,10 @@ typedef struct { ++ bfc_ec1buf_t **e; ++ int64_t n_processed; ++ int n_seqs, flt_uniq; ++- bseq1_t *seqs; +++ fml_seq1_t *seqs; ++ } ec_step_t; ++ ++-static uint64_t max_streak(int k, const bfc_ch_t *ch, const bseq1_t *s) +++static uint64_t max_streak(int k, const bfc_ch_t *ch, const fml_seq1_t *s) ++ { ++ int i, l; ++ uint64_t max = 0, t = 0; ++@@ -602,7 +602,7 @@ static uint64_t max_streak(int k, const ++ static void worker_ec(void *_data, long k, int tid) ++ { ++ ec_step_t *es = (ec_step_t*)_data; ++- bseq1_t *s = &es->seqs[k]; +++ fml_seq1_t *s = &es->seqs[k]; ++ if (es->flt_uniq) { ++ uint64_t max; ++ max = max_streak(es->opt->k, es->ch, s); ++@@ -624,7 +624,7 @@ static void worker_ec(void *_data, long ++ } else bfc_ec1(es->e[tid], s->seq, s->qual); ++ } ++ ++-float fml_correct_core(const fml_opt_t *opt, int flt_uniq, int n, bseq1_t *seq) +++float fml_correct_core(const fml_opt_t *opt, int flt_uniq, int n, fml_seq1_t *seq) ++ { ++ bfc_ch_t *ch; ++ int i, mode; ++@@ -663,12 +663,12 @@ float fml_correct_core(const fml_opt_t * ++ return kcov; ++ } ++ ++-float fml_correct(const fml_opt_t *opt, int n, bseq1_t *seq) +++float fml_correct(const fml_opt_t *opt, int n, fml_seq1_t *seq) ++ { ++ return fml_correct_core(opt, 0, n, seq); ++ } ++ ++-float fml_fltuniq(const fml_opt_t *opt, int n, bseq1_t *seq) +++float fml_fltuniq(const fml_opt_t *opt, int n, fml_seq1_t *seq) ++ { ++ return fml_correct_core(opt, 1, n, seq); ++ } ++--- a/bseq.c +++++ b/bseq.c ++@@ -6,10 +6,10 @@ ++ #include "kseq.h" ++ KSEQ_INIT(gzFile, gzread) ++ ++-bseq1_t *bseq_read(const char *fn, int *n_) +++fml_seq1_t *fml_seq_read(const char *fn, int *n_) ++ { ++ gzFile fp; ++- bseq1_t *seqs; +++ fml_seq1_t *seqs; ++ kseq_t *ks; ++ int m, n; ++ uint64_t size = 0; ++@@ -21,10 +21,10 @@ bseq1_t *bseq_read(const char *fn, int * ++ ++ m = n = 0; seqs = 0; ++ while (kseq_read(ks) >= 0) { ++- bseq1_t *s; +++ fml_seq1_t *s; ++ if (n >= m) { ++ m = m? m<<1 : 256; ++- seqs = realloc(seqs, m * sizeof(bseq1_t)); +++ seqs = realloc(seqs, m * sizeof(fml_seq1_t)); ++ } ++ s = &seqs[n]; ++ s->seq = strdup(ks->seq.s); ++--- a/misc.c +++++ b/misc.c ++@@ -40,7 +40,7 @@ void fml_opt_init(fml_opt_t *opt) ++ opt->mag_opt.flag = MAG_F_NO_SIMPL | MAG_F_POPOPEN; ++ } ++ ++-void fml_opt_adjust(fml_opt_t *opt, int n_seqs, const bseq1_t *seqs) +++void fml_opt_adjust(fml_opt_t *opt, int n_seqs, const fml_seq1_t *seqs) ++ { ++ int i, log_len; ++ uint64_t tot_len = 0; ++@@ -62,7 +62,7 @@ static inline int is_rev_same(int l, con ++ return (i == l>>1); ++ } ++ ++-struct rld_t *fml_fmi_gen(int n, bseq1_t *seq, int is_mt) +++struct rld_t *fml_fmi_gen(int n, fml_seq1_t *seq, int is_mt) ++ { ++ mrope_t *mr; ++ kstring_t str = {0,0,0}; ++@@ -80,7 +80,7 @@ struct rld_t *fml_fmi_gen(int n, bseq1_t ++ mr = mr_init(ROPE_DEF_MAX_NODES, ROPE_DEF_BLOCK_LEN, MR_SO_RCLO); ++ for (k = 0; k < n; ++k) { ++ int i; ++- bseq1_t *s = &seq[k]; +++ fml_seq1_t *s = &seq[k]; ++ if (s->l_seq == 0) continue; ++ free(s->qual); ++ for (i = 0; i < s->l_seq; ++i) ++@@ -121,7 +121,7 @@ struct rld_t *fml_fmi_gen(int n, bseq1_t ++ return e; ++ } ++ ++-struct rld_t *fml_seq2fmi(const fml_opt_t *opt, int n, bseq1_t *seq) +++struct rld_t *fml_seq2fmi(const fml_opt_t *opt, int n, fml_seq1_t *seq) ++ { ++ return fml_fmi_gen(n, seq, opt->n_threads > 1? 1 : 0); ++ } ++@@ -277,7 +277,7 @@ void fml_utg_destroy(int n, fml_utg_t *u ++ ++ #define MAG_MIN_NSR_COEF .1 ++ ++-fml_utg_t *fml_assemble(const fml_opt_t *opt0, int n_seqs, bseq1_t *seqs, int *n_utg) +++fml_utg_t *fml_assemble(const fml_opt_t *opt0, int n_seqs, fml_seq1_t *seqs, int *n_utg) ++ { ++ rld_t *e; ++ mag_t *g; ++--- a/example.c +++++ b/example.c ++@@ -7,7 +7,7 @@ int main(int argc, char *argv[]) ++ { ++ fml_opt_t opt; ++ int c, n_seqs, n_utg, gfa_out = 0; ++- bseq1_t *seqs; +++ fml_seq1_t *seqs; ++ fml_utg_t *utg; ++ ++ fml_opt_init(&opt); ++@@ -41,7 +41,7 @@ int main(int argc, char *argv[]) ++ fprintf(stderr, " -g output the assembly graph in the GFA format\n"); ++ return 1; ++ } ++- seqs = bseq_read(argv[optind], &n_seqs); +++ seqs = fml_seq_read(argv[optind], &n_seqs); ++ utg = fml_assemble(&opt, n_seqs, seqs, &n_utg); ++ if (!gfa_out) fml_utg_print(n_utg, utg); ++ else fml_utg_print_gfa(n_utg, utg); ++--- a/internal.h +++++ b/internal.h ++@@ -12,7 +12,7 @@ extern "C" { ++ void kt_for(int n_threads, void (*func)(void*,long,int), void *data, long n); ++ void seq_reverse(int l, unsigned char *s); ++ void seq_revcomp6(int l, unsigned char *s); ++-struct bfc_ch_s *fml_count(int n, const bseq1_t *seq, int k, int q, int l_pre, int n_threads); +++struct bfc_ch_s *fml_count(int n, const fml_seq1_t *seq, int k, int q, int l_pre, int n_threads); ++ ++ #ifdef __cplusplus ++ } ++--- a/fml.h +++++ b/fml.h ++@@ -8,7 +8,7 @@ ++ typedef struct { ++ int32_t l_seq; ++ char *seq, *qual; // NULL-terminated strings; length expected to match $l_seq ++-} bseq1_t; +++} fml_seq1_t; ++ ++ #define MAG_F_AGGRESSIVE 0x20 // pop variant bubbles (not default) ++ #define MAG_F_POPOPEN 0x40 // aggressive tip trimming (default) ++@@ -63,7 +63,7 @@ extern "C" { ++ * ++ * @return array of sequences ++ */ ++-bseq1_t *bseq_read(const char *fn, int *n); +++fml_seq1_t *fml_seq_read(const char *fn, int *n); ++ ++ /** ++ * Initialize default parameters ++@@ -82,7 +82,7 @@ void fml_opt_init(fml_opt_t *opt); ++ * ++ * @return array of unitigs ++ */ ++-fml_utg_t *fml_assemble(const fml_opt_t *opt, int n_seqs, bseq1_t *seqs, int *n_utg); +++fml_utg_t *fml_assemble(const fml_opt_t *opt, int n_seqs, fml_seq1_t *seqs, int *n_utg); ++ ++ /** ++ * Free unitigs ++@@ -103,7 +103,7 @@ void fml_utg_destroy(int n_utg, fml_utg_ ++ * @param n_seqs number of sequences ++ * @param seqs array of sequences ++ */ ++-void fml_opt_adjust(fml_opt_t *opt, int n_seqs, const bseq1_t *seqs); +++void fml_opt_adjust(fml_opt_t *opt, int n_seqs, const fml_seq1_t *seqs); ++ ++ /** ++ * Error correction ++@@ -114,8 +114,8 @@ void fml_opt_adjust(fml_opt_t *opt, int ++ * ++ * @return k-mer coverage ++ */ ++-float fml_correct(const fml_opt_t *opt, int n, bseq1_t *seq); ++-float fml_fltuniq(const fml_opt_t *opt, int n, bseq1_t *seq); +++float fml_correct(const fml_opt_t *opt, int n, fml_seq1_t *seq); +++float fml_fltuniq(const fml_opt_t *opt, int n, fml_seq1_t *seq); ++ ++ /** ++ * Construct FMD-index ++@@ -126,7 +126,7 @@ float fml_fltuniq(const fml_opt_t *opt, ++ * ++ * @return FMD-index on success; NULL if all input sequences are zero in length ++ */ ++-struct rld_t *fml_seq2fmi(const fml_opt_t *opt, int n, bseq1_t *seq); +++struct rld_t *fml_seq2fmi(const fml_opt_t *opt, int n, fml_seq1_t *seq); ++ ++ /** ++ * Generate initial overlap graph ++--- a/README.md +++++ b/README.md ++@@ -34,11 +34,11 @@ sketch of the example: ++ int main(int argc, char *argv[]) ++ { ++ int i, n_seqs, n_utgs; ++- bseq1_t *seqs; // array of input sequences +++ fml_seq1_t *seqs; // array of input sequences ++ fml_utg_t *utgs; // array of output unitigs ++ fml_opt_t opt; ++ if (argc == 1) return 1; // do nothing if there is no input file ++- seqs = bseq_read(argv[1], &n_seqs); // or fill the array with callers' functions +++ seqs = fml_seq_read(argv[1], &n_seqs); // or fill the array with callers' functions ++ fml_opt_init(&opt); // initialize parameters ++ utgs = fml_assemble(&opt, n_seqs, seqs, &n_utgs); // assemble! ++ for (i = 0; i < n_utgs; ++i) // output in fasta diff --cc debian/patches/series index 0000000,0000000..54b3bdd new file mode 100644 --- /dev/null +++ b/debian/patches/series @@@ -1,0 -1,0 +1,8 @@@ ++make_shared_lib ++hardening ++rename_bseq1_t.patch ++bcf_seqlib.patch ++simde ++ensure-signed-comparison.patch ++sync_instead_of_atomic ++gcc10.patch diff --cc debian/patches/simde index 0000000,0000000..869771e new file mode 100644 --- /dev/null +++ b/debian/patches/simde @@@ -1,0 -1,0 +1,14 @@@ ++Author: Michael R. Crusoe ++Description: use the simde header library for greater compatibility ++--- fermi-lite.orig/ksw.c +++++ fermi-lite/ksw.c ++@@ -25,7 +25,8 @@ ++ ++ #include ++ #include ++-#include +++#define SIMDE_ENABLE_NATIVE_ALIASES +++#include ++ #include "ksw.h" ++ ++ #ifdef __GNUC__ diff --cc debian/patches/sync_instead_of_atomic index 0000000,0000000..ef57148 new file mode 100644 --- /dev/null +++ b/debian/patches/sync_instead_of_atomic @@@ -1,0 -1,0 +1,23 @@@ ++From: Michael R. Crusoe ++Subject: fix compatibility on mipsel ++Forwarded: https://github.com/lh3/fermi-lite/pull/13 ++--- fermi-lite.orig/unitig.c +++++ fermi-lite/unitig.c ++@@ -71,7 +71,7 @@ ++ { ++ uint64_t *p = bits + (x>>6); ++ uint64_t z = 1LLU<<(x&0x3f); ++- __sync_fetch_and_or(p, z); +++ __atomic_fetch_or(p, z, __ATOMIC_SEQ_CST); ++ } ++ ++ static inline void set_bits(uint64_t *bits, const rldintv_t *p) ++@@ -389,7 +389,7 @@ ++ magv_t *q; ++ p[0] = w->visited + (d->z.k[0]>>6); x[0] = 1LLU<<(d->z.k[0]&0x3f); ++ p[1] = w->visited + (d->z.k[1]>>6); x[1] = 1LLU<<(d->z.k[1]&0x3f); ++- if ((__sync_fetch_and_or(p[0], x[0])&x[0]) || (__sync_fetch_and_or(p[1], x[1])&x[1])) return; +++ if ((__atomic_fetch_or(p[0], x[0], __ATOMIC_SEQ_CST)&x[0]) || (__atomic_fetch_or(p[1], x[1], __ATOMIC_SEQ_CST)&x[1])) return; ++ d->z.len = d->str.l; ++ if (d->max_l < d->str.m) { ++ d->max_l = d->str.m; diff --cc debian/rules index 0000000,0000000..f073b8f new file mode 100755 --- /dev/null +++ b/debian/rules @@@ -1,0 -1,0 +1,43 @@@ ++#!/usr/bin/make -f ++ ++include /usr/share/dpkg/default.mk ++export DEB_BUILD_MAINT_OPTIONS = hardening=+bindnow ++export DEB_CFLAGS_MAINT_APPEND += -DSIMDE_ENABLE_OPENMP -fopenmp-simd -O3 ++export DEB_CXXFLAGS_MAINT_APPEND += -DSIMDE_ENABLE_OPENMP -fopenmp-simd -O3 ++ifneq (,$(filter $(DEB_HOST_ARCH), armel armhf m68k mipsel powerpc sh4)) ++ export LDLIBS=-latomic ++endif ++ ++%: ++ dh $@ ++ ++override_dh_auto_clean: ++ dh_auto_clean ++ rm -f fml-asm.1 ++ ++override_dh_auto_install: ++ ln -s libfml.so.* libfml.so ++ d-shlibmove --commit \ ++ --multiarch \ ++ --devunversioned \ ++ --movedev "fml.h" /usr/include/ \ ++ --movedev "bfc.h" /usr/include/fml \ ++ --movedev "htab.h" /usr/include/fml \ ++ --movedev "kmer.h" /usr/include/fml \ ++ --movedev "internal.h" /usr/include/fml \ ++ --movedev "khash.h" /usr/include/fml \ ++ --movedev "kvec.h" /usr/include/fml \ ++ --movedev "ksort.h" /usr/include/fml \ ++ libfml.so ++ ++override_dh_installman: ++ help2man --version-string='0.1' \ ++ -n 'assemble Illumina short reads in small regions' \ ++ -N --no-discard-stderr -h '' ./fml-asm > fml-asm.1 ++ dh_installman ++ ++override_dh_auto_test: ++ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) ++ ./fml-asm test/MT-simu.fq.gz > MT.fq ++ test "$$(wc -l < MT.fq)" = "4" ++endif diff --cc debian/salsa-ci.yml index 0000000,0000000..33c3a64 new file mode 100644 --- /dev/null +++ b/debian/salsa-ci.yml @@@ -1,0 -1,0 +1,4 @@@ ++--- ++include: ++ - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml ++ - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml diff --cc debian/source/format index 0000000,0000000..163aaf8 new file mode 100644 --- /dev/null +++ b/debian/source/format @@@ -1,0 -1,0 +1,1 @@@ ++3.0 (quilt) diff --cc debian/tests/asm index 0000000,0000000..c3a8048 new file mode 100755 --- /dev/null +++ b/debian/tests/asm @@@ -1,0 -1,0 +1,8 @@@ ++#!/bin/sh ++# autopkgtest check: confirm that fml-asm works ++set -e ++ ++INPUT=$(pwd)/test/MT-simu.fq.gz ++ ++test "$(fml-asm ${INPUT} | wc -l)" = "4" ++echo "run: OK" diff --cc debian/tests/build-lib index 0000000,0000000..2fa3f3c new file mode 100755 --- /dev/null +++ b/debian/tests/build-lib @@@ -1,0 -1,0 +1,19 @@@ ++#!/bin/sh ++# autopkgtest check: Build and run a program against libfml ++# Author: Sascha Steinbiss ++set -e ++ ++SRC=$(pwd)/example.c ++DATADIR=$(pwd)/test ++WORKDIR=$(mktemp -d) ++trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM ++cd $WORKDIR ++ ++cp $SRC . ++gcc -O2 -o fermi-lite example.c -lfml -lz -lm -lpthread ++[ -x fermi-lite ] ++echo "build: OK" ++ ++./fermi-lite $DATADIR/MT-simu.fq.gz > out ++ldd fermi-lite ++echo "run: OK" diff --cc debian/tests/control index 0000000,0000000..55f863a new file mode 100644 --- /dev/null +++ b/debian/tests/control @@@ -1,0 -1,0 +1,7 @@@ ++Tests: build-lib ++Depends: @, build-essential ++Restrictions: allow-stderr ++ ++Tests: asm ++Depends: fml-asm ++Restrictions: allow-stderr diff --cc debian/upstream/metadata index 0000000,0000000..29103a4 new file mode 100644 --- /dev/null +++ b/debian/upstream/metadata @@@ -1,0 -1,0 +1,13 @@@ ++Bug-Database: https://github.com/lh3/fermi-lite/issues ++Bug-Submit: https://github.com/lh3/fermi-lite/issues/new ++Registry: ++ - Name: OMICtools ++ Entry: OMICS_01087 ++ - Name: bio.tools ++ Entry: flexbar ++ - Name: SciCrunch ++ Entry: SCR_013001 ++ - Name: conda:bioconda ++ Entry: fermi-lite ++Repository: https://github.com/lh3/fermi-lite.git ++Repository-Browse: https://github.com/lh3/fermi-lite diff --cc debian/watch index 0000000,0000000..d97a11c new file mode 100644 --- /dev/null +++ b/debian/watch @@@ -1,0 -1,0 +1,7 @@@ ++version=4 ++ ++opts="mode=git,pretty=0.1+git%cd.%h" \ ++ https://github.com/lh3/fermi-lite.git HEAD ++ ++#https://github.com/lh3/fermi-lite/releases .*/archive/v(\d[\d.-]+)\.(?:tar(?:\.gz|\.bz2)?|tgz) ++