Skip to content

Commit 90aa6e5

Browse files
committed
revert build.rs to try build failure
1 parent a99dd1f commit 90aa6e5

File tree

1 file changed

+108
-79
lines changed

1 file changed

+108
-79
lines changed

libc-test/build.rs

+108-79
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,23 @@ fn do_cc() {
5050

5151
fn do_ctest() {
5252
match &env::var("TARGET").unwrap() {
53-
t if t.contains("android") => test_android(t),
54-
t if t.contains("apple") => test_apple(t),
55-
t if t.contains("dragonfly") => test_dragonflybsd(t),
56-
t if t.contains("emscripten") => test_emscripten(t),
57-
t if t.contains("freebsd") => test_freebsd(t),
58-
t if t.contains("haiku") => test_haiku(t),
59-
t if t.contains("linux") => test_linux(t),
60-
t if t.contains("netbsd") => test_netbsd(t),
61-
t if t.contains("openbsd") => test_openbsd(t),
62-
t if t.contains("cygwin") => test_cygwin(t),
63-
t if t.contains("redox") => test_redox(t),
64-
t if t.contains("solaris") => test_solarish(t),
65-
t if t.contains("illumos") => test_solarish(t),
66-
t if t.contains("wasi") => test_wasi(t),
67-
t if t.contains("windows") => test_windows(t),
68-
t if t.contains("vxworks") => test_vxworks(t),
69-
t if t.contains("nto-qnx") => test_neutrino(t),
53+
t if t.contains("android") => return test_android(t),
54+
t if t.contains("apple") => return test_apple(t),
55+
t if t.contains("dragonfly") => return test_dragonflybsd(t),
56+
t if t.contains("emscripten") => return test_emscripten(t),
57+
t if t.contains("freebsd") => return test_freebsd(t),
58+
t if t.contains("haiku") => return test_haiku(t),
59+
t if t.contains("linux") => return test_linux(t),
60+
t if t.contains("netbsd") => return test_netbsd(t),
61+
t if t.contains("openbsd") => return test_openbsd(t),
62+
t if t.contains("cygwin") => return test_cygwin(t),
63+
t if t.contains("redox") => return test_redox(t),
64+
t if t.contains("solaris") => return test_solarish(t),
65+
t if t.contains("illumos") => return test_solarish(t),
66+
t if t.contains("wasi") => return test_wasi(t),
67+
t if t.contains("windows") => return test_windows(t),
68+
t if t.contains("vxworks") => return test_vxworks(t),
69+
t if t.contains("nto-qnx") => return test_neutrino(t),
7070
t => panic!("unknown target {t}"),
7171
}
7272
}
@@ -104,7 +104,7 @@ fn do_semver() {
104104
process_semver_file(&mut output, &mut semver_root, &os);
105105
let os_arch = format!("{os}-{arch}");
106106
process_semver_file(&mut output, &mut semver_root, &os_arch);
107-
if !target_env.is_empty() {
107+
if target_env != "" {
108108
let os_env = format!("{os}-{target_env}");
109109
process_semver_file(&mut output, &mut semver_root, &os_env);
110110

@@ -129,21 +129,21 @@ fn process_semver_file<W: Write, P: AsRef<Path>>(output: &mut W, path: &mut Path
129129
};
130130
let input = BufReader::new(input_file);
131131

132-
writeln!(output, "// Source: {}.", path.display()).unwrap();
133-
output.write_all(b"use libc::{\n").unwrap();
132+
write!(output, "// Source: {}.\n", path.display()).unwrap();
133+
output.write(b"use libc::{\n").unwrap();
134134
for line in input.lines() {
135135
let line = line.unwrap().into_bytes();
136136
match line.first() {
137137
// Ignore comments and empty lines.
138138
Some(b'#') | None => continue,
139139
_ => {
140-
output.write_all(b" ").unwrap();
141-
output.write_all(&line).unwrap();
142-
output.write_all(b",\n").unwrap();
140+
output.write(b" ").unwrap();
141+
output.write(&line).unwrap();
142+
output.write(b",\n").unwrap();
143143
}
144144
}
145145
}
146-
output.write_all(b"};\n\n").unwrap();
146+
output.write(b"};\n\n").unwrap();
147147
path.pop();
148148
}
149149

@@ -158,21 +158,21 @@ fn main() {
158158

159159
// FIXME(ctest): ctest cannot parse `crate::` in paths, so replace them with `::`
160160
let re = regex::bytes::Regex::new(r"(?-u:\b)crate::").unwrap();
161-
copy_dir_hotfix(Path::new("../src"), &hotfix_dir, &re);
161+
copy_dir_hotfix(Path::new("../src"), &hotfix_dir, &re, b"::");
162162

163163
do_cc();
164164
do_ctest();
165165
do_semver();
166166
}
167167

168-
fn copy_dir_hotfix(src: &Path, dst: &Path, regex: &regex::bytes::Regex) {
169-
std::fs::create_dir(dst).unwrap();
168+
fn copy_dir_hotfix(src: &Path, dst: &Path, regex: &regex::bytes::Regex, replace: &[u8]) {
169+
std::fs::create_dir(&dst).unwrap();
170170
for entry in src.read_dir().unwrap() {
171171
let entry = entry.unwrap();
172172
let src_path = entry.path();
173173
let dst_path = dst.join(entry.file_name());
174174
if entry.file_type().unwrap().is_dir() {
175-
copy_dir_hotfix(&src_path, &dst_path, regex);
175+
copy_dir_hotfix(&src_path, &dst_path, regex, replace);
176176
} else {
177177
// Replace "crate::" with "::"
178178
let src_data = std::fs::read(&src_path).unwrap();
@@ -433,7 +433,10 @@ fn test_apple(target: &str) {
433433

434434
cfg.volatile_item(|i| {
435435
use ctest::VolatileItemKind::*;
436-
matches!(i, StructField(ref n, ref f) if n == "aiocb" && f == "aio_buf")
436+
match i {
437+
StructField(ref n, ref f) if n == "aiocb" && f == "aio_buf" => true,
438+
_ => false,
439+
}
437440
});
438441

439442
cfg.type_name(move |ty, is_struct, is_union| {
@@ -709,7 +712,7 @@ fn test_cygwin(target: &str) {
709712
t if t.ends_with("_t") => t.to_string(),
710713

711714
// sigval is a struct in Rust, but a union in C:
712-
"sigval" => "union sigval".to_string(),
715+
"sigval" => format!("union sigval"),
713716

714717
// put `struct` in front of all structs:.
715718
t if is_struct => format!("struct {t}"),
@@ -910,7 +913,10 @@ fn test_windows(target: &str) {
910913
}
911914
});
912915

913-
cfg.skip_field(|s, field| s == "CONTEXT" && field == "Fp");
916+
cfg.skip_field(move |s, field| match s {
917+
"CONTEXT" if field == "Fp" => true,
918+
_ => false,
919+
});
914920
// FIXME(windows): All functions point to the wrong addresses?
915921
cfg.skip_fn_ptrcheck(|_| true);
916922

@@ -1096,7 +1102,10 @@ fn test_solarish(target: &str) {
10961102
}
10971103
}
10981104

1099-
cfg.skip_type(|ty| ty == "sighandler_t");
1105+
cfg.skip_type(move |ty| match ty {
1106+
"sighandler_t" => true,
1107+
_ => false,
1108+
});
11001109

11011110
cfg.type_name(move |ty, is_struct, is_union| match ty {
11021111
"FILE" => "__FILE".to_string(),
@@ -1440,7 +1449,6 @@ fn test_netbsd(target: &str) {
14401449
});
14411450

14421451
cfg.skip_fn(move |name| {
1443-
#[expect(clippy::wildcard_in_or_patterns)]
14441452
match name {
14451453
// FIXME(netbsd): netbsd 10 minimum
14461454
"getentropy" | "getrandom" => true,
@@ -1589,7 +1597,7 @@ fn test_dragonflybsd(target: &str) {
15891597
t if t.ends_with("_t") => t.to_string(),
15901598

15911599
// sigval is a struct in Rust, but a union in C:
1592-
"sigval" => "union sigval".to_string(),
1600+
"sigval" => format!("union sigval"),
15931601

15941602
// put `struct` in front of all structs:.
15951603
t if is_struct => format!("struct {t}"),
@@ -1976,7 +1984,7 @@ fn test_android(target: &str) {
19761984
t if t.ends_with("_t") => t.to_string(),
19771985

19781986
// sigval is a struct in Rust, but a union in C:
1979-
"sigval" => "union sigval".to_string(),
1987+
"sigval" => format!("union sigval"),
19801988

19811989
// put `struct` in front of all structs:.
19821990
t if is_struct => format!("struct {t}"),
@@ -2338,9 +2346,18 @@ fn test_freebsd(target: &str) {
23382346
// Required for making freebsd11_stat available in the headers
23392347
cfg.define("_WANT_FREEBSD11_STAT", None);
23402348

2341-
let freebsd13 = matches!(freebsd_ver, Some(n) if n >= 13);
2342-
let freebsd14 = matches!(freebsd_ver, Some(n) if n >= 14);
2343-
let freebsd15 = matches!(freebsd_ver, Some(n) if n >= 15);
2349+
let freebsd13 = match freebsd_ver {
2350+
Some(n) if n >= 13 => true,
2351+
_ => false,
2352+
};
2353+
let freebsd14 = match freebsd_ver {
2354+
Some(n) if n >= 14 => true,
2355+
_ => false,
2356+
};
2357+
let freebsd15 = match freebsd_ver {
2358+
Some(n) if n >= 15 => true,
2359+
_ => false,
2360+
};
23442361

23452362
headers! { cfg:
23462363
"aio.h",
@@ -2483,7 +2500,7 @@ fn test_freebsd(target: &str) {
24832500
t if t.ends_with("_t") => t.to_string(),
24842501

24852502
// sigval is a struct in Rust, but a union in C:
2486-
"sigval" => "union sigval".to_string(),
2503+
"sigval" => format!("union sigval"),
24872504

24882505
// put `struct` in front of all structs:.
24892506
t if is_struct => format!("struct {t}"),
@@ -3220,7 +3237,7 @@ fn test_neutrino(target: &str) {
32203237

32213238
let mut cfg = ctest_cfg();
32223239
if target.ends_with("_iosock") {
3223-
let qnx_target_val = env::var("QNX_TARGET")
3240+
let qnx_target_val = std::env::var("QNX_TARGET")
32243241
.unwrap_or_else(|_| "QNX_TARGET_not_set_please_source_qnxsdp".into());
32253242

32263243
cfg.include(qnx_target_val + "/usr/include/io-sock");
@@ -3467,17 +3484,17 @@ fn test_neutrino(target: &str) {
34673484
struct_ == "_idle_hook" && field == "time"
34683485
});
34693486

3470-
cfg.skip_field(|struct_, field| {
3471-
matches!(
3472-
(struct_, field),
3473-
("__sched_param", "reserved")
3474-
| ("sched_param", "reserved")
3475-
| ("sigevent", "__padding1") // ensure alignment
3476-
| ("sigevent", "__padding2") // union
3477-
| ("sigevent", "__sigev_un2") // union
3478-
| ("sigaction", "sa_sigaction") // sighandler_t type is super weird
3479-
| ("syspage_entry", "__reserved") // does not exist
3480-
)
3487+
cfg.skip_field(move |struct_, field| {
3488+
(struct_ == "__sched_param" && field == "reserved") ||
3489+
(struct_ == "sched_param" && field == "reserved") ||
3490+
(struct_ == "sigevent" && field == "__padding1") || // ensure alignment
3491+
(struct_ == "sigevent" && field == "__padding2") || // union
3492+
(struct_ == "sigevent" && field == "__sigev_un2") || // union
3493+
// sighandler_t type is super weird
3494+
(struct_ == "sigaction" && field == "sa_sigaction") ||
3495+
// does not exist
3496+
(struct_ == "syspage_entry" && field == "__reserved") ||
3497+
false // keep me for smaller diffs when something is added above
34813498
});
34823499

34833500
cfg.skip_static(move |name| (name == "__dso_handle"));
@@ -3557,16 +3574,19 @@ fn test_vxworks(target: &str) {
35573574
_ => false,
35583575
});
35593576
// FIXME(vxworks)
3560-
cfg.skip_type(|ty| matches!(ty, "stat64" | "sighandler_t" | "off64_t"));
3577+
cfg.skip_type(move |ty| match ty {
3578+
"stat64" | "sighandler_t" | "off64_t" => true,
3579+
_ => false,
3580+
});
35613581

3562-
cfg.skip_field_type(|struct_, field| {
3563-
matches!(
3564-
(struct_, field),
3565-
("siginfo_t", "si_value") | ("stat", "st_size") | ("sigaction", "sa_u")
3566-
)
3582+
cfg.skip_field_type(move |struct_, field| match (struct_, field) {
3583+
("siginfo_t", "si_value") | ("stat", "st_size") | ("sigaction", "sa_u") => true,
3584+
_ => false,
35673585
});
35683586

3569-
cfg.skip_roundtrip(|_| false);
3587+
cfg.skip_roundtrip(move |s| match s {
3588+
_ => false,
3589+
});
35703590

35713591
cfg.type_name(move |ty, is_struct, is_union| match ty {
35723592
"DIR" | "FILE" | "Dl_info" | "RTP_DESC" => ty.to_string(),
@@ -4822,9 +4842,12 @@ fn test_linux_like_apis(target: &str) {
48224842
cfg.skip_type(|_| true).skip_static(|_| true);
48234843

48244844
headers! { cfg: "string.h" }
4825-
cfg.skip_fn(|f| f != "strerror_r")
4826-
.skip_const(|_| true)
4827-
.skip_struct(|_| true);
4845+
cfg.skip_fn(|f| match f {
4846+
"strerror_r" => false,
4847+
_ => true,
4848+
})
4849+
.skip_const(|_| true)
4850+
.skip_struct(|_| true);
48284851
cfg.generate(src_hotfix_dir().join("lib.rs"), "linux_strerror_r.rs");
48294852
}
48304853

@@ -4868,11 +4891,10 @@ fn test_linux_like_apis(target: &str) {
48684891
cfg.skip_type(|_| true)
48694892
.skip_static(|_| true)
48704893
.skip_fn(|_| true)
4871-
.skip_const(|c| {
4872-
!matches!(
4873-
c,
4874-
"BOTHER" | "IBSHIFT" | "TCGETS2" | "TCSETS2" | "TCSETSW2" | "TCSETSF2"
4875-
)
4894+
.skip_const(|c| match c {
4895+
"BOTHER" | "IBSHIFT" => false,
4896+
"TCGETS2" | "TCSETS2" | "TCSETSW2" | "TCSETSF2" => false,
4897+
_ => true,
48764898
})
48774899
.skip_struct(|s| s != "termios2")
48784900
.type_name(move |ty, is_struct, is_union| match ty {
@@ -4898,15 +4920,13 @@ fn test_linux_like_apis(target: &str) {
48984920
.skip_fn(|_| true)
48994921
.skip_const(|_| true)
49004922
.skip_struct(|_| true)
4901-
.skip_const(|name| {
4902-
!matches!(
4903-
name,
4904-
"IPV6_FLOWINFO"
4905-
| "IPV6_FLOWLABEL_MGR"
4906-
| "IPV6_FLOWINFO_SEND"
4907-
| "IPV6_FLOWINFO_FLOWLABEL"
4908-
| "IPV6_FLOWINFO_PRIORITY"
4909-
)
4923+
.skip_const(move |name| match name {
4924+
"IPV6_FLOWINFO"
4925+
| "IPV6_FLOWLABEL_MGR"
4926+
| "IPV6_FLOWINFO_SEND"
4927+
| "IPV6_FLOWINFO_FLOWLABEL"
4928+
| "IPV6_FLOWINFO_PRIORITY" => false,
4929+
_ => true,
49104930
})
49114931
.type_name(move |ty, is_struct, is_union| match ty {
49124932
t if is_struct => format!("struct {t}"),
@@ -4928,8 +4948,14 @@ fn test_linux_like_apis(target: &str) {
49284948
.skip_static(|_| true)
49294949
.skip_const(|_| true)
49304950
.type_name(move |ty, _is_struct, _is_union| ty.to_string())
4931-
.skip_struct(|ty| !matches!(ty, "Elf64_Phdr" | "Elf32_Phdr"))
4932-
.skip_type(|ty| !matches!(ty, "Elf64_Phdr" | "Elf32_Phdr"));
4951+
.skip_struct(move |ty| match ty {
4952+
"Elf64_Phdr" | "Elf32_Phdr" => false,
4953+
_ => true,
4954+
})
4955+
.skip_type(move |ty| match ty {
4956+
"Elf64_Phdr" | "Elf32_Phdr" => false,
4957+
_ => true,
4958+
});
49334959
cfg.generate(src_hotfix_dir().join("lib.rs"), "linux_elf.rs");
49344960
}
49354961

@@ -4940,7 +4966,10 @@ fn test_linux_like_apis(target: &str) {
49404966
cfg.header("linux/if_arp.h");
49414967
cfg.skip_fn(|_| true)
49424968
.skip_static(|_| true)
4943-
.skip_const(|name| name != "ARPHRD_CAN")
4969+
.skip_const(move |name| match name {
4970+
"ARPHRD_CAN" => false,
4971+
_ => true,
4972+
})
49444973
.skip_struct(|_| true)
49454974
.skip_type(|_| true);
49464975
cfg.generate(src_hotfix_dir().join("lib.rs"), "linux_if_arp.rs");
@@ -5285,7 +5314,7 @@ fn test_haiku(target: &str) {
52855314
}
52865315

52875316
// is actually a union
5288-
"sigval" => "union sigval".to_string(),
5317+
"sigval" => format!("union sigval"),
52895318
t if is_union => format!("union {t}"),
52905319
t if t.ends_with("_t") => t.to_string(),
52915320
t if is_struct => format!("struct {t}"),

0 commit comments

Comments
 (0)