File PKGBUILD of Package rust

# Maintainer: Yukari Chiba <[email protected]>

pkgbase=rust
pkgname=(rust rust-src)
pkgver=1.94.1
pkgrel=2
pkgdesc="Systems programming language focused on safety, speed and concurrency"
arch=(x86_64 aarch64 riscv64 loongarch64)
url='https://www.rust-lang.org/'
license=('MIT OR Apache-2.0')
options=(!lto)
depends=(musl llvm-libs llvm curl libssh2 openssl sqlite)
# Rust bootstrapping facilities check for presence of libc.a, thus musl-static
# is required during building,
#	thread 'main' (6374) panicked at src/bootstrap/src/core/sanity.rs:375:25:
#	couldn't find libc.a in musl libdir: /usr/lib
#	stack backtrace:
#	   0: __rustc::rust_begin_unwind
#	   1: core::panicking::panic_fmt
#	   2: bootstrap::core::sanity::check
#	             at ./src/bootstrap/src/core/sanity.rs:375:25
#	   3: bootstrap::Build::new
#	             at ./src/bootstrap/src/lib.rs:617:13
#	   4: bootstrap::main
#	             at ./src/bootstrap/src/bin/main.rs:129:21
#	   5: core::ops::function::FnOnce::call_once
#	             at /rustc/ded5c06cf21d2b93bffd5d884aa6e96934ee4234/library/core/src/ops/function.rs:250:5
makedepends=(rust llvm-devel libffi perl python cmake ninja musl-static)
# 0001: Downstream, don't link CRT statically by default on musl targets
# 0002: Downstream, don't pass -nodefaultlibs to linkers, which prevents usage
#	of compiler-rt.
# 0003: Downstream, don't link libatomic for RISC-V targets, which is a
#	GCC-specific stuff
# 0004: Downstream, set lib as libexecdir
source=(https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
        config.toml.tpl
        0001-musl-static.patch
        0002-disable-no-default-libraries.patch
        0003-drop-latomic-for-riscv-targets.patch
        0004-bootstrap-Change-libexec-dir.patch)  # install rust-analyzer-proc-macro-srv in /usr/lib rather than /usr/libexec
sha256sums=('4c142a625f12e3cdf716c68ae19f4f60d98ad1482627b08579b15838e95ad514'
            '9bcc8162593140ea2344a812bb53463363d1b0a194fcbbc09256eafb4a355e1c'
            'e4d1fe0eb0e1859837d577bda829b92178154dcea02b8dcc2998dc866df356e1'
            'f4ffb8f6b2b0081287bc0c7dc258bf48d061ae8f32baa6691c92d15855632f94'
            '6d4a08f1512d065e7b131a30cecb8f8c9c801e55d6dec824b12b7024bf2c6a56'
            '9488711e787dd22ebb25e310f19da7b8ce109224b762df726c2019b1df858646')

prepare() {
  _patch_ rustc-$pkgver-src
}

build() {
  sed config.toml.tpl \
    -e "s@%RUSTVER%@$pkgver@g" \
    -e "s@%RUSTTARGET%@$RUSTHOST@g" \
    > rustc-$pkgver-src/config.toml

  export LIBSSH2_SYS_USE_PKG_CONFIG=1
  export LIBSQLITE3_SYS_USE_PKG_CONFIG=1
  export RUST_BACKTRACE=1

  cd "$srcdir"/rustc-$pkgver-src
  DESTDIR="$srcdir"/install python ./x.py install -j "$(nproc)"

  cd "$srcdir"/install
  _pick_ rust-src usr/lib/rustlib/src
}

package_rust() {
  provides=(cargo rustfmt rustdoc)
  cp -r "$srcdir"/install/* "$pkgdir"

  rm "$pkgdir"/usr/lib/rustlib/{components,install.log,rust-installer-version,uninstall.sh}
  rm "$pkgdir"/usr/lib/rustlib/manifest-*

  install -d "$pkgdir"/usr/share/bash-completion
  install -d "$pkgdir"/usr/share/licenses/rust

  mv -t "$pkgdir"/usr/share/licenses/rust "$pkgdir"/usr/share/doc/rustc/COPYRIGHT*
}

package_rust-src() {
  pkgdesc="Source code for the Rust standard library"
  depends=(rust)

  cp -a pkgs/rust-src/* "$pkgdir"
}