commit:     37996d8ff1bded532518f4d9291c131c6e2a9ef1
Author:     Dirkjan Ochtman <djc <AT> gentoo <DOT> org>
AuthorDate: Tue Aug  7 08:04:49 2018 +0000
Commit:     Dirkjan Ochtman <djc <AT> gentoo <DOT> org>
CommitDate: Tue Aug  7 08:05:19 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=37996d8f

dev-lang/rust: include cargo run-time dependencies

Closes: https://bugs.gentoo.org/662932
Package-Manager: Portage-2.3.40, Repoman-2.3.9

 dev-lang/rust/rust-1.28.0-r1.ebuild | 277 ++++++++++++++++++++++++++++++++++++
 1 file changed, 277 insertions(+)

diff --git a/dev-lang/rust/rust-1.28.0-r1.ebuild 
b/dev-lang/rust/rust-1.28.0-r1.ebuild
new file mode 100644
index 00000000000..2595c9c53af
--- /dev/null
+++ b/dev-lang/rust/rust-1.28.0-r1.ebuild
@@ -0,0 +1,277 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+PYTHON_COMPAT=( python2_7 python3_{5,6} pypy )
+
+inherit multiprocessing multilib-build python-any-r1 toolchain-funcs 
versionator
+
+if [[ ${PV} = *beta* ]]; then
+       betaver=${PV//*beta}
+       BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
+       MY_P="rustc-beta"
+       SLOT="beta/${PV}"
+       SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz"
+       KEYWORDS=""
+else
+       ABI_VER="$(get_version_component_range 1-2)"
+       SLOT="stable/${ABI_VER}"
+       MY_P="rustc-${PV}"
+       SRC="${MY_P}-src.tar.xz"
+       KEYWORDS="~amd64 ~arm64 ~x86"
+fi
+
+CHOST_amd64=x86_64-unknown-linux-gnu
+CHOST_x86=i686-unknown-linux-gnu
+CHOST_arm64=aarch64-unknown-linux-gnu
+
+RUST_STAGE0_VERSION="1.$(($(get_version_component_range 2) - 1)).2"
+RUST_STAGE0_amd64="rust-${RUST_STAGE0_VERSION}-${CHOST_amd64}"
+RUST_STAGE0_x86="rust-${RUST_STAGE0_VERSION}-${CHOST_x86}"
+RUST_STAGE0_arm64="rust-${RUST_STAGE0_VERSION}-${CHOST_arm64}"
+
+CARGO_DEPEND_VERSION="0.$(($(get_version_component_range 2) + 1)).0"
+
+DESCRIPTION="Systems programming language from Mozilla"
+HOMEPAGE="https://www.rust-lang.org/";
+
+SRC_URI="https://static.rust-lang.org/dist/${SRC} -> rustc-${PV}-src.tar.xz
+       amd64? ( https://static.rust-lang.org/dist/${RUST_STAGE0_amd64}.tar.xz )
+       x86? ( https://static.rust-lang.org/dist/${RUST_STAGE0_x86}.tar.xz )
+       arm64? ( https://static.rust-lang.org/dist/${RUST_STAGE0_arm64}.tar.xz )
+"
+
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM BPF Hexagon Lanai Mips MSP430
+       NVPTX PowerPC Sparc SystemZ X86 XCore )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/?}
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
+
+IUSE="cargo debug doc +jemalloc libressl rls rustfmt wasm 
${ALL_LLVM_TARGETS[*]}"
+
+RDEPEND=">=app-eselect/eselect-rust-0.3_pre20150425
+               jemalloc? ( dev-libs/jemalloc )
+               cargo? (
+                       sys-libs/zlib
+                       !libressl? ( dev-libs/openssl:0= )
+                       libressl? ( dev-libs/libressl:0= )
+                       net-libs/libssh2
+                       net-libs/http-parser
+                       net-misc/curl[ssl]
+               )"
+DEPEND="${RDEPEND}
+       ${PYTHON_DEPS}
+       || (
+               >=sys-devel/gcc-4.7
+               >=sys-devel/clang-3.5
+       )
+       cargo? ( !dev-util/cargo )
+       rustfmt? ( !dev-util/rustfmt )
+       dev-util/cmake
+"
+PDEPEND="!cargo? ( >=dev-util/cargo-${CARGO_DEPEND_VERSION} )"
+
+REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )"
+
+S="${WORKDIR}/${MY_P}-src"
+
+toml_usex() {
+       usex "$1" true false
+}
+
+src_prepare() {
+       local rust_stage0_root="${WORKDIR}"/rust-stage0
+
+       local rust_stage0_name="RUST_STAGE0_${ARCH}"
+       local rust_stage0="${!rust_stage0_name}"
+
+       "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig 
--destdir="${rust_stage0_root}" --prefix=/ || die
+
+       default
+}
+
+src_configure() {
+       local rust_target="" rust_targets="" rust_target_name arch_cflags
+
+       # Collect rust target names to compile standard libs for all ABIs.
+       for v in $(multilib_get_enabled_abi_pairs); do
+               rust_target_name="CHOST_${v##*.}"
+               rust_targets="${rust_targets},\"${!rust_target_name}\""
+       done
+       if use wasm; then
+               rust_targets="${rust_targets},\"wasm32-unknown-unknown\""
+       fi
+       rust_targets="${rust_targets#,}"
+
+       local extended="false" tools=""
+       if use cargo; then
+               extended="true"
+               tools="\"cargo\","
+       fi
+       if use rls; then
+               extended="true"
+               tools="\"rls\",$tools"
+       fi
+       if use rustfmt; then
+               extended="true"
+               tools="\"rustfmt\",$tools"
+       fi
+
+       local rust_stage0_root="${WORKDIR}"/rust-stage0
+
+       rust_target_name="CHOST_${ARCH}"
+       rust_target="${!rust_target_name}"
+
+       cat <<- EOF > "${S}"/config.toml
+               [llvm]
+               optimize = $(toml_usex !debug)
+               release-debuginfo = $(toml_usex debug)
+               assertions = $(toml_usex debug)
+               targets = "${LLVM_TARGETS// /;}"
+               [build]
+               build = "${rust_target}"
+               host = ["${rust_target}"]
+               target = [${rust_targets}]
+               cargo = "${rust_stage0_root}/bin/cargo"
+               rustc = "${rust_stage0_root}/bin/rustc"
+               docs = $(toml_usex doc)
+               submodules = false
+               python = "${EPYTHON}"
+               locked-deps = true
+               vendor = true
+               extended = ${extended}
+               tools = [${tools}]
+               [install]
+               prefix = "${EPREFIX}/usr"
+               libdir = "$(get_libdir)"
+               docdir = "share/doc/${P}"
+               mandir = "share/${P}/man"
+               [rust]
+               optimize = $(toml_usex !debug)
+               debuginfo = $(toml_usex debug)
+               debug-assertions = $(toml_usex debug)
+               use-jemalloc = $(toml_usex jemalloc)
+               default-linker = "$(tc-getCC)"
+               rpath = false
+               lld = $(toml_usex wasm)
+       EOF
+
+       for v in $(multilib_get_enabled_abi_pairs); do
+               rust_target=$(get_abi_CHOST ${v##*.})
+               arch_cflags="$(get_abi_CFLAGS ${v##*.})"
+
+               cat <<- EOF >> "${S}"/config.env
+                       CFLAGS_${rust_target}=${arch_cflags}
+               EOF
+
+               cat <<- EOF >> "${S}"/config.toml
+                       [target.${rust_target}]
+                       cc = "$(tc-getBUILD_CC)"
+                       cxx = "$(tc-getBUILD_CXX)"
+                       linker = "$(tc-getCC)"
+                       ar = "$(tc-getAR)"
+               EOF
+       done
+
+       if use wasm; then
+               cat <<- EOF >> "${S}"/config.toml
+                       [target.wasm32-unknown-unknown]
+                       linker = "lld"
+               EOF
+       fi
+}
+
+src_compile() {
+       env $(cat "${S}"/config.env)\
+               ./x.py build --config="${S}"/config.toml -j$(makeopts_jobs) \
+               --exclude src/tools/miri || die # 
https://github.com/rust-lang/rust/issues/52305
+}
+
+src_install() {
+       local rust_target abi_libdir
+
+       env DESTDIR="${D}" ./x.py install || die
+
+       mv "${D}/usr/bin/rustc" "${D}/usr/bin/rustc-${PV}" || die
+       mv "${D}/usr/bin/rustdoc" "${D}/usr/bin/rustdoc-${PV}" || die
+       mv "${D}/usr/bin/rust-gdb" "${D}/usr/bin/rust-gdb-${PV}" || die
+       mv "${D}/usr/bin/rust-lldb" "${D}/usr/bin/rust-lldb-${PV}" || die
+       if use cargo; then
+               mv "${D}/usr/bin/cargo" "${D}/usr/bin/cargo-${PV}" || die
+       fi
+       if use rls; then
+               mv "${D}/usr/bin/rls" "${D}/usr/bin/rls-${PV}" || die
+       fi
+       if use rustfmt; then
+               mv "${D}/usr/bin/rustfmt" "${D}/usr/bin/rustfmt-${PV}" || die
+               mv "${D}/usr/bin/cargo-fmt" "${D}/usr/bin/cargo-fmt-${PV}" || 
die
+       fi
+
+       # Copy shared library versions of standard libraries for all targets
+       # into the system's abi-dependent lib directories because the rust
+       # installer only does so for the native ABI.
+       for v in $(multilib_get_enabled_abi_pairs); do
+               if [ ${v##*.} = ${DEFAULT_ABI} ]; then
+                       continue
+               fi
+               abi_libdir=$(get_abi_LIBDIR ${v##*.})
+               rust_target=$(get_abi_CHOST ${v##*.})
+               mkdir -p "${D}/usr/${abi_libdir}"
+               cp "${D}/usr/$(get_libdir)/rustlib/${rust_target}/lib"/*.so \
+                  "${D}/usr/${abi_libdir}" || die
+       done
+
+       dodoc COPYRIGHT
+
+       # FIXME:
+       # Really not sure if that env is needed, specailly LDPATH
+       cat <<-EOF > "${T}"/50${P}
+               LDPATH="/usr/$(get_libdir)/${P}"
+               MANPATH="/usr/share/${P}/man"
+       EOF
+       doenvd "${T}"/50${P}
+
+       cat <<-EOF > "${T}/provider-${P}"
+               /usr/bin/rustdoc
+               /usr/bin/rust-gdb
+               /usr/bin/rust-lldb
+       EOF
+       if use cargo; then
+           echo /usr/bin/cargo >> "${T}/provider-${P}"
+       fi
+       if use rls; then
+           echo /usr/bin/rls >> "${T}/provider-${P}"
+       fi
+       if use rustfmt; then
+           echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+           echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+       fi
+       dodir /etc/env.d/rust
+       insinto /etc/env.d/rust
+       doins "${T}/provider-${P}"
+}
+
+pkg_postinst() {
+       eselect rust update --if-unset
+
+       elog "Rust installs a helper script for calling GDB and LLDB,"
+       elog "for your convenience it is installed under 
/usr/bin/rust-{gdb,lldb}-${PV}."
+
+       if has_version app-editors/emacs || has_version app-editors/emacs-vcs; 
then
+               elog "install app-emacs/rust-mode to get emacs support for 
rust."
+       fi
+
+       if has_version app-editors/gvim || has_version app-editors/vim; then
+               elog "install app-vim/rust-vim to get vim support for rust."
+       fi
+
+       if has_version 'app-shells/zsh'; then
+               elog "install app-shells/rust-zshcomp to get zsh completion for 
rust."
+       fi
+}
+
+pkg_postrm() {
+       eselect rust unset --if-invalid
+}

Reply via email to