df855acf79
Version 1.16.0 (2017-03-16) =========================== Language -------- * Lifetimes in statics and consts default to `'static`. [RFC 1623] * [The compiler's `dead_code` lint now accounts for type aliases][38051]. * [Uninhabitable enums (those without any variants) no longer permit wildcard match patterns][38069] * [Clean up semantics of `self` in an import list][38313] * [`Self` may appear in `impl` headers][38920] * [`Self` may appear in struct expressions][39282] Compiler -------- * [`rustc` now supports `--emit=metadata`, which causes rustc to emit a `.rmeta` file containing only crate metadata][38571]. This can be used by tools like the Rust Language Service to perform metadata-only builds. * [Levenshtein based typo suggestions now work in most places, while previously they worked only for fields and sometimes for local variables][38927]. Together with the overhaul of "no resolution"/"unexpected resolution" errors (#[38154]) they result in large and systematic improvement in resolution diagnostics. * [Fix `transmute::<T, U>` where `T` requires a bigger alignment than `U`][38670] * [rustc: use -Xlinker when specifying an rpath with ',' in it][38798] * [`rustc` no longer attempts to provide "consider using an explicit lifetime" suggestions][37057]. They were inaccurate. Stabilized APIs --------------- * [`VecDeque::truncate`] * [`VecDeque::resize`] * [`String::insert_str`] * [`Duration::checked_add`] * [`Duration::checked_sub`] * [`Duration::checked_div`] * [`Duration::checked_mul`] * [`str::replacen`] * [`str::repeat`] * [`SocketAddr::is_ipv4`] * [`SocketAddr::is_ipv6`] * [`IpAddr::is_ipv4`] * [`IpAddr::is_ipv6`] * [`Vec::dedup_by`] * [`Vec::dedup_by_key`] * [`Result::unwrap_or_default`] * [`<*const T>::wrapping_offset`] * [`<*mut T>::wrapping_offset`] * `CommandExt::creation_flags` * [`File::set_permissions`] * [`String::split_off`] Libraries --------- * [`[T]::binary_search` and `[T]::binary_search_by_key` now take their argument by `Borrow` parameter][37761] * [All public types in std implement `Debug`][38006] * [`IpAddr` implements `From<Ipv4Addr>` and `From<Ipv6Addr>`][38327] * [`Ipv6Addr` implements `From<[u16; 8]>`][38131] * [Ctrl-Z returns from `Stdin.read()` when reading from the console on Windows][38274] * [std: Fix partial writes in `LineWriter`][38062] * [std: Clamp max read/write sizes on Unix][38062] * [Use more specific panic message for `&str` slicing errors][38066] * [`TcpListener::set_only_v6` is deprecated][38304]. This functionality cannot be achieved in std currently. * [`writeln!`, like `println!`, now accepts a form with no string or formatting arguments, to just print a newline][38469] * [Implement `iter::Sum` and `iter::Product` for `Result`][38580] * [Reduce the size of static data in `std_unicode::tables`][38781] * [`char::EscapeDebug`, `EscapeDefault`, `EscapeUnicode`, `CaseMappingIter`, `ToLowercase`, `ToUppercase`, implement `Display`][38909] * [`Duration` implements `Sum`][38712] * [`String` implements `ToSocketAddrs`][39048] Cargo ----- * [The `cargo check` command does a type check of a project without building it][cargo/3296] * [crates.io will display CI badges from Travis and AppVeyor, if specified in Cargo.toml][cargo/3546] * [crates.io will display categories listed in Cargo.toml][cargo/3301] * [Compilation profiles accept integer values for `debug`, in addition to `true` and `false`. These are passed to `rustc` as the value to `-C debuginfo`][cargo/3534] * [Implement `cargo --version --verbose`][cargo/3604] * [All builds now output 'dep-info' build dependencies compatible with make and ninja][cargo/3557] * [Build all workspace members with `build --all`][cargo/3511] * [Document all workspace members with `doc --all`][cargo/3515] * [Path deps outside workspace are not members][cargo/3443] Misc ---- * [`rustdoc` has a `--sysroot` argument that, like `rustc`, specifies the path to the Rust implementation][38589] * [The `armv7-linux-androideabi` target no longer enables NEON extensions, per Google's ABI guide][38413] * [The stock standard library can be compiled for Redox OS][38401] * [Rust has initial SPARC support][38726]. Tier 3. No builds available. * [Rust has experimental support for Nvidia PTX][38559]. Tier 3. No builds available. * [Fix backtraces on i686-pc-windows-gnu by disabling FPO][39379] Compatibility Notes ------------------- * [Uninhabitable enums (those without any variants) no longer permit wildcard match patterns][38069] * In this release, references to uninhabited types can not be pattern-matched. This was accidentally allowed in 1.15. * [The compiler's `dead_code` lint now accounts for type aliases][38051]. * [Ctrl-Z returns from `Stdin.read()` when reading from the console on Windows][38274] * [Clean up semantics of `self` in an import list][38313] [37057]: https://github.com/rust-lang/rust/pull/37057 [37761]: https://github.com/rust-lang/rust/pull/37761 [38006]: https://github.com/rust-lang/rust/pull/38006 [38051]: https://github.com/rust-lang/rust/pull/38051 [38062]: https://github.com/rust-lang/rust/pull/38062 [38062]: https://github.com/rust-lang/rust/pull/38622 [38066]: https://github.com/rust-lang/rust/pull/38066 [38069]: https://github.com/rust-lang/rust/pull/38069 [38131]: https://github.com/rust-lang/rust/pull/38131 [38154]: https://github.com/rust-lang/rust/pull/38154 [38274]: https://github.com/rust-lang/rust/pull/38274 [38304]: https://github.com/rust-lang/rust/pull/38304 [38313]: https://github.com/rust-lang/rust/pull/38313 [38314]: https://github.com/rust-lang/rust/pull/38314 [38327]: https://github.com/rust-lang/rust/pull/38327 [38401]: https://github.com/rust-lang/rust/pull/38401 [38413]: https://github.com/rust-lang/rust/pull/38413 [38469]: https://github.com/rust-lang/rust/pull/38469 [38559]: https://github.com/rust-lang/rust/pull/38559 [38571]: https://github.com/rust-lang/rust/pull/38571 [38580]: https://github.com/rust-lang/rust/pull/38580 [38589]: https://github.com/rust-lang/rust/pull/38589 [38670]: https://github.com/rust-lang/rust/pull/38670 [38712]: https://github.com/rust-lang/rust/pull/38712 [38726]: https://github.com/rust-lang/rust/pull/38726 [38781]: https://github.com/rust-lang/rust/pull/38781 [38798]: https://github.com/rust-lang/rust/pull/38798 [38909]: https://github.com/rust-lang/rust/pull/38909 [38920]: https://github.com/rust-lang/rust/pull/38920 [38927]: https://github.com/rust-lang/rust/pull/38927 [39048]: https://github.com/rust-lang/rust/pull/39048 [39282]: https://github.com/rust-lang/rust/pull/39282 [39379]: https://github.com/rust-lang/rust/pull/39379 [`<*const T>::wrapping_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset [`<*mut T>::wrapping_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset [`Duration::checked_add`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_add [`Duration::checked_div`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_div [`Duration::checked_mul`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_mul [`Duration::checked_sub`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_sub [`File::set_permissions`]: https://doc.rust-lang.org/std/fs/struct.File.html#method.set_permissions [`IpAddr::is_ipv4`]: https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_ipv4 [`IpAddr::is_ipv6`]: https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_ipv6 [`Result::unwrap_or_default`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap_or_default [`SocketAddr::is_ipv4`]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv4 [`SocketAddr::is_ipv6`]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv6 [`String::insert_str`]: https://doc.rust-lang.org/std/string/struct.String.html#method.insert_str [`String::split_off`]: https://doc.rust-lang.org/std/string/struct.String.html#method.split_off [`Vec::dedup_by_key`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by_key [`Vec::dedup_by`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by [`VecDeque::resize`]: https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.resize [`VecDeque::truncate`]: https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.truncate [`str::repeat`]: https://doc.rust-lang.org/std/primitive.str.html#method.repeat [`str::replacen`]: https://doc.rust-lang.org/std/primitive.str.html#method.replacen [cargo/3296]: https://github.com/rust-lang/cargo/pull/3296 [cargo/3301]: https://github.com/rust-lang/cargo/pull/3301 [cargo/3443]: https://github.com/rust-lang/cargo/pull/3443 [cargo/3511]: https://github.com/rust-lang/cargo/pull/3511 [cargo/3515]: https://github.com/rust-lang/cargo/pull/3515 [cargo/3534]: https://github.com/rust-lang/cargo/pull/3534 [cargo/3546]: https://github.com/rust-lang/cargo/pull/3546 [cargo/3557]: https://github.com/rust-lang/cargo/pull/3557 [cargo/3604]: https://github.com/rust-lang/cargo/pull/3604 [RFC 1623]: https://github.com/rust-lang/rfcs/blob/master/text/1623-static.md
214 lines
6.8 KiB
Makefile
214 lines
6.8 KiB
Makefile
# $NetBSD: Makefile,v 1.7 2017/03/20 11:36:35 jperkin Exp $
|
|
|
|
DISTNAME= rustc-1.16.0-src
|
|
PKGNAME= ${DISTNAME:S/rustc/rust/:S/-src//}
|
|
CATEGORIES= lang
|
|
MASTER_SITES= http://static.rust-lang.org/dist/
|
|
|
|
MAINTAINER= pkgsrc-users@NetBSD.org
|
|
HOMEPAGE= http://www.rust-lang.org/
|
|
COMMENT= Safe, concurrent, practical language
|
|
LICENSE= mit OR apache-2.0
|
|
|
|
USE_GCC_RUNTIME= yes
|
|
USE_LANGUAGES= c c++
|
|
USE_TOOLS+= bash gmake
|
|
|
|
HAS_CONFIGURE= yes
|
|
CONFIGURE_ARGS+= --prefix=${PREFIX}
|
|
CONFIGURE_ARGS+= --build=${RUST_ARCH}
|
|
CONFIGURE_ARGS+= --mandir=${PREFIX}/${PKGMANDIR}
|
|
CONFIGURE_ARGS+= --release-channel=stable
|
|
CONFIGURE_ENV+= CFG_DISABLE_CODEGEN_TESTS=1
|
|
|
|
#
|
|
# Use the Makefile-based build system. Unfortunately this will be going away,
|
|
# likely in the next release, forcing us to use a cargo-based system which will
|
|
# require further binary bootstraps. Hold out as long as we can.
|
|
#
|
|
CONFIGURE_ARGS+= --disable-rustbuild
|
|
|
|
UNLIMIT_RESOURCES+= cputime
|
|
|
|
REPLACE_BASH+= src/rust-installer/gen-install-script.sh
|
|
REPLACE_BASH+= src/rust-installer/gen-installer.sh
|
|
|
|
#
|
|
# Lots of per-platform specific documentation, e.g. for each system call,
|
|
# making it difficult to PLIST. If it ends up being important we'll just have
|
|
# to go with lots of PLIST.${OPSYS}
|
|
#
|
|
CONFIGURE_ARGS+= --disable-docs
|
|
|
|
TEST_TARGET= check
|
|
|
|
# Required for LLVM (-std=c++11)
|
|
GCC_REQD+= 4.8
|
|
|
|
.include "../../mk/bsd.prefs.mk"
|
|
|
|
#
|
|
# Use jemalloc on systems where rust does by default too.
|
|
#
|
|
PLIST_VARS+= jemalloc
|
|
.if ${OPSYS} == "Linux" || ${OPSYS} == "Darwin"
|
|
. include "../../devel/jemalloc/buildlink3.mk"
|
|
CONFIGURE_ARGS+= --jemalloc-root=${BUILDLINK_PREFIX.jemalloc}/lib
|
|
PLIST.jemalloc= yes
|
|
.else
|
|
CONFIGURE_ARGS+= --disable-jemalloc
|
|
.endif
|
|
|
|
#
|
|
# Under NetBSD, do not use DT_RUNPATH
|
|
#
|
|
BUILDLINK_TRANSFORM.NetBSD+= rm:-Wl,--enable-new-dtags
|
|
|
|
#
|
|
# Can't use pkgsrc llvm on SunOS at the moment due to a relocation error.
|
|
#
|
|
.if ${OPSYS} != "SunOS"
|
|
. include "../../lang/llvm/buildlink3.mk"
|
|
CONFIGURE_ARGS+= --llvm-root=${BUILDLINK_PREFIX.llvm}
|
|
.endif
|
|
|
|
#
|
|
# Rust unfortunately requires itself to build. On platforms which aren't
|
|
# supported by upstream (where they offer binary bootstraps), or where we do
|
|
# not trust random binaries from the Internet, we need to build and provide our
|
|
# own bootstrap. See the stage0-bootstrap below for more details.
|
|
#
|
|
CONFIGURE_ARGS+= --enable-local-rust
|
|
CONFIGURE_ARGS+= --local-rust-root=${WRKDIR}/rust-${RUST_STAGE0_VER}-${RUST_ARCH}/rustc
|
|
#
|
|
DISTFILES:= ${DEFAULT_DISTFILES}
|
|
RUST_STAGE0_VER= 1.15.1
|
|
#
|
|
.if !empty(MACHINE_PLATFORM:MDarwin-*-i386) || make(distinfo) || make (makesum) || make(mdi)
|
|
RUST_ARCH:= i686-apple-darwin
|
|
RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
|
|
DISTFILES:= ${DISTFILES} ${RUST_STAGE0}
|
|
.endif
|
|
.if !empty(MACHINE_PLATFORM:MDarwin-*-x86_64) || make(distinfo) || make (makesum) || make(mdi)
|
|
RUST_ARCH:= x86_64-apple-darwin
|
|
RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
|
|
DISTFILES:= ${DISTFILES} ${RUST_STAGE0}
|
|
.endif
|
|
.if !empty(MACHINE_PLATFORM:MLinux-*-i386) || make(distinfo) || make (makesum) || make(mdi)
|
|
RUST_ARCH:= i686-unknown-linux-gnu
|
|
RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
|
|
DISTFILES:= ${DISTFILES} ${RUST_STAGE0}
|
|
.endif
|
|
.if !empty(MACHINE_PLATFORM:MLinux-*-x86_64) || make(distinfo) || make (makesum) || make(mdi)
|
|
RUST_ARCH:= x86_64-unknown-linux-gnu
|
|
RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
|
|
DISTFILES:= ${DISTFILES} ${RUST_STAGE0}
|
|
.endif
|
|
.if !empty(MACHINE_PLATFORM:MSunOS-*-x86_64) || make(distinfo) || make (makesum) || make(mdi)
|
|
RUST_ARCH:= x86_64-sun-solaris
|
|
RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
|
|
SITES.${RUST_STAGE0}= https://us-east.manta.joyent.com/pkgsrc/public/pkg-bootstraps/
|
|
DISTFILES:= ${DISTFILES} ${RUST_STAGE0}
|
|
.endif
|
|
.if !empty(MACHINE_PLATFORM:MNetBSD-*-x86_64) || make(distinfo) || make (makesum) || make(mdi)
|
|
RUST_ARCH= x86_64-unknown-netbsd
|
|
RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
|
|
DISTFILES:= ${DISTFILES} ${RUST_STAGE0}
|
|
.endif
|
|
|
|
.if !defined(RUST_ARCH)
|
|
NOT_FOR_PLATFORM+= ${MACHINE_PLATFORM}
|
|
.endif
|
|
|
|
PLIST_SRC= PLIST
|
|
.if ${OPSYS} == "Darwin"
|
|
PLIST_SRC+= PLIST.lldb
|
|
.else
|
|
PLIST_SRC+= PLIST.gdb
|
|
.endif
|
|
|
|
OPSYSVARS+= SOEXT
|
|
SOEXT.Darwin= dylib
|
|
SOEXT.*= so
|
|
|
|
RUST_VERHASH= 63283ac5
|
|
PLIST_SUBST+= RUST_ARCH=${RUST_ARCH:Q}
|
|
PLIST_SUBST+= RUST_VERHASH=${RUST_VERHASH:Q}
|
|
PLIST_SUBST+= SOEXT=${SOEXT:Q}
|
|
PRINT_PLIST_AWK+= { gsub(/${RUST_ARCH}/, "$${RUST_ARCH}") }
|
|
PRINT_PLIST_AWK+= { gsub(/${RUST_VERHASH}/, "$${RUST_VERHASH}") }
|
|
PRINT_PLIST_AWK+= { gsub(/\.${SOEXT}/, ".$${SOEXT}") }
|
|
|
|
.if ${OPSYS} == "SunOS"
|
|
BUILD_DEPENDS+= grep>=0:../../textproc/grep
|
|
BUILD_DEPENDS+= coreutils>=0:../../sysutils/coreutils
|
|
TOOLS_PATH.grep= ${PREFIX}/bin/ggrep
|
|
TOOLS_CREATE+= md5sum
|
|
TOOLS_PATH.md5sum= ${PREFIX}/bin/gmd5sum
|
|
|
|
SUBST_CLASSES+= ranlib
|
|
SUBST_STAGE.ranlib= pre-configure
|
|
SUBST_FILES.ranlib= mk/rt.mk
|
|
SUBST_SED.ranlib= -e 's,RANLIB=.* \\,RANLIB="true" \\,g'
|
|
.endif
|
|
|
|
post-install:
|
|
${RM} -f ${DESTDIR}${PREFIX}/lib/rustlib/install.log
|
|
|
|
.if ${OPSYS} == "Darwin"
|
|
.PHONY: fix-darwin-install-name
|
|
post-install: fix-darwin-install-name
|
|
fix-darwin-install-name:
|
|
. for bin in rustc rustdoc
|
|
otool -XL ${DESTDIR}${PREFIX}/bin/${bin} \
|
|
| ${GREP} '@rpath' | while read rpath rest; do \
|
|
install_name_tool -change $$rpath \
|
|
`${ECHO} $$rpath | ${SED} -e 's,@rpath,${PREFIX}/lib,g'` \
|
|
${DESTDIR}${PREFIX}/bin/${bin}; \
|
|
done
|
|
. endfor
|
|
. for libdir in lib lib/rustlib/${RUST_ARCH}/lib
|
|
for f in ${DESTDIR}${PREFIX}/${libdir}/lib*.dylib; do \
|
|
[ ! -f $$f ] && continue; \
|
|
install_name_tool -id `${ECHO} $$f | ${SED} -e 's,${DESTDIR},,g'` $$f; \
|
|
otool -XL $$f | grep '@rpath' | while read rpath rest; do \
|
|
install_name_tool -change $$rpath \
|
|
`${ECHO} $$rpath | ${SED} -e 's,@rpath,${PREFIX}/${libdir},g'` \
|
|
$$f; \
|
|
done; \
|
|
done
|
|
. endfor
|
|
.endif
|
|
|
|
#
|
|
# Create a relocatable stage2 bootstrap from the bits we just built that can be
|
|
# used to build the next version of rust. Currently only tested on SmartOS.
|
|
#
|
|
BOOTSTRAP_TMPDIR= ${WRKDIR}/${PKGNAME}-${RUST_ARCH}/rustc
|
|
USE_TOOLS+= gtar
|
|
|
|
stage0-bootstrap: install
|
|
${MKDIR} ${BOOTSTRAP_TMPDIR}
|
|
${CP} -R ${DESTDIR}/${PREFIX}/bin ${BOOTSTRAP_TMPDIR}/
|
|
${CP} -R ${DESTDIR}/${PREFIX}/lib ${BOOTSTRAP_TMPDIR}/
|
|
.if ${OS_VARIANT} == "SmartOS"
|
|
for lib in libgcc_s.so.1 libssp.so.0 libstdc++.so.6; do \
|
|
${CP} `${PKG_CC} -print-file-name=$${lib}` \
|
|
${BOOTSTRAP_TMPDIR}/lib/; \
|
|
done
|
|
for f in ${BOOTSTRAP_TMPDIR}/bin/rust{c,doc}; do \
|
|
/usr/bin/elfedit -e 'dyn:runpath $$ORIGIN/../lib' $$f; \
|
|
done
|
|
for f in ${BOOTSTRAP_TMPDIR}/lib/*.so*; do \
|
|
/usr/bin/elfedit -e 'dyn:runpath $$ORIGIN' $$f; \
|
|
done
|
|
for f in ${BOOTSTRAP_TMPDIR}/lib/rustlib/${RUST_ARCH}/lib/*.so*; do \
|
|
/usr/bin/elfedit -e 'dyn:runpath $$ORIGIN:$$ORIGIN/../../..' $$f; \
|
|
done
|
|
.endif
|
|
(cd ${WRKDIR}; \
|
|
${GTAR} -zcf ${PKGNAME}-${RUST_ARCH}.tar.gz ${PKGNAME}-${RUST_ARCH})
|
|
|
|
.include "../../devel/cmake/buildlink3.mk"
|
|
.include "../../lang/python/tool.mk"
|
|
.include "../../mk/bsd.pkg.mk"
|