blob: 4c1b37d68216874b7dbc9111d830504d2c0c7a64 [file] [log] [blame]
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Contributor: Zion Nimchuk <zionnimchuk@gmail.com>
# Contributor: Mateusz MikuĊ‚a <mati865@gmail.com
_realname=rust
_bootstrapping=yes
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}"
"${MINGW_PACKAGE_PREFIX}-rust-docs")
pkgver=1.53.0
pkgrel=2
pkgdesc="Systems programming language focused on safety, speed and concurrency (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64')
url="https://www.rust-lang.org/"
license=('MIT' 'Apache')
makedepends=("bison"
"flex"
"git"
"${MINGW_PACKAGE_PREFIX}-cmake>=3.4.3"
"${MINGW_PACKAGE_PREFIX}-curl"
"${MINGW_PACKAGE_PREFIX}-libffi"
"${MINGW_PACKAGE_PREFIX}-libssh2"
"${MINGW_PACKAGE_PREFIX}-lldb"
"${MINGW_PACKAGE_PREFIX}-llvm"
"${MINGW_PACKAGE_PREFIX}-ninja"
"${MINGW_PACKAGE_PREFIX}-openssl"
"${MINGW_PACKAGE_PREFIX}-python"
$([[ "$_bootstrapping" == "no" ]] && echo "${MINGW_PACKAGE_PREFIX}-rust")
"${MINGW_PACKAGE_PREFIX}-zlib")
options=('staticlibs')
#install=rust.install
source=("https://static.rust-lang.org/dist/${_realname}c-${pkgver}-src.tar.gz"
"force-curl-rust.patch"
"0001-add-missing-libs.patch"
"0004-unbundle-gcc.patch"
"0005-win32-config.patch"
"0006-Update-cc.patch")
sha256sums=('5cf7ca39a10f6bf4e0b0bd15e3b9a61ce721f301e12d148262e5ba968ab825b9'
'bd63b990d2c1626acb87d5ea534c3d82fc4daddb5f784a83053be7b162327445'
'c706841ace2ef76fd1004b9c0486ea9ef7d99073c5ce2884e4c97fa4a7beab25'
'6cc3234644768e24824e455d6304585c717ae25aa53ebf9cf1f1dea87bf869b7'
'c4e5ffeef84296d39c3e3e8f807fc8b33ce786b1e4edb21eef26b053586aca27'
'dd8f785138a78398c486fe60237833d1c6a84be5128ad6b3210c135dda258497')
#validpgpkeys=('108F66205EAEB0AAA8DD5E1C85AB96E6FA1BE5FE') # Rust Language (Tag and Release Signing Key) <rust-key@rust-lang.org>
noextract=(${_realname}c-${pkgver}-src.tar.gz)
prepare() {
[[ -d ${srcdir}/${_realname}c-${pkgver}-src ]] && rm -rf ${srcdir}/${_realname}c-${pkgver}-src
tar -xzf ${srcdir}/${_realname}c-${pkgver}-src.tar.gz -C ${srcdir} || true
cd ${srcdir}/${_realname}c-${pkgver}-src
patch -p1 -i "${srcdir}/force-curl-rust.patch"
patch -p1 -i "${srcdir}/0001-add-missing-libs.patch"
patch -p1 -i "${srcdir}/0004-unbundle-gcc.patch"
patch -p1 -i "${srcdir}/0005-win32-config.patch"
patch -p1 -i "${srcdir}/0006-Update-cc.patch"
}
build() {
[[ -d "${srcdir}/${CARCH}" ]] && rm -rf "${srcdir}/${CARCH}"
mkdir -p "${srcdir}/${CARCH}" && cd "${srcdir}/${CARCH}"
#We have to do the following because rust doesn't count x86_64-w64-mingw32 as a target triple
OSTYPE="$CARCH-pc-windows-gnu"
local -a _rust_conf=()
if [ "${_bootstrapping}" = "no" ]; then
_rust_conf+=("--local-rust-root=$(cygpath -m ${MINGW_PREFIX})")
fi
MSYS2_ARG_CONV_EXCL="--prefix;--sysconfdir;--localstatedir" \
../${_realname}c-${pkgver}-src/configure \
--prefix=${MINGW_PREFIX} \
--sysconfdir=${MINGW_PREFIX}/etc \
--localstatedir=${MINGW_PREFIX}/var/lib \
--build=$OSTYPE \
--host=$OSTYPE \
--target=$OSTYPE \
--release-channel=stable \
--enable-ninja \
--enable-extended \
--disable-codegen-tests \
--llvm-root=${MINGW_PREFIX} \
--python=${MINGW_PREFIX}/bin/python \
${_rust_conf}
DEP_NGHTTP_ROOT=${MINGW_PREFIX} \
DEP_OPENSSL_ROOT=${MINGW_PREFIX} \
DEP_Z_ROOT=${MINGW_PREFIX} \
${MINGW_PREFIX}/bin/python ../${_realname}c-${pkgver}-src/x.py build --verbose --stage 2 -j "$(nproc)"
#create the install at a temporary directory
DEP_NGHTTP_ROOT=${MINGW_PREFIX} \
DEP_OPENSSL_ROOT=${MINGW_PREFIX} \
DEP_Z_ROOT=${MINGW_PREFIX} \
DESTDIR="$PWD"/dest-rust ${MINGW_PREFIX}/bin/python ../${_realname}c-${pkgver}-src/x.py install --stage 2 --verbose -j "$(nproc)"
# move docs out of the way for splitting
mv dest-rust/${MINGW_PREFIX}/share/doc dest-doc
rm -f dest-rust/${MINGW_PREFIX}/bin/libgcc*.dll
rm -f dest-rust/${MINGW_PREFIX}/bin/libstd*.dll
rm -f dest-rust/${MINGW_PREFIX}/bin/libwinpthread*.dll
}
check() {
cd "${srcdir}/${CARCH}"
# it might fail on Windows
DEP_NGHTTP_ROOT=${MINGW_PREFIX} \
DEP_OPENSSL_ROOT=${MINGW_PREFIX} \
DEP_Z_ROOT=${MINGW_PREFIX} \
${MINGW_PREFIX}/bin/python ../${_realname}c-${pkgver}-src/x.py test --stage 2 || true
}
package_rust() {
depends=("${MINGW_PACKAGE_PREFIX}-gcc"
"${MINGW_PACKAGE_PREFIX}-curl"
"${MINGW_PACKAGE_PREFIX}-libxml2"
"${MINGW_PACKAGE_PREFIX}-libssh2")
cd "${srcdir}/${CARCH}"
cp -a dest-rust/* "$pkgdir"
install -Dm644 ${srcdir}/${_realname}c-${pkgver}-src/LICENSE-APACHE "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE-APACHE"
install -Dm644 ${srcdir}/${_realname}c-${pkgver}-src/LICENSE-MIT "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE-MIT"
# delete unnecesary files, e.g. components and manifest files only used for the uninstall script
cd "$pkgdir"/${MINGW_PREFIX}/lib/rustlib
rm components install.log manifest-* rust-installer-version uninstall.sh
install -d "$pkgdir/${MINGW_PREFIX}/share/bash-completion/completions"
mv "${pkgdir}${MINGW_PREFIX}/etc/bash_completion.d/cargo" \
"${pkgdir}${MINGW_PREFIX}/share/bash-completion/completions/cargo"
}
package_rust-docs() {
pkgdesc='Documentation for the Rust programming language'
conflicts=("${MINGW_PACKAGE_PREFIX}-${_realname}<1.52.0")
cd "${srcdir}/${CARCH}"
install -Dm644 ${srcdir}/${_realname}c-${pkgver}-src/LICENSE-APACHE "${pkgdir}${MINGW_PREFIX}/share/licenses/$pkgname/LICENSE-APACHE"
install -Dm644 ${srcdir}/${_realname}c-${pkgver}-src/LICENSE-MIT "${pkgdir}${MINGW_PREFIX}/share/licenses/$pkgname/LICENSE-MIT"
install -d "$pkgdir"/${MINGW_PREFIX}/share/
cp -a dest-doc "$pkgdir"/${MINGW_PREFIX}/share/doc
}
# template start; name=mingw-w64-splitpkg-wrappers; version=1.0;
# vim: set ft=bash :
# generate wrappers
for _name in "${pkgname[@]}"; do
_short="package_${_name#${MINGW_PACKAGE_PREFIX}-}"
_func="$(declare -f "${_short}")"
eval "${_func/#${_short}/package_${_name}}"
done
# template end;