Skip to content

Commit

Permalink
Automatic migration to Rust edition 2021
Browse files Browse the repository at this point in the history
Migration script:

```sh
#!/usr/bin/env bash

git restore Cargo.toml src

# Handle leading `::` in common types

for file in $(find src -name "*.rs"); do
  perl -pi -077 -e 's/(?<!\w)::(Option|Copy|Clone)\b/$1/g' "$file"
done

implicit_c_long_ulong_char=(
  src/fuchsia/mod.rs
  src/solid/mod.rs
  src/unix/aix/mod.rs
  src/unix/bsd/apple/mod.rs
  src/unix/bsd/freebsdlike/freebsd/mod.rs
  src/unix/bsd/freebsdlike/mod.rs
  src/unix/bsd/netbsdlike/netbsd/mod.rs
  src/unix/bsd/netbsdlike/openbsd/mod.rs
  src/unix/bsd/netbsdlike/mod.rs
  src/unix/bsd/mod.rs
  src/unix/haiku/mod.rs
  src/unix/hurd/mod.rs
  src/unix/linux_like/android/b32/mod.rs
  src/unix/linux_like/android/b64/mod.rs
  src/unix/linux_like/android/mod.rs
  src/unix/linux_like/linux/gnu/b32/mod.rs
  src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs
  src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs
  src/unix/linux_like/linux/gnu/b64/mod.rs
  src/unix/linux_like/linux/gnu/mod.rs
  src/unix/linux_like/linux/musl/mod.rs
  src/unix/linux_like/linux/uclibc/mips/mod.rs
  src/unix/linux_like/linux/uclibc/mod.rs
  src/unix/linux_like/linux/mod.rs
  src/unix/linux_like/mod.rs
  src/unix/newlib/mod.rs
  src/unix/nto/mod.rs
  src/unix/mod.rs
  src/vxworks/mod.rs
)

for file in "${implicit_c_long_ulong_char[@]}"; do
  perl -pi -077 -e 's/(?<!\w)::(c_long|c_ulong|c_char)\b/$1/g' "$file"
done

implicit_off_t=(
  src/unix/linux_like/linux/gnu/mod.rs
  src/unix/linux_like/linux/mod.rs
  src/unix/linux_like/mod.rs
  src/unix/mod.rs
)

for file in "${implicit_off_t[@]}"; do
  perl -pi -077 -e 's/(?<!\w)::(off_t)\b/$1/g' "$file"
done

implicit_off64_t=(
  src/unix/linux_like/android/mod.rs
  src/unix/linux_like/mod.rs
)

for file in "${implicit_off64_t[@]}"; do
  perl -pi -077 -e 's/(?<!\w)::(off64_t)\b/$1/g' "$file"
done

implicit_Ioctl=(
  src/unix/linux_like/linux/mod.rs
)

for file in "${implicit_Ioctl[@]}"; do
  perl -pi -077 -e 's/(?<!\w)::(Ioctl)\b/$1/g' "$file"
done

perl -pi -077 -e 's/(?<!\w)::(__u8|__u16|__u32|__s16|__s32)\b/$1/g' src/unix/linux_like/linux/mod.rs

perl -pi -077 -e 's/(?<!\w)::(SIG[A-Z]+)\b/$1/g' src/unix/solarish/mod.rs

# These are used only in `cfg`ed items or comments, `use ::<type>;` would cause warnings on some targets
perl -pi -077 -e 's/(?<!\w)::c_ulong\b/crate::c_ulong/g' src/unix/newlib/generic.rs
perl -pi -077 -e 's/(?<!\w)::c_ulong\b/crate::c_ulong/g' src/unix/linux_like/linux/arch/generic/mod.rs
perl -pi -077 -e 's/(?<!\w)::c_ulonglong\b/crate::c_ulonglong/g' src/unix/linux_like/linux/gnu/b64/mod.rs
perl -pi -077 -e 's/(?<!\w)::c_ulonglong\b/crate::c_ulonglong/g' src/unix/linux_like/linux/mod.rs
perl -pi -077 -e 's/(?<!\w)::c_ulonglong\b/crate::c_ulonglong/g' src/unix/linux_like/mod.rs
perl -pi -077 -e 's/(?<!\w)::c_short\b/crate::c_short/g' src/unix/linux_like/linux/gnu/b32/mod.rs
perl -pi -077 -e 's/(?<!\w)::c_short\b/crate::c_short/g' src/unix/newlib/mod.rs
perl -pi -077 -e 's/(?<!\w)::c_float\b/c_float/g' src/unix/linux_like/linux/gnu/b64/s390x.rs
perl -pi -077 -e 's/(?<!\w)::c_float\b/c_float/g' src/unix/linux_like/linux/musl/b64/s390x.rs

function handle_type() {
  type="$1"
  uses_type="$(rg -l "[^\w]::$type\b" src)"
  has_type_def="$(rg -l "(type|struct) $type " src)"
  has_type_import="$(rg -l "use ([0-9a-zA-Z_]+::)*$type;" src)"

  add_import=($(comm -3 <(echo "$uses_type" | sort) <(printf "%s\n%s" "$has_type_def" "$has_type_import" | sort) | cut -f1))
  for file in "${add_import[@]}"; do
    # Split the file into two parts: module-level attributes and rest
    # Imports will be added after module-level attributes

    awk '/^#!|^\/\/!/ {found=NR} {lines[NR]=$0} END {for (i=1; i<=found; i++) print lines[i]}' \
      "$file" > "$file.attrs"
    awk '/^#!|^\/\/!/ {found=NR} END {if (found) {for (i=found+1; i<=NR; i++) print lines[i]} else {for (i=1; i<=NR; i++) print lines[i]}} {lines[NR]=$0}' \
      "$file" > "$file.rest"

    cat "$file.attrs" > "$file"
    echo >> "$file"
    echo 'use crate::'"$type"';' >> "$file"
    echo >> "$file"
    cat "$file.rest" >> "$file"

    rm "$file.attrs" "$file.rest"
  done

  for file in $uses_type; do
    perl -pi -077 -e 's/(?<!\w)::('"$type"')\b/$1/g' "$file"
  done
}

handle_type c_void
handle_type c_int
handle_type c_uint
handle_type c_char
handle_type c_schar
handle_type c_uchar
handle_type c_short
handle_type c_ushort
handle_type c_long
handle_type c_ulong
handle_type c_longlong
handle_type c_ulonglong
handle_type c_float
handle_type c_double
handle_type size_t
handle_type ssize_t
handle_type intptr_t
handle_type ptrdiff_t
handle_type off_t
handle_type off64_t
#handle_type time_t # Produces deprecation warnings
handle_type Ioctl
handle_type cmsghdr # To avoid "line formatted, but exceeded maximum width"

# Commented targets failed to `cargo check -Zbuild-std=core`
targets=(
  aarch64-apple-darwin
  aarch64-apple-ios
  aarch64-apple-ios-macabi
  aarch64-apple-ios-sim
  aarch64-apple-tvos
  aarch64-apple-tvos-sim
  aarch64-apple-visionos
  aarch64-apple-visionos-sim
  aarch64-apple-watchos
  aarch64-apple-watchos-sim
  aarch64-kmc-solid_asp3
  aarch64-linux-android
  aarch64-nintendo-switch-freestanding
  aarch64-pc-windows-gnullvm
  aarch64-pc-windows-msvc
  aarch64-unknown-freebsd
  aarch64-unknown-fuchsia
  aarch64-unknown-hermit
  aarch64-unknown-illumos
  aarch64-unknown-linux-gnu
  aarch64-unknown-linux-gnu_ilp32
  aarch64-unknown-linux-musl
  aarch64-unknown-linux-ohos
  aarch64-unknown-netbsd
  aarch64-unknown-none
  aarch64-unknown-none-softfloat
  aarch64-unknown-nto-qnx700
  aarch64-unknown-nto-qnx710
  aarch64-unknown-openbsd
  aarch64-unknown-redox
  #aarch64-unknown-teeos
  aarch64-unknown-trusty
  aarch64-unknown-uefi
  aarch64-uwp-windows-msvc
  aarch64-wrs-vxworks
  aarch64_be-unknown-linux-gnu
  aarch64_be-unknown-linux-gnu_ilp32
  aarch64_be-unknown-netbsd
  arm-linux-androideabi
  arm-unknown-linux-gnueabi
  arm-unknown-linux-gnueabihf
  arm-unknown-linux-musleabi
  arm-unknown-linux-musleabihf
  arm64_32-apple-watchos
  arm64e-apple-darwin
  arm64e-apple-ios
  arm64e-apple-tvos
  arm64ec-pc-windows-msvc
  armeb-unknown-linux-gnueabi
  armebv7r-none-eabi
  armebv7r-none-eabihf
  armv4t-none-eabi
  armv4t-unknown-linux-gnueabi
  armv5te-none-eabi
  armv5te-unknown-linux-gnueabi
  armv5te-unknown-linux-musleabi
  armv5te-unknown-linux-uclibceabi
  armv6-unknown-freebsd
  armv6-unknown-netbsd-eabihf
  armv6k-nintendo-3ds
  armv7-linux-androideabi
  armv7-rtems-eabihf
  armv7-sony-vita-newlibeabihf
  armv7-unknown-freebsd
  armv7-unknown-linux-gnueabi
  armv7-unknown-linux-gnueabihf
  armv7-unknown-linux-musleabi
  armv7-unknown-linux-musleabihf
  armv7-unknown-linux-ohos
  armv7-unknown-linux-uclibceabi
  armv7-unknown-linux-uclibceabihf
  armv7-unknown-netbsd-eabihf
  armv7-unknown-trusty
  armv7-wrs-vxworks-eabihf
  armv7a-kmc-solid_asp3-eabi
  armv7a-kmc-solid_asp3-eabihf
  armv7a-none-eabi
  armv7a-none-eabihf
  armv7k-apple-watchos
  armv7r-none-eabi
  armv7r-none-eabihf
  armv7s-apple-ios
  armv8r-none-eabihf
  #avr-unknown-gnu-atmega328
  bpfeb-unknown-none
  bpfel-unknown-none
  csky-unknown-linux-gnuabiv2
  csky-unknown-linux-gnuabiv2hf
  hexagon-unknown-linux-musl
  #hexagon-unknown-none-elf
  i386-apple-ios
  #i586-pc-nto-qnx700
  i586-pc-windows-msvc
  i586-unknown-linux-gnu
  i586-unknown-linux-musl
  i586-unknown-netbsd
  i686-apple-darwin
  i686-linux-android
  i686-pc-windows-gnu
  i686-pc-windows-gnullvm
  i686-pc-windows-msvc
  i686-unknown-freebsd
  i686-unknown-haiku
  i686-unknown-hurd-gnu
  i686-unknown-linux-gnu
  i686-unknown-linux-musl
  i686-unknown-netbsd
  i686-unknown-openbsd
  i686-unknown-redox
  i686-unknown-uefi
  i686-uwp-windows-gnu
  i686-uwp-windows-msvc
  i686-win7-windows-msvc
  i686-wrs-vxworks
  loongarch64-unknown-linux-gnu
  loongarch64-unknown-linux-musl
  loongarch64-unknown-linux-ohos
  loongarch64-unknown-none
  loongarch64-unknown-none-softfloat
  #m68k-unknown-linux-gnu
  mips-unknown-linux-gnu
  mips-unknown-linux-musl
  mips-unknown-linux-uclibc
  mips64-openwrt-linux-musl
  mips64-unknown-linux-gnuabi64
  mips64-unknown-linux-muslabi64
  mips64el-unknown-linux-gnuabi64
  mips64el-unknown-linux-muslabi64
  mipsel-sony-psp
  mipsel-sony-psx
  mipsel-unknown-linux-gnu
  mipsel-unknown-linux-musl
  mipsel-unknown-linux-uclibc
  mipsel-unknown-netbsd
  mipsel-unknown-none
  mipsisa32r6-unknown-linux-gnu
  mipsisa32r6el-unknown-linux-gnu
  mipsisa64r6-unknown-linux-gnuabi64
  mipsisa64r6el-unknown-linux-gnuabi64
  msp430-none-elf
  nvptx64-nvidia-cuda
  powerpc-unknown-freebsd
  powerpc-unknown-linux-gnu
  powerpc-unknown-linux-gnuspe
  powerpc-unknown-linux-musl
  powerpc-unknown-linux-muslspe
  powerpc-unknown-netbsd
  powerpc-unknown-openbsd
  powerpc-wrs-vxworks
  powerpc-wrs-vxworks-spe
  powerpc64-ibm-aix
  powerpc64-unknown-freebsd
  powerpc64-unknown-linux-gnu
  powerpc64-unknown-linux-musl
  powerpc64-unknown-openbsd
  powerpc64-wrs-vxworks
  powerpc64le-unknown-freebsd
  powerpc64le-unknown-linux-gnu
  powerpc64le-unknown-linux-musl
  riscv32-wrs-vxworks
  riscv32e-unknown-none-elf
  riscv32em-unknown-none-elf
  riscv32emc-unknown-none-elf
  riscv32gc-unknown-linux-gnu
  riscv32gc-unknown-linux-musl
  riscv32i-unknown-none-elf
  riscv32im-risc0-zkvm-elf
  riscv32im-unknown-none-elf
  riscv32ima-unknown-none-elf
  riscv32imac-esp-espidf
  riscv32imac-unknown-none-elf
  riscv32imac-unknown-nuttx-elf
  riscv32imac-unknown-xous-elf
  riscv32imafc-esp-espidf
  riscv32imafc-unknown-none-elf
  riscv32imafc-unknown-nuttx-elf
  riscv32imc-esp-espidf
  riscv32imc-unknown-none-elf
  riscv32imc-unknown-nuttx-elf
  riscv64-linux-android
  riscv64-wrs-vxworks
  riscv64gc-unknown-freebsd
  riscv64gc-unknown-fuchsia
  riscv64gc-unknown-hermit
  riscv64gc-unknown-linux-gnu
  riscv64gc-unknown-linux-musl
  #riscv64gc-unknown-netbsd
  riscv64gc-unknown-none-elf
  riscv64gc-unknown-nuttx-elf
  riscv64gc-unknown-openbsd
  riscv64imac-unknown-none-elf
  riscv64imac-unknown-nuttx-elf
  s390x-unknown-linux-gnu
  s390x-unknown-linux-musl
  sparc-unknown-linux-gnu
  sparc-unknown-none-elf
  sparc64-unknown-linux-gnu
  sparc64-unknown-netbsd
  sparc64-unknown-openbsd
  sparcv9-sun-solaris
  thumbv4t-none-eabi
  thumbv5te-none-eabi
  thumbv6m-none-eabi
  thumbv6m-nuttx-eabi
  thumbv7a-pc-windows-msvc
  thumbv7a-uwp-windows-msvc
  thumbv7em-none-eabi
  thumbv7em-none-eabihf
  thumbv7em-nuttx-eabi
  thumbv7em-nuttx-eabihf
  thumbv7m-none-eabi
  thumbv7m-nuttx-eabi
  thumbv7neon-linux-androideabi
  thumbv7neon-unknown-linux-gnueabihf
  thumbv7neon-unknown-linux-musleabihf
  thumbv8m.base-none-eabi
  thumbv8m.base-nuttx-eabi
  thumbv8m.main-none-eabi
  thumbv8m.main-none-eabihf
  thumbv8m.main-nuttx-eabi
  thumbv8m.main-nuttx-eabihf
  wasm32-unknown-emscripten
  wasm32-unknown-unknown
  wasm32-wasip1
  wasm32-wasip1-threads
  wasm32-wasip2
  wasm32v1-none
  wasm64-unknown-unknown
  x86_64-apple-darwin
  x86_64-apple-ios
  x86_64-apple-ios-macabi
  x86_64-apple-tvos
  x86_64-apple-watchos-sim
  x86_64-fortanix-unknown-sgx
  x86_64-linux-android
  x86_64-pc-nto-qnx710
  x86_64-pc-solaris
  x86_64-pc-windows-gnu
  x86_64-pc-windows-gnullvm
  x86_64-pc-windows-msvc
  x86_64-unikraft-linux-musl
  x86_64-unknown-dragonfly
  x86_64-unknown-freebsd
  x86_64-unknown-fuchsia
  x86_64-unknown-haiku
  x86_64-unknown-hermit
  x86_64-unknown-hurd-gnu
  x86_64-unknown-illumos
  x86_64-unknown-l4re-uclibc
  x86_64-unknown-linux-gnu
  x86_64-unknown-linux-gnux32
  x86_64-unknown-linux-musl
  #x86_64-unknown-linux-none
  x86_64-unknown-linux-ohos
  x86_64-unknown-netbsd
  x86_64-unknown-none
  x86_64-unknown-openbsd
  x86_64-unknown-redox
  x86_64-unknown-trusty
  x86_64-unknown-uefi
  x86_64-uwp-windows-gnu
  x86_64-uwp-windows-msvc
  x86_64-win7-windows-msvc
  x86_64-wrs-vxworks
  x86_64h-apple-darwin
  #xtensa-esp32-espidf
  #xtensa-esp32-none-elf
  #xtensa-esp32s2-espidf
  #xtensa-esp32s2-none-elf
  #xtensa-esp32s3-espidf
  #xtensa-esp32s3-none-elf
)

# Migrate to 2018

for target in "${targets[@]}"; do
  echo "Migrating 2015 -> 2018 target $target"
  cargo fix --target "$target" -Zbuild-std=core --features extra_traits --allow-dirty --edition --broken-code 2> /dev/null
done

# Handle freebsd versions
freebsd_versions=(freebsd13 freebsd14 freebsd15)
for ver in "${freebsd_versions[@]}"; do
  echo "Migrating 2015 -> 2018 $ver"
  RUSTFLAGS="--cfg $ver" cargo fix --target i686-unknown-freebsd -Zbuild-std=core --features extra_traits --allow-dirty --edition --broken-code 2> /dev/null
  RUSTFLAGS="--cfg $ver" cargo fix --target x86_64-unknown-freebsd -Zbuild-std=core --features extra_traits --allow-dirty --edition --broken-code 2> /dev/null
done

perl -pi -077 -e 's/edition = "2015"/edition = "2018"/' Cargo.toml

# Migrate to 2021

for target in "${targets[@]}"; do
  echo "Migrating 2018 -> 2021 target $target"
  cargo fix --target "$target" -Zbuild-std=core --features extra_traits --allow-dirty --edition --broken-code 2> /dev/null
done

perl -pi -077 -e 's/edition = "2018"/edition = "2021"/' Cargo.toml

# Check
for target in "${targets[@]}"; do
  echo "Checking target $target"
  cargo check --target "$target" -Zbuild-std=core --features extra_traits || {
    echo "Failed for target $target"
    exit 1
  }
done

for ver in "${freebsd_versions[@]}"; do
  echo "Checking $ver"
  RUSTFLAGS="--cfg $ver" cargo check --target i686-unknown-freebsd -Zbuild-std=core --features extra_traits || {
    echo "Failed for i686 $freebsd_versions"
    exit 1
  }
  RUSTFLAGS="--cfg $ver" cargo check --target x86_64-unknown-freebsd -Zbuild-std=core --features extra_traits || {
    echo "Failed for x86_64 $freebsd_versions"
    exit 1
  }
done

# Fix formatting
ci/style.sh
```
  • Loading branch information
eduardosm authored and tgross35 committed Nov 26, 2024
1 parent 65e7837 commit 20f6aa4
Show file tree
Hide file tree
Showing 157 changed files with 70,593 additions and 70,687 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ version = "1.0.0-alpha.1"
authors = ["The Rust Project Developers"]
license = "MIT OR Apache-2.0"
readme = "README.md"
edition = "2015"
edition = "2021"
repository = "https://github.com/rust-lang/libc"
homepage = "https://github.com/rust-lang/libc"
documentation = "https://docs.rs/libc/"
Expand Down
106 changes: 54 additions & 52 deletions src/fuchsia/aarch64.rs
Original file line number Diff line number Diff line change
@@ -1,67 +1,69 @@
use crate::{c_int, c_long, c_uint, c_ulong, c_ulonglong, c_ushort, off_t, size_t};

pub type c_char = u8;
pub type __u64 = ::c_ulonglong;
pub type __u64 = c_ulonglong;
pub type wchar_t = u32;
pub type nlink_t = ::c_ulong;
pub type blksize_t = ::c_long;
pub type nlink_t = c_ulong;
pub type blksize_t = c_long;

s! {
pub struct stat {
pub st_dev: ::dev_t,
pub st_ino: ::ino_t,
pub st_mode: ::mode_t,
pub st_nlink: ::nlink_t,
pub st_uid: ::uid_t,
pub st_gid: ::gid_t,
pub st_rdev: ::dev_t,
__pad0: ::c_ulong,
pub st_size: ::off_t,
pub st_blksize: ::blksize_t,
__pad1: ::c_int,
pub st_blocks: ::blkcnt_t,
pub st_atime: ::time_t,
pub st_atime_nsec: ::c_long,
pub st_mtime: ::time_t,
pub st_mtime_nsec: ::c_long,
pub st_ctime: ::time_t,
pub st_ctime_nsec: ::c_long,
__unused: [::c_uint; 2],
pub st_dev: crate::dev_t,
pub st_ino: crate::ino_t,
pub st_mode: crate::mode_t,
pub st_nlink: crate::nlink_t,
pub st_uid: crate::uid_t,
pub st_gid: crate::gid_t,
pub st_rdev: crate::dev_t,
__pad0: c_ulong,
pub st_size: off_t,
pub st_blksize: crate::blksize_t,
__pad1: c_int,
pub st_blocks: crate::blkcnt_t,
pub st_atime: crate::time_t,
pub st_atime_nsec: c_long,
pub st_mtime: crate::time_t,
pub st_mtime_nsec: c_long,
pub st_ctime: crate::time_t,
pub st_ctime_nsec: c_long,
__unused: [c_uint; 2],
}

pub struct stat64 {
pub st_dev: ::dev_t,
pub st_ino: ::ino_t,
pub st_mode: ::mode_t,
pub st_nlink: ::nlink_t,
pub st_uid: ::uid_t,
pub st_gid: ::gid_t,
pub st_rdev: ::dev_t,
__pad0: ::c_ulong,
pub st_size: ::off_t,
pub st_blksize: ::blksize_t,
__pad1: ::c_int,
pub st_blocks: ::blkcnt_t,
pub st_atime: ::time_t,
pub st_atime_nsec: ::c_long,
pub st_mtime: ::time_t,
pub st_mtime_nsec: ::c_long,
pub st_ctime: ::time_t,
pub st_ctime_nsec: ::c_long,
__unused: [::c_uint; 2],
pub st_dev: crate::dev_t,
pub st_ino: crate::ino_t,
pub st_mode: crate::mode_t,
pub st_nlink: crate::nlink_t,
pub st_uid: crate::uid_t,
pub st_gid: crate::gid_t,
pub st_rdev: crate::dev_t,
__pad0: c_ulong,
pub st_size: off_t,
pub st_blksize: crate::blksize_t,
__pad1: c_int,
pub st_blocks: crate::blkcnt_t,
pub st_atime: crate::time_t,
pub st_atime_nsec: c_long,
pub st_mtime: crate::time_t,
pub st_mtime_nsec: c_long,
pub st_ctime: crate::time_t,
pub st_ctime_nsec: c_long,
__unused: [c_uint; 2],
}

pub struct ipc_perm {
pub __ipc_perm_key: ::key_t,
pub uid: ::uid_t,
pub gid: ::gid_t,
pub cuid: ::uid_t,
pub cgid: ::gid_t,
pub mode: ::mode_t,
pub __seq: ::c_ushort,
__unused1: ::c_ulong,
__unused2: ::c_ulong,
pub __ipc_perm_key: crate::key_t,
pub uid: crate::uid_t,
pub gid: crate::gid_t,
pub cuid: crate::uid_t,
pub cgid: crate::gid_t,
pub mode: crate::mode_t,
pub __seq: c_ushort,
__unused1: c_ulong,
__unused2: c_ulong,
}
}

// From https://cs.opensource.google/fuchsia/fuchsia/+/main:zircon/third_party/ulib/musl/include/bits/signal.h;l=20-21;drc=0827b18ab9540c46f8037f407d17ea15a79e9ba7
pub const MINSIGSTKSZ: ::size_t = 6144;
pub const SIGSTKSZ: ::size_t = 12288;
pub const MINSIGSTKSZ: size_t = 6144;
pub const SIGSTKSZ: size_t = 12288;
Loading

0 comments on commit 20f6aa4

Please sign in to comment.