1use std::os::raw::{c_int, c_uint};
2
3extern {
4 pub fn H5open() -> c_int;
5 pub fn H5get_libversion(majnum: *mut c_uint, minnum: *mut c_uint,
6 relnum: *mut c_uint) -> c_int;
7}
8
9pub fn hdf5_version() -> Result<(u8, u8, u8), &'static str> {
10 let mut v: (c_uint, c_uint, c_uint) = (0, 0, 0);
11 unsafe {
12 if H5open() != 0 {
13 Err("cannot open HDF5 library")
14 } else {
15 if H5get_libversion(&mut v.0, &mut v.1, &mut v.2) != 0 {
16 Err("cannot get HDF5 version")
17 } else {
18 Ok((v.0 as u8, v.1 as u8, v.2 as u8))
19 }
20 }
21 }
22}
23
24pub fn dump_build_flags() {
25 let version = hdf5_version().unwrap();
26 assert!(version >= (1, 8, 4));
27 let mut vs: Vec<_> = (5..17).map(|v| (1, 8, v)).collect();
28 vs.extend((0..1).map(|v| (1, 10, v)));
29 for v in vs.into_iter().filter(|&v| version >= v) {
30 println!("cargo:rustc-cfg=hdf5_{}_{}_{}", v.0, v.1, v.2);
31 }
32}
33
34#[cfg(test)]
35pub mod tests {
36 use super::hdf5_version;
37
38 #[test]
39 fn test_version() {
40 assert!(hdf5_version().unwrap() >= (1, 8, 4));
41 }
42}