From b3d88c8ae0b2f8be4445655cbcdd9459891853a8 Mon Sep 17 00:00:00 2001 From: Patrick J Volkerding Date: Fri, 14 Jul 2023 17:53:34 +0000 Subject: Fri Jul 14 17:53:34 UTC 2023 ap/vim-9.0.1677-x86_64-1.txz: Upgraded. n/nftables-1.0.8-x86_64-1.txz: Upgraded. x/xeyes-1.3.0-x86_64-1.txz: Upgraded. xap/vim-gvim-9.0.1677-x86_64-1.txz: Upgraded. testing/packages/rust-1.71.0-x86_64-1.txz: Added. --- .../67b5990472e3cac643d8cf90f45fe42201ddec3c.patch | 45 ++++ testing/source/rust/link_libffi.diff | 11 + testing/source/rust/rust.SlackBuild | 297 +++++++++++++++++++++ testing/source/rust/rust.url | 35 +++ testing/source/rust/slack-desc | 19 ++ 5 files changed, 407 insertions(+) create mode 100644 testing/source/rust/67b5990472e3cac643d8cf90f45fe42201ddec3c.patch create mode 100644 testing/source/rust/link_libffi.diff create mode 100755 testing/source/rust/rust.SlackBuild create mode 100644 testing/source/rust/rust.url create mode 100644 testing/source/rust/slack-desc (limited to 'testing') diff --git a/testing/source/rust/67b5990472e3cac643d8cf90f45fe42201ddec3c.patch b/testing/source/rust/67b5990472e3cac643d8cf90f45fe42201ddec3c.patch new file mode 100644 index 000000000..e36e17275 --- /dev/null +++ b/testing/source/rust/67b5990472e3cac643d8cf90f45fe42201ddec3c.patch @@ -0,0 +1,45 @@ +From 67b5990472e3cac643d8cf90f45fe42201ddec3c Mon Sep 17 00:00:00 2001 +From: jyn +Date: Mon, 10 Jul 2023 15:59:30 -0500 +Subject: [PATCH] Revert "Fix `x test lint-docs` when download-rustc is + enabled" + +This was not the correct fix. The problem was two-fold: +- `download-rustc` didn't respect `llvm.assertions` +- `rust-dev` was missing a bump to `download-ci-llvm-stamp` + +The first is fixed in this PR and the latter was fixed a while ago. Revert this change to avoid breaking `rpath = false`. +--- + src/tools/lint-docs/src/groups.rs | 1 - + src/tools/lint-docs/src/lib.rs | 6 ------ + 2 files changed, 7 deletions(-) + +diff --git a/src/tools/lint-docs/src/groups.rs b/src/tools/lint-docs/src/groups.rs +index b11fb287cf4dd..5be8ef7996bb2 100644 +--- a/src/tools/lint-docs/src/groups.rs ++++ b/src/tools/lint-docs/src/groups.rs +@@ -39,7 +39,6 @@ impl<'a> LintExtractor<'a> { + fn collect_groups(&self) -> Result> { + let mut result = BTreeMap::new(); + let mut cmd = Command::new(self.rustc_path); +- cmd.env_remove("LD_LIBRARY_PATH"); + cmd.arg("-Whelp"); + let output = cmd.output().map_err(|e| format!("failed to run command {:?}\n{}", cmd, e))?; + if !output.status.success() { +diff --git a/src/tools/lint-docs/src/lib.rs b/src/tools/lint-docs/src/lib.rs +index fe29b9abda39a..b7c8b9ed2e318 100644 +--- a/src/tools/lint-docs/src/lib.rs ++++ b/src/tools/lint-docs/src/lib.rs +@@ -403,12 +403,6 @@ impl<'a> LintExtractor<'a> { + fs::write(&tempfile, source) + .map_err(|e| format!("failed to write {}: {}", tempfile.display(), e))?; + let mut cmd = Command::new(self.rustc_path); +- // NOTE: bootstrap sets `LD_LIBRARY_PATH` for building lint-docs itself. +- // Unfortunately, lint-docs is a bootstrap tool while rustc is built from source, +- // and sometimes the paths conflict. In particular, when using `download-rustc`, +- // the LLVM versions can differ between `ci-llvm` and `ci-rustc-sysroot`. +- // Unset LD_LIBRARY_PATH here so it doesn't interfere with running the compiler. +- cmd.env_remove("LD_LIBRARY_PATH"); + if options.contains(&"edition2015") { + cmd.arg("--edition=2015"); + } else { diff --git a/testing/source/rust/link_libffi.diff b/testing/source/rust/link_libffi.diff new file mode 100644 index 000000000..dd5a3e0f0 --- /dev/null +++ b/testing/source/rust/link_libffi.diff @@ -0,0 +1,11 @@ +--- ./compiler/rustc_llvm/build.rs.orig 2020-11-16 08:01:53.000000000 -0600 ++++ ./compiler/rustc_llvm/build.rs 2020-11-19 13:46:21.222785372 -0600 +@@ -234,6 +234,8 @@ + println!("cargo:rustc-link-lib={}={}", kind, name); + } + ++ println!("cargo:rustc-link-lib=dylib=ffi"); ++ + // LLVM ldflags + // + // If we're a cross-compile of LLVM then unfortunately we can't trust these diff --git a/testing/source/rust/rust.SlackBuild b/testing/source/rust/rust.SlackBuild new file mode 100755 index 000000000..315525b89 --- /dev/null +++ b/testing/source/rust/rust.SlackBuild @@ -0,0 +1,297 @@ +#!/bin/bash + +# Copyright 2017 Andrew Clemons, Wellington, New Zealand +# Copyright 2017, 2018, 2019, 2020, 2021, 2022, 2023 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2017 Stuart Winter +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cd $(dirname $0) ; CWD=$(pwd) + +PKGNAM=rust +SRCNAM="${PKGNAM}c" +VERSION=${VERSION:-1.71.0} +BUILD=${BUILD:-1} + +# Set this to YES to build with the system LLVM, or NO to use the bundled LLVM. +# YES is probably better (when it works...) +SYSTEM_LLVM=${SYSTEM_LLVM:-NO} + +# Bootstrap variables (might not be kept updated for latest Rust): +RSTAGE0_VERSION=${RSTAGE0_VERSION:-1.70.0} +RSTAGE0_DIR=${RSTAGE0_DIR:-2023-06-01} +CSTAGE0_VERSION=${CSTAGE0_VERSION:-1.70.0} +CSTAGE0_DIR=${CSTAGE0_DIR:-$RSTAGE0_DIR} + +# Automatically determine the architecture we're building on: +MARCH=$( uname -m ) +if [ -z "$ARCH" ]; then + case "$MARCH" in + i?86) export ARCH=i686 ;; + armv7hl) export ARCH=$MARCH ;; + arm*) export ARCH=arm ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) export ARCH=$MARCH ;; + esac +fi +unset MARCH + +# For compiling i686 under an x86_64 kernel: +if [ "$(uname -m)" = "x86_64" -a "$(file -L /usr/bin/gcc | grep 80386 | grep 32-bit)" != "" ]; then + ARCH=i686 +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + +# If the bootstrap binaries are present, use those. Otherwise bootstrap from +# installed compiler. +if /bin/ls *-unknown-linux-gnu.tar.?z 1> /dev/null 2> /dev/null ; then + LOCAL_BOOTSTRAP=no +else + LOCAL_BOOTSTRAP=yes +fi + +# https://forge.rust-lang.org/platform-support.html +# Bootstrapping ARCH: +if [ "$ARCH" = "i586" ]; then + if [ "$LOCAL_BOOTSTRAP" = "yes" ] ; then + if rustc -Vv | grep host | grep i586 > /dev/null ; then + BARCH="$ARCH" + else + BARCH="i686" + if case "$( uname -m )" in i586) true ;; *) false ;; esac ; then + echo "rust must be bootstrapped from an i686 machine" + exit 1 + fi + fi + else + # i586 must be built on a i686 machine, since the bootstrap compiler is i686 + BARCH="i686" + if case "$( uname -m )" in i586) true ;; *) false ;; esac ; then + echo "rust must be bootstrapped from an i686 machine" + exit 1 + fi + fi + TARCH="$ARCH" +elif [ "$ARCH" = "armv7hl" ]; then + BARCH="armv7" + TARCH="$BARCH" +else + BARCH="$ARCH" + TARCH="$ARCH" +fi + +# Bootstrapping ABI: +if [ "$ARCH" = "armv7hl" ]; then + BABI="gnueabihf" +else + BABI="gnu" +fi + +TMP=${TMP:-/tmp} +OUTPUT=${OUTPUT:-$TMP} +PKG=$TMP/package-$PKGNAM + +# Not needed, as the build will automatically use as many jobs as there are +# threads. +#NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "} + +if [ "$ARCH" = "i586" ]; then + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + LIBDIRSUFFIX="64" +elif [ "$ARCH" = "armv7hl" ]; then + LIBDIRSUFFIX="" +else + LIBDIRSUFFIX="" +fi + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION-src +echo "Extracting $CWD/$SRCNAM-$VERSION-src.tar.?z..." +tar xf $CWD/$SRCNAM-$VERSION-src.tar.?z || exit 1 +cd $SRCNAM-$VERSION-src || exit 1 + +cat $CWD/67b5990472e3cac643d8cf90f45fe42201ddec3c.patch | patch -p1 --verbose || exit 1 + +# Link with -lffi in case of using system LLVM: +if [ "${SYSTEM_LLVM}" = "YES" ]; then + zcat $CWD/link_libffi.diff.gz | patch -p1 --verbose || exit 1 +fi + +if [ "$LOCAL_BOOTSTRAP" != "yes" ] ; then + # rust requires bootstrapping with the previous rust version. + # versions are defined in src/stage0.txt. + mkdir -p build/cache/$RSTAGE0_DIR + cp $CWD/$PKGNAM-std-$RSTAGE0_VERSION-$BARCH-unknown-linux-gnu.tar.?z \ + $CWD/$SRCNAM-$RSTAGE0_VERSION-$BARCH-unknown-linux-gnu.tar.?z \ + build/cache/$RSTAGE0_DIR + mkdir -p build/cache/$CSTAGE0_DIR + cp $CWD/cargo-$CSTAGE0_VERSION-$BARCH-unknown-linux-gnu.tar.?z build/cache/$CSTAGE0_DIR +fi + +# Build configuration: +cat << EOF > config.toml +[llvm] +ccache = "/usr/bin/ccache" +link-shared = true + +[build] +build = "$BARCH-unknown-linux-$BABI" +host = ["$TARCH-unknown-linux-$BABI"] +target = ["$TARCH-unknown-linux-$BABI"] +tools = ["analysis", "cargo", "clippy", "rls", "rustfmt", "src"] +submodules = false +vendor = true +extended = true + +[install] +prefix = "/usr" +docdir = "doc/rust-$VERSION" +libdir = "lib$LIBDIRSUFFIX" +mandir = "man" + +[rust] +codegen-units = 0 +channel = "stable" +rpath = false +codegen-tests = false + +EOF + +if [ "${SYSTEM_LLVM}" = "YES" ]; then + cat << EOF >> config.toml +# Add this stuff to build with the system LLVM: +[target.i586-unknown-linux-gnu] +llvm-config = "/usr/bin/llvm-config" + +[target.i686-unknown-linux-gnu] +llvm-config = "/usr/bin/llvm-config" + +[target.x86_64-unknown-linux-gnu] +llvm-config = "/usr/bin/llvm-config" + +[target.armv7-unknown-linux-gnueabihf] +llvm-config = "/usr/bin/llvm-config" +EOF +fi + +if [ "$LOCAL_BOOTSTRAP" = "yes" ] ; then + sed -i "s|^\(extended = true\)$|\1\nrustc = \"/usr/bin/rustc\"\ncargo = \"/usr/bin/cargo\"|" config.toml +fi + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +export PKG_CONFIG_ALLOW_CROSS=1 + +if [ "$BARCH" = "i586" ] ; then + # when bootstrapping from i586 (rust already installed), also build a i686 + # rustlib: + sed -i 's/^target =.*$/target = ["i686-unknown-linux-gnu"]/' config.toml +elif [ "$BARCH" = "i686" ] ; then + if [ "$TARCH" = "i586" ] ; then + # this will cause some messages like: + # warning: redundant linker flag specified for library `m` + # but will keep the build from falling over when doing the stage1 compiler + # linking for the i586 compiler. seems the correct flags don't get passed + # through and we end up failures like: + # error: linking with `clang` failed: exit code: 1 + # /tmp/SBo/rustc-1.20.0-src/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/librustc_llvm-4ab259c9aed547db.so: undefined reference to `xxx` + export RUSTFLAGS="$RUSTFLAGS -C link-args=-lrt -ldl -lcurses -lpthread -lz -lm" + fi +fi + +# Build and install: +python3 ./x.py build || exit 1 +DESTDIR=$PKG python3 x.py install || exit 1 + +# Eh, none of this is all that big. Might as well leave it around as a +# reference. +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/components +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/install.log +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/manifest-* +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/rust-installer-version +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/uninstall.sh +# Make sure the paths are correct, though: +sed -i "s,/tmp/package-rust/,/,g" $PKG/usr/lib$LIBDIRSUFFIX/rustlib/install.log $PKG/usr/lib$LIBDIRSUFFIX/rustlib/manifest-* +# And a little compression doesn't hurt either: +gzip -9 $PKG/usr/lib$LIBDIRSUFFIX/rustlib/manifest-* + +# Move bash completions to the system location: +if [ -d $PKG/etc/bash_completion.d ]; then + mkdir -p $PKG/usr/share/bash-completion + mv $PKG/etc/bash_completion.d $PKG/usr/share/bash-completion/completions + rmdir $PKG/etc 2> /dev/null +fi + +# Correct permissions on shared libraries: +find $PKG/usr/lib$LIBDIRSUFFIX -name "*.so" -exec chmod 755 "{}" \+ + +# Evidently there are a lot of duplicated libraries in this tree, so let's +# try to save some space: +( cd $PKG/usr/lib${LIBDIRSUFFIX}/rustlib/*-linux-gnu/lib && for file in *.so ; do if cmp -s $file ../../../$file ; then ln -sf ../../../$file .; fi; done ) + +# Strip ELF objects: +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# Get rid of possible .old files in these locations: +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.old +rm -f $PKG/usr/bin/*.old + +# Commented out (for now) since we disable rpaths in config.toml: +## Remove any compiled-in RPATHs: +#find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ +# | cut -f 1 -d : | while read elfobject ; do +# patchelf --remove-rpath $elfobject || exit 1 +#done + +# Compress man pages: +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +# Add some documentation: +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a *.md COPYRIGHT* COPYING* LICENSE* $PKG/usr/doc/$PKGNAM-$VERSION +# Include licenses from third party vendors: +mkdir $PKG/usr/doc/$PKGNAM-$VERSION/vendor +( cd vendor + tar cf - $(find . -maxdepth 2 | grep -e README -e LICENSE -e COPYING -e CHANGELOG -e PERFORMANCE -e UPGRADE ) | ( cd $PKG/usr/doc/$PKGNAM-$VERSION/vendor ; tar xf - ) +) + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PKGNAM-$VERSION-$ARCH-$BUILD.txz diff --git a/testing/source/rust/rust.url b/testing/source/rust/rust.url new file mode 100644 index 000000000..f9c7f63ba --- /dev/null +++ b/testing/source/rust/rust.url @@ -0,0 +1,35 @@ +# Source code (repacked to .tar.lz): +VERSION=1.71.0 +rm -f rustc-${VERSION}-src.tar.* +lftpget https://static.rust-lang.org/dist/rustc-${VERSION}-src.tar.gz +lftpget https://static.rust-lang.org/dist/rustc-${VERSION}-src.tar.gz.asc +if gpg --verify rustc-${VERSION}-src.tar.gz.asc ; then + rm -f rustc-${VERSION}-src.tar.gz.asc + gzip -d rustc-*tar.gz + plzip -9 -v rustc-*tar +else + echo "FATAL ERROR: Not recompressing since GPG signature failed." + exit 1 +fi + +# Please note that the bootstrap binary packages listed below might not be kept +# updated for later versions. The Rust compiler as shipped with Slackware +# should be able to compile the next released version of Rust. +# +# To find the expected date/versions for bootstrap binaries to be able to +# update the settings below, look at src/stage0.json in the Rust sources. +exit 0 + +BOOTSTRAP_DATE=2023-06-01 +BOOTSTRAP_VERSION=1.70.0 +BOOTSTRAP_CARGO=$BOOTSTRAP_VERSION + +# i686 bootstrap: +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/cargo-${BOOTSTRAP_CARGO}-i686-unknown-linux-gnu.tar.xz +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/rust-std-${BOOTSTRAP_VERSION}-i686-unknown-linux-gnu.tar.xz +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/rustc-${BOOTSTRAP_VERSION}-i686-unknown-linux-gnu.tar.xz + +# x86_64 bootstrap: +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/cargo-${BOOTSTRAP_CARGO}-x86_64-unknown-linux-gnu.tar.xz +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/rust-std-${BOOTSTRAP_VERSION}-x86_64-unknown-linux-gnu.tar.xz +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/rustc-${BOOTSTRAP_VERSION}-x86_64-unknown-linux-gnu.tar.xz diff --git a/testing/source/rust/slack-desc b/testing/source/rust/slack-desc new file mode 100644 index 000000000..924b1907e --- /dev/null +++ b/testing/source/rust/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +rust: rust (a safe, concurrent, practical language) +rust: +rust: Rust is a curly-brace, block-structured expression language. +rust: Its design is oriented toward concerns of "programming in the large", +rust: that is, of creating and maintaining boundaries - both abstract and +rust: operational - that preserve large-system integrity, availability, +rust: and concurrency. +rust: +rust: Homepage: https://rust-lang.org +rust: +rust: -- cgit v1.2.3-80-g2a13