# POWER Maintainer: Alexander Baldeck <alex.bldck@gmail.com>
# Maintainer: Sébastien "Seblu" Luttringer
# Maintainer: Morten Linderud <foxboron@archlinux.org>

pkgname=docker
pkgver=27.5.1
pkgrel=1
epoch=1
pkgdesc='Pack, ship and run any application as a lightweight container'
arch=(x86_64 aarch64 powerpc64le riscv64)
url='https://www.docker.com/'
license=('Apache-2.0')
depends=('glibc' 'iproute2' 'device-mapper' 'sqlite' 'systemd-libs'
         'libseccomp' 'libtool' 'runc' 'containerd')
makedepends=('git' 'go' 'btrfs-progs' 'cmake' 'systemd' 'go-md2man' 'sed')
optdepends=('btrfs-progs: btrfs backend support'
            'pigz: parallel gzip compressor support'
            'docker-buildx: extended build capabilities')
options=(!lto)
_TINI_COMMIT=de40ad007797e0dcd8b7126f27bb87401d224240
source=("git+https://github.com/docker/cli.git#tag=v$pkgver"
        "git+https://github.com/moby/moby.git#tag=v$pkgver"
        "git+https://github.com/krallin/tini.git#commit=$_TINI_COMMIT"
        "$pkgname.sysusers")
sha256sums=('76d45632cb121fdab449512dbb87ce3803e1371d96740be38bcad143aba2a788'
            '898cf1ddcb24a9438cff8356a41f5c39c415ab8878971887493babe551de0f8d'
            '28a6641d508f60d47315efb3c85d97360188750a45bd6d3c8737d3f1a2b44121'
            '541826011a9836d05a2f42293d5f1beadf2ca8d89fb604487d61a013505678eb')

# create a fake go path directory and pushd into it
# $1 real directory
# $2 gopath directory
_fake_gopath_pushd() {
  mkdir -p "$GOPATH/src/${2%/*}"
  rm -f "$GOPATH/src/$2"
  ln -rsT "$1" "$GOPATH/src/$2"
  pushd  "$GOPATH/src/$2" >/dev/null
}

_fake_gopath_popd() {
  popd >/dev/null
}

build() {
  ### check my mistakes on commit version
  echo 'Checking commit mismatch'
  (
  local _cfile
  for _cfile in tini; do
    . "moby/hack/dockerfile/install/$_cfile.installer"
  done
  local _commit _pkgbuild _dockerfile
  err=0
  # FIXME: Do not check TINI anymore, use tag instead of commit
  # TODO: libnetwork is removed
  # for _commit in LIBNETWORK; do
  #   _pkgbuild=_${_commit}_COMMIT
  #   _dockerfile=${_commit}_COMMIT
  #   if [[ ${!_pkgbuild} != ${!_dockerfile} ]]; then
  #     echo "Invalid $_commit commit, should be ${!_dockerfile}" >&2
  #     err=$(($err + 1))
  #   fi
  # done
  return $err
  )

  ### globals
  export GOPATH="$srcdir"
  export PATH="$GOPATH/bin:$PATH"
  export CGO_CPPFLAGS="${CPPFLAGS}"
  export CGO_CFLAGS="${CFLAGS}"
  export CGO_CXXFLAGS="${CXXFLAGS}"
  export CGO_LDFLAGS="${LDFLAGS}"
  export LDFLAGS=''
  export GOFLAGS='-buildmode=pie -trimpath -mod=readonly -modcacherw -ldflags=-linkmode=external -ldflags=-compressdwarf=false -ldflags=-B=gobuildid'
  export GO111MODULE=off
  export DISABLE_WARN_OUTSIDE_CONTAINER=1

  ### cli
  echo 'Building cli'
  _fake_gopath_pushd cli github.com/docker/cli
  make VERSION=$pkgver dynbinary
  make manpages
  _fake_gopath_popd

  ### daemon
  echo 'Building daemon'
  _fake_gopath_pushd moby github.com/docker/docker
  DOCKER_GITCOMMIT=$(cd "$srcdir"/moby && git rev-parse --short HEAD) \
    DOCKER_BUILDTAGS='seccomp journald apparmor' \
    VERSION=$pkgver \
    hack/make.sh dynbinary
  _fake_gopath_popd

  ### docker-init
  echo 'Building docker-init'
  _fake_gopath_pushd tini github.com/krallin/tini
  cmake .
  # we must use the static binary because it's started in a foreign os
  make tini-static
  _fake_gopath_popd
}

package() {
  ### init
  install -Dm755 tini/tini-static "$pkgdir/usr/bin/docker-init"
  ### dockerd
  install -Dm755 moby/bundles/dynbinary-daemon/dockerd "$pkgdir"/usr/bin/dockerd
  install -Dm755 moby/bundles/dynbinary-daemon/docker-proxy "$pkgdir/usr/bin/docker-proxy"
  ### systemd units
  cd "$srcdir"/moby/contrib
  install -Dm644 'init/systemd/docker.service' "$pkgdir/usr/lib/systemd/system/docker.service"
  install -Dm644 'init/systemd/docker.socket' "$pkgdir/usr/lib/systemd/system/docker.socket"
  # systemd rules
  install -Dm644 'udev/80-docker.rules' "$pkgdir/usr/lib/udev/rules.d/80-docker.rules"
  install -Dm644 "$srcdir/$pkgname.sysusers" "$pkgdir/usr/lib/sysusers.d/$pkgname.conf"
  ### cli
  cd "$srcdir"/cli
  # binary
  install -Dm755 build/docker "$pkgdir/usr/bin/docker"
  # completion (see FS#79067)
  install -Dm644 <(build/docker completion bash) "$pkgdir/usr/share/bash-completion/completions/docker"
  install -Dm644 <(build/docker completion zsh) "$pkgdir/usr/share/zsh/site-functions/_docker"
  install -Dm644 <(build/docker completion fish) "$pkgdir/usr/share/fish/vendor_completions.d/docker.fish"
  # man
  install -dm755 "$pkgdir/usr/share/man"
  cp -r man/man* "$pkgdir/usr/share/man"
}

# vim:set ts=2 sw=2 et:
