Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Features & build cleanups #189

Merged
merged 35 commits into from
Jun 12, 2020
Merged

Features & build cleanups #189

merged 35 commits into from
Jun 12, 2020

Conversation

pmarks
Copy link
Contributor

@pmarks pmarks commented Feb 22, 2020

  • Use cc and a config.h generated by build.rs to compile htslib
  • Make all the optional features work correctly (on or off)
  • Make bindgen optional by bundling pre-made bindings (huge reduction in clean build time)
  • Add optional support for libdeflate and pipe that through to htslib.

TODO:

@pmarks pmarks marked this pull request as ready for review March 14, 2020 15:14
@pmarks pmarks requested a review from johanneskoester March 14, 2020 15:14
@github-actions
Copy link
Contributor

Pull Request Test Coverage Report for Build f1d87733566eed8fa74d89ca325696057da832f6-PR-189

  • 0 of 621 (0.0%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-4.9%) to 87.966%

Changes Missing Coverage Covered Lines Changed/Added Lines %
hts-sys/osx_prebuilt_bindings.rs 0 621 0.0%
Totals Coverage Status
Change from base Build 03644609d6e3503491e878c50c684557187dbea9: -4.9%
Covered Lines: 10234
Relevant Lines: 11634

💛 - Coveralls

@brainstorm
Copy link
Member

Thanks for this @pmarks! It seems that it is now failing (against master w/ htslib 1.10.x) because of curl.h et al:

https://github.com/rust-bio/rust-htslib/runs/729762497?check_suite_focus=true#step:9:114

I'll try to get my PR finished and passing (#193) ASAP so that this doesn't become a blocker to merge this PR.

@pmarks pmarks changed the title make bindgen optional Features & build cleanups Jun 7, 2020
@pmarks
Copy link
Contributor Author

pmarks commented Jun 7, 2020

@brainstorm I have libdeflate working correctly in this PR.

@brainstorm
Copy link
Member

Woah, great work @pmarks, checking it out right now...

Copy link
Member

@brainstorm brainstorm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great refactor Patrick, thanks for that! A bit concerned about functionality from hfile_s3.c and hfile_gcs.c potentially missing though? Personally, I would like to have those enabled on the MUSL builds at least.

hts-sys/build.rs Show resolved Hide resolved
hts-sys/build.rs Show resolved Hide resolved
hts-sys/build.rs Show resolved Hide resolved
src/bam/mod.rs Show resolved Hide resolved
@johanneskoester
Copy link
Contributor

@pmarks @brainstorm I trust your judgement here, as you are both way better in building C than me. Feel free to merge whenever you feel this is done.

@pmarks
Copy link
Contributor Author

pmarks commented Jun 11, 2020

OK @johanneskoester @brainstorm @nlhepler, this should be ready to go.

Last question what do you think about taking bindgen out of the default dependency list?

In our experience compiling bindgen then rust-htslib become a huge part of the critical path of build time. I think there's also some machines that don't have the required clang installation that would now work out of the box. I'm not aware of any downsides.

@brainstorm
Copy link
Member

I'm very happy with shorter build times indeed... only thing I can think of is whether we will face any kind of operational/caching issue re-generating those prebuilt bindings in the future? I guess it should be mentioned somewhere in docs?

Slightly OT but relevant since the rebuilding of build.rs: I'm getting consistent ENOSYS (a.k.a Function not implemented) on features="s3" when just trying to read a BAM header from S3, so there's something off while building that hfile_s3.c AWS S3 support:

[E::hts_open_format] Failed to open file "s3://test-bucket/test.bam" : Function not implemented

Equivalent C code fine though:

$ cat s3_htslib.c
#include <stdio.h>
#include <stdlib.h>

#include <htslib/hfile.h>
#include <htslib/hts.h>
#include <htslib/sam.h>

#include <string.h>
#include <unistd.h>

int main(int argc, char **argv)
{
	samFile *fp_in = hts_open(argv[1],"r"); //open bam file
	bam_hdr_t *bamHdr = sam_hdr_read(fp_in); //read header

	printf("%s\n", bamHdr->target_name[1]);

	return 0;
}

$ ./s3_htslib s3://test-bucket/test.bam
2
$

Would you mind double-checking that the new build.rs does not exclude hfile_s3.c symbols from libhts.a or similar? Perhaps something is off on the Rust/bindgen side instead?

@brainstorm
Copy link
Member

Just noticed that the static = [] change/feature seems to be broken? From my crate's code after selecting features=["s3", "static"]:

$ cross build --release --target x86_64-unknown-linux-musl
error: failed to select a version for `rust-htslib`.
    ... required by package `reads v0.1.0 (/project/reads)`
versions that meet the requirements `= 0.30.1-alpha.0` are: 0.30.1-alpha.0

the package `reads` depends on `rust-htslib`, with features: `static` but `rust-htslib` does not have these features.


failed to select a version for `rust-htslib` which could resolve this conflict```

@pmarks
Copy link
Contributor Author

pmarks commented Jun 11, 2020

@brainstorm - htslib is causing curl 7.70 to generate err = CURLE_UNKNOWN_OPTION while setting an FTP option here:
err |= curl_easy_setopt(fp->easy, CURLOPT_FTP_FILEMETHOD, CURLFTPMETHOD_NOCWD);

https://github.com/rust-bio/htslib/blob/4a913bad6866ba17800ec22b143246aab007ef9c/hfile_libcurl.c#L1173

This is because the curl-sys crate doesn't build curl with FTP support by default. I add the protocol-ftp feature to curl-sys, then it makes a https request to s3. I guess it's OK to add FTP support to curl?

I'm not getting a 403 back from sw, which is the same as what happens in my browser. Do you have crdentials for that test bucket that we can put into a test?

@pmarks
Copy link
Contributor Author

pmarks commented Jun 11, 2020

@brainstorm I added a simple s3 test to the bucket you mentioned - can you add creds?
I also tried with this file: http://s3.amazonaws.com/1000genomes/1000G_2504_high_coverage/data/ERR3239276/NA06985.final.cram

I can get it with firefox, but I'm getting access when I put "s3://1000genomes/1000G_2504_high_coverage/data/ERR3239276/NA06985.final.cram" into the test.

@brainstorm
Copy link
Member

brainstorm commented Jun 12, 2020

TIL: I would have never imagined that htslib would actually require FTP bits, always thought of S3 as HTTP-only protocol, nice forensics @pmarks 👍

I was testing with an internal private bucket/object so I cannot publish that, so let's stick with the public 1000genomes one?

Unfortunately there's still something else off after activating FTP support on libcurl:

$ cross test --release --features="s3" --target x86_64-unknown-linux-musl
(... all tests ok until...)
[E::hts_open_format] Failed to open file "s3://1000genomes/1000G_2504_high_coverage/additional_698_related/data/ERR3989458/NA20358.final.cram" : Input/output error
test bam::tests::test_s3_connect ... FAILED

failures:

---- bam::tests::test_s3_connect stdout ----
Err(
    Open {
        target: "s3://1000genomes/1000G_2504_high_coverage/additional_698_related/data/ERR3989458/NA20358.final.cram",
    },
)
thread 'bam::tests::test_s3_connect' panicked at 'called `Result::unwrap()` on an `Err` value: Open { target: "s3://1000genomes/1000G_2504_high_coverage/additional_698_related/data/ERR3989458/NA20358.final.cram" }', src/bam/mod.rs:1823:18


failures:
    bam::tests::test_s3_connect

test result: FAILED. 74 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out

error: test failed, to rerun pass '--lib'

Same with MUSL:

$ cross test --release --features="s3" --target x86_64-unknown-linux-musl
[E::hts_open_format] Failed to open file "s3://1000genomes/1000G_2504_high_coverage/additional_698_related/data/ERR3989458/NA20358.final.cram" : I/O error

... could be that CRAM over S3 is not supported via plain hts_open()? Investigating...

@brainstorm
Copy link
Member

brainstorm commented Jun 12, 2020

@pmarks Found a suitable S3-BAM public dataset:

s3://gatk-test-data/wgs_bam/NA12878_24RG_hg38/NA12878_24RG_small.hg38.bam

Same effect with BAM though: Input/output error, debugging...

@pmarks
Copy link
Contributor Author

pmarks commented Jun 12, 2020

@brainstorm ok I'm making prebuilt bindings the default. I added a note to the README about it.

I added a test to access a BAM file via HTTP. I think the s3 support is basically there, but I think there's various details about authentication that the user needs to sort out with env vars and url params. samtools view seems to have the same issue. I put a note in the README aobut s3 & gcs being 'beta-level'. I'd propose we merge this and keep working on testing s3/gcs later.

@brainstorm
Copy link
Member

100% agree, merge this, S3 support can come right after, thanks @pmarks, great work here indeed!

@brainstorm
Copy link
Member

samtools view seems to have the same issue

Weird, it works fine for me (at least just printing the BAM header:

$ samtools view -H s3://gatk-test-data/wgs_bam/NA12878_24RG_hg38/NA12878_24RG_small.hg38.bam

(...)
@SQ	SN:chrUn_JTFH01001935v1_decoy	LN:2330	AS:38	AH:*	M5:bb4702fc9e6227387e8ce3498109d998	UR:/seq/references/Homo_sapiens_assembly38/v0/Homo_sapiens_assembly38.fasta	SP:Homo sapiens
@SQ	SN:chrUn_JTFH01001936v1_decoy	LN:2327	AS:38	AH:*	M5:ddad50424c1114dd98bc0202ac1cd9fa	UR:/seq/references/Homo_sapiens_assembly38/v0/Homo_sapiens_assembly38.fasta	SP:Homo sapiens
@SQ	SN:chrUn_JTFH01001937v1_decoy	LN:2318	AS:38	AH:*	M5:28804e3d50bf7764ac6b1897b1128790	UR:/seq/references/Homo_sapiens_assembly38/v0/Homo_sapiens_assembly38.fasta	SP:Homo sapiens
(...)

It does work as well for private buckets that need priv/pubkeys....anyway, we'll get to the bottom of this in any case ;)

@brainstorm brainstorm merged commit 605eed7 into master Jun 12, 2020
@brainstorm brainstorm deleted the pmarks/optional-bindgen branch June 12, 2020 03:42
@landesfeind
Copy link
Contributor

Hi @pmarks, are the faidx.c missing in the prebuilt bindings? How can we/I add them?

Context: Pull request #214 adds faidx bindings and compilation works well with cargo build --features bindgen but fails without the bindgen feature. I diff'ed the prebuilt bindings with the ones from a fresh build but there are many differences. Thus I guess, it's not a simple cp target/release/.../bindings.rs linux_prebuilt_bindings.rs.

PS: I like #189 since I had quite some trouble with building htslib on a CentOS with old bindgen :-)

@brainstorm
Copy link
Member

brainstorm commented Nov 8, 2020

@pmarks I believe I'm facing a similar issue with the bindgen prebuilt bindings that Manuel found here... could you document the prebuilding of bindgen a bit more thoroughly under hts-sys? I tried to just cargo build --release --features bindgen on my OSX machine as pointed above but the resulting bindings.rs on the target/release folder does not look correct (i.e: a lot of threadpool bindings are deleted as well, which I guess they shouldn't?):

diff --git a/hts-sys/osx_prebuilt_bindings.rs b/hts-sys/osx_prebuilt_bindings.rs
index d0521c1..c0dbeff 100644
--- a/hts-sys/osx_prebuilt_bindings.rs
+++ b/hts-sys/osx_prebuilt_bindings.rs
@@ -344,7 +344,6 @@ pub const __MAC_10_14_1: u32 = 101401;
 pub const __MAC_10_14_4: u32 = 101404;
 pub const __MAC_10_15: u32 = 101500;
 pub const __MAC_10_15_1: u32 = 101501;
-pub const __MAC_10_15_4: u32 = 101504;
 pub const __IPHONE_2_0: u32 = 20000;
 pub const __IPHONE_2_1: u32 = 20100;
 pub const __IPHONE_2_2: u32 = 20200;
@@ -386,10 +385,6 @@ pub const __IPHONE_12_3: u32 = 120300;
 pub const __IPHONE_13_0: u32 = 130000;
 pub const __IPHONE_13_1: u32 = 130100;
 pub const __IPHONE_13_2: u32 = 130200;
-pub const __IPHONE_13_3: u32 = 130300;
-pub const __IPHONE_13_4: u32 = 130400;
-pub const __IPHONE_13_5: u32 = 130500;
-pub const __IPHONE_13_6: u32 = 130600;
 pub const __TVOS_9_0: u32 = 90000;
 pub const __TVOS_9_1: u32 = 90100;
 pub const __TVOS_9_2: u32 = 90200;
@@ -407,9 +402,7 @@ pub const __TVOS_12_1: u32 = 120100;
 pub const __TVOS_12_2: u32 = 120200;
 pub const __TVOS_12_3: u32 = 120300;
 pub const __TVOS_13_0: u32 = 130000;
-pub const __TVOS_13_2: u32 = 130200;
-pub const __TVOS_13_3: u32 = 130300;
-pub const __TVOS_13_4: u32 = 130400;
+pub const __TVOS_13_1: u32 = 130100;
 pub const __WATCHOS_1_0: u32 = 10000;
 pub const __WATCHOS_2_0: u32 = 20000;
 pub const __WATCHOS_2_1: u32 = 20100;
@@ -426,8 +419,7 @@ pub const __WATCHOS_5_0: u32 = 50000;
 pub const __WATCHOS_5_1: u32 = 50100;
 pub const __WATCHOS_5_2: u32 = 50200;
 pub const __WATCHOS_6_0: u32 = 60000;
-pub const __WATCHOS_6_1: u32 = 60100;
-pub const __WATCHOS_6_2: u32 = 60200;
+pub const __WATCHOS_6_0_1: u32 = 60001;
 pub const __DRIVERKIT_19_0: u32 = 190000;
 pub const __MAC_OS_X_VERSION_MAX_ALLOWED: u32 = 101500;
 pub const __ENABLE_LEGACY_MAC_AVAILABILITY: u32 = 1;
@@ -3246,7 +3238,7 @@ extern "C" {
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    pub static seq_nt16_table: [::std::os::raw::c_uchar; 256usize];
+    pub static mut seq_nt16_table: [::std::os::raw::c_uchar; 256usize];
 }
 extern "C" {
     pub static mut seq_nt16_str: [::std::os::raw::c_char; 0usize];
@@ -14561,13 +14553,6 @@ fn bindgen_test_layout_fd_set() {
         )
     );
 }
-extern "C" {
-    pub fn __darwin_check_fd_set_overflow(
-        arg1: ::std::os::raw::c_int,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
 pub type fd_mask = __int32_t;
 pub type pthread_cond_t = __darwin_pthread_cond_t;
 pub type pthread_condattr_t = __darwin_pthread_condattr_t;
@@ -16436,7 +16421,7 @@ fn bindgen_test_layout_sam_hdr_t() {
 }
 pub type bam_hdr_t = sam_hdr_t;
 extern "C" {
-    pub static bam_cigar_table: [i8; 256usize];
+    pub static mut bam_cigar_table: [i8; 256usize];
 }
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
@@ -19423,277 +19408,6 @@ fn bindgen_test_layout_kbitset_iter_t() {
         )
     );
 }
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct __faidx_t {
-    _unused: [u8; 0],
-}
-pub type faidx_t = __faidx_t;
-pub const fai_format_options_FAI_NONE: fai_format_options = 0;
-pub const fai_format_options_FAI_FASTA: fai_format_options = 1;
-pub const fai_format_options_FAI_FASTQ: fai_format_options = 2;
-pub type fai_format_options = u32;
-extern "C" {
-    pub fn fai_build3(
-        fn_: *const ::std::os::raw::c_char,
-        fnfai: *const ::std::os::raw::c_char,
-        fngzi: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn fai_build(fn_: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn fai_destroy(fai: *mut faidx_t);
-}
-pub const fai_load_options_FAI_CREATE: fai_load_options = 1;
-pub type fai_load_options = u32;
-extern "C" {
-    pub fn fai_load3(
-        fn_: *const ::std::os::raw::c_char,
-        fnfai: *const ::std::os::raw::c_char,
-        fngzi: *const ::std::os::raw::c_char,
-        flags: ::std::os::raw::c_int,
-    ) -> *mut faidx_t;
-}
-extern "C" {
-    pub fn fai_load(fn_: *const ::std::os::raw::c_char) -> *mut faidx_t;
-}
-extern "C" {
-    pub fn fai_load3_format(
-        fn_: *const ::std::os::raw::c_char,
-        fnfai: *const ::std::os::raw::c_char,
-        fngzi: *const ::std::os::raw::c_char,
-        flags: ::std::os::raw::c_int,
-        format: fai_format_options,
-    ) -> *mut faidx_t;
-}
-extern "C" {
-    pub fn fai_load_format(
-        fn_: *const ::std::os::raw::c_char,
-        format: fai_format_options,
-    ) -> *mut faidx_t;
-}
-extern "C" {
-    pub fn fai_fetch(
-        fai: *const faidx_t,
-        reg: *const ::std::os::raw::c_char,
-        len: *mut ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn fai_fetch64(
-        fai: *const faidx_t,
-        reg: *const ::std::os::raw::c_char,
-        len: *mut hts_pos_t,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn fai_fetchqual(
-        fai: *const faidx_t,
-        reg: *const ::std::os::raw::c_char,
-        len: *mut ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn fai_fetchqual64(
-        fai: *const faidx_t,
-        reg: *const ::std::os::raw::c_char,
-        len: *mut hts_pos_t,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn faidx_fetch_nseq(fai: *const faidx_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn faidx_fetch_seq(
-        fai: *const faidx_t,
-        c_name: *const ::std::os::raw::c_char,
-        p_beg_i: ::std::os::raw::c_int,
-        p_end_i: ::std::os::raw::c_int,
-        len: *mut ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn faidx_fetch_seq64(
-        fai: *const faidx_t,
-        c_name: *const ::std::os::raw::c_char,
-        p_beg_i: hts_pos_t,
-        p_end_i: hts_pos_t,
-        len: *mut hts_pos_t,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn faidx_fetch_qual(
-        fai: *const faidx_t,
-        c_name: *const ::std::os::raw::c_char,
-        p_beg_i: ::std::os::raw::c_int,
-        p_end_i: ::std::os::raw::c_int,
-        len: *mut ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn faidx_fetch_qual64(
-        fai: *const faidx_t,
-        c_name: *const ::std::os::raw::c_char,
-        p_beg_i: hts_pos_t,
-        p_end_i: hts_pos_t,
-        len: *mut hts_pos_t,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn faidx_has_seq(
-        fai: *const faidx_t,
-        seq: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn faidx_nseq(fai: *const faidx_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn faidx_iseq(
-        fai: *const faidx_t,
-        i: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn faidx_seq_len(
-        fai: *const faidx_t,
-        seq: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn fai_parse_region(
-        fai: *const faidx_t,
-        s: *const ::std::os::raw::c_char,
-        tid: *mut ::std::os::raw::c_int,
-        beg: *mut hts_pos_t,
-        end: *mut hts_pos_t,
-        flags: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn fai_set_cache_size(fai: *mut faidx_t, cache_size: ::std::os::raw::c_int);
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct hts_tpool_process {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct hts_tpool_result {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn hts_tpool_init(n: ::std::os::raw::c_int) -> *mut hts_tpool;
-}
-extern "C" {
-    pub fn hts_tpool_size(p: *mut hts_tpool) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_dispatch(
-        p: *mut hts_tpool,
-        q: *mut hts_tpool_process,
-        func: ::std::option::Option<
-            unsafe extern "C" fn(arg: *mut ::std::os::raw::c_void) -> *mut ::std::os::raw::c_void,
-        >,
-        arg: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_dispatch2(
-        p: *mut hts_tpool,
-        q: *mut hts_tpool_process,
-        func: ::std::option::Option<
-            unsafe extern "C" fn(arg: *mut ::std::os::raw::c_void) -> *mut ::std::os::raw::c_void,
-        >,
-        arg: *mut ::std::os::raw::c_void,
-        nonblock: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_dispatch3(
-        p: *mut hts_tpool,
-        q: *mut hts_tpool_process,
-        exec_func: ::std::option::Option<
-            unsafe extern "C" fn(arg: *mut ::std::os::raw::c_void) -> *mut ::std::os::raw::c_void,
-        >,
-        arg: *mut ::std::os::raw::c_void,
-        job_cleanup: ::std::option::Option<unsafe extern "C" fn(arg: *mut ::std::os::raw::c_void)>,
-        result_cleanup: ::std::option::Option<
-            unsafe extern "C" fn(data: *mut ::std::os::raw::c_void),
-        >,
-        nonblock: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_wake_dispatch(q: *mut hts_tpool_process);
-}
-extern "C" {
-    pub fn hts_tpool_process_flush(q: *mut hts_tpool_process) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_process_reset(
-        q: *mut hts_tpool_process,
-        free_results: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_process_qsize(q: *mut hts_tpool_process) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_destroy(p: *mut hts_tpool);
-}
-extern "C" {
-    pub fn hts_tpool_kill(p: *mut hts_tpool);
-}
-extern "C" {
-    pub fn hts_tpool_next_result(q: *mut hts_tpool_process) -> *mut hts_tpool_result;
-}
-extern "C" {
-    pub fn hts_tpool_next_result_wait(q: *mut hts_tpool_process) -> *mut hts_tpool_result;
-}
-extern "C" {
-    pub fn hts_tpool_delete_result(r: *mut hts_tpool_result, free_data: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn hts_tpool_result_data(r: *mut hts_tpool_result) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn hts_tpool_process_init(
-        p: *mut hts_tpool,
-        qsize: ::std::os::raw::c_int,
-        in_only: ::std::os::raw::c_int,
-    ) -> *mut hts_tpool_process;
-}
-extern "C" {
-    pub fn hts_tpool_process_destroy(q: *mut hts_tpool_process);
-}
-extern "C" {
-    pub fn hts_tpool_process_empty(q: *mut hts_tpool_process) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_process_len(q: *mut hts_tpool_process) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_process_sz(q: *mut hts_tpool_process) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn hts_tpool_process_shutdown(q: *mut hts_tpool_process);
-}
-extern "C" {
-    pub fn hts_tpool_process_attach(p: *mut hts_tpool, q: *mut hts_tpool_process);
-}
-extern "C" {
-    pub fn hts_tpool_process_detach(p: *mut hts_tpool, q: *mut hts_tpool_process);
-}
-extern "C" {
-    pub fn hts_tpool_process_ref_incr(q: *mut hts_tpool_process);
-}
-extern "C" {
-    pub fn hts_tpool_process_ref_decr(q: *mut hts_tpool_process);
-}
 extern "C" {
     #[link_name = "\u{1}_wrap_kbs_init2"]
     pub fn kbs_init2(ni: size_t, fill: ::std::os::raw::c_int) -> *mut kbitset_t;

Pregenerating a correct osx_prebuilt_bindings.rs bindgen should hopefully be the last thing needed to address #275, #274 and #279.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants