# Maintainer (Arch): carstene1ns <arch carsten-teibes de> - http://git.io/ctPKG
# Maintainer: André Silva <emulatorman@parabola.nu>
# Maintainer: Márcio Silva <coadde@parabola.nu>

_pkgname=reicast
pkgname=${_pkgname}-git
pkgver=r1703.a5b7011
pkgrel=4
pkgdesc="A multiplatform Sega Dreamcast/NAOMI emulator"
arch=('i686' 'x86_64' 'armv7h')
url="http://${_pkgname}.com/"
license=('GPL2')
provides=("${_pkgname}")
conflicts=("${_pkgname}")
makedepends=('git')
depends=('libgl' 'alsa-plugins' 'libpulse' 'python-evdev') # 'sdl2')
source=(${_pkgname}-${pkgver}::"git+https://github.com/${_pkgname}/${_pkgname}-emulator.git"
        'fix-dyna-constprop.patch'
        'futuristic-memops.patch'
        'sh-block-graphs.patch'
        'purupuru.patch'
        'multiplayer-config.patch'
        'no-buffer-overflows.patch'
        'fix-x11-keyboard-support.patch'
        'update-softrend.patch')
sha256sums=('SKIP'
            'c14287cf2b2289b9de28cedeee06fcb89ca40da50e34607780dce55d7d8e5fd6'
            'ce3fe9f10555c473cafbf4e85724ebe7a8535a1fa3bfae3c9bc0fe518024f71e'
            '94694d1b615facb39b5ee92ed90c6cefc77fab23fb97f2fcc82e0aa6e1cb14c5'
            '02b01a8b1a33aa543213371ec6022559c1eebbeb2d6a20173995ee618d7396a1'
            '9ad37cfed1de29a754388f8655dd58d98a3459d5f65475c8d000d92cabb96e43'
            'd673ba39c1f203f6127ac78f0c5cad35bde48ab4eb59d46ed6d1536f27f39be6'
            '188b32f462f8cdb3b4b31b505ca2cbbd8049bb0457689455f281aea4f9c562c0'
            '67f4e592b557d7657b587a6bc6588e6b6fcf999d44924f8d6b8cb4c86e59785e')

pkgver() {
  cd "${srcdir}/${_pkgname}-${pkgver}"
  printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

prepare() {
  cd "${srcdir}/${_pkgname}-${pkgver}"

  # Fix GCC 6.1 errors
  sed -i 's|g++|g++ -std=gnu++98|
         ' shell/linux/Makefile
#  sed -i 's|[#]include[ ][<]stdint[.]h[>]|#include <stdint.h>\n#include <iostream>|
#         ' core/deps/libelf/elf32.cpp
#  sed -i 's|||
#         ' core/linux-dist/evdev.cpp

  # Remove nonfree fp.h header
  rm -v core/deps/libpng/fp.h

  # Add extra patches
  patch -Np1 -i "$srcdir"/fix-dyna-constprop.patch
  patch -Np1 -i "$srcdir"/futuristic-memops.patch
  patch -Np1 -i "$srcdir"/sh-block-graphs.patch
#  patch -Np1 -i "$srcdir"/no-buffer-overflows.patch # Experimental patch
  patch -Np1 -i "$srcdir"/fix-x11-keyboard-support.patch
  patch -Np1 -i "$srcdir"/update-softrend.patch

  # Enable Puru Puru Pack support (rumble)
  patch -Np1 -i "$srcdir"/purupuru.patch

  # Enable Multiplayer config support
  patch -Np1 -i "$srcdir"/multiplayer-config.patch

  # Remove unused libraries and headers files
  rm -rv shell/linux-deps

  # Add experimental shadow support: http://github.com/reicast-emulator/issues/94
  sed -i 's|//DrawModVols|DrawModVols|' core/rend/gles/gldraw.cpp

  # Fix Xbox Input Axis
  sed -i 's|DC_AXIS_LT, 0, 0, DC_AXIS_RT|0, 0, DC_AXIS_RT, DC_AXIS_LT|' core/linux-dist/joystick.cpp
  sed -i 's|DC_AXIS_LT, 0, 0, DC_AXIS_RT|0, 0, DC_AXIS_RT, DC_AXIS_LT|' core/sdl/sdl.cpp

  # Enable Pulseaudio
  sed -i 's|#USE_PULSEAUDIO|USE_PULSEAUDIO|' shell/linux/Makefile

  # Enable SDL
#  sed -i 's|USE_JOYSTICK[ ][:][=][ ]1|USE_JOYSTICK := 1\nUSE_SDL := 1|' shell/linux/Makefile
}

build() {
  mkdir -vm 0755 "$srcdir"/pkgbuild-dir
  mkdir -vm 0755 "$srcdir"/purupuru-dir
  mkdir -vm 0755 "$srcdir"/microphone-dir
  if [ $CARCH == x86_64 ]; then
    make -C ${_pkgname}-${pkgver}/shell/linux platform=x64 PREFIX=/usr DESTDIR="$srcdir"/pkgbuild-dir install
    # Enable Puru Puru Pack (rumble support)
    sed -i 's|SegaVMU[,]i[,]1|PurupuruPack,i,1|' ${_pkgname}-${pkgver}/core/hw/maple/maple_cfg.cpp
    make -C ${_pkgname}-${pkgver}/shell/linux platform=x64 PREFIX=/usr DESTDIR="$srcdir"/purupuru-dir install
    # Enable Microphone support
    sed -i 's|PurupuruPack[,]i[,]1|Microphone,i,1|' ${_pkgname}-${pkgver}/core/hw/maple/maple_cfg.cpp
    make -C ${_pkgname}-${pkgver}/shell/linux platform=x64 PREFIX=/usr DESTDIR="$srcdir"/microphone-dir install
    # Disabled, due is unsupported code with gnu++11 or gnu++98
    # mkdir -vm 0755 "$srcdir"/pkgbuild-cpp-dir
    # make -C ${_pkgname}-${pkgver}/shell/linux platform=lincpp PREFIX=/usr DESTDIR="$srcdir"/pkgbuild-cpp-dir install
    # Enable Naomi support
    sed -i 's|USE_JOYSTICK[ ][:][=][ ]1|USE_JOYSTICK := 1\nNAOMI := 1|' ${_pkgname}-${pkgver}/shell/linux/Makefile
    make -C ${_pkgname}-${pkgver}/shell/linux platform=x64 PREFIX=/usr DESTDIR="$srcdir"/naomi-dir install
    # Disabled, due is unsupported code with gnu++11 or gnu++98
    # mkdir -vm 0755 "$srcdir"/naomi-cpp-dir
    # make -C ${_pkgname}-${pkgver}/shell/linux platform=lincpp PREFIX=/usr DESTDIR="$srcdir"/pkgbuild-cpp-dir install
  elif [ $CARCH == i686 ]; then
    make -C ${_pkgname}-${pkgver}/shell/linux platform=x86 PREFIX=/usr DESTDIR="$srcdir"/pkgbuild-dir install
    # Enable Puru Puru Pack (rumble support)
    sed -i 's|SegaVMU[,]i[,]1|PurupuruPack,i,1|' ${_pkgname}-${pkgver}/core/hw/maple/maple_cfg.cpp
    make -C ${_pkgname}-${pkgver}/shell/linux platform=x86 PREFIX=/usr DESTDIR="$srcdir"/purupuru-dir install
    # Enable Microphone support
    sed -i 's|PurupuruPack[,]i[,]1|Microphone,i,1|' ${_pkgname}-${pkgver}/core/hw/maple/maple_cfg.cpp
    make -C ${_pkgname}-${pkgver}/shell/linux platform=x86 PREFIX=/usr DESTDIR="$srcdir"/microphone-dir install
    # Enable Naomi support
    sed -i 's|USE_JOYSTICK[ ][:][=][ ]1|USE_JOYSTICK := 1\nNAOMI := 1|' ${_pkgname}-${pkgver}/shell/linux/Makefile
    make -C ${_pkgname}-${pkgver}/shell/linux platform=x86 PREFIX=/usr DESTDIR="$srcdir"/naomi-dir install
  elif [ $CARCH == armv7h ]; then
    make -C ${_pkgname}-${pkgver}/shell/linux platform=armv7h PREFIX=/usr DESTDIR="$srcdir"/pkgbuild-dir install
    # Enable Puru Puru Pack (rumble support)
    sed -i 's|SegaVMU[,]i[,]1|PurupuruPack,i,1|' ${_pkgname}-${pkgver}/core/hw/maple/maple_cfg.cpp
    make -C ${_pkgname}-${pkgver}/shell/linux platform=armv7h PREFIX=/usr DESTDIR="$srcdir"/purupuru-dir install
    # Enable Microphone support
    sed -i 's|PurupuruPack[,]i[,]1|Microphone,i,1|' ${_pkgname}-${pkgver}/core/hw/maple/maple_cfg.cpp
    make -C ${_pkgname}-${pkgver}/shell/linux platform=armv7h PREFIX=/usr DESTDIR="$srcdir"/microphone-dir install
    # Enable Naomi support
    sed -i 's|USE_JOYSTICK[ ][:][=][ ]1|USE_JOYSTICK := 1\nNAOMI := 1|' ${_pkgname}-${pkgver}/shell/linux/Makefile
    make -C ${_pkgname}-${pkgver}/shell/linux platform=armv7h PREFIX=/usr DESTDIR="$srcdir"/naomi-dir install
  fi
}

package() {
  cp -va "$srcdir"/pkgbuild-dir/*						"$pkgdir"
  cp -va "$srcdir"/purupuru-dir/usr/bin/${_pkgname}				"$pkgdir"/usr/bin/${_pkgname}-purupuru
  cp -va "$srcdir"/microphone-dir/usr/bin/${_pkgname}				"$pkgdir"/usr/bin/${_pkgname}-microphone
  cp -va "$srcdir"/naomi-dir/usr/bin/${_pkgname}-naomi				"$pkgdir"/usr/bin/${_pkgname}-naomi
  cp -va "$srcdir"/purupuru-dir/usr/share/applications/${_pkgname}.desktop	"$pkgdir"/usr/share/applications/${_pkgname}-purupuru.desktop
  cp -va "$srcdir"/microphone-dir/usr/share/applications/${_pkgname}.desktop	"$pkgdir"/usr/share/applications/${_pkgname}-microphone.desktop
  cp -va "$srcdir"/naomi-dir/usr/share/applications/${_pkgname}.desktop		"$pkgdir"/usr/share/applications/${_pkgname}-naomi.desktop
  cp -va "$srcdir"/purupuru-dir/usr/share/man/man1/${_pkgname}.1		"$pkgdir"/usr/share/man/man1/${_pkgname}-purupuru.1
  cp -va "$srcdir"/microphone-dir/usr/share/man/man1/${_pkgname}.1		"$pkgdir"/usr/share/man/man1/${_pkgname}-microphone.1
  cp -va "$srcdir"/naomi-dir/usr/share/man/man1/${_pkgname}.1			"$pkgdir"/usr/share/man/man1/${_pkgname}-naomi.1
  sed -i '\|Name| s|Reicast|Reicast with Puru Puru Pack support|
          \|Exec| s|reicast|reicast-purupuru|
         ' "$pkgdir"/usr/share/applications/${_pkgname}-purupuru.desktop
  sed -i '\|Name| s|Reicast|Reicast with Microphone support|
          \|Exec| s|reicast|reicast-microphone|
         ' "$pkgdir"/usr/share/applications/${_pkgname}-microphone.desktop
  sed -i '\|Name| s|Reicast|Reicast NAOMI|
          \|Exec| s|reicast|reicast-naomi|
          s|Dreamcast|Naomi|
          s|dreamcast|naomi|
         ' "$pkgdir"/usr/share/applications/${_pkgname}-naomi.desktop \
           "$pkgdir"/usr/share/man/man1/${_pkgname}-naomi.1
  if [ -d "$srcdir"/pkgbuild-cpp-dir ]; then
    cp -va "$srcdir"/pkgbuild-cpp-dir/usr/bin/${_pkgname}				"$pkgdir"/usr/bin/${_pkgname}-c++
    cp -va "$srcdir"/pkgbuild-cpp-dir/usr/share/applications/${_pkgname}.desktop	"$pkgdir"/usr/share/applications/${_pkgname}-c++.desktop
    cp -va "$srcdir"/pkgbuild-cpp-dir/usr/share/man/man1/${_pkgname}.1			"$pkgdir"/usr/share/man/man1/${_pkgname}-c++.1
    sed -i '\|Name| s|Reicast|Reicast C++|
            \|Exec| s|reicast|reicast-c++|
           ' "$pkgdir"/usr/share/applications/${_pkgname}-c++.desktop
  elif [ -d "$srcdir"/naomi-cpp-dir ]; then
    cp -va "$srcdir"/naomi-cpp-dir/usr/bin/${_pkgname}                               "$pkgdir"/usr/bin/${_pkgname}-naomi-c++
    cp -va "$srcdir"/naomi-cpp-dir/usr/share/applications/${_pkgname}.desktop        "$pkgdir"/usr/share/applications/${_pkgname}-naomi-c++.desktop
    cp -va "$srcdir"/naomi-cpp-dir/usr/share/man/man1/${_pkgname}.1                    "$pkgdir"/usr/share/man/man1/${_pkgname}-naomi-c++.1
    sed -i '\|Name| s|Reicast|Reicast NAOMI C++|
            \|Exec| s|reicast|reicast-naomi-c++|
            s|Dreamcast|Naomi|
            s|dreamcast|naomi|
           ' "$pkgdir"/usr/share/applications/${_pkgname}-naomi-c++.desktop \
             "$pkgdir"/usr/share/man/man1/${_pkgname}-naomi-c++.1
  fi
  install -Dm 644 ${_pkgname}-${pkgver}/LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE
}