# Maintainer: Luke Shumaker <lukeshu@parabola.nu>

pkgname=acmetool
pkgver=0.0.54
url=https://github.com/hlandau/acme
pkgdesc="Automatic certificate acquisition tool for ACME (Let's Encrypt)"

pkgrel=2
arch=(x86_64 i686)
depends=(libcap)
makedepends=(go)
optdepends=('dialog')

# When updating this package, my process is:
#  - download the "official" binary from https://github.com/hlandau/acme/releases
#  - run `$dir/bin/acmetool --version|sed -n 's/^git //p'|column -t`
#  - paste that into the _source table below
#  - move the `github.com/hlandau/acme` line to the top, change the git-describe to `v$pkgver`
#  - insert/update the license info for each
_source=(
  #import-path                       commit                                    git-describe  license
  "github.com/hlandau/acme           296b3f53761540e9808965e37d363ff722d8b0cc  v$pkgver      MIT"

  'github.com/alecthomas/template    a0175ee3bccc567396460bf5acd36800cb10c49c  heads/master  BSD3'
  'github.com/alecthomas/units       2efee857e7cfd4f3d0138cc3cbb1b4966962b93a  heads/master  MIT'
  'github.com/coreos/go-systemd      a52323565816dee4d2f8dc5fdf1299f48757b848  heads/master  Apache'
  'github.com/godbus/dbus            32c6cc29c14570de4cf6d7e7737d68fb2d01ad15  heads/master  BSD2'
  'github.com/hlandau/degoutils      389a84765529fb80bf6fff3cdcdf814cbc42ee47  heads/master  MIT'
  'github.com/hlandau/xlog           197ef798aed28e08ed3e176e678fda81be993a31  v1.0.0        MIT'
  'github.com/hlandauf/gspt          25f3bd3f5948489aa5f31c949310ae9f2b0e956c  heads/master  MIT'
  'github.com/jmhodges/clock         880ee4c335489bc78d01e4d0a254ae880734bc15  heads/master  MIT'
  'github.com/mattn/go-isatty        56b76bdf51f7708750eac80fa38b952bb9f32639  heads/master  MIT'
  'github.com/mitchellh/go-wordwrap  ad45545899c7b13c020ea92b2072220eefad42b8  heads/master  MIT'
  'github.com/ogier/pflag            45c278ab3607870051a2ea9040bb85fcb8557481  heads/master  BSD3'
  'github.com/peterhellberg/link     d1cebc7ea14a5fc0de7cb4a45acae773161642c6  v1.0.0        MIT'
  'github.com/satori/go.uuid         879c5887cd475cd7864858769793b2ceb0d44feb  v1.1.0        MIT'
  'github.com/shiena/ansicolor       a422bbe96644373c5753384a59d678f7d261ff10  heads/master  MIT'
  'golang.org/x/crypto               f3241ce8505855877cc8a9717bd61a0f7c4ea83c  heads/master  BSD3'
  'golang.org/x/net                  8bf2b39827dbadfd566c4fae7a8790d12be8b23c  heads/master  BSD3'
  'gopkg.in/alecthomas/kingpin.v2    8cccfa8eb2e3183254457fb1749b2667fbc364c7  tags/v2.1.11  MIT'
  'gopkg.in/cheggaaa/pb.v1           8808370bf63524e115da1371ba42bce6739f3a6b  v1.0.3        BSD3'
  'gopkg.in/hlandau/configurable.v1  41496864a1fe3e0fef2973f22372b755d2897402  v1.0.1        MIT'
  'gopkg.in/hlandau/easyconfig.v1    bc5afaa18a1a72fe424da647d6bb57ca4d7f83c4  v1.0.14       MIT'
  'gopkg.in/hlandau/service.v2       601cce2a79c1e61856e27f43c28ed4d7d2c7a619  v2.0.15       ISC'
  'gopkg.in/hlandau/svcutils.v1      09c5458e23bda3b8e4d925fd587bd44fbdb5950e  v1.0.7        MIT,Apache'
  'gopkg.in/square/go-jose.v1        e3f973b66b91445ec816dd7411ad1b6495a5a2fc  v1.0.2        Apache'
  'gopkg.in/tylerb/graceful.v1       84177357ab104029f9237abcb52339a7b80760ef  tags/v1.2.7   MIT'
  'gopkg.in/yaml.v2                  a83829b6f1293c91addabc89d0571c246397bbf4  heads/v2      MIT,LGPL3'
)
_specparse() {
  local import commit desc lic
  read import commit desc lic <<<"$1"

  local name=${import##*/}; name=${name%%.v*}

  local ver
  vre='^(tags/)?v[^-]+$'
  if [[ $desc =~ $vre ]]; then
    commit="${desc#tags/}"
    ver="${commit#v}"
  else
    ver="$commit"
  fi

  local url pkg
  case "$import" in
    github.com/*)
      url=https://$import/archive/${commit}.tar.gz
      ;;
    gopkg.in/*)
      pkg=${import#gopkg.in/}
      pkg=${pkg%%.v*}
      [[ $pkg = */* ]] || pkg=go-${pkg}/${pkg}
      url=https://github.com/${pkg}/archive/${commit}.tar.gz
      ;;
    golang.org/x/*)
      url=https://github.com/golang/${import#golang.org/x/}/archive/${commit}.tar.gz
      ;;
    *)
      error "You need to update the _specparse() function to support import: %q" "$import"
      exit 3
      ;;
  esac
  echo "${name} ${ver} ${url}"
}

license=($(
  for spec in "${_source[@]}"; do
    read import commit desc lic <<<"$spec"
    printf '%s\n' ${lic//,/ }
  done | sort -u
))
source=($(
  for spec in "${_source[@]}"; do
    read name ver url <<<"$(_specparse "$spec")"
    echo "$name-$ver.tar.gz::$url"
  done
)
  acmetool-redirector.service
  acmetool.sysusers
)
md5sums=('10b9e98a923f8fa0c864f8bdd35fbecd'
         '46654457851ef6e7f795df572a710fb5'
         'fef2a852aab48bbfd89cd872b315ce11'
         'e3a029e3c62796fdff8fc61ffe888235'
         'fa01f0cee040b8307cdc989ef95144be'
         '11651a53b4e33190c230e12d9af41d1a'
         'd15021ff2511e28417c4c0891c15a595'
         '5112b44c1dce49d44059c5fd20689aa6'
         '785505b477269cfec6069918a1876497'
         'eaed246cf927a4aa2cd2c01959ccd632'
         '123bc1f8f3dc842fc1dfccf65e4ffe6b'
         'bea03fee4cabfb602555e6b3ec4091f0'
         'a100c218269357217b8619e5acff83e6'
         'd0cd15432cf30fae3d6594f3f0839171'
         '4f1ce87e11abc3da157a380bce08a256'
         '86c7c12e82422cbbe4c5378642b73ae8'
         'da6e0a74b19c40839fd8e9b3cc2673ed'
         '50ba53846f917bc2d7dbde289d257891'
         'e1e375f2bed8df78d0f39dfb224ac137'
         'b08b85ab86aa2bc685b0345f60709db3'
         'c2565474cb007f1952be9c066ccfa286'
         '429d0652cb564b90691ee2be617c514b'
         'a364243349d387c8a639f9b44db7b6e8'
         'a2bdbf2c9ec7c0c70aedc85dfdbb8b33'
         '0aef876f153e0b862c3918fe0de88ce6'
         'ed07a5ae129a7203d7f5c1d68472d394'
         '4a173e4c8b5208cc0c31b16216a88206'
         'a7663eb89e3a52c129d5061c3c173ce3')

prepare() {
  cd "$srcdir"
  local spec
  for spec in "${_source[@]}"; do
    local import commit desc lic
    read import commit desc lic <<<"$spec"
    local name ver url
    read name ver url <<<"$(_specparse "$spec")"

    mkdir -p "$(dirname "gopath/src/$import")"
    ln -srTf "${name}-${ver}" "gopath/src/$import"
  done
}

build() {
  local buildinfo="$pkgname $pkgver"'$\n'"built for Parabola GNU/Linux-libre"

  cd "$srcdir/gopath"
  GOPATH=$PWD go build \
        -ldflags "-X github.com/hlandau/degoutils/buildinfo.RawBuildInfo=$(base64 -w 0 <<< "$buildinfo")" \
        github.com/hlandau/acme/cmd/acmetool

  cd "$srcdir"
  gopath/acmetool --help-man > acmetool.8
}

package() {
  cd "$srcdir"
  install -Dm755 gopath/acmetool "$pkgdir"/usr/bin/acmetool
  install -Dm644 acmetool.8  "$pkgdir"/usr/share/man/man8/acmetool.8
  install -Dm644 acmetool-redirector.service  "$pkgdir"/usr/lib/systemd/system/acmetool-redirector.service
  install -Dm644 acmetool.sysusers  "$pkgdir"/usr/lib/sysusers.d/acmetool.conf

  install -d "$pkgdir"/usr/share/doc/$pkgname
  install -Dm644 acme-$pkgver/README.md acme-$pkgver/_doc/* -t "$pkgdir"/usr/share/doc/$pkgname

  install -d "$pkgdir"/usr/share/licenses/$pkgname
  local spec
  for spec in "${_source[@]}"; do
    local import commit desc lic
    read import commit desc lic <<<"$spec"
    local name ver url
    read name ver url <<<"$(_specparse "$spec")"

    local base=$name
    [[ $name == acme ]] || base=lib-$base
    base="$pkgdir"/usr/share/licenses/$pkgname/$base
    case $name in
      acme)
        install -m644 $name-$ver/_doc/COPYING.MIT $base.COPYING.txt
        ;;
      yaml)
        install -m644 $name-$ver/LICENSE         $base-primary.LICENSE.txt
        install -m644 $name-$ver/LICENSE.libyaml $base-libyaml.LICENSE.txt
        ;;
      kingpin|units)
        install -m644 $name-$ver/COPYING $base.COPYING.txt
        ;;
      net|crypto)
        install -m644 $name-$ver/LICENSE $base.LICENSE.txt
        install -m644 $name-$ver/PATENTS $base.PATENTS.txt
        ;;
      ansicolor|clock|dbus|degoutils|go-isatty|go-jose|go-systemd|go.uuid|graceful|gspt|pb|pflag|template)
        install -m644 $name-$ver/LICENSE $base.LICENSE.txt
        ;;
      go-wordwrap)
        install -m644 $name-$ver/LICENSE.md $base.LICENSE.txt
        ;;
      svcutils)
        grep -h © $name-$ver/README.md           > $base-primary.txt
        grep -h © $name-$ver/systemd/* | sort -u > $base-systemd.txt
        ;;
      xlog|link)
        sed -n '/## License/,$p' $name-$ver/README.md > $base.txt
        ;;
      service)
        sed -n '/ISC License/,${s/^\s*//p}' $name-$ver/README.md > $base.txt
        ;;
      configurable)
        grep © $name-$ver/README.md > $base.txt
        ;;
      easyconfig)
        sed -n '/^License$/,$p' $name-$ver/README.md > $base.txt
        ;;
      *)
        error 'No rule for license of package %s' $name
        false
        ;;
    esac
  done
}
