--- smage/trunk/extras/rust/rust-1.28.0-r1.smage2 2018/09/12 12:23:08 12431 +++ smage/trunk/extras/rust/rust-1.28.0-r1.smage2 2018/09/13 13:25:13 12432 @@ -4,6 +4,7 @@ PVER="1.28.0" PBUILD="r1" +SPLIT_PACKAGES="rust cargo rustfmt rust-rls" PCAT="dev-lang" DESCRIPTION="Systems programming language focused on safety, speed and concurrency." @@ -13,24 +14,60 @@ # 0=no, 1=yes BOOTSTRAP=1 -DEPEND=">= sys-libs/llvm-libs-6.0" +# provided rust pver +RUST_PVER="${PVER}" +# provided pver of cargo, see src/tools/cargo/Cargo.toml +CARGO_PVER="0.29.0" +# provided pver of rls, see src/tools/rustfmt/Cargo.toml +RUSTFMT_PVER="0.8.2" +# provided pver of rls, see src/tools/rls/Cargo.toml +RLS_PVER="0.128.0" + +# required pver of llvm and gcc +GCC_PVER="8.2.0" +LLVM_PVER="6.0.1" + +COMMON_DEPEND=">= net-misc/curl-7 + >= dev-libs/openssl-1.1 + >= sys-libs/zlib-1.2 + >= net-libs/libssh2-1.8" + +RUST_DEPEND=">= sys-libs/llvm-libs-${LLVM_PVER} + >= sys-libs/libstdc++-${GCC_PVER}" + +CARGO_DEPEND="${COMMON_DEPEND}" -SDEPEND=">= sys-dev/llvm-6.0 +RUSTFMT_DEPEND=">= virtual/glibc + >= sys-libs/libgcc-${GCC_PVER}" + +RUSTRLS_DEPEND="${COMMON_DEPEND}" + +SDEPEND=">= sys-dev/llvm-${LLVM_PVER} + >= sys-dev/clang-${LLVM_PVER} >= 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 + >= dev-util/ninja-1.8 + ${RUST_DEPEND} + ${CARGO_DEPEND} + ${RUSTFMT_DEPEND} + ${RUSTRLS_DEPEND} >= net-misc/curl-dev-7 >= app-arch/xz-utils-dev-5 >= dev-libs/libffi-dev-3.2 - >= dev-libs/jemalloc-dev-5.1" + >= dev-libs/jemalloc-dev-5.1 + >= dev-libs/openssl-dev-1.1 + >= net-libs/libssh2-dev-1.8 + >= sys-libs/zlib-dev-1.2" if [[ ${BOOTSTRAP} = 0 ]] then + # see src/stage0.txt SDEPEND+=" - >= dev-lang/rust-1.27" + >= dev-lang/rust-1.27 + >= dev-lang/cargo-0.28" fi SRCFILE="${PNAME}c-${PVER}-src.tar.gz" @@ -72,6 +109,40 @@ ) fi +split_info_rust() +{ + DESCRIPTION="Systems programming language focused on safety, speed and concurrency." + DEPEND="${RUST_DEPEND}" +} + +split_info_cargo() +{ + DESCRIPTION="Rust's package manager and build tool." + DEPEND="== dev-lang/rust-${RUST_PVER} + ${CARGO_DEPEND}" + PCAT="dev-util" + PVER="${CARGO_PVER}" +} + +split_info_rustfmt() +{ + DESCRIPTION="Tool to find and fix Rust formatting issues." + DEPEND="== dev-lang/rust-${RUST_PVER} + == dev-util/cargo-${CARGO_PVER} + ${RUSTFMT_DEPEND}" + PCAT="dev-util" + PVER="${RUSTFMT_PVER}" +} + +split_info_rust-rls() +{ + DESCRIPTION="Rust Language Server for IDE integration." + DEPEND="== dev-lang/rust-${RUST_PVER} + ${RUSTRLS_DEPEND}" + PCAT="dev-util" + PVER="${RLS_PVER}" +} + src_prepare() { munpack ${SRCFILE} || die @@ -89,45 +160,64 @@ { 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" + local myARCH + local myRUSTHOST + myARCH="${ARCH}" + [[ ${ARCH} = i*86 ]] && myARCH="i686" + myRUSTCHOST="${myARCH}-unknown-linux-gnu" + + # create a custom build config + cat <<- EOF > ${SRCDIR}/config.toml + [llvm] + # enable ninja + ninja = true + # prefer shared libraries + link-shared = true + [build] + EOF if [[ ${BOOTSTRAP} = 0 ]] then - myconf+=" --enable-local-rust" + # use local rust if no bootstrap was requested + cat <<- EOF >> ${SRCDIR}/config.toml + cargo = "/usr/bin/cargo" + rustc = "/usr/bin/rustc" + EOF fi - - # configure not 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 + cat <<- EOF >> ${SRCDIR}/config.toml + submodules = false + python = "python2" + # build cargo too + extended = true + + [install] + prefix = "/usr" + libdir = "$(mlibdir)" + docdir = "share/doc/${PNAME}-${PVER}" + mandir = "share/man" + + [rust] + channel = "stable" + rpath = false + # disable codegen tests + codegen-tests = false + use-jemalloc = true + # Work around https://github.com/rust-lang/rust/issues/51650 + deny-warnings = false + + [target.${myRUSTCHOST}] + llvm-config = "/usr/bin/llvm-config" + EOF ## missing llvm link deps - #export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi" + export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi" python2 ./x.py build --verbose || die } -src_install() +src_install_rust() { cd ${SRCDIR} - mmake DESTDIR=${BINDIR} install || die + DESTDIR=${BINDIR} python2 ./x.py install || die # remove unnecessary files mdelete /usr/$(mlibdir)/rustlib/components || die @@ -135,13 +225,54 @@ 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 myARCH + local myRUSTHOST + myARCH="${ARCH}" + [[ ${ARCH} = i*86 ]] && myARCH="i686" + myRUSTCHOST="${myARCH}-unknown-linux-gnu" local i - for i in ${BINDIR}/usr/$(mlibdir)/rustlib/${myARCH}-unknown-linux-gnu/lib/* + for i in ${BINDIR}/usr/$(mlibdir)/rustlib/${myRUSTCHOST}/lib/*.so do - mlink rustlib/${myARCH}-unknown-linux-gnu/lib/$(basename ${i}) /usr/$(mlibdir)/ || die + mlink rustlib/${myRUSTCHOST}/lib/$(basename ${i}) /usr/$(mlibdir)/ || die done + # move split packages out of the way + install -d ${SRCDIR}/rust-split-packages/rls/usr/bin || die + install -d ${SRCDIR}/rust-split-packages/fmt/usr/bin || die + install -d ${SRCDIR}/rust-split-packages/cargo/usr/bin || die + install -d ${SRCDIR}/rust-split-packages/cargo/usr/share/man/man1 || die + install -d ${SRCDIR}/rust-split-packages/cargo/usr/share/doc/${PNAME}-${PVER}/html || die + mv ${BINDIR}/usr/bin/rls ${SRCDIR}/rust-split-packages/rls/usr/bin/ || die + mv ${BINDIR}/usr/bin/cargo-fmt ${SRCDIR}/rust-split-packages/fmt/usr/bin/ || die + mv ${BINDIR}/usr/bin/rustfmt ${SRCDIR}/rust-split-packages/fmt/usr/bin/ || die + mv ${BINDIR}/usr/bin/cargo ${SRCDIR}/rust-split-packages/cargo/usr/bin/ || die + mv ${BINDIR}/etc ${SRCDIR}/rust-split-packages/cargo/ || die + mv ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/html/cargo ${SRCDIR}/rust-split-packages/cargo/usr/share/doc/${PNAME}-${PVER}/html/ || die + mv ${BINDIR}/usr/share/man/man1/cargo*.1 ${SRCDIR}/rust-split-packages/cargo/usr/share/man/man1/ || die + minstalldocs COPYRIGHT LICENSE-* ChangeLog README* || die } + +src_install_cargo() +{ + install -d ${BINDIR} || die + mv ${SRCDIR}/rust-split-packages/cargo/* ${BINDIR}/ || die + local docsubdir="src/tools/cargo" + minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die +} + +src_install_rustfmt() +{ + install -d ${BINDIR} || die + mv ${SRCDIR}/rust-split-packages/fmt/* ${BINDIR}/ || die + local docsubdir="src/tools/rustfmt" + minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die +} + +src_install_rust-rls() +{ + install -d ${BINDIR} || die + mv ${SRCDIR}/rust-split-packages/rls/* ${BINDIR}/ || die + local docsubdir="src/tools/rls" + minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die +}