Enable more tests on Android
This commit is contained in:
parent
91ea0b21a3
commit
eea0102308
|
@ -1222,14 +1222,6 @@ fn test_android(target: &str) {
|
|||
let mut cfg = ctest::TestGenerator::new();
|
||||
cfg.define("_GNU_SOURCE", None);
|
||||
|
||||
// FIXME: still necessary?
|
||||
cfg.flag("-Wno-deprecated-declarations");
|
||||
|
||||
// Android doesn't actually have in_port_t but it's much easier if we
|
||||
// provide one for us to test against
|
||||
// FIXME: still necessary?
|
||||
cfg.define("in_port_t", Some("uint16_t"));
|
||||
|
||||
headers! { cfg:
|
||||
"arpa/inet.h",
|
||||
"asm/mman.h",
|
||||
|
@ -1296,6 +1288,7 @@ fn test_android(target: &str) {
|
|||
"sys/personality.h",
|
||||
"sys/prctl.h",
|
||||
"sys/ptrace.h",
|
||||
"sys/random.h",
|
||||
"sys/reboot.h",
|
||||
"sys/resource.h",
|
||||
"sys/sendfile.h",
|
||||
|
@ -1313,6 +1306,7 @@ fn test_android(target: &str) {
|
|||
"sys/un.h",
|
||||
"sys/utsname.h",
|
||||
"sys/vfs.h",
|
||||
"sys/xattr.h",
|
||||
"sys/wait.h",
|
||||
"syslog.h",
|
||||
"termios.h",
|
||||
|
@ -1329,6 +1323,7 @@ fn test_android(target: &str) {
|
|||
// generate the error 'Your time_t is already 64-bit'
|
||||
cfg.header("time64.h");
|
||||
}
|
||||
|
||||
if x86 {
|
||||
cfg.header("sys/reg.h");
|
||||
}
|
||||
|
@ -1336,11 +1331,7 @@ fn test_android(target: &str) {
|
|||
cfg.type_name(move |ty, is_struct, is_union| {
|
||||
match ty {
|
||||
// Just pass all these through, no need for a "struct" prefix
|
||||
// FIXME: still required ?
|
||||
"FILE" | "fd_set" | "Dl_info" | "DIR" | "Elf32_Phdr"
|
||||
| "Elf64_Phdr" | "Elf32_Shdr" | "Elf64_Shdr" | "Elf32_Sym"
|
||||
| "Elf64_Sym" | "Elf32_Ehdr" | "Elf64_Ehdr" | "Elf32_Chdr"
|
||||
| "Elf64_Chdr" => ty.to_string(),
|
||||
"FILE" | "fd_set" | "Dl_info" => ty.to_string(),
|
||||
|
||||
t if is_union => format!("union {}", t),
|
||||
|
||||
|
@ -1360,8 +1351,6 @@ fn test_android(target: &str) {
|
|||
s if s.ends_with("_nsec") && struct_.starts_with("stat") => {
|
||||
s.to_string()
|
||||
}
|
||||
// FIXME: still necessary?
|
||||
"u64" if struct_ == "epoll_event" => "data.u64".to_string(),
|
||||
s => s.to_string(),
|
||||
}
|
||||
});
|
||||
|
@ -1377,72 +1366,19 @@ fn test_android(target: &str) {
|
|||
|
||||
cfg.skip_struct(move |ty| {
|
||||
match ty {
|
||||
// This is actually a union, not a struct
|
||||
// FIXME: still necessary
|
||||
"sigval" => true,
|
||||
|
||||
// These structs have changed since unified headers in NDK r14b.
|
||||
// `st_atime` and `st_atime_nsec` have changed sign.
|
||||
// FIXME: unskip it for next major release
|
||||
"stat" | "stat64" => true,
|
||||
|
||||
// These are tested as part of the linux_fcntl tests since there are
|
||||
// header conflicts when including them with all the other structs.
|
||||
// FIXME: still necessary
|
||||
"termios2" => true,
|
||||
|
||||
_ => false,
|
||||
}
|
||||
});
|
||||
|
||||
cfg.skip_signededness(move |c| {
|
||||
match c {
|
||||
// FIXME: still necessary?
|
||||
"LARGE_INTEGER" | "float" | "double" => true,
|
||||
// FIXME: still necessary?
|
||||
n if n.starts_with("pthread") => true,
|
||||
_ => false,
|
||||
}
|
||||
});
|
||||
|
||||
cfg.skip_const(move |name| {
|
||||
match name {
|
||||
// FIXME: still necessary?
|
||||
"SIG_DFL" | "SIG_ERR" | "SIG_IGN" => true, // sighandler_t weirdness
|
||||
// FIXME: still necessary?
|
||||
"SIGUNUSED" => true, // removed in glibc 2.26
|
||||
|
||||
// weird signed extension or something like that?
|
||||
// FIXME: still necessary?
|
||||
"MS_NOUSER" => true,
|
||||
// FIXME: still necessary?
|
||||
"MS_RMT_MASK" => true, // updated in glibc 2.22 and musl 1.1.13
|
||||
|
||||
// Android uses old kernel headers
|
||||
// These are constants used in getrandom syscall
|
||||
// FIXME: still necessary?
|
||||
"GRND_NONBLOCK" | "GRND_RANDOM" => true,
|
||||
|
||||
// Defined by libattr not libc on linux (hard to test).
|
||||
// See constant definition for more details.
|
||||
// FIXME: still necessary?
|
||||
// FIXME: deprecated: not available in any header
|
||||
// See: https://github.com/rust-lang/libc/issues/1356
|
||||
"ENOATTR" => true,
|
||||
|
||||
// FIXME: still necessary?
|
||||
"BOTHER" => true,
|
||||
|
||||
// MFD_HUGETLB is not available in some older libc versions on the CI builders. On the
|
||||
// x86_64 and i686 builders it seems to be available for all targets, so at least test
|
||||
// it there.
|
||||
// FIXME: still necessary?
|
||||
"MFD_HUGETLB" => true,
|
||||
|
||||
// These change all the time from release to release of linux
|
||||
// distros, let's just not bother trying to verify them. They
|
||||
// shouldn't be used in code anyway...
|
||||
// FIXME: still necessary?
|
||||
"AF_MAX" | "PF_MAX" => true,
|
||||
|
||||
_ => false,
|
||||
}
|
||||
});
|
||||
|
@ -1461,9 +1397,6 @@ fn test_android(target: &str) {
|
|||
// FIXME: still necessary?
|
||||
"getdtablesize" => true,
|
||||
|
||||
// FIXME: still necessary?
|
||||
"dlerror" => true, // const-ness is added
|
||||
|
||||
// Apparently the NDK doesn't have this defined on android, but
|
||||
// it's in a header file?
|
||||
// FIXME: still necessary?
|
||||
|
@ -1474,17 +1407,6 @@ fn test_android(target: &str) {
|
|||
// FIXME: still necessary?
|
||||
"res_init" => true,
|
||||
|
||||
// Definition of those functions as changed since unified headers from NDK r14b
|
||||
// These changes imply some API breaking changes but are still ABI compatible.
|
||||
// We can wait for the next major release to be compliant with the new API.
|
||||
// FIXME: unskip these for next major release
|
||||
"strerror_r" | "madvise" | "msync" | "mprotect" | "recvfrom" | "getpriority" |
|
||||
"setpriority" | "personality" => true,
|
||||
// In Android 64 bits, these functions have been fixed since unified headers.
|
||||
// Ignore these until next major version.
|
||||
"bind" | "writev" | "readv" | "sendmsg" | "recvmsg"
|
||||
if target_pointer_width == 64 => true,
|
||||
|
||||
_ => false,
|
||||
}
|
||||
});
|
||||
|
@ -1525,40 +1447,12 @@ fn test_android(target: &str) {
|
|||
field == "ssi_arch"))
|
||||
});
|
||||
|
||||
// FIXME: remove
|
||||
cfg.fn_cname(move |name, _cname| name.to_string());
|
||||
|
||||
cfg.generate("../src/lib.rs", "main.rs");
|
||||
|
||||
// On Android also generate another script for testing linux/fcntl
|
||||
// declarations. These cannot be tested normally because including both
|
||||
// `linux/fcntl.h` and `fcntl.h` fails.
|
||||
//
|
||||
// FIXME: is still necessary?
|
||||
let mut cfg = ctest::TestGenerator::new();
|
||||
cfg.skip_type(|_| true)
|
||||
.skip_fn(|_| true)
|
||||
.skip_static(|_| true);
|
||||
cfg.header("linux/fcntl.h");
|
||||
cfg.header("net/if.h");
|
||||
cfg.header("linux/if.h");
|
||||
cfg.header("linux/quota.h");
|
||||
cfg.header("asm/termbits.h");
|
||||
cfg.skip_const(move |name| match name {
|
||||
"F_CANCELLK" | "F_ADD_SEALS" | "F_GET_SEALS" => false,
|
||||
"F_SEAL_SEAL" | "F_SEAL_SHRINK" | "F_SEAL_GROW" | "F_SEAL_WRITE" => {
|
||||
false
|
||||
}
|
||||
"BOTHER" => false,
|
||||
_ => true,
|
||||
});
|
||||
cfg.skip_struct(|s| s != "termios2");
|
||||
cfg.type_name(move |ty, is_struct, is_union| match ty {
|
||||
t if is_struct => format!("struct {}", t),
|
||||
t if is_union => format!("union {}", t),
|
||||
t => t.to_string(),
|
||||
});
|
||||
cfg.generate("../src/lib.rs", "linux_fcntl.rs");
|
||||
test_linux_termios2();
|
||||
}
|
||||
|
||||
fn test_freebsd(target: &str) {
|
||||
|
@ -2774,38 +2668,7 @@ fn test_linux(target: &str) {
|
|||
// On Linux also generate another script for testing linux/fcntl declarations.
|
||||
// These cannot be tested normally because including both `linux/fcntl.h` and `fcntl.h`
|
||||
// fails on a lot of platforms.
|
||||
let mut cfg = ctest::TestGenerator::new();
|
||||
cfg.skip_type(|_| true)
|
||||
.skip_fn(|_| true)
|
||||
.skip_static(|_| true);
|
||||
// musl defines these directly in `fcntl.h`
|
||||
if musl {
|
||||
cfg.header("fcntl.h");
|
||||
} else {
|
||||
cfg.header("linux/fcntl.h");
|
||||
}
|
||||
if !musl {
|
||||
cfg.header("net/if.h");
|
||||
cfg.header("linux/if.h");
|
||||
}
|
||||
cfg.header("linux/quota.h");
|
||||
cfg.header("asm/termbits.h");
|
||||
cfg.skip_const(move |name| match name {
|
||||
"F_CANCELLK" | "F_ADD_SEALS" | "F_GET_SEALS" => false,
|
||||
"F_SEAL_SEAL" | "F_SEAL_SHRINK" | "F_SEAL_GROW" | "F_SEAL_WRITE" => {
|
||||
false
|
||||
}
|
||||
"QFMT_VFS_OLD" | "QFMT_VFS_V0" | "QFMT_VFS_V1" if mips => false,
|
||||
"BOTHER" => false,
|
||||
_ => true,
|
||||
});
|
||||
cfg.skip_struct(|s| s != "termios2");
|
||||
cfg.type_name(move |ty, is_struct, is_union| match ty {
|
||||
t if is_struct => format!("struct {}", t),
|
||||
t if is_union => format!("union {}", t),
|
||||
t => t.to_string(),
|
||||
});
|
||||
cfg.generate("../src/lib.rs", "linux_fcntl.rs");
|
||||
test_linux_termios2();
|
||||
|
||||
// Test Elf64_Phdr and Elf32_Phdr
|
||||
// These types have a field called `p_type`, but including
|
||||
|
@ -2827,3 +2690,32 @@ fn test_linux(target: &str) {
|
|||
cfg.header("elf.h");
|
||||
cfg.generate("../src/lib.rs", "linux_elf.rs");
|
||||
}
|
||||
|
||||
fn test_linux_termios2() {
|
||||
let mut cfg = ctest::TestGenerator::new();
|
||||
cfg.skip_type(|_| true)
|
||||
.skip_fn(|_| true)
|
||||
.skip_static(|_| true);
|
||||
headers! {
|
||||
cfg:
|
||||
"linux/fcntl.h",
|
||||
"net/if.h",
|
||||
"linux/if.h",
|
||||
"linux/quota.h",
|
||||
"asm/termbits.h"
|
||||
}
|
||||
cfg.skip_const(move |name| match name {
|
||||
"F_CANCELLK" | "F_ADD_SEALS" | "F_GET_SEALS" => false,
|
||||
"F_SEAL_SEAL" | "F_SEAL_SHRINK" | "F_SEAL_GROW" | "F_SEAL_WRITE" => {
|
||||
false
|
||||
}
|
||||
_ => true,
|
||||
});
|
||||
cfg.skip_struct(|s| s != "termios2");
|
||||
cfg.type_name(move |ty, is_struct, is_union| match ty {
|
||||
t if is_struct => format!("struct {}", t),
|
||||
t if is_union => format!("union {}", t),
|
||||
t => t.to_string(),
|
||||
});
|
||||
cfg.generate("../src/lib.rs", "linux_fcntl.rs");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue