elvish/tools/buildall.sh
Qi Xiao cfcef9ec51 pkg/buildinfo: Use Go's buildinfo to derive version of development builds.
This allows the build commands in Makefile and tools/buildall.sh to be
simplified.

Official reproducible builds are now handled as a build variant, and the command
in Makefile no longer tries to produce reproducible builds.

Instructions in PACKAGING.md have been completely rewritten.
2022-04-02 18:18:24 +01:00

105 lines
2.4 KiB
Bash
Executable File

#!/bin/sh -e
# buildall.sh $SRC_DIR $DST_DIR $SUFFIX
#
# Builds Elvish binaries for all supported platforms, using the code in $SRC_DIR
# and building $DST_DIR/$GOOS-$GOARCH/elvish-$SUFFIX for each supported
# combination of $GOOS and $GOARCH.
#
# It also creates an archive for each binary file, and puts it in the same
# directory. For GOOS=windows, the archive is a .zip file. For all other GOOS,
# the archive is a .tar.gz file.
#
# If the sha256sum command is available, this script also creates a sha256sum
# file for each binary and archive file, and puts it in the same directory.
#
# The value of the ELVISH_BUILD_VARIANT environment variable will be used to
# override src.elv.sh/pkg/buildinfo.BuildVariant.
#
# This script is not whitespace-correct; avoid whitespaces in directory names.
if test $# != 3; then
# Output the comment block above, stripping any leading "#" or "# "
sed < $0 -En '
/^# /,/^$/{
/^$/q
s/^# ?//
p
}'
exit 1
fi
SRC_DIR=$1
DST_DIR=$2
SUFFIX=$3
export GOOS GOARCH GOFLAGS
export CGO_ENABLED=0
main() {
buildarch amd64 linux darwin freebsd openbsd netbsd windows
buildarch 386 linux windows
buildarch arm64 linux darwin
}
# buildarch $arch $os...
#
# Builds one GOARCH, multiple GOOS.
buildarch() {
local GOARCH=$1 GOOS
shift
for GOOS in $@; do
buildone
done
}
# buildone
#
# Builds one GOARCH and one GOOS.
#
# Uses: $GOARCH $GOOS $DST_DIR
buildone() {
local BIN_DIR=$DST_DIR/$GOOS-$GOARCH
mkdir -p $BIN_DIR
local STEM=elvish-$SUFFIX
if test $GOOS = windows; then
local BIN=$STEM.exe
local ARCHIVE=$STEM.zip
else
local BIN=$STEM
local ARCHIVE=$STEM.tar.gz
fi
if go env GOOS GOARCH | egrep -qx '(windows .*|linux (amd64|arm64))'; then
local GOFLAGS=-buildmode=pie
fi
printf '%s' "Building for $GOOS-$GOARCH... "
go build \
-trimpath \
-ldflags "-X src.elv.sh/pkg/buildinfo.BuildVariant=$ELVISH_BUILD_VARIANT" \
-o $BIN_DIR/$BIN $SRC_DIR/cmd/elvish || {
echo "Failed"
return
}
(
cd $BIN_DIR
if test $GOOS = windows; then
zip -q $ARCHIVE $BIN
else
tar cfz $ARCHIVE $BIN
fi
echo "Done"
if which sha256sum > /dev/null; then
sha256sum $BIN > $BIN.sha256sum
sha256sum $ARCHIVE > $ARCHIVE.sha256sum
fi
)
}
main