diff --git a/ci/docker/aarch64-linux-android/Dockerfile b/ci/docker/aarch64-linux-android/Dockerfile index 7b8bdcfdadb32..d6927e5cc80ec 100644 --- a/ci/docker/aarch64-linux-android/Dockerfile +++ b/ci/docker/aarch64-linux-android/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN dpkg --add-architecture i386 RUN apt-get update @@ -8,7 +8,6 @@ RUN apt-get install -y --no-install-recommends \ wget \ ca-certificates \ python3 \ - python3-distutils \ unzip \ expect \ openjdk-8-jre \ diff --git a/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/ci/docker/aarch64-unknown-linux-gnu/Dockerfile index c94a7c63c0ea4..00569ddf22c9b 100644 --- a/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +++ b/ci/docker/aarch64-unknown-linux-gnu/Dockerfile @@ -1,4 +1,5 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 + RUN apt-get update && apt-get install -y --no-install-recommends \ gcc libc6-dev ca-certificates \ gcc-aarch64-linux-gnu libc6-dev-arm64-cross qemu-user diff --git a/ci/docker/aarch64-unknown-linux-musl/Dockerfile b/ci/docker/aarch64-unknown-linux-musl/Dockerfile index bc15db0692297..fd4c1e28f2525 100644 --- a/ci/docker/aarch64-unknown-linux-musl/Dockerfile +++ b/ci/docker/aarch64-unknown-linux-musl/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc make libc6-dev git curl ca-certificates \ diff --git a/ci/docker/arm-linux-androideabi/Dockerfile b/ci/docker/arm-linux-androideabi/Dockerfile index d0fb3176de7e7..9d6a5c9649832 100644 --- a/ci/docker/arm-linux-androideabi/Dockerfile +++ b/ci/docker/arm-linux-androideabi/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN dpkg --add-architecture i386 RUN apt-get update @@ -8,7 +8,6 @@ RUN apt-get install -y --no-install-recommends \ wget \ ca-certificates \ python3 \ - python3-distutils \ unzip \ expect \ openjdk-8-jre \ diff --git a/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile index 977acabf4b6ba..7f75456e1ecfc 100644 --- a/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +++ b/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile @@ -1,4 +1,5 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 + RUN apt-get update && apt-get install -y --no-install-recommends \ gcc libc6-dev ca-certificates \ gcc-arm-linux-gnueabihf libc6-dev-armhf-cross qemu-user diff --git a/ci/docker/arm-unknown-linux-musleabihf/Dockerfile b/ci/docker/arm-unknown-linux-musleabihf/Dockerfile index 1709699997e7f..f13eaab70a189 100644 --- a/ci/docker/arm-unknown-linux-musleabihf/Dockerfile +++ b/ci/docker/arm-unknown-linux-musleabihf/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc make libc6-dev git curl ca-certificates \ diff --git a/ci/docker/armv7-unknown-linux-uclibceabihf/Dockerfile b/ci/docker/armv7-unknown-linux-uclibceabihf/Dockerfile index 585fdc35ff542..6a97b1c590bc3 100644 --- a/ci/docker/armv7-unknown-linux-uclibceabihf/Dockerfile +++ b/ci/docker/armv7-unknown-linux-uclibceabihf/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc libc6-dev qemu-user ca-certificates qemu-system-arm curl \ diff --git a/ci/docker/asmjs-unknown-emscripten/Dockerfile b/ci/docker/asmjs-unknown-emscripten/Dockerfile index d344cb1368f28..6f2d5ddfc78e1 100644 --- a/ci/docker/asmjs-unknown-emscripten/Dockerfile +++ b/ci/docker/asmjs-unknown-emscripten/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 # This is a workaround to avoid the interaction with tzdata. ENV DEBIAN_FRONTEND=noninteractive @@ -14,7 +14,6 @@ RUN apt-get install -y --no-install-recommends \ libc6-dev \ libxml2 \ python3 \ - python3-distutils \ xz-utils \ bzip2 diff --git a/ci/docker/i686-linux-android/Dockerfile b/ci/docker/i686-linux-android/Dockerfile index a78c7cb6e8457..0fb48aca342d4 100644 --- a/ci/docker/i686-linux-android/Dockerfile +++ b/ci/docker/i686-linux-android/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN dpkg --add-architecture i386 RUN apt-get update @@ -8,7 +8,6 @@ RUN apt-get install -y --no-install-recommends \ wget \ ca-certificates \ python3 \ - python3-distutils \ unzip \ expect \ openjdk-8-jre \ diff --git a/ci/docker/i686-unknown-linux-gnu/Dockerfile b/ci/docker/i686-unknown-linux-gnu/Dockerfile index 6cdc1942c50c7..f50af741db564 100644 --- a/ci/docker/i686-unknown-linux-gnu/Dockerfile +++ b/ci/docker/i686-unknown-linux-gnu/Dockerfile @@ -1,4 +1,5 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 + RUN apt-get update RUN apt-get install -y --no-install-recommends \ gcc-multilib libc6-dev ca-certificates diff --git a/ci/docker/i686-unknown-linux-musl/Dockerfile b/ci/docker/i686-unknown-linux-musl/Dockerfile index a54456fd9942b..7034f9f672500 100644 --- a/ci/docker/i686-unknown-linux-musl/Dockerfile +++ b/ci/docker/i686-unknown-linux-musl/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN dpkg --add-architecture i386 RUN apt-get update diff --git a/ci/docker/loongarch64-unknown-linux-gnu/Dockerfile b/ci/docker/loongarch64-unknown-linux-gnu/Dockerfile index aebf7c0741956..16b4cf4bfd34e 100644 --- a/ci/docker/loongarch64-unknown-linux-gnu/Dockerfile +++ b/ci/docker/loongarch64-unknown-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc libc6-dev qemu-user ca-certificates \ diff --git a/ci/docker/loongarch64-unknown-linux-musl/Dockerfile b/ci/docker/loongarch64-unknown-linux-musl/Dockerfile index c1219c034c81f..2efd095b0fddd 100644 --- a/ci/docker/loongarch64-unknown-linux-musl/Dockerfile +++ b/ci/docker/loongarch64-unknown-linux-musl/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates curl gcc git libc6-dev make qemu-user xz-utils diff --git a/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/ci/docker/powerpc-unknown-linux-gnu/Dockerfile index 930f0375db219..a14aa54837de0 100644 --- a/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +++ b/ci/docker/powerpc-unknown-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc libc6-dev qemu-user ca-certificates \ diff --git a/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile index b5bf6e90dfbbd..76d8471a63aac 100644 --- a/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +++ b/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc libc6-dev qemu-user ca-certificates \ diff --git a/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile index f078a13e7c484..c4c6af25b8684 100644 --- a/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +++ b/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc libc6-dev qemu-user ca-certificates \ diff --git a/ci/docker/riscv64gc-unknown-linux-gnu/Dockerfile b/ci/docker/riscv64gc-unknown-linux-gnu/Dockerfile index 9ada79ac7273d..0624e2c102055 100644 --- a/ci/docker/riscv64gc-unknown-linux-gnu/Dockerfile +++ b/ci/docker/riscv64gc-unknown-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc libc6-dev qemu-user ca-certificates \ diff --git a/ci/docker/s390x-unknown-linux-gnu/Dockerfile b/ci/docker/s390x-unknown-linux-gnu/Dockerfile index 70856d78bb879..306d773a61165 100644 --- a/ci/docker/s390x-unknown-linux-gnu/Dockerfile +++ b/ci/docker/s390x-unknown-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ curl ca-certificates \ diff --git a/ci/docker/s390x-unknown-linux-musl/Dockerfile b/ci/docker/s390x-unknown-linux-musl/Dockerfile index d93eba4bd48e6..d103a1d7488e0 100644 --- a/ci/docker/s390x-unknown-linux-musl/Dockerfile +++ b/ci/docker/s390x-unknown-linux-musl/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ curl ca-certificates \ diff --git a/ci/docker/sparc64-unknown-linux-gnu/Dockerfile b/ci/docker/sparc64-unknown-linux-gnu/Dockerfile index ff6810a7fac58..2fcaff80686e1 100644 --- a/ci/docker/sparc64-unknown-linux-gnu/Dockerfile +++ b/ci/docker/sparc64-unknown-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:22.04 +FROM ubuntu:24.10 RUN apt-get update && apt-get install -y --no-install-recommends \ curl ca-certificates \ diff --git a/ci/docker/wasm32-unknown-emscripten/Dockerfile b/ci/docker/wasm32-unknown-emscripten/Dockerfile index 0e429c055b200..5af38ca5258db 100644 --- a/ci/docker/wasm32-unknown-emscripten/Dockerfile +++ b/ci/docker/wasm32-unknown-emscripten/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 # This is a workaround to avoid the interaction with tzdata. ENV DEBIAN_FRONTEND=noninteractive @@ -17,7 +17,6 @@ RUN apt-get install -y --no-install-recommends \ libc6-dev \ libxml2 \ python3 \ - python3-distutils \ cmake \ sudo \ gdb \ diff --git a/ci/docker/wasm32-wasip1/Dockerfile b/ci/docker/wasm32-wasip1/Dockerfile index e1318151d2e62..68940f4615a7e 100644 --- a/ci/docker/wasm32-wasip1/Dockerfile +++ b/ci/docker/wasm32-wasip1/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04 +FROM ubuntu:24.10 COPY wasi.sh / RUN bash /wasi.sh diff --git a/ci/docker/wasm32-wasip2/Dockerfile b/ci/docker/wasm32-wasip2/Dockerfile index c433c491353f9..7abaaf54da02d 100644 --- a/ci/docker/wasm32-wasip2/Dockerfile +++ b/ci/docker/wasm32-wasip2/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04 +FROM ubuntu:24.10 COPY wasi.sh / RUN bash /wasi.sh diff --git a/ci/docker/x86_64-linux-android/Dockerfile b/ci/docker/x86_64-linux-android/Dockerfile index d4e87b5f419fc..f6331f10f3897 100644 --- a/ci/docker/x86_64-linux-android/Dockerfile +++ b/ci/docker/x86_64-linux-android/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update && \ apt-get install -y --no-install-recommends \ @@ -7,7 +7,6 @@ RUN apt-get update && \ gcc \ libc-dev \ python3 \ - python3-distutils \ unzip WORKDIR /android/ diff --git a/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/ci/docker/x86_64-unknown-linux-gnu/Dockerfile index aa5d5e043f9b1..b6ad33ebc7cb5 100644 --- a/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +++ b/ci/docker/x86_64-unknown-linux-gnu/Dockerfile @@ -1,4 +1,5 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 + RUN apt-get update RUN apt-get install -y --no-install-recommends \ gcc libc6-dev ca-certificates linux-headers-generic diff --git a/ci/docker/x86_64-unknown-linux-gnux32/Dockerfile b/ci/docker/x86_64-unknown-linux-gnux32/Dockerfile index 6cdc1942c50c7..f50af741db564 100644 --- a/ci/docker/x86_64-unknown-linux-gnux32/Dockerfile +++ b/ci/docker/x86_64-unknown-linux-gnux32/Dockerfile @@ -1,4 +1,5 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 + RUN apt-get update RUN apt-get install -y --no-install-recommends \ gcc-multilib libc6-dev ca-certificates diff --git a/ci/docker/x86_64-unknown-linux-musl/Dockerfile b/ci/docker/x86_64-unknown-linux-musl/Dockerfile index 7b65f5fa2a8c1..11fbd6e1be46a 100644 --- a/ci/docker/x86_64-unknown-linux-musl/Dockerfile +++ b/ci/docker/x86_64-unknown-linux-musl/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:23.10 +FROM ubuntu:24.10 RUN apt-get update RUN apt-get install -y --no-install-recommends \ diff --git a/ci/style.sh b/ci/style.sh index d1b639db5bb89..17a47d037360a 100755 --- a/ci/style.sh +++ b/ci/style.sh @@ -14,6 +14,9 @@ rustc ci/style.rs && ./style src command -v rustfmt rustfmt -V +# Run once to cover everything that isn't in `src/` +cargo fmt + # Save a list of all source files tmpfile="file-list~" # trailing tilde for gitignore find src -name '*.rs' > "$tmpfile" diff --git a/libc-test/build.rs b/libc-test/build.rs index 9d97705a1444a..5096572088b51 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3370,13 +3370,14 @@ fn test_linux(target: &str) { let arm = target.contains("arm"); let aarch64 = target.contains("aarch64"); + let i586 = target.contains("i586"); let i686 = target.contains("i686"); let ppc = target.contains("powerpc"); let ppc64 = target.contains("powerpc64"); let s390x = target.contains("s390x"); let sparc64 = target.contains("sparc64"); let x32 = target.contains("x32"); - let x86_32 = target.contains("i686"); + let x86_32 = i586 || i686; let x86_64 = target.contains("x86_64"); let aarch64_musl = aarch64 && musl; let gnueabihf = target.contains("gnueabihf"); @@ -3385,6 +3386,8 @@ fn test_linux(target: &str) { let loongarch64 = target.contains("loongarch64"); let uclibc = target.contains("uclibc"); + let bit32 = arm || x86_32 || ppc; + let mut cfg = ctest_cfg(); cfg.define("_GNU_SOURCE", None); // This macro re-defines fscanf,scanf,sscanf to link to the symbols that are @@ -3617,6 +3620,7 @@ fn test_linux(target: &str) { // it is only a u64 because we only expose one field // http://man7.org/linux/man-pages/man2/epoll_wait.2.html "u64" if struct_ == "epoll_event" => "data.u64".to_string(), + // The following structs have a field called `type` in C, // but `type` is a Rust keyword, so these fields are translated // to `type_` in Rust. @@ -3834,6 +3838,9 @@ fn test_linux(target: &str) { // https://github.com/torvalds/linux/commit/c05cd3645814724bdeb32a2b4d953b12bdea5f8c "xdp_umem_reg_v1" => true, + // FIXME(#3956): our CI now has the more recent version with the extra field. + "xdp_umem_reg" => true, + // Is defined in `` but if this file is included at the same time // as ``, the `struct sched_param` is defined twice, causing the compilation to // fail. The problem doesn't seem to be present in more recent versions of the linux @@ -4295,6 +4302,16 @@ fn test_linux(target: &str) { "EPIOCSPARAMS" | "EPIOCGPARAMS" => true, + // FIXME(time): these change value when using 64-bit time on 32-bit + "F_GETLK" + | "SO_RCVTIMEO" + | "SO_SNDTIMEO" + | "SO_TIMESTAMP" + | "SO_TIMESTAMPNS" + | "SO_TIMESTAMPING" + | "SCM_TIMESTAMPNS" + | "SCM_TIMESTAMPING" if bit32 => true, + _ => false, } }); @@ -4495,6 +4512,32 @@ fn test_linux(target: &str) { (struct_ == "fanotify_event_info_fid" && field == "fsid") || // `handle` is a VLA (struct_ == "fanotify_event_info_fid" && field == "handle") || + // FIXME(time): Ubuntu24.04 no longer defines `__WORDSIZE_TIME64_COMPAT32=1`, which + // means `ut_session` is now a `long` rather than `int32_t`. + (bit32 && ( + (struct_ == "utmpx" && field == "ut_session") || + (struct_ == "input_event" && field == "time" ) || + // Almost the entire `timex` struct but not everything + (struct_ == "timex" && field == "offset") || + (struct_ == "timex" && field == "freq") || + (struct_ == "timex" && field == "maxerror") || + (struct_ == "timex" && field == "esterror") || + (struct_ == "timex" && field == "constant") || + (struct_ == "timex" && field == "precision") || + (struct_ == "timex" && field == "tolerance") || + (struct_ == "timex" && field == "tick") || + (struct_ == "timex" && field == "ppsfreq") || + (struct_ == "timex" && field == "jitter") || + (struct_ == "timex" && field == "stabil") || + (struct_ == "timex" && field == "jitcnt") || + (struct_ == "timex" && field == "calcnt") || + (struct_ == "timex" && field == "errcnt") || + (struct_ == "timex" && field == "stbcnt") || + + // glibc type depends on `__USE_TIME64_REDIRECTS + (struct_ == "timeval" && field == "tv_sec") || + (struct_ == "timeval" && field == "tv_usec") + )) || // invalid application of 'sizeof' to incomplete type 'long unsigned int[]' (musl && struct_ == "mcontext_t" && field == "__extcontext" && loongarch64) }); diff --git a/src/macros.rs b/src/macros.rs index 2094f22fcffdd..76f37cce32844 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -197,13 +197,14 @@ macro_rules! e { // FIXME(ctest): ctest can't handle `const extern` functions, we should be able to remove this // cfg completely. +// FIXME(ctest): ctest can't handle `$(,)?` so we use `$(,)*` which isn't quite correct. cfg_if! { if #[cfg(feature = "const-extern-fn")] { /// Define an `unsafe` function that is const as long as `const-extern-fn` is enabled. macro_rules! f { ($( $(#[$attr:meta])* - pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)?) -> $ret:ty + pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty $body:block )*) => ($( #[inline] @@ -217,7 +218,7 @@ cfg_if! { macro_rules! safe_f { ($( $(#[$attr:meta])* - pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)?) -> $ret:ty + pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty $body:block )*) => ($( #[inline] @@ -231,7 +232,7 @@ cfg_if! { macro_rules! const_fn { ($( $(#[$attr:meta])* - $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)?) -> $ret:ty + $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty $body:block )*) => ($( #[inline] @@ -245,7 +246,7 @@ cfg_if! { macro_rules! f { ($( $(#[$attr:meta])* - pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)?) -> $ret:ty + pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty $body:block )*) => ($( #[inline] @@ -259,7 +260,7 @@ cfg_if! { macro_rules! safe_f { ($( $(#[$attr:meta])* - pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)?) -> $ret:ty + pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty $body:block )*) => ($( #[inline] @@ -273,7 +274,7 @@ cfg_if! { macro_rules! const_fn { ($( $(#[$attr:meta])* - $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)?) -> $ret:ty + $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty $body:block )*) => ($( #[inline]