mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-02-14 02:22:44 +08:00
![David Adam](/assets/img/avatar_default.png)
The extended build time isn't worth it for an executable which is run once then thrown away.
80 lines
2.2 KiB
Bash
Executable File
80 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Script to generate a tarball
|
|
# We use git to output a tree. But we also want to build the user documentation
|
|
# and put that in the tarball, so that nobody needs to have sphinx installed
|
|
# to build it.
|
|
# Outputs to $FISH_ARTEFACT_PATH or ~/fish_built by default
|
|
|
|
# Exit on error
|
|
set -e
|
|
|
|
# We wil generate a tarball with a prefix "fish-VERSION"
|
|
# git can do that automatically for us via git-archive
|
|
# but to get the documentation in, we need to make a symlink called "fish-VERSION"
|
|
# and tar from that, so that the documentation gets the right prefix
|
|
|
|
# Use Ninja if available, as it automatically paralellises
|
|
BUILD_TOOL="make"
|
|
BUILD_GENERATOR="Unix Makefiles"
|
|
if command -v ninja >/dev/null; then
|
|
BUILD_TOOL="ninja"
|
|
BUILD_GENERATOR="Ninja"
|
|
fi
|
|
|
|
# We need GNU tar as that supports the --mtime and --transform options
|
|
TAR=notfound
|
|
for try in tar gtar gnutar; do
|
|
if $try -Pcf /dev/null --mtime now /dev/null >/dev/null 2>&1; then
|
|
TAR=$try
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "$TAR" = "notfound" ]; then
|
|
echo 'No suitable tar (supporting --mtime) found as tar/gtar/gnutar in PATH'
|
|
exit 1
|
|
fi
|
|
|
|
# Get the current directory, which we'll use for symlinks
|
|
wd="$PWD"
|
|
|
|
# Get the version from git-describe
|
|
VERSION=$(git describe --dirty 2>/dev/null)
|
|
|
|
# The name of the prefix, which is the directory that you get when you untar
|
|
prefix="fish-$VERSION"
|
|
|
|
# The path where we will output the tar file
|
|
# Defaults to ~/fish_built
|
|
path=${FISH_ARTEFACT_PATH:-~/fish_built}/$prefix.tar
|
|
|
|
# Clean up stuff we've written before
|
|
rm -f "$path" "$path".xz
|
|
|
|
# git starts the archive
|
|
git archive --format=tar --prefix="$prefix"/ HEAD > "$path"
|
|
|
|
# tarball out the documentation, generate a version file
|
|
PREFIX_TMPDIR=$(mktemp -d)
|
|
cd "$PREFIX_TMPDIR"
|
|
echo "$VERSION" > version
|
|
cmake -G "$BUILD_GENERATOR" -DCMAKE_BUILD_TYPE=Debug "$wd"
|
|
$BUILD_TOOL doc
|
|
|
|
TAR_APPEND="$TAR --append --file=$path --mtime=now --owner=0 --group=0 \
|
|
--mode=g+w,a+rX --transform s/^/$prefix\//"
|
|
$TAR_APPEND --no-recursion user_doc
|
|
$TAR_APPEND user_doc/html user_doc/man
|
|
$TAR_APPEND version
|
|
|
|
cd -
|
|
rm -r "$PREFIX_TMPDIR"
|
|
|
|
# xz it
|
|
xz "$path"
|
|
|
|
# Output what we did, and the sha256 hash
|
|
echo "Tarball written to $path".xz
|
|
openssl dgst -sha256 "$path".xz
|