File prepare_vendor.sh of Package libsignal
#!/bin/bash -ux
# shellcheck disable=2181
#dnf install cargo-vendor-filterer diffutils moreutils sed tar wget zstd
SIGNAL_URL=$(rpmspec -P -Delectron_req\ %nil ./*.spec | grep Source0 | sed -e 's/Source0:[ ]*//g')
SIGNAL_TARBALL=$(basename "$SIGNAL_URL")
SIGNAL_PKGVERSION=$(rpmspec -P -Delectron_req\ %nil ./*.spec | grep ^Version | sed -e 's/Version:[ ]*//g')
SIGNAL_PKGNAME="libsignal"
SIGNAL_PKGDIR="$(pwd)"
SIGNAL_TMPDIR=$(mktemp --tmpdir -d signal-desktop-XXXXXXXX)
SIGNAL_PATH="$SIGNAL_TMPDIR/$SIGNAL_PKGNAME-$SIGNAL_PKGVERSION"
echo "URL: $SIGNAL_URL"
echo "TARBALL: $SIGNAL_TARBALL"
echo "NAME: $SIGNAL_PKGNAME"
echo "VERSION: $SIGNAL_PKGVERSION"
echo "PATH: $SIGNAL_PATH"
cleanup_tmpdir()
{
popd 2> /dev/null || exit 1
rm -rf "$SIGNAL_TMPDIR"
}
trap cleanup_tmpdir SIGINT
cleanup_and_exit()
{
cleanup_tmpdir
if test "$1" = 0 -o -z "$1"; then
exit 0
else
exit "$1"
fi
}
if [ ! -w "$SIGNAL_TARBALL" ]; then
wget "$SIGNAL_URL"
fi
tar -xf "$SIGNAL_TARBALL" -C "$SIGNAL_TMPDIR"
pushd "$SIGNAL_PATH" || cleanup_and_exit 1
export RUSTC_BOOTSTRAP=1 # needed to build signal-client
export CARGO_NET_GIT_FETCH_WITH_CLI=true #otherwise cargo fails with warning: spurious network error (3 tries remaining): error reading from the zlib stream; class=Zlib (5)
echo ">>>>>> Download rust vendor for signal-client"
mkdir -pv .cargo
cargo vendor-filterer --platform='*-unknown-linux-gnu' --platform='*-unknown-linux-gnueabihf' --all-features > .cargo/config
if [ $? -ne 0 ]; then
echo 'ERROR: cargo vendor failed'
cleanup_and_exit 1
fi
rm -rf vendor/prost-build/third-party/protobuf
echo ">>>>>> Remove googletest vendor"
rm -rf vendor/boring-sys/deps/boringssl{/src,-fips}/third_party/googletest
echo ">>>>>> Remove zlib vendor"
rm -rf vendor/libz-sys/src/zlib{,-ng}
echo ">>>>>> Cleanup object dirs"
find . -type d -name "*.o.d" -print0 | xargs -0 rm -rvf
find . -type d -name "__pycache__" -print0 | xargs -0 rm -rvf
echo ">>>>>> Cleanup object files"
find . -name "*.node" -print -delete
find . -name "*.jar" -print -delete
find . -name "*.dll" -print -delete
find . -name "*.exe" -print -delete
find . -name "*.dylib" -print -delete
find . -name "*.so" -print -delete
find . -name "*.o" -print -delete
find . -name "*.a" -print -delete
find . -name "*.wasm" -print -delete
echo '>>>>>> Remove vendored binaries'
#We use sponge to avoid a race condition between find and rm
find . -type f | sponge |\
xargs -P"$(nproc)" -- sh -c 'file -S "$@" | grep -v '\'': .*script'\'' | grep '\'': .*executable'\'' | tee /dev/stderr | sed '\''s/: .*//'\'' | xargs rm -fv'
echo ">>>>>> Package vendor files"
rm -f "${SIGNAL_PKGDIR}/vendor.tar.zst"
ZSTD_CLEVEL=19 ZSTD_NBTHREADS=$(nproc) tar --zstd --sort=name -vvScf "${SIGNAL_PKGDIR}/vendor.tar.zst" .cargo vendor
if [ $? -ne 0 ]; then
cleanup_and_exit 1
fi
echo "vendor $(du -sh "${SIGNAL_PKGDIR}/vendor.tar.zst")"
cleanup_and_exit 0