| #!/usr/bin/env bash |
| set -e |
| |
| # a helper to provide ".exe" when it's appropriate |
| binary_extension() { |
| if [ "$(go env GOOS)" = 'windows' ]; then |
| echo -n '.exe' |
| fi |
| } |
| |
| GO_PACKAGE='github.com/docker/docker/cmd/dockerd' |
| BINARY_SHORT_NAME='dockerd' |
| BINARY_NAME="$BINARY_SHORT_NAME-$VERSION" |
| BINARY_EXTENSION="$(binary_extension)" |
| BINARY_FULLNAME="$BINARY_NAME$BINARY_EXTENSION" |
| |
| source "${MAKEDIR}/.go-autogen" |
| |
| hash_files() { |
| while [ $# -gt 0 ]; do |
| f="$1" |
| shift |
| dir="$(dirname "$f")" |
| base="$(basename "$f")" |
| for hashAlgo in md5 sha256; do |
| if command -v "${hashAlgo}sum" &> /dev/null; then |
| ( |
| # subshell and cd so that we get output files like: |
| # $HASH docker-$VERSION |
| # instead of: |
| # $HASH /go/src/github.com/.../$VERSION/binary/docker-$VERSION |
| cd "$dir" |
| "${hashAlgo}sum" "$base" > "$base.$hashAlgo" |
| ) |
| fi |
| done |
| done |
| } |
| |
| ( |
| export GOGC=${DOCKER_BUILD_GOGC:-1000} |
| |
| if [ "$(go env GOOS)/$(go env GOARCH)" != "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" ]; then |
| # must be cross-compiling! |
| case "$(go env GOOS)/$(go env GOARCH)" in |
| windows/amd64) |
| export CC=x86_64-w64-mingw32-gcc |
| export CGO_ENABLED=1 |
| ;; |
| esac |
| fi |
| |
| echo "Building: $DEST/$BINARY_FULLNAME" |
| go build \ |
| -o "$DEST/$BINARY_FULLNAME" \ |
| "${BUILDFLAGS[@]}" \ |
| -ldflags " |
| $LDFLAGS |
| $LDFLAGS_STATIC_DOCKER |
| " \ |
| $GO_PACKAGE |
| ) |
| |
| echo "Created binary: $DEST/$BINARY_FULLNAME" |
| ln -sf "$BINARY_FULLNAME" "$DEST/$BINARY_SHORT_NAME$BINARY_EXTENSION" |
| |
| hash_files "$DEST/$BINARY_FULLNAME" |