Skip to content

Commit 1e8377c

Browse files
mbyxtgross35
authored andcommitted
libc: port apple to use ctest-next
1 parent 673b10e commit 1e8377c

File tree

1 file changed

+37
-45
lines changed

1 file changed

+37
-45
lines changed

libc-test/build.rs

Lines changed: 37 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,8 @@ fn test_apple(target: &str) {
219219
let x86_64 = target.contains("x86_64");
220220
let i686 = target.contains("i686");
221221

222-
let mut cfg = ctest_cfg();
222+
let mut cfg = ctest_next_cfg();
223+
223224
cfg.flag("-Wno-deprecated-declarations");
224225
cfg.define("__APPLE_USE_RFC_3542", None);
225226

@@ -332,11 +333,12 @@ fn test_apple(target: &str) {
332333
[x86_64]: "crt_externs.h",
333334
}
334335

335-
cfg.skip_struct(move |ty| {
336-
if ty.starts_with("__c_anonymous_") {
337-
return true;
338-
}
339-
match ty {
336+
// Skip anonymous unions/structs.
337+
cfg.skip_union(|u| u.ident().starts_with("__c_anonymous_"));
338+
cfg.skip_struct(|s| s.ident().starts_with("__c_anonymous_"));
339+
340+
cfg.skip_struct(|s| {
341+
match s.ident() {
340342
// FIXME(macos): The size is changed in recent macOSes.
341343
"malloc_zone_t" => true,
342344
// it is a moving target, changing through versions
@@ -346,16 +348,13 @@ fn test_apple(target: &str) {
346348
"malloc_introspection_t" => true,
347349
// sonoma changes the padding `rmx_filler` field.
348350
"rt_metrics" => true,
349-
350351
_ => false,
351352
}
352353
});
353354

354-
cfg.skip_type(move |ty| {
355-
if ty.starts_with("__c_anonymous_") {
356-
return true;
357-
}
358-
match ty {
355+
cfg.skip_alias(|ty| ty.ident().starts_with("__c_anonymous_"));
356+
cfg.skip_alias(|ty| {
357+
match ty.ident() {
359358
// FIXME(macos): Requires the macOS 14.4 SDK.
360359
"os_sync_wake_by_address_flags_t" | "os_sync_wait_on_address_flags_t" => true,
361360

@@ -366,8 +365,8 @@ fn test_apple(target: &str) {
366365
}
367366
});
368367

369-
cfg.skip_const(move |name| {
370-
match name {
368+
cfg.skip_const(move |constant| {
369+
match constant.ident() {
371370
// These OSX constants are removed in Sierra.
372371
// https://developer.apple.com/library/content/releasenotes/General/APIDiffsMacOS10_12/Swift/Darwin.html
373372
"KERN_KDENABLE_BG_TRACE" | "KERN_KDDISABLE_BG_TRACE" => true,
@@ -387,9 +386,9 @@ fn test_apple(target: &str) {
387386
}
388387
});
389388

390-
cfg.skip_fn(move |name| {
389+
cfg.skip_fn(move |func| {
391390
// skip those that are manually verified
392-
match name {
391+
match func.ident() {
393392
// close calls the close_nocancel system call
394393
"close" => true,
395394

@@ -418,8 +417,8 @@ fn test_apple(target: &str) {
418417
}
419418
});
420419

421-
cfg.skip_field(move |struct_, field| {
422-
match (struct_, field) {
420+
cfg.skip_struct_field(move |struct_, field| {
421+
match (struct_.ident(), field.ident()) {
423422
// FIXME(macos): the array size has been changed since macOS 10.15 ([8] -> [7]).
424423
("statfs", "f_reserved") => true,
425424
("__darwin_arm_neon_state64", "__v") => true,
@@ -432,39 +431,31 @@ fn test_apple(target: &str) {
432431
}
433432
});
434433

435-
cfg.volatile_item(|i| {
436-
use ctest::VolatileItemKind::*;
437-
match i {
438-
StructField(ref n, ref f) if n == "aiocb" && f == "aio_buf" => true,
439-
_ => false,
440-
}
441-
});
434+
cfg.volatile_struct_field(|s, f| s.ident() == "aiocb" && f.ident() == "aio_buf");
442435

443-
cfg.type_name(move |ty, is_struct, is_union| {
444-
match ty {
445-
// Just pass all these through, no need for a "struct" prefix
446-
"FILE" | "DIR" | "Dl_info" => ty.to_string(),
436+
cfg.rename_struct_ty(move |ty| {
437+
// Just pass all these through, no need for a "struct" prefix
438+
["FILE", "DIR", "Dl_info"]
439+
.contains(&ty)
440+
.then_some(ty.to_string())
441+
});
447442

448-
// OSX calls this something else
449-
"sighandler_t" => "sig_t".to_string(),
443+
// OSX calls this something else
444+
cfg.rename_type(|ty| (ty == "sighandler_t").then_some("sig_t".to_string()));
450445

451-
t if is_union => format!("union {t}"),
452-
t if t.ends_with("_t") => t.to_string(),
453-
t if is_struct => format!("struct {t}"),
454-
t => t.to_string(),
455-
}
456-
});
446+
cfg.rename_struct_ty(|ty| ty.ends_with("_t").then_some(ty.to_string()));
447+
cfg.rename_union_ty(|ty| ty.ends_with("_t").then_some(ty.to_string()));
457448

458-
cfg.field_name(move |struct_, field| {
459-
match field {
460-
s if s.ends_with("_nsec") && struct_.starts_with("stat") => {
461-
s.replace("e_nsec", "espec.tv_nsec")
449+
cfg.rename_struct_field(|s, f| {
450+
match f.ident() {
451+
n if n.ends_with("_nsec") && s.ident().starts_with("stat") => {
452+
Some(n.replace("e_nsec", "espec.tv_nsec"))
462453
}
463454
// FIXME(macos): sigaction actually contains a union with two variants:
464455
// a sa_sigaction with type: (*)(int, struct __siginfo *, void *)
465456
// a sa_handler with type sig_t
466-
"sa_sigaction" if struct_ == "sigaction" => "sa_handler".to_string(),
467-
s => s.to_string(),
457+
"sa_sigaction" if s.ident() == "sigaction" => Some("sa_handler".to_string()),
458+
_ => None,
468459
}
469460
});
470461

@@ -475,7 +466,8 @@ fn test_apple(target: &str) {
475466
"uuid_t" | "vol_capabilities_set_t" => true,
476467
_ => false,
477468
});
478-
cfg.generate(src_hotfix_dir().join("lib.rs"), "ctest_output.rs");
469+
470+
ctest_next::generate_test(&mut cfg, "../src/lib.rs", "ctest_output.rs").unwrap();
479471
}
480472

481473
fn test_openbsd(target: &str) {
@@ -806,7 +798,7 @@ fn test_windows(target: &str) {
806798
let i686 = target.contains("i686");
807799

808800
let mut cfg = ctest_next_cfg();
809-
cfg.skip_private(true);
801+
810802
if target.contains("msvc") {
811803
cfg.flag("/wd4324");
812804
}

0 commit comments

Comments
 (0)