# Maintainer: Luke Shumaker <lukeshu@sbcglobal.net>
# Contributor: Sven Schneider <archlinux.sandmann@googlemail.com>
# Contributor: bugix
# Contributor: Lubosz Sarnecki <lubosz at gmail>

# unfortunately we can't use $_suf in function names, but sed makes it ok
_suf='-unstable'
pkgname=(
    openni$_suf
    openni$_suf-docs

    openni$_suf-core
    openni$_suf-core-samples
    openni$_suf-core-samples-source
    
    openni$_suf-mono
    openni$_suf-mono-samples
    openni$_suf-mono-samples-source

    openni$_suf-java
    openni$_suf-java-samples
    openni$_suf-java-samples-source
    )
pkgver=1.4.0.2
pkgrel=1
arch=('i686' 'x86_64')
url="http://www.openni.org/"
license=('GPL')
makedepends=('git' 'doxygen' 'graphviz')
options+=('!strip')
source=()
md5sums=()

__gitroot="git://github.com/OpenNI/OpenNI.git"
_gitname="openni"
_gitbranch="Unstable-$pkgver"

_os='Linux'
case "${CARCH}" in
'x86_64') _arch=x64;;
'i686')   _arch=x86;;
'arm')    _arch=Arm;; # untested
*)        _arch=UNSUPPORTED_ARCH;;
esac
_platform="${_os}-${_arch}"

export MAKEFLAGS+=' -j1 '

build() {
  cd "${srcdir}"
  msg "Connecting to GIT server...."

  #if [ -d ${_gitname} ] ; then
    cd ${_gitname}
  #  git checkout master
  #  git pull origin
  #  msg "The local files are updated."
  #else
  #  git clone ${__gitroot} ${_gitname}
  #  cd ${_gitname}
  #fi
  git checkout ${_gitbranch}
  cd ..

  msg "GIT checkout done or server timeout"
  msg "Starting build..."

  #rm -rf "${srcdir}/${_gitname}-build"
  #git clone "${srcdir}/${_gitname}" "${srcdir}/${_gitname}-build"
  cd "${srcdir}/${_gitname}-build"

  # PATCH
  sed -i 's/python /python2 /' "Platform/${_os}/CreateRedist/RedistMaker"

  for sample in NiViewer NiSimpleViewer NiUserTracker NiUserSelection NiHandTracker; do
      echo 'USED_LIBS += GL' >> "Platform/${_os}/Build/Samples/${sample}/Makefile"
  done

  echo '
abs_core: $(ALL_MODULES) $(ALL_UTILS)
abs_core_samples: $(CORE_SAMPLES)
abs_java: $(ALL_JAVA_PROJS)
abs_java_samples: $(JAVA_SAMPLES)
abs_mono: $(ALL_MONO_PROJS)
abs_mono_samples: $(MONO_SAMPLES) $(MONO_FORMS_SAMPLES)
' >> "Platform/${_os}/Build/Makefile"

  
  # BUILD
  cd "Platform/${_os}/Build"
  make -j1 \
      abs_core abs_core_samples \
      abs_java abs_java_samples \
      abs_mono abs_mono_samples
  cd "../Bin/${_arch}-Release"
  ln NiViewer Sample-NiViewer

  cd '../../../Source/DoxyGen'
  mkdir html
  doxygen Doxyfile
  rm -rf html/*.map html*.md5 html/*.hhc html/*.hhp
}

package_openni-unstable() {
  pkgdesc="Open Natural Interface framework"
  depends=("openni$_suf-core")
  optdepends=("openni$_suf-docs: programmer documentation")
  provides=('openni')
  conflicts=('openni')
}

package_openni-unstable-docs() {
  pkgdesc="OpenNI programmer documentation"
  arch=('any')
  provides=('openni-docs')
  conflicts=('openni-docs')

  cd "${srcdir}/${_gitname}-build/Source/DoxyGen/"
  install -d "${pkgdir}/usr/share/openni"
  cp -r html "${pkgdir}/usr/share/openni"
}

package_openni-unstable-core() {
  pkgdesc="OpenNI core libraries"
  depends=('libusb' 'freeglut')
  install="openni-core.install"
  provides=('openni-core')
  conflicts=('openni-core')

  cd "${srcdir}/${_gitname}-build/Platform/${_os}/Bin/${_arch}-Release"

  LIB_FILES='
    libnimCodecs.so
    libnimMockNodes.so
    libnimRecorder.so
    libOpenNI.so
    '
  install -d "${pkgdir}/usr/lib"
  install -m755 $LIB_FILES "${pkgdir}/usr/lib"

  BIN_FILES='niReg niLicense'
  install -d "${pkgdir}/usr/bin"
  install -m755 $BIN_FILES "${pkgdir}/usr/bin"

  cd "${srcdir}/${_gitname}-build/Include"
  install -d "${pkgdir}/usr/include/ni"
  install -m644 *.h "${pkgdir}/usr/include/ni"
  cp -r "${_platform}" "${pkgdir}/usr/include/ni"

  cd "${srcdir}/${_gitname}-build/Platform/${_os}/Build"
  install -d "${pkgdir}/usr/share"
  cp -r Common "${pkgdir}/usr/share/common"

  install -d "${pkgdir}/var/lib/ni"
}

package_openni-unstable-java() {
  pkgdesc="OpenNI java wrapper"
  depends=("openni$_suf" 'java-environment')
  provides=('openni-java')
  conflicts=('openni-java')

  cd "${srcdir}/${_gitname}-build/Platform/${_os}/Bin/${_arch}-Release"

  install -d "${pkgdir}/usr/lib"
  install -m755 libOpenNI.jni.so "${pkgdir}/usr/lib"
  
  install -d "${pkgdir}/usr/share/openni/java"
  install -m755 org.OpenNI.jar "${pkgdir}/usr/share/openni/java"
}

package_openni-unstable-mono() {
  pkgdesc="OpenNI mono wrapper"
  depends=("openni$_suf" 'mono')
  install="openni-mono.install"
  provides=('openni-mono')
  conflicts=('openni-mono')

  cd "${srcdir}/${_gitname}-build/Platform/${_os}/Bin/${_arch}-Release"
  
  install -d "${pkgdir}/usr/share/openni/mono"
  install -m755 OpenNI.net.dll "${pkgdir}/usr/share/openni/mono"
}

# SAMPLES

_install_sample_source() {
  sample=$1
  makefile="Platform/${_os}/Build/Samples/$sample/Makefile"
  install -d                "${pkgdir}/usr/share/openni/samples"
  cp -r "Samples/$sample"   "${pkgdir}/usr/share/openni/samples/$sample"
  install -m644 "$makefile" "${pkgdir}/usr/share/openni/samples/$sample"
}

CORE_SAMPLES='
  AudioSample
  BackRecorder
  CRead
  ConvertXToONI
  HandTracker
  RecordSynthetic
  SimpleCreate
  UserSelection
  Viewer
              SimpleRead SimpleViewer UserTracker'
MONO_SAMPLES='SimpleRead SimpleViewer UserTracker'
JAVA_SAMPLES='SimpleRead SimpleViewer UserTracker'

package_openni-unstable-core-samples() {
  pkgdesc="OpenNI sample programs"
  depends=("openni$_suf-core")
  optdepends=('openni-core-samples-source: source code for the samples')
  provides=('openni-core-samples')
  conflicts=('openni-core-samples')

  cd "${srcdir}/${_gitname}-build/Platform/${_os}/Bin/${_arch}-Release"
  install -d "${pkgdir}/usr/bin"
  for sample in $CORE_SAMPLES; do
    install -m755 Sample-Ni$sample "${pkgdir}/usr/bin/niSample-$sample"
  done
}
package_openni-unstable-core-samples-source() {
  pkgdesc="OpenNI sample programs source code"
  depends=("openni$_suf-core")
  provides=('openni-core-samples-source')
  conflicts=('openni-core-samples-source')

  cd "${srcdir}/${_gitname}-build"
  for sample in Viewer $CORE_SAMPLES; do
    _install_sample_source Ni$sample
  done
}

package_openni-unstable-java-samples() {
  pkgdesc="OpenNI java wrapper sample programs"
  depends=("openni$_suf-java")
  optdepends=("openni$_suf-java-samples-source: source code for the samples")
  arch=('any')
  provides=('openni-java-samples')
  conflicts=('openni-java-samples')

  cd "${srcdir}/${_gitname}-build/Platform/${_os}/Bin/${_arch}-Release"
  install -d "${pkgdir}/usr/bin"
  install -d "${pkgdir}/usr/share/openni/java"
  for sample in $JAVA_SAMPLES; do
    install -m644 org.OpenNI.Samples.$sample.jar "${pkgdir}/usr/share/openni/java"
    echo "#/bin/sh
java -jar /usr/share/openni/java/org.OpenNI.Samples.$sample.jar $@
" > "${pkgdir}/usr/bin/niSample-$sample.jar"
    chmod 755 "${pkgdir}/usr/bin/niSample-$sample.jar"
  done
}
package_openni-unstable-java-samples-source() {
  pkgdesc="OpenNI java wrapper sample programs source code"
  depends=("openni$_suf-java")
  provides=('openni-java-samples-source')
  conflicts=('openni-java-samples-source')

  cd "${srcdir}/${_gitname}-build"
  for sample in $JAVA_SAMPLES; do
    _install_sample_source $sample.java
  done
}

package_openni-unstable-mono-samples() {
  pkgdesc="OpenNI java wrapper sample programs"
  depends=("openni$_suf-mono")
  optdepends=("openni$_suf-mono-samples-source: source code for the samples")
  provides=('openni-mono-samples')
  conflicts=('openni-mono-samples')

  cd "${srcdir}/${_gitname}-build/Platform/${_os}/Bin/${_arch}-Release"
  install -d "${pkgdir}/usr/bin"
  install -d "${pkgdir}/usr/share/openni/mono"
  for sample in $MONO_SAMPLES; do
    install -m755 $sample.net.exe "${pkgdir}/usr/share/openni/mono"
    echo "#/bin/sh
cd /usr/share/openni/mono
mono $sample.net.exe $@
" > "${pkgdir}/usr/bin/niSample-$sample.net"
    chmod 755 "${pkgdir}/usr/bin/niSample-$sample.net"
  done
}
package_openni-unstable-mono-samples-source() {
  pkgdesc="OpenNI mono wrapper sample programs source code"
  depends=("openni$_suf-mono")
  provides=('openni-mono-samples-source')
  conflicts=('openni-mono-samples-source')

  cd "${srcdir}/${_gitname}-build"
  for sample in $MONO_SAMPLES; do
    _install_sample_source $sample.net
  done
}