Index: lang/rust/Makefile =================================================================== --- lang/rust/Makefile +++ lang/rust/Makefile @@ -3,6 +3,7 @@ PORTNAME= rust PORTVERSION= 1.0.0 +PORTREVISION= 1 CATEGORIES= lang MASTER_SITES= http://static.rust-lang.org/dist/:src \ http://static.rust-lang.org/stage0-snapshots/:bootstrap @@ -23,17 +24,24 @@ ONLY_FOR_ARCHS= amd64 ONLY_FOR_ARCHS_REASON= requires prebuilt bootstrap compiler +# FIXME: The bootstrapped rustc adds -L/usr/local/lib in front of +# the LDFLAGS. When stage0's rustc is linked, it picks the installed +# librust*so and fails. +CONFLICTS_BUILD=rust + RUST_SOURCE= ${DISTNAME}-src${EXTRACT_SUFX} RUST_BOOT= rust-stage0-${RUST_BOOT_SIG}.tar.bz2 RUST_BOOT_SIG= 2015-03-27-5520801-freebsd-x86_64-0910bbad35e213f679d0433884fd51398eb3bc8d -USES= gmake perl5 python:2 +USES= gmake python:2,build HAS_CONFIGURE= yes CONFIGURE_ARGS= --disable-valgrind --disable-docs \ --enable-clang --mandir=${MANPREFIX}/man -USE_LDCONFIG= yes -USE_PERL5= build -MAKE_ARGS= ARCH=x86_64 + +# Use LLVM from ports, instead of the copy shipped with rust. +LLVM_VER= 36 +BUILD_DEPENDS+= llvm${LLVM_VER}>=0:${PORTSDIR}/devel/llvm${LLVM_VER} +CONFIGURE_ARGS+=--llvm-root=${LOCALBASE}/llvm${LLVM_VER} .if defined(BATCH) || defined(PACKAGE_BUILDING) MAKE_ARGS+= VERBOSE=1 @@ -57,14 +65,33 @@ post-extract: @${MKDIR} ${WRKSRC}/dl ${LN} -sf ${DISTDIR}/${RUST_BOOT} ${WRKSRC}/dl + (cd ${WRKSRC} && find . -type d -exec chmod 0755 {} \;) + +# In case the previous "make stage" failed, this ensures rust's +# install.sh won't backup previously staged files before reinstalling +# new ones. Otheriwe, the staging directory is polluted with unneeded +# files. +pre-install: + @if test -f ${STAGEDIR}${PREFIX}/lib/rustlib/manifest-rustc; then \ + ${SED} -E -e 's,^(dir|file:),${STAGEDIR},' \ + < ${STAGEDIR}${PREFIX}/lib/rustlib/manifest-rustc \ + | ${XARGS} ${RM}; \ + fi + @${RM} \ + ${STAGEDIR}${PREFIX}/lib/rustlib/components \ + ${STAGEDIR}${PREFIX}/lib/rustlib/manifest-rustc \ + ${STAGEDIR}${PREFIX}/lib/rustlib/rust-installer-version \ + ${STAGEDIR}${PREFIX}/lib/rustlib/uninstall.sh post-install: - @${RM} ${STAGEDIR}${PREFIX}/lib/rustlib/manifest-rustc @${RM} ${STAGEDIR}${PREFIX}/lib/rustlib/install.log - @${RM} ${STAGEDIR}${PREFIX}/lib/rustlib/uninstall.sh - @${STRIP_CMD} `${GREP} -v -e '^@dir' -e '^man' -e 'rlib$$' \ - -e '^.*\.a$$' -e '^.*\.py$$' -e '^%' -e '^.*/rust-gdb$$' \ - -e '^.*rustlib/components$$' -e '^.*/rust-installer-version$$' \ - ${PLIST} | ${SED} 's:^:${STAGEDIR}${PREFIX}/:'` + @${REINPLACE_CMD} -e 's|${STAGEDIR}||' \ + ${STAGEDIR}${PREFIX}/lib/rustlib/manifest-rustc + @${RM} ${STAGEDIR}${PREFIX}/lib/rustlib/manifest-rustc.bak + @${STRIP_CMD} \ + ${STAGEDIR}${PREFIX}/bin/rustc \ + ${STAGEDIR}${PREFIX}/bin/rustdoc \ + ${STAGEDIR}${PREFIX}/lib/*.so \ + ${STAGEDIR}${PREFIX}/lib/rustlib/*/lib/*.so .include Index: lang/rust/files/patch-src_librustc__back_target_freebsd__base.rs =================================================================== --- /dev/null +++ lang/rust/files/patch-src_librustc__back_target_freebsd__base.rs @@ -0,0 +1,12 @@ +--- src/librustc_back/target/freebsd_base.rs.orig 2015-05-07 14:37:17 UTC ++++ src/librustc_back/target/freebsd_base.rs +@@ -19,9 +19,6 @@ pub fn opts() -> TargetOptions { + morestack: true, + has_rpath: true, + pre_link_args: vec!( +- "-L/usr/local/lib".to_string(), +- "-L/usr/local/lib/gcc46".to_string(), +- "-L/usr/local/lib/gcc44".to_string(), + ), + + .. Default::default() Index: lang/rust/pkg-plist =================================================================== --- lang/rust/pkg-plist +++ lang/rust/pkg-plist @@ -27,7 +27,9 @@ lib/rustlib/components lib/rustlib/etc/gdb_load_rust_pretty_printers.py lib/rustlib/etc/gdb_rust_pretty_printing.py +lib/rustlib/manifest-rustc lib/rustlib/rust-installer-version +lib/rustlib/uninstall.sh lib/rustlib/x86_64-unknown-freebsd/lib/liballoc-4e7c5e5c.rlib lib/rustlib/x86_64-unknown-freebsd/lib/libarena-4e7c5e5c.rlib lib/rustlib/x86_64-unknown-freebsd/lib/libarena-4e7c5e5c.so