Skip to content

Commit

Permalink
Add a package for rust version 1.76.0.
Browse files Browse the repository at this point in the history
Pkgsrc changes:
 * Adapt checksums and patches.

Upstream chnages:

Version 1.76.0 (2024-02-08)
==========================

Language
--------
- [Document Rust ABI compatibility between various types]
  (rust-lang/rust#115476)
- [Also: guarantee that char and u32 are ABI-compatible]
  (rust-lang/rust#118032)
- [Warn against ambiguous wide pointer comparisons]
  (rust-lang/rust#117758)

Compiler
--------
- [Lint pinned `#[must_use]` pointers (in particular, `Box<T>`
  where `T` is `#[must_use]`) in `unused_must_use`.]
  (rust-lang/rust#118054)
- [Soundness fix: fix computing the offset of an unsized field in
  a packed struct]
  (rust-lang/rust#118540)
- [Soundness fix: fix dynamic size/align computation logic for
  packed types with dyn Trait tail]
  (rust-lang/rust#118538)
- [Add `$message_type` field to distinguish json diagnostic outputs]
  (rust-lang/rust#115691)
- [Enable Rust to use the EHCont security feature of Windows]
  (rust-lang/rust#118013)
- [Add tier 3 {x86_64,i686}-win7-windows-msvc targets]
  (rust-lang/rust#118150)
- [Add tier 3 aarch64-apple-watchos target]
  (rust-lang/rust#119074)
- [Add tier 3 arm64e-apple-ios & arm64e-apple-darwin targets]
  (rust-lang/rust#115526)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

Libraries
---------
- [Add a column number to `dbg!()`]
  (rust-lang/rust#114962)
- [Add `std::hash::{DefaultHasher, RandomState}` exports]
  (rust-lang/rust#115694)
- [Fix rounding issue with exponents in fmt]
  (rust-lang/rust#116301)
- [Add T: ?Sized to `RwLockReadGuard` and `RwLockWriteGuard`'s Debug impls.]
  (rust-lang/rust#117138)
- [Windows: Allow `File::create` to work on hidden files]
  (rust-lang/rust#116438)

Stabilized APIs
---------------
- [`Arc::unwrap_or_clone`]
  (https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.unwrap_or_clone)
- [`Rc::unwrap_or_clone`]
  (https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#method.unwrap_or_clone)
- [`Result::inspect`]
  (https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.inspect)
- [`Result::inspect_err`]
  (https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.inspect_err)
- [`Option::inspect`]
  (https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.inspect)
- [`type_name_of_val`]
  (https://doc.rust-lang.org/stable/std/any/fn.type_name_of_val.html)
- [`std::hash::{DefaultHasher, RandomState}`]
  (https://doc.rust-lang.org/stable/std/hash/index.html#structs)
  These were previously available only through `std::collections::hash_map`.
- [`ptr::{from_ref, from_mut}`]
  (https://doc.rust-lang.org/stable/std/ptr/fn.from_ref.html)
- [`ptr::addr_eq`](https://doc.rust-lang.org/stable/std/ptr/fn.addr_eq.html)

Cargo
-----

See [Cargo release notes]
(https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-176-2024-02-08).

Rustdoc
-------
- [Don't merge cfg and doc(cfg) attributes for re-exports]
  (rust-lang/rust#113091)
- [rustdoc: allow resizing the sidebar / hiding the top bar]
  (rust-lang/rust#115660)
- [rustdoc-search: add support for traits and associated types]
  (rust-lang/rust#116085)
- [rustdoc: Add highlighting for comments in items declaration]
  (rust-lang/rust#117869)

Compatibility Notes
-------------------
- [Add allow-by-default lint for unit bindings]
  (rust-lang/rust#112380)
  This is expected to be upgraded to a warning by default in a future Rust
  release. Some macros emit bindings with type `()` with user-provided spans,
  which means that this lint will warn for user code.
- [Remove x86_64-sun-solaris target.]
  (rust-lang/rust#118091)
- [Remove asmjs-unknown-emscripten target]
  (rust-lang/rust#117338)
- [Report errors in jobserver inherited through environment variables]
  (rust-lang/rust#113730)
  This [may warn](rust-lang/rust#120515)
  on benign problems too.
- [Update the minimum external LLVM to 16.]
  (rust-lang/rust#117947)
- [Improve `print_tts`](rust-lang/rust#114571)
  This change can break some naive manual parsing of token trees
  in proc macro code which expect a particular structure after
  `.to_string()`, rather than just arbitrary Rust code.
- [Make `IMPLIED_BOUNDS_ENTAILMENT` into a hard error from a lint]
  (rust-lang/rust#117984)
- [Vec's allocation behavior was changed when collecting some iterators]
  (rust-lang/rust#110353)
  Allocation behavior is currently not specified, nevertheless
  changes can be surprising.
  See [`impl FromIterator for Vec`]
  (https://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#impl-FromIterator%3CT%3E-for-Vec%3CT%3E)
  for more details.
- [Properly reject `default` on free const items]
  (rust-lang/rust#117818)
  • Loading branch information
he32 committed Feb 18, 2024
1 parent ee7b4b4 commit 0e9a2a1
Show file tree
Hide file tree
Showing 59 changed files with 2,944 additions and 0 deletions.
13 changes: 13 additions & 0 deletions rust176/DESCR
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Rust is a systems programming language focused on three goals: safety,
speed, and concurrency. It maintains these goals without having a
garbage collector, making it a useful language for a number of use cases
other languages aren't good at: embedding in other languages, programs
with specific space and time requirements, and writing low-level code,
like device drivers and operating systems.

It improves on current languages targeting this space by having a number
of compile-time safety checks that produce no runtime overhead, while
eliminating all data races. Rust also aims to achieve "zero-cost
abstractions" even though some of these abstractions feel like those of
a high-level language. Even then, Rust still allows precise control
like a low-level language would.
85 changes: 85 additions & 0 deletions rust176/HOWTO-BOOTSTRAP
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
How to build a rust bootstrap kit using pkgsrc
----------------------------------------------

A rust bootstrap kit is simply a pre-compiled binary of rust and
the rust standard library, and contains the "rust" and "rust-std"
build results, found in

work/rustc-<version>/build/dist/
as
rust-<version>-<target>.tar.xz
and
rust-std-<version>-<target>.tar.xz

These result files are produced when the "dist" build target is
used, ref. BUILD_TARGET. For a normal native build of the rust
pkgsrc package, the default BUILD_TARGET is "build", not "dist".

There are two possible ways to produce a bootstrap kit:

1) a native build. This requires minimum preparation, except
possibly for setting rust.BUILD_TARGET to "dist" via e.g.
/etc/mk.conf. Note that on NetBSD, using the "BUILD_TARGET" ==
"dist" results in the "rust-cargo-static" option being set, ref.
options.mk. This is so that the resulting bootstrap kits are
built with mostly-static linking, reducing the run-time dependencies
of the bootstrap kits.

2) a cross-build. This requires a bit of preparation:

For each target you want to cross-build rust for, you need
- the cross toolchain resulting from "build.sh tools" for
the intended target
- an OS distribution extracted, including the comp.tgz
set so that the target's include files can be used
- for 32-bit ports, the "libatomic" package needs to be
available. I'm sure there's a clever and long-winded
use of pkg_install which can be used to effect this;
I on my hand have always just extracted the tgz file
and done the minimal cleanup of the "cruft" files
which are part of the package meta-data.
- Pick a root directory for the target, e.g. /u/i386.
Below this directory place the "tools" containing
the cross-compiler in a "tools" sub-directory.
Similarly, the extracted OS distribution in the "dest"
sub-directory.

There are two methods available for doing the cross-compile:

a) Using the "cross.mk" file. For an i386 build against i586, the
following settings should be active:

CROSS_ROOT= /u/i386
MAKE_ENV+= CROSS_ROOT=${CROSS_ROOT}
GNU_CROSS_TARGET= i486--netbsdelf
MAKE_ENV+= GNU_CROSS_TARGET=${GNU_CROSS_TARGET}
TARGET= i586-unknown-netbsd
SCRIPTS= ${WRKDIR}/scripts
CONFIGURE_ARGS+= --host=${TARGET}
CONFIGURE_ARGS+= --target=${TARGET}
CONFIGURE_ARGS+= --set=target.${TARGET}.cc=${SCRIPTS}/gcc-wrap
CONFIGURE_ARGS+= --set=target.${TARGET}.cxx=${SCRIPTS}/c++-wrap
CONFIGURE_ARGS+= --set=target.${TARGET}.linker=${SCRIPTS}/gcc-wrap
CONFIGURE_ARGS+= --set=target.${TARGET}.ar=${CROSS_ROOT}/tools/bin/${GNU_CROSS_TARGET}-ar

Then doing a "make" will cross-build rust, including the LLVM
embedded in the rust distribution, ref. the defaulting of that
option when TARGET is defined ref. options.mk.

Note that when TARGET is set, the default build target for
the rust makefile becomes "dist", so there's no need to set
rust.BUILD_TARGET for cross-builds.

b) Using the "do-cross.mk" Makefile. This will attempt to
cross-build rust for all the targets listed in the SHORT_TARGETS
variable in that file. Overriding the root directories for
the various targets can be done by making your own "local-roots.mk"
file, ref. "do-cross.mk".

This will create a "dist" subdirectory in the rust pkgsrc
directory, and the bootstrap kits for each architecture, plus
the library source kit will be placed in this directory.

The bootstrap kits can then be placed in /usr/pkgsrc/distfiles, and
be used by the "next" rust version, where you can use "make makesum"
to compute the updated checksums for the bootstrap kits.

0 comments on commit 0e9a2a1

Please sign in to comment.