# Maintainer (Arch:qemu): Tobias Powalowski <tpowa@archlinux.org>
# Contributor (Arch:qemu): Sébastien "Seblu" Luttringer <seblu@seblu.net>
# Maintainer: Luke Shumaker <lukeshu@parabola.nu>
# Contributor: Márcio Silva <coadde@hyperbola.info>

# "Do I need to rebuild?" : A flowchart
#
#                    ,--> pixman-static ------------------------------------,
#                    |      0.34.0-1.static2                                |
# qemu-user-static --+------------------------+----> pcre-static -----------+--> glibc
#  2.12.0-1.static1  |                        |        8.42-1.static1       |      2.27-3
#                    `--> glib2-static -------+----> libffi-static ---------+
#                           2.56.1-1.static1  |        3.2.1-2.static2      |
#                                             +----> libutil-linux-static --+
#                                             |        2.32-3.static1       |
#                                             `----> zlib ------------------'
#                                                      1:1.2.11-2

_pkgbase=qemu
pkgname=(qemu-user-static qemu-user-static-binfmt)
pkgdesc="A generic and open source machine emulator and virtualizer"
pkgver=3.1.0
pkgrel=1
pkgrel+=.static1
arch=(x86_64)
arch+=(i686 armv7h)
license=(GPL2 LGPL2.1)
url="http://wiki.qemu.org/"
depends=()
makedepends=(pixman-static python glib2-static pcre-static)
source=(https://download.qemu.org/qemu-$pkgver.tar.xz{,.sig}
        allow_elf64.patch)
sha512sums=('7e8dae823937cfac2f0c60406bd3bdcb89df40313dab2a4bed327d5198f7fcc68ac8b31e44692caa09299cc71256ee0b8c17e4f49f78ada8043d424f5daf82fe'
            'SKIP'
            'b450625ff1e705f8c7eed9e2c0c4fe2179ca061df88a1a777c861c11d543c151cd0160f7f7227babdfe8b36000de084cbcb6fd7bf0f93d2f936c2e65082c82bf')
validpgpkeys=('CEACC9E15534EBABB82D3FA03353C9CEF108B584')

case $CARCH in
  i?86) _corearch=i386 ;;
  x86_64) _corearch=x86_64 ;;
esac

prepare() {
  mkdir build-static
  mkdir -p extra-arch-static/usr/{bin,share/qemu}

  cd ${_pkgbase}-${pkgver}
  sed -i 's/vte-2\.90/vte-2.91/g' configure

  patch -p1 < ../allow_elf64.patch
}

build() {
  local flags=(
    --static
    --disable-system # disable building qemu-system-$CPU, we only want qemu-$CPU
    --enable-linux-user
    --disable-modules
    --disable-guest-agent # disable building qemu-ga
    --disable-guest-agent-msi
    --disable-tools # disable building the qemu-{io,nbd,img} tools
    --disable-blobs # disable installing firmware files used by system
    --disable-docs

    # jemalloc-static isn't packaged
    --disable-jemalloc

    # These libraries are only used for system or tools, but even
    # though that's disabled, libqemuutil.a still tries to link
    # against them unless we specifically tell it not to (the linkage
    # would be removed at the final linker's tree-shaking).
    --disable-gcrypt
    --disable-nettle
  )
  _build static "${flags[@]}" \
    --audio-drv-list= \
    --disable-bluez \
    --disable-sdl \
    --disable-gtk \
    --disable-vte \
    --disable-opengl \
    --disable-virglrenderer
}

_build() (
  cd build-$1

  # qemu vs. make 4 == bad
  export ARFLAGS=rv

  # http://permalink.gmane.org/gmane.comp.emulators.qemu/238740
  export CFLAGS+=" -fPIC"

  ../${_pkgbase}-${pkgver}/configure \
    --prefix=/usr \
    --sysconfdir=/etc \
    --localstatedir=/var \
    --libexecdir=/usr/lib/qemu \
    --python=/usr/bin/python3 \
    --smbd=/usr/bin/smbd \
    --with-sdlabi=2.0 \
    --enable-modules \
    --enable-jemalloc \
    "${@:2}"

  make V=1
)

package_qemu-user-static() {
  pkgdesc="QEMU user-mode emulation (static binaries)"

  make -C build-static DESTDIR="$pkgdir" install "${@:2}"

  rm -fvr -- "$pkgdir"/{var,usr/lib,usr/share}

  local prog
  for prog in "$pkgdir"/usr/bin/*; do
    mv -vnT -- "$prog" "${prog%-static}-static"
  done
}

package_qemu-user-static-binfmt() {
  pkgdesc="binfmt registration for QEMU user-mode emulation"
  depends=("qemu-user-static=$pkgver")

  cd ${_pkgbase}-${pkgver}

  install -d "$pkgdir"/usr/lib/binfmt.d

  ./scripts/qemu-binfmt-conf.sh \
       --qemu-path /usr/bin \
       --systemd ALL \
       --exportdir "$pkgdir"/usr/lib/binfmt.d \
       --credential yes

  # add the "-static" suffix
  sed -i 's/:[^:]*$/-static&/' --  "$pkgdir"/usr/lib/binfmt.d/*.conf
}
