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

[0.2] Migrate to Rust edition 2021 #4155

Merged
merged 5 commits into from
Nov 27, 2024

Conversation

tgross35
Copy link
Contributor

Backport #4132

… `crate::` with `::`

This is needed because ctest2 cannot parse `crate::` in paths

(backport <rust-lang#4132>)
(cherry picked from commit fda6017)
(backport <rust-lang#4132>)
(cherry picked from commit 65e7837)
Migration script:

```sh
set -ex

git restore Cargo.toml src

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

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 || echo)"
  has_type_def="$(rg -l "(type|struct) $type " src || echo)"
  has_type_import="$(rg -l "use ([0-9a-zA-Z_]+::)*$type;" src || echo)"

  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 Ioctl
handle_type cmsghdr # To avoid "line formatted, but exceeded maximum width"

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
)

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 --lib
done

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 --lib
  RUSTFLAGS="--cfg $ver" cargo fix --target x86_64-unknown-freebsd -Zbuild-std=core --features extra_traits --allow-dirty --edition --broken-code --lib
done

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

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 --lib
done

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

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

ci/style.sh
```

(backport <rust-lang#4132>)
(cherry picked from commit 20f6aa4)

[ applied by rerunning the script rather than resolving conflicts. Also
  updated the script to fail on error and to pass `--lib` so `cargo fix`
  doesn't try to upgrade anything that requires `std`. -Trevor ]
@rustbot
Copy link
Collaborator

rustbot commented Nov 27, 2024

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot
Copy link
Collaborator

rustbot commented Nov 27, 2024

Some changes occurred in OpenBSD module

cc @semarie

Some changes occurred in OpenBSD module

cc @semarie

Some changes occurred in solarish module

cc @jclulow, @pfmooney

Ignore 643182f ("Automatic migration to Rust edition 2021") since this
performed a lot of trivial changes to a large percent of the repository.

(backport <rust-lang#4154>)
(cherry picked from commit d694a4d)

[ adjusted the commit hash to be relevant to this branch - Trevor ]
@tgross35 tgross35 added this pull request to the merge queue Nov 27, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to no response for status checks Nov 27, 2024
@tgross35 tgross35 added this pull request to the merge queue Nov 27, 2024
Merged via the queue into rust-lang:libc-0.2 with commit d9a59db Nov 27, 2024
45 checks passed
@tgross35 tgross35 deleted the backport-edition-2021 branch November 27, 2024 03:27
@tgross35 tgross35 mentioned this pull request Nov 27, 2024
3 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment