# $Id$ PNAME="rust" PVER="1.28.0" PBUILD="r1" PCAT="dev-lang" DESCRIPTION="Systems programming language focused on safety, speed and concurrency." HOMEPAGE="https://www.rust-lang.org/" # enable bootstrap of rust with prebuild binary rust # 0=no, 1=yes BOOTSTRAP=1 DEPEND=">= sys-libs/llvm-libs-6.0" SDEPEND=">= sys-dev/llvm-6.0 >= dev-lang/perl-5.26 >= dev-lang/python-2.7 >= dev-libs/libffi-3.2 >= dev-libs/jemalloc-5.1 >= net-misc/curl-7 >= dev-util/cmake-3.12 >= net-misc/curl-dev-7 >= app-arch/xz-utils-5 >= dev-libs/libffi-dev-3.2 >= dev-libs/jemalloc-dev-5.1" if [[ ${BOOTSTRAP} = 0 ]] then SDEPEND+=" >= dev-lang/rust-1.27" fi SRCFILE="${PNAME}c-${PVER}-src.tar.gz" SRCDIR="${BUILDDIR}/${PNAME}c-${PVER}-src" msetfeature "!check" sminclude mbuild mtools SRC_URI=( https://static.rust-lang.org/dist/${SRCFILE} mirror://${PNAME}/${SRCFILE} ) UP2DATE="updatecmd https://www.rust-lang.org/en-US/other-installers.html | grep 'rustc-.*-src.*' | sed 's:-src::g' | highesttarball gz" if [[ ${BOOTSTRAP} = 1 ]] then # see src/stage0.txt RUSTBIN_PVER="1.27.2" RUSTBIN_DATE="2018-07-20" RUSTBIN_SRCFILE_x86_64="rustc-${RUSTBIN_PVER}-x86_64-unknown-linux-gnu.tar.gz" RUSTBIN_SRCFILE_x86="rustc-${RUSTBIN_PVER}-i686-unknown-linux-gnu.tar.gz" RUSTBIN_SRCFILE="$(marchsrcfile RUSTBIN_SRCFILE)" RUSTSTD_SRCFILE_x86_64="rust-std-${RUSTBIN_PVER}-x86_64-unknown-linux-gnu.tar.gz" RUSTSTD_SRCFILE_x86="rust-std-${RUSTBIN_PVER}-i686-unknown-linux-gnu.tar.gz" RUSTSTD_SRCFILE="$(marchsrcfile RUSTSTD_SRCFILE)" CARGOBIN_PVER="0.28.0" CARGOBIN_SRCFILE_x86_64="cargo-${CARGOBIN_PVER}-x86_64-unknown-linux-gnu.tar.gz" CARGOBIN_SRCFILE_x86="cargo-${CARGOBIN_PVER}-i686-unknown-linux-gnu.tar.gz" CARGOBIN_SRCFILE="$(marchsrcfile CARGOBIN_SRCFILE)" SRC_URI+=( https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTBIN_SRCFILE_x86_64} https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTBIN_SRCFILE_x86} https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTSTD_SRCFILE_x86_64} https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTSTD_SRCFILE_x86} https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${CARGOBIN_SRCFILE_x86_64} https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${CARGOBIN_SRCFILE_x86} ) fi src_prepare() { munpack ${SRCFILE} || die if [[ ${BOOTSTRAP} = 1 ]] then install -d ${SRCDIR}/build/cache/${RUSTBIN_DATE} || die ln -snf ${SOURCEDIR}/${PNAME}/${RUSTBIN_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die ln -snf ${SOURCEDIR}/${PNAME}/${RUSTSTD_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die ln -snf ${SOURCEDIR}/${PNAME}/${CARGOBIN_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die fi } src_compile() { cd ${SRCDIR} local myconf # enforce rust-bin chost local myARCH="${ARCH}" [[ ${ARCH} = i*86 ]] && myARCH=i686 myconf+=" --host=${myARCH}-unknown-linux-gnu --build=${myARCH}-unknown-linux-gnu" if [[ ${BOOTSTRAP} = 0 ]] then myconf+=" --enable-local-rust" fi # configure nor working after rewrite, duplicate options are not accepted anymore # not working atm due bug: # --infodir=/usr/share/info # --localstatedir=/var/lib # --datadir=/usr/share ./configure \ --prefix=/usr \ --mandir=/usr/share/man \ --sysconfdir=/etc \ --libdir=/usr/$(mlibdir) \ --release-channel=stable \ --llvm-root=/usr \ --enable-llvm-link-shared \ --jemalloc-root=/usr/$(mlibdir) \ --disable-codegen-tests \ ${myconf} \ || die # missing llvm link deps export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi" python2 ./x.py build --verbose || die } src_install() { cd ${SRCDIR} mmake DESTDIR=${BINDIR} install || die # remove unnecessary files mdelete /usr/$(mlibdir)/rustlib/components || die mdelete /usr/$(mlibdir)/rustlib/manifest-rustc || die mdelete /usr/$(mlibdir)/rustlib/rust-installer-version || die # overwrite duplicate solibs with symlinks to safe space local myARCH="${ARCH}" [[ ${ARCH} = i*86 ]] && myARCH=i686 local i for i in ${BINDIR}/usr/$(mlibdir)/rustlib/${myARCH}-unknown-linux-gnu/lib/* do mlink rustlib/${myARCH}-unknown-linux-gnu/lib/$(basename ${i}) /usr/$(mlibdir)/ || die done minstalldocs COPYRIGHT LICENSE-* ChangeLog README* || die }