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

Add support for FreeBSD CURRENT (aka freebsd13) #1440

Merged
merged 21 commits into from Aug 10, 2019
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 7 additions & 0 deletions build.rs
Expand Up @@ -16,9 +16,15 @@ fn main() {
}

if env::var("LIBC_CI").is_ok() {
if let Some(11) = which_freebsd() {
println!("cargo:rustc-cfg=freebsd11");
}
if let Some(12) = which_freebsd() {
println!("cargo:rustc-cfg=freebsd12");
}
if let Some(13) = which_freebsd() {
println!("cargo:rustc-cfg=freebsd13");
}
}

// Rust >= 1.15 supports private module use:
Expand Down Expand Up @@ -100,6 +106,7 @@ fn which_freebsd() -> Option<i32> {
match &stdout {
s if s.starts_with("11") => Some(11),
s if s.starts_with("12") => Some(12),
s if s.starts_with("13") => Some(13),
_ => None,
}
}
13 changes: 8 additions & 5 deletions libc-test/build.rs
Expand Up @@ -1450,10 +1450,12 @@ fn test_freebsd(target: &str) {

let freebsd_ver = which_freebsd();

if let Some(12) = freebsd_ver {
// If the host is FreeBSD 12, run FreeBSD 12 tests
cfg.cfg("freebsd12", None);
}
match freebsd_ver {
Some(11) => cfg.cfg("freebsd11", None),
Some(12) => cfg.cfg("freebsd12", None),
Some(13) => cfg.cfg("freebsd13", None),
_ => &mut cfg
};

// Required for `getline`:
cfg.define("_WITH_GETLINE", None);
Expand Down Expand Up @@ -1581,7 +1583,7 @@ fn test_freebsd(target: &str) {
| "IP_RECVORIGDSTADDR"
| "IPV6_ORIGDSTADDR"
| "IPV6_RECVORIGDSTADDR"
if Some(12) != freebsd_ver =>
if Some(11) == freebsd_ver =>
{
true
}
Expand Down Expand Up @@ -2468,6 +2470,7 @@ fn which_freebsd() -> Option<i32> {
match &stdout {
s if s.starts_with("11") => Some(11),
s if s.starts_with("12") => Some(12),
s if s.starts_with("13") => Some(13),
_ => None,
}
}
2 changes: 2 additions & 0 deletions src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
Expand Up @@ -189,6 +189,8 @@ cfg_if! {
}
}

pub const ELAST: ::c_int = 96;

extern {
// Return type ::c_int was removed in FreeBSD 12
pub fn setgrent() -> ::c_int;
Expand Down
9 changes: 9 additions & 0 deletions src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
Expand Up @@ -190,6 +190,15 @@ cfg_if! {
}
}

cfg_if! {
if #[cfg(not(freebsd13))] {
pub const ELAST: ::c_int = 96;
} else {
pub const EINTEGRITY: ::c_int = 97;
pub const ELAST: ::c_int = 97;
}
}

extern {
pub fn setgrent();
pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int)
Expand Down
4 changes: 3 additions & 1 deletion src/unix/bsd/freebsdlike/freebsd/mod.rs
Expand Up @@ -333,7 +333,6 @@ pub const ENOTCAPABLE: ::c_int = 93;
pub const ECAPMODE: ::c_int = 94;
pub const ENOTRECOVERABLE: ::c_int = 95;
pub const EOWNERDEAD: ::c_int = 96;
pub const ELAST: ::c_int = 96;
pub const RLIMIT_NPTS: ::c_int = 11;
pub const RLIMIT_SWAP: ::c_int = 12;
pub const RLIMIT_KQUEUES: ::c_int = 13;
Expand Down Expand Up @@ -1332,6 +1331,9 @@ cfg_if! {
if #[cfg(freebsd12)] {
mod freebsd12;
pub use self::freebsd12::*;
} else if #[cfg(freebsd13)] {
mod freebsd12;
pub use self::freebsd12::*;
} else {
mod freebsd11;
pub use self::freebsd11::*;
Expand Down
4 changes: 2 additions & 2 deletions src/unix/bsd/freebsdlike/mod.rs
Expand Up @@ -1152,7 +1152,7 @@ extern {
pub fn getutxline(ut: *const utmpx) -> *mut utmpx;
pub fn initgroups(name: *const ::c_char, basegid: ::gid_t) -> ::c_int;
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "kevent@FBSD_1.0"
)]
pub fn kevent(kq: ::c_int,
Expand All @@ -1171,7 +1171,7 @@ extern {
pub fn mkfifoat(dirfd: ::c_int, pathname: *const ::c_char,
mode: ::mode_t) -> ::c_int;
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "mknodat@FBSD_1.1"
)]
pub fn mknodat(dirfd: ::c_int, pathname: *const ::c_char,
Expand Down
4 changes: 2 additions & 2 deletions src/unix/bsd/mod.rs
Expand Up @@ -536,7 +536,7 @@ extern {
#[cfg_attr(target_os = "macos", link_name = "glob$INODE64")]
#[cfg_attr(target_os = "netbsd", link_name = "__glob30")]
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "glob@FBSD_1.0"
)]
pub fn glob(pattern: *const ::c_char,
Expand All @@ -546,7 +546,7 @@ extern {
pglob: *mut ::glob_t) -> ::c_int;
#[cfg_attr(target_os = "netbsd", link_name = "__globfree30")]
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "globfree@FBSD_1.0"
)]
pub fn globfree(pglob: *mut ::glob_t);
Expand Down
14 changes: 7 additions & 7 deletions src/unix/mod.rs
Expand Up @@ -567,7 +567,7 @@ extern {
#[cfg_attr(target_os = "macos", link_name = "fstat$INODE64")]
#[cfg_attr(target_os = "netbsd", link_name = "__fstat50")]
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "fstat@FBSD_1.0"
)]
pub fn fstat(fildes: ::c_int, buf: *mut stat) -> ::c_int;
Expand All @@ -577,7 +577,7 @@ extern {
#[cfg_attr(target_os = "macos", link_name = "stat$INODE64")]
#[cfg_attr(target_os = "netbsd", link_name = "__stat50")]
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "stat@FBSD_1.0"
)]
pub fn stat(path: *const c_char, buf: *mut stat) -> ::c_int;
Expand Down Expand Up @@ -614,14 +614,14 @@ extern {
#[cfg_attr(target_os = "macos", link_name = "readdir$INODE64")]
#[cfg_attr(target_os = "netbsd", link_name = "__readdir30")]
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "readdir@FBSD_1.0"
)]
pub fn readdir(dirp: *mut ::DIR) -> *mut ::dirent;
#[cfg_attr(target_os = "macos", link_name = "readdir_r$INODE64")]
#[cfg_attr(target_os = "netbsd", link_name = "__readdir_r30")]
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "readdir_r@FBSD_1.0"
)]
/// The 64-bit libc on Solaris and illumos only has readdir_r. If a
Expand Down Expand Up @@ -653,7 +653,7 @@ extern {
flags: ::c_int) -> ::c_int;
#[cfg_attr(target_os = "macos", link_name = "fstatat$INODE64")]
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "fstatat@FBSD_1.1"
)]
pub fn fstatat(dirfd: ::c_int, pathname: *const ::c_char,
Expand Down Expand Up @@ -815,7 +815,7 @@ extern {
#[cfg_attr(target_os = "macos", link_name = "lstat$INODE64")]
#[cfg_attr(target_os = "netbsd", link_name = "__lstat50")]
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "lstat@FBSD_1.0"
)]
pub fn lstat(path: *const c_char, buf: *mut stat) -> ::c_int;
Expand Down Expand Up @@ -992,7 +992,7 @@ extern {

#[cfg_attr(target_os = "netbsd", link_name = "__mknod50")]
#[cfg_attr(
all(target_os = "freebsd", not(freebsd12)),
all(target_os = "freebsd", freebsd11),
link_name = "mknod@FBSD_1.0"
)]
pub fn mknod(pathname: *const ::c_char, mode: ::mode_t,
Expand Down