Updated 2018-09-12 16:41:42 by dbohdan

dbohdan 2018-09-12: The following shell script will build a static Linux binary of Jim Tcl using Docker. You must select the target architecture by passing a command line argument to the script. You can choose to build the latest commit (default) or any given commit, branch, or tag. The build will include every extension enabled by the configure flag --full plus the SQLite 3 extension.

The script has been successfully tested with tags 0.72 through 0.78 for i386; tags 0.71 and earlier won't work.
#! /bin/sh
# Only the target architectures amd64 and i386 have been tested.  The target
# architecture is checked to be one of the official architectures in order to
# guard against typosquatting and name squatting attacks on the Docker Hub.

archs="(amd64|arm32v6|arm64v8|i386|ppc64le|s390x)"

usage() {
    echo "usage: $(basename "$0") $archs [revision]" > /dev/stderr
}


arch="$1"
revision="${2:-HEAD}"
if ! [ -z "$3" ]; then
    usage
    exit 1
fi


if [ -z "$arch" ]; then
    echo 'no target architecture' > /dev/stderr
    usage
    exit 1
elif ! echo "$arch" | grep -E -q "$archs"; then
    echo "unknown architecture: \"$arch\"" > /dev/stderr
    usage
    exit 1
fi
echo "target architecture is $arch"


mkdir -p inbox/
docker run \
    --rm \
    --volume "$(pwd)/inbox:/inbox" \
    "$arch/alpine:3.8" \
    sh -c \
    'cd \
     && apk update \
     && apk add gcc git make libc-dev tcl \
     && wget https://sqlite.org/2018/sqlite-autoconf-3240000.tar.gz \
     && tar xvf sqlite-autoconf-3240000.tar.gz \
     && cd sqlite-autoconf-3240000/ \
     && env CFLAGS="-DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1" ./configure \
     && make install \
     && cd \
     && git clone https://github.com/msteveb/jimtcl \
     && cd jimtcl/ \
     && git checkout "$1" \
     && ./configure --full --with-ext=sqlite3 \
     && env LDLIBS=-static make \
     && cp jimsh \
          "/inbox/jimsh-$(./jimsh --version)-$(git rev-parse HEAD \
                                               | cut -c 1-10)-$0"
    ' \
    "$arch" \
    "$revision"