# Maintainer: aimileus <me at aimileus dot nl>
# Maintainer: Maciej Borzecki <maciek.borzecki@gmail.com>
# Contributor: Timothy Redaelli <timothy.redaelli@gmail.com>
# Contributor: Zygmunt Krynicki <me at zygoon dot pl>

pkgname=snapd
pkgdesc="Service and tools for management of snap packages."
depends=('squashfs-tools' 'libseccomp' 'libsystemd' 'apparmor')
optdepends=('bash-completion: bash completion support'
            'xdg-desktop-portal: desktop integration')
pkgver=2.68.4
pkgrel=1
arch=('x86_64' 'i686' 'armv7h' 'aarch64')
url="https://github.com/snapcore/snapd"
license=('GPL3')
makedepends=('git' 'go' 'go-tools' 'libseccomp' 'libcap' 'systemd' 'xfsprogs' 'python-docutils' 'apparmor' 'autoconf-archive')
conflicts=('snap-confine')
options=('!strip' 'emptydirs' '!lto')
install=snapd.install
source=(
    "$pkgname-$pkgver.tar.xz::https://github.com/snapcore/${pkgname}/releases/download/${pkgver}/${pkgname}_${pkgver}.vendor.tar.xz"
)

sha256sums=('8c6ad7ee2c2a4cb5b59f836a74843cf8337e692dddd33b85c17418e7a6837e80')


prepare() {
  cd "$pkgname-$pkgver"

  for name in "${source[@]}"; do
      if [[ "${name%.patch}" == "$name" ]]; then
          # not a patch
          continue
      fi
      msg2 "applying $name"
      patch -p1 -i "$srcdir/$name"
  done
}

build() {
  cd "$pkgname-$pkgver"

  unset GO111MODULE

  export CGO_ENABLED="1"
  export CGO_CFLAGS="${CFLAGS}"
  export CGO_CPPFLAGS="${CPPFLAGS}"
  export CGO_CXXFLAGS="${CXXFLAGS}"
  export CGO_LDFLAGS="${LDFLAGS}"

  # Generate snapd.defines.mk, this file is included by snapd.mk.
  cat >"$srcdir/snapd.defines.mk" <<__DEFINES__
# This file is generated by snapd packaging
# Directory variables.
prefix = /usr
bindir = /usr/bin
sbindir = /usr/sbin
libexecdir = /usr/lib
mandir = /usr/share/man
datadir = /usr/share
localstatedir = /var
sharedstatedir = /var/lib
unitdir = /usr/lib/systemd/system
builddir = $srcdir/_go_build
# Build configuration
with_core_bits = 0
with_alt_snap_mount_dir = 1
with_apparmor = 1
with_testkeys = 0
EXTRA_GO_BUILD_FLAGS = -trimpath
EXTRA_GO_LDFLAGS = -w -s
__DEFINES__

  ./mkversion.sh $pkgver-$pkgrel

  make -f packaging/snapd.mk \
       SNAPD_DEFINES_DIR="$srcdir"

  # Generate data files such as real systemd units, dbus service, environment
  # setup helpers out of the available templates
  make -C data \
       BINDIR=/bin \
       LIBEXECDIR=/usr/lib \
       SYSTEMDSYSTEMUNITDIR=/usr/lib/systemd/system \
       SNAP_MOUNT_DIR=/var/lib/snapd/snap \
       SNAPD_ENVIRONMENT_FILE=/etc/default/snapd

  cd cmd
  autoreconf -i -f
  ./configure \
    --prefix=/usr \
    --sysconfdir=/etc \
    --localstatedir=/var \
    --libexecdir=/usr/lib/snapd \
    --with-snap-mount-dir=/var/lib/snapd/snap \
    --enable-apparmor \
    --enable-nvidia-biarch \
    --enable-merged-usr
  make $MAKEFLAGS
}

check() {
    cd "$pkgname-$pkgver"

    # make sure the binaries that need to be built statically really are
    for binary in snap-exec snap-update-ns snapctl; do
        if ! LC_ALL=C ldd "$srcdir/_go_build/$binary" 2>&1 | grep -q 'not a dynamic executable'; then
            echo "$binary is not a static binary"
            exit 1
        fi
    done
}

package() {
  cd "$pkgname-$pkgver"

  # Install bash completion
  install -Dm644 data/completion/bash/snap \
    "$pkgdir/usr/share/bash-completion/completions/snap"
  install -Dm644 data/completion/bash/complete.sh \
    "$pkgdir/usr/lib/snapd/complete.sh"
  install -Dm644 data/completion/bash/etelpmoc.sh \
    "$pkgdir/usr/lib/snapd/etelpmoc.sh"
  # Install zsh completion
  install -Dm644 data/completion/zsh/_snap \
    "$pkgdir/usr/share/zsh/site-functions/_snap"

  # Install systemd units, dbus services and a script for environment variables
  make -C data/ install \
     DBUSSERVICESDIR=/usr/share/dbus-1/services \
     BINDIR=/usr/bin \
     SYSTEMDSYSTEMUNITDIR=/usr/lib/systemd/system \
     SNAP_MOUNT_DIR=/var/lib/snapd/snap \
     DESTDIR="$pkgdir"

  make -C cmd install DESTDIR="$pkgdir/"

  make -f packaging/snapd.mk \
       SNAPD_DEFINES_DIR="$srcdir" \
       DESTDIR="$pkgdir" \
       install

  # Install the "info" data file with snapd version
  install -m 644 -D "data/info" "$pkgdir/usr/lib/snapd/info"

  # these locations are created at runtime but were not part of the packaging
  # previously, thus would trigger a file conflict on upgrade
  rm -rfv "$pkgdir/var/cache/snapd"
  rm -rfv "$pkgdir/var/lib/snapd/snap/README"
  rm -rfv "$pkgdir/var/lib/snapd/state.json"
  rm -rfv "$pkgdir/var/lib/snapd/system-key"

  # Remove snappy core specific units
  rm -fv "$pkgdir/usr/lib/snapd/snapd.core-fixup.sh"
  rm -fv "$pkgdir/usr/bin/ubuntu-core-launcher"
  rm -fv "$pkgdir/usr/lib/snapd/system-shutdown"

  # drop the last remaining Ubuntu Core specific service
  rm -fv "$pkgdir/usr/lib/systemd/system/snapd.failure.service"

  # Remove prompt services
  rm -fv "$pkgdir/usr/lib/systemd/system/snapd.aa-prompt-listener.service"
  rm -fv "$pkgdir/usr/lib/systemd/user/snapd.aa-prompt-ui.service"
  rm -fv "$pkgdir/usr/share/dbus-1/services/io.snapcraft.Prompt.service"
}