aports/community/rust/APKBUILD
2018-07-02 21:55:35 +02:00

292 lines
9.9 KiB
Plaintext

# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Shiz <hi@shiz.me>
# Contributor: Jeizsm <jeizsm@gmail.com>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
pkgname=rust
pkgver=1.27.0
# TODO: bump to 6 as soon as we add llvm6
_llvmver=5
_bootver=1.26.2
pkgrel=0
pkgdesc="The Rust Programming Language"
url="http://www.rust-lang.org"
arch="x86_64"
license="Apache-2.0 BSD ISC MIT"
# gcc is needed at runtime just for linking. Someday rustc might invoke
# the linker directly, and then we'll only need binutils.
# See: https://github.com/rust-lang/rust/issues/11937
depends="$pkgname-stdlib=$pkgver-r$pkgrel gcc llvm-libunwind-dev musl-dev"
# * Rust is self-hosted, so you need rustc (and cargo) to build rustc...
# The last revision of this abuild that does not depend on itself (uses
# prebuilt rustc and cargo) is 8cb3112594f10a8cee5b5412c28a846acb63167f.
# * libffi-dev is needed just because we compile llvm with LLVM_ENABLE_FFI.
makedepends="
rust-bootstrap>=$_bootver
cargo-bootstrap
cmake
curl-dev
file
libffi-dev
libgit2-dev
libressl-dev
libssh2-dev
llvm$_llvmver-dev
llvm$_llvmver-test-utils
python2
tar
zlib-dev
"
# XXX: This is a hack to allow this abuild to depend on itself. Adding "rust"
# to makedepends would not work, because abuild implicitly removes $pkgname
# and $subpackages from the abuild's dependencies.
provides="rust-bootstrap=$pkgver-r$pkgrel"
# This is needed for -src that contains some testing binaries.
options="!archcheck"
subpackages="
$pkgname-dbg
$pkgname-stdlib
$pkgname-analysis
$pkgname-gdb::noarch
$pkgname-lldb::noarch
$pkgname-doc
$pkgname-src::noarch
cargo
cargo-bash-completions:_cargo_bashcomp:noarch
cargo-zsh-completion:_cargo_zshcomp:noarch
cargo-doc:_cargo_doc:noarch
"
source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
musl-fix-static-linking.patch
musl-fix-linux_musl_base.patch
llvm-with-ffi.patch
static-pie.patch
need-rpath.patch
minimize-rpath.patch
alpine-move-py-scripts-to-share.patch
alpine-change-rpath-to-rustlib.patch
alpine-target.patch
install-template-shebang.patch
bootstrap-tool-respect-tool-config.patch
ensure-stage0-libs-have-unique-metadata.patch
cargo-tests-fix-build-auth-http_auth_offered.patch
cargo-tests-ignore-resolving_minimum_version_with_transitive_deps.patch
cargo-tests-fix-build-target.patch
check-rustc
"
builddir="$srcdir/rustc-$pkgver-src"
_rlibdir="usr/lib/rustlib/$CTARGET/lib"
_sharedir="usr/share/rust"
ldpath="/$_rlibdir"
export RUST_BACKTRACE=1
export RUSTC_CRT_STATIC="false"
# Convince libgit2-sys to use the distro libgit2.
export LIBGIT2_SYS_USE_PKG_CONFIG=1
prepare() {
default_prepare
cd "$builddir"
# Remove bundled dependencies.
rm -Rf src/llvm/
}
build() {
cd "$builddir"
# jemalloc is disabled, because it increases size of statically linked
# binaries produced by rustc (stripped hello_world 186 kiB vs. 358 kiB)
# for only tiny performance boost (even negative in some tests).
./configure \
--build="$CBUILD" \
--host="$CTARGET" \
--target="$CTARGET" \
--prefix="/usr" \
--release-channel="stable" \
--enable-local-rust \
--local-rust-root="/usr" \
--llvm-root="/usr/lib/llvm$_llvmver" \
--musl-root="/usr" \
--disable-docs \
--enable-extended \
--tools="analysis,cargo,src" \
--enable-llvm-link-shared \
--enable-option-checking \
--enable-locked-deps \
--enable-vendor \
--disable-jemalloc
./x.py build -v --jobs ${JOBS:-2}
}
check() {
cd "$builddir"
# At this moment lib/rustlib/$CTARGET/lib does not contain a complete
# copy of the .so libs from lib (they will be copied there during
# `x.py install`). Thus we must set LD_LIBRARY_PATH for tests to work.
# This is related to change-rpath-to-rustlib.patch.
export LD_LIBRARY_PATH="$builddir/build/$CTARGET/stage2/lib"
"$srcdir"/check-rustc "$builddir"/build/$CTARGET/stage2/bin/rustc
# XXX: There's some problem with these tests, we will figure it out later.
# cd "$builddir"
# make check \
# LD_LIBRARY_PATH="$_stage0dir/lib" \
# VERBOSE=1
msg "Running tests for cargo..."
CFG_DISABLE_CROSS_TESTS=1 ./x.py test --no-fail-fast src/tools/cargo
unset LD_LIBRARY_PATH
}
package() {
cd "$builddir"
DESTDIR="$pkgdir" ./x.py install -v
cd "$pkgdir"
# These libraries are identical to those under rustlib/. Since we have
# linked rustc/rustdoc against those under rustlib/, we can remove
# them. Read change-rpath-to-rustlib.patch for more info.
rm -r usr/lib/*.so
# These objects are for static linking with musl on non-musl systems.
rm $_rlibdir/crt*.o
# Shared objects should have executable flag.
chmod +x $_rlibdir/*.so
# Python scripts are noarch, so move them to /usr/share.
# Requires move-py-scripts-to-share.patch to be applied.
_mv usr/lib/rustlib/etc/*.py $_sharedir/etc/
rmdir -p usr/lib/rustlib/etc 2>/dev/null || true
# Remove some clutter.
cd usr/lib/rustlib
rm components install.log manifest-* rust-installer-version uninstall.sh
}
stdlib() {
pkgdesc="Standard library for Rust (static rlibs)"
_mv "$pkgdir"/$_rlibdir/*.rlib "$subpkgdir"/$_rlibdir/
}
analysis() {
pkgdesc="Compiler analysis data for the Rust standard library"
depends="$pkgname-stdlib=$pkgver-r$pkgrel"
_mv "$pkgdir"/$_rlibdir/../analysis "$subpkgdir"/${_rlibdir%/*}/
}
gdb() {
pkgdesc="GDB pretty printers for Rust"
depends="$pkgname gdb"
mkdir -p "$subpkgdir"
cd "$subpkgdir"
_mv "$pkgdir"/usr/bin/rust-gdb usr/bin/
_mv "$pkgdir"/$_sharedir/etc/gdb_*.py $_sharedir/etc/
}
lldb() {
pkgdesc="LLDB pretty printers for Rust"
depends="$pkgname lldb py2-lldb"
mkdir -p "$subpkgdir"
cd "$subpkgdir"
_mv "$pkgdir"/usr/bin/rust-lldb usr/bin/
_mv "$pkgdir"/$_sharedir/etc/lldb_*.py $_sharedir/etc/
}
src() {
pkgdesc="$pkgdesc (source code)"
depends="$pkgname"
license="$license OFL-1.1 GPL-3.0-or-later GPL-3.0-with-GCC-exception CC-BY-SA-3.0 LGPL-3.0"
_mv "$pkgdir"/usr/lib/rustlib/src/rust "$subpkgdir"/usr/src/
rmdir -p "$pkgdir"/usr/lib/rustlib/src 2>/dev/null || true
mkdir -p "$subpkgdir"/usr/lib/rustlib/src
ln -s ../../../src/rust "$subpkgdir"/usr/lib/rustlib/src/rust
}
cargo() {
pkgdesc="The Rust package manager"
license="Apache-2.0 MIT UNLICENSE"
depends="$pkgname"
# XXX: See comment on top-level provides=.
provides="cargo-bootstrap=$pkgver-r$pkgrel"
_mv "$pkgdir"/usr/bin/cargo "$subpkgdir"/usr/bin/
}
_cargo_bashcomp() {
pkgdesc="Bash completions for cargo"
license="Apache-2.0 MIT"
depends=""
install_if="cargo=$pkgver-r$pkgrel bash-completion"
cd "$pkgdir"
_mv etc/bash_completion.d/cargo \
"$subpkgdir"/usr/share/bash-completion/completions/
rmdir -p etc/bash_completion.d 2>/dev/null || true
}
_cargo_zshcomp() {
pkgdesc="ZSH completions for cargo"
license="Apache-2.0 MIT"
depends=""
install_if="cargo=$pkgver-r$pkgrel zsh"
cd "$pkgdir"
_mv usr/share/zsh/site-functions/_cargo \
"$subpkgdir"/usr/share/zsh/site-functions/_cargo
rmdir -p usr/share/zsh/site-functions 2>/dev/null || true
}
_cargo_doc() {
pkgdesc="The Rust package manager (documentation)"
license="Apache-2.0 MIT"
install_if="docs cargo=$pkgver-r$pkgrel"
# XXX: This is hackish!
cd "$pkgdir"/../$pkgname-doc
_mv usr/share/man/man1/cargo* "$subpkgdir"/usr/share/man/man1/
}
_mv() {
local dest; for dest; do true; done # get last argument
mkdir -p "$dest"
mv $@
}
sha512sums="cd8fa2c748cbec7fab638cf5ea356fe55d64ec699c22dd493cd31d52f8d115a368942d2305c46e28dacff597de8748d327b1d2786502969f6dea93589295520d rustc-1.27.0-src.tar.gz
d26b0c87e2dce9f2aca561a47ed1ca987c4e1b272ab8b19c39433b63d4be03ca244ba97adc50e743fe50eb0b2f8109cd68a2f05e41d7411c58ef77ef253ca789 musl-fix-static-linking.patch
9ae8057e1f01b2f3a20906b9f82222b97aac0f1fce47471f724f1f2bd75f36f8be86cfc73ab6e6b09a9cfe5c1e5dc42780c3bac49e0cc453179c49580b3ebddc musl-fix-linux_musl_base.patch
e40d41a6dc5d400d6672f1836cd5b9e00391f7beb52e872d87db76bc95a606ce6aaae737a0256a1e5fba77c83bb223818d214dbe87028d47be65fb43c101595c llvm-with-ffi.patch
c686b1fc63d415e10e6e27ade39c692cff534262f45978deb7e71e3f11e3a61c849008b63da3963c423e9dc29ee7eb0efb0400918855827e34987da74b443a23 static-pie.patch
c139ded88ed6c90f39ea039e182c7f135832b460e0637a7a453e8247170dca4eee209351f16ebfb5dac466d4f2bf7d7f2568d7e1c9a3aa4190150453677b3510 need-rpath.patch
d352614e7c774e181decae210140e789de7fc090327ff371981ad28a11ce51c8c01b27c1101a24bb84d75ed2f706f67868f7dbc52196d4ccdf4ebd2d6d6b6b5e minimize-rpath.patch
0c0aa7eeddeb578c320a94696a4437fbf083ef4d6f8049512de82548285f37ec4460b5d04f087dc303a5f62a09b5d13b7f0c4fbbdb0b321147ae030e7282ac07 alpine-move-py-scripts-to-share.patch
61aa415d754e9e01236481a1f3c9d5242f2d633e6f11b998e9ffcc07bf5c182d87c0c973dab6f10e4bb3ab4b4a4857bf9ed8dd664c49a65f6175d27db2774db1 alpine-change-rpath-to-rustlib.patch
a688b4bc2420bf05c6ae724c9a4e6821267716032f69a9a44cb395407276df7fb37fc145f8d274b5fa03e7173c338871c9d2294a90726ef16bd087fbe6a77b66 alpine-target.patch
7d59258d4462eba0207739a5c0c8baf1f19d9a396e5547bb4d59d700eb94d50ba6add2e523f3e94e29e993821018594625ea4ac86304fb58f7f8c82622a26ab0 install-template-shebang.patch
c2ccab15d48c11cc3af549a3944ca0d29cb3790345468f4f3779e5ac931554dea603e5523281fc391ba4a555ee468b516961c4cb8ecee007eadacf114f3d8758 bootstrap-tool-respect-tool-config.patch
df8caff62724e4d4ced52a72f919c3b41f272b5e547dac5aaccbc70f0cae2edf0002c755275e228944effac82fece63274e8fc717dca171b525fd51865151c75 ensure-stage0-libs-have-unique-metadata.patch
332a6af59edc507baa73eda1de60591dd4202f540541769ac1bcbc731267f4523ea309d2c3b1f5a9dc3db32831942a5d3d40b81882dad0bf0b5ee7f74f1d6477 cargo-tests-fix-build-auth-http_auth_offered.patch
3d6f027088e1ec189ce864bf5ed150ccad8be5d9fc0973f1b4d202eec6eab865834403335a9f0765bbfa54638aed7f5d5f2183ba9dfeab9f5bc4ef48111a8427 cargo-tests-ignore-resolving_minimum_version_with_transitive_deps.patch
f7c09940a013f210c54e57770bbfbe7fa7a5670df6b8101c5058b0d94c1e297c2dbe358acf48ac3d4a36b15623643461d83b4b43c446144113318a4212623701 cargo-tests-fix-build-target.patch
c31fdfe8a9b3411576c75da46645cf0465b9053000a2ab49cf9b2f2733f679d6d33acbf236d67a20e14935d094a685453b7f1840180249f39d610fd0902c3125 check-rustc"