# Contributor (Arch): John Sowiak <john@archlinux.org>
# Contributor (Arch): tobias <tobias@archlinux.org>
# Maintainer (Arch): Sven-Hendrik Haase <sh@lutzhaase.com>
# Maintainer: Márcio Silva <coadde@parabola.nu>

# Sometimes blender.org takes some time to release patch releases and because the blender package
# is broke, we sometimes need to build from git directly.
# Update because I get so many queries on this:
# Due to our other rolling deps, it's sometimes not possible to build Blender stable releases.
# More often than not, a new openshadinglanguage breaks it and I could either backport fixes
# or simply roll with a new version. I usually choose the latter when the former seems
# unreasonable.

_git=no
_gittagver=v2.72
_gittagrev=b
# blender:                Tue, 21 Oct 2014 11:57:39 +0000 (17:57 +0600)
_gitcommit=9e963a
# blender-addons:         Tue, 21 Oct 2014 19:48:21 +0000 (21:48 +0200)
_gitaddonscommit=b71475
# blender-addons-contrib: Tue, 14 Oct 2014 05:32:33 +0000 (16:32 +1100)
_gitaddonscontribcommit=ea70fe
# blender-translations:   Mon, 13 Oct 2014 19:43:20 +0000 (21:43 +0200)
_gittranslationscommit=02219a

pkgbase=blender
pkgname=("$pkgbase" "$pkgbase-addon-gimp" "$pkgbase-addon-povray")
_pkgver=2.72b
_depver=${_pkgver%[a-z]}
[[ $_git == no  ]] && pkgver=$_pkgver
[[ $_git == yes ]] && pkgver=$_pkgver.git1.$_gitcommit
pkgrel=2.parabola1
epoch=15
_jpgver=1.5
_llvmver=3.5
_povver=3.7
_pyver=3.4
pkgdesc='Fully integrated 3D graphics creation suite, without nonfree CUDA support'
arch=('i686' 'x86_64' 'mips64el')
license=('GPL')
url="http://www.$pkgbase.org"
depends=('boost-libs' 'desktop-file-utils' 'ffmpeg' 'fftw' 'freeglut' 'freetype2'
         'glew' 'hicolor-icon-theme' 'jack' 'libpng' 'libsndfile' 'libspnav'
         'libtiff' 'openal' 'opencolorio' 'opencollada' 'openexr' 'openimageio'
         'openshadinglanguage' 'python' 'shared-mime-info' 'xdg-utils')
makedepends=('boost' 'cmake' 'git' 'llvm') # 'bullet' (boost: for cycles, booleans, audaspace and/or i18n)
optdepends=('bullet: for Rigid Bodies and Physics Simulation'
            #'opencl-mesa: for rendering with optional Mesa OpenCL'
            'blender-addon-gimp: for import GIMP images to scene'
            'blender-addon-luxrender: for optional renderer and exporter with LuxRender'
            'blender-addon-mitsuba: for optional renderer and exporter with Mitsuba (pcr repo)'
            'blender-addon-ogre: for export to Ogre3D formats (pcr repo)'
            'blender-addon-povray:  for optional renderer with POV-Ray'
            'blender-addon-yafaray: for optional renderer with YafaRay (pcr repo)')
conflicts=("$pkgbase-libre" "$pkgbase-libre-spacenav" "$pkgbase-spacenav-libre")
replaces=("$pkgbase-libre" "$pkgbase-libre-spacenav" "$pkgbase-spacenav-libre")
options=('!strip')
install="$pkgbase.install"
[[ $_git == no  ]] && source=("$pkgbase-$pkgver::git://git.$pkgbase.org/$pkgbase.git#tag=$_gittagver$_gittagrev"
                              "$pkgbase-addons-$pkgver::git://git.$pkgbase.org/$pkgbase-addons.git#tag=$_gittagver"
                              "$pkgbase-translations-$pkgver::git://git.$pkgbase.org/$pkgbase-translations.git#tag=$_gittagver")
[[ $_git == yes ]] && source=("$pkgbase-$pkgver::git://git.$pkgbase.org/$pkgbase.git#commit=$_gitcommit"
                              "$pkgbase-addons-$pkgver::git://git.$pkgbase.org/$pkgbase-addons.git#commit=$_gitaddonscommit"
                              "$pkgbase-translations-$pkgver::git://git.$pkgbase.org/$pkgbase-translations.git#commit=$_gittranslationscommit")
source+=("git://git.$pkgbase.org/$pkgbase-addons-contrib.git#commit=$_gitaddonscontribcommit"
         "git://git.$pkgbase.org/scons.git")
md5sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP')

prepare() {
  cd $srcdir/$pkgbase-$pkgver

  git submodule init
  git config submodule.'release/scripts/addons'.url         $srcdir/$pkgbase-addons-$pkgver
  git config submodule.'release/scripts/addons_contrib'.url $srcdir/$pkgbase-addons-contrib
  git config submodule.'release/datafiles/locale'.url       $srcdir/$pkgbase-translations-$pkgver
  git config submodule.'scons'.url                          $srcdir/scons
  git submodule update

  msg 'renaming wrong OS name'
  [[ $(uname -o) == GNU ]] && sed -i 's|BUILD_PLATFORM;|"GNU";|' source/creator/buildinfo.c
  [[ $(uname -o) == GNU/Linux ]] && sed -i 's|BUILD_PLATFORM;|"GNU/Linux";|' source/creator/buildinfo.c
  [[ $(uname -o) == GNU/kFreeBSD ]] && sed -i 's|BUILD_PLATFORM;|"GNU/kFreeBSD";|' source/creator/buildinfo.c
  sed -i 's|Linux, Mac OS X, Windows and FreeBSD|GNU and BSD|
          s|Linux, FreeBSD|GNU and BSD|
          s|Unpack the archive, Then run the Blender executable.|Install from Parabola repo (pacman -S '"$pkgname"'), Then run blender.|
          \|Windows|d;\|Mac OS X|d
          s|The downloaded Blender package includes|The '"${pkgname^}"' package includes|
         ' release/text/readme.html
  sed -i 's|Linux|GNU|
         ' release/scripts/{addons/game_engine_save_as_runtime,modules/bl_i18n_utils/utils_rtl}.py
  sed -i 's| (.so under Linux, .dll under windows...)| (.so under GNU or BSD, .dll under Wine or ReactOS...)|
         ' release/scripts/{addons/ui_translate,modules/bl_i18n_utils}/settings.py

  msg 'removing Open Source term'
  sed -i 's|free, open source|free|
          s|free and open-source|free|
          s|open-source and free|free|
         ' release/text/readme.html

  msg 'fixing povray-libre path and desc'
  sed -i "s|FILE_PATH',|FILE_PATH',\n                default='/usr/bin/povray',|
          s|both POV-Ray 3[.]7 and this script are beta|this script is beta|
         " release/scripts/addons/render_povray/__init__.py  

  mkdir -v build
}

build() {
  cd $srcdir/$pkgbase-$pkgver/build

  [[ $CARCH == x86_64 || $CARCH == i686 ]] && _SSE=ON _SSE2=ON || _SSE=OFF _SSE2=OFF
  cmake .. \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_FLAGS_RELEASE="-fno-delete-null-pointer-checks -DNDEBUG" \
    -DCMAKE_CXX_FLAGS_RELEASE="-fno-delete-null-pointer-checks -DNDEBUG" \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCYCLES_OSL=/usr \
    -DLLVM_STATIC=OFF \
    -DLLVM_VERSION=$_llvmver \
    -DOPENIMAGEIO_ROOT_DIR=/usr \
    -DOPENJPEG_INCLUDE_DIR=/usr/include/openjpeg-$_jpgver \
    -DOSL_INCLUDES=/usr/include/OSL \
    -DPYTHON_INCLUDE_DIRS=/usr/include/python${_pyver}m \
    -DPYTHON_LIBPATH=/usr/lib \
    -DPYTHON_LIBRARY=python${_pyver}m \
    -DPYTHON_VERSION=$_pyver \
    -DSUPPORT_SSE_BUILD=$_SSE \
    -DSUPPORT_SSE2_BUILD=$_SSE2 \
    -DWITH_AUDASPACE=ON \
    -DWITH_ASSERT_ABORT=OFF \
    -DWITH_BLENDER=ON \
    -DWITH_BOOST=ON \
    -DWITH_BOOST_ICU=OFF \
    -DWITH_BUILDINFO=ON \
    -DWITH_BULLET=ON \
    -DWITH_CODEC_AVI=ON \
    -DWITH_CODEC_FFMPEG=ON \
    -DWITH_CODEC_SNDFILE=ON \
    -DWITH_COMPOSITOR=ON \
    -DWITH_CXX_GUARDEDALLOC=OFF \
    -DWITH_CYCLES=ON \
    -DWITH_CYCLES_CUDA_BINARIES=OFF \
    -DWITH_CYCLES_OSL=ON \
    -DWITH_CYCLES_STANDALONE=ON \
    -DWITH_CYCLES_STANDALONE_GUI=ON \
    -DWITH_FFTW3=ON \
    -DWITH_FREESTYLE=ON \
    -DWITH_GAMEENGINE=ON \
    -DWITH_GCC_MUDFLAP=OFF \
    -DWITH_GHOST_DEBUG=OFF \
    -DWITH_GHOST_SDL=OFF \
    -DWITH_GHOST_XDND=ON \
    -DWITH_GTESTS=OFF \
    -DWITH_HEADLESS=OFF \
    -DWITH_IK_ITASC=ON \
    -DWITH_IK_SOLVER=ON \
    -DWITH_IMAGE_CINEON=ON \
    -DWITH_IMAGE_DDS=ON \
    -DWITH_IMAGE_FRAMESERVER=ON \
    -DWITH_IMAGE_HDR=ON \
    -DWITH_IMAGE_OPENEXR=ON \
    -DWITH_IMAGE_OPENJPEG=ON \
    -DWITH_IMAGE_REDCODE=ON \
    -DWITH_IMAGE_TIFF=ON \
    -DWITH_INPUT_NDOF=ON \
    -DWITH_INSTALL_PORTABLE=OFF \
    -DWITH_INTERNATIONAL=ON \
    -DWITH_JACK=ON \
    -DWITH_JACK_DYNLOAD=ON \
    -DWITH_LIBMV=OFF \
    -DWITH_LLVM=ON \
    -DWITH_LZMA=ON \
    -DWITH_LZO=ON \
    -DWITH_MEM_JEMALLOC=OFF \
    -DWITH_MEM_VALGRIND=OFF \
    -DWITH_MOD_BOOLEAN=ON \
    -DWITH_MOD_FLUID=ON \
    -DWITH_MOD_OCEANSIM=ON \
    -DWITH_MOD_REMESH=ON \
    -DWITH_MOD_SMOKE=ON \
    -DWITH_OPENAL=ON \
    -DWITH_OPENIMAGEIO=ON \
    -DWITH_OPENCOLLADA=ON \
    -DWITH_OPENCOLORIO=ON \
    -DWITH_OPENNL=ON \
    -DWITH_OPENMP=ON \
    -DWITH_PLAYER=ON \
    -DWITH_PYTHON=ON \
    -DWITH_PYTHON_INSTALL=OFF \
    -DWITH_PYTHON_INSTALL_NUMPY=OFF \
    -DWITH_PYTHON_INSTALL_REQUESTS=OFF \
    -DWITH_PYTHON_MODULE=OFF \
    -DWITH_PYTHON_SAFETY=OFF \
    -DWITH_PYTHON_SECURITY=ON \
    -DWITH_RAYOPTIMIZATION=ON \
    -DWITH_SDL=ON \
    -DWITH_STATIC_LIBS=OFF \
    -DWITH_SYSTEM_BULLET=OFF \
    -DWITH_SYSTEM_GLEW=ON \
    -DWITH_SYSTEM_OPENJPEG=ON \
    -DWITH_X11_XF86VMODE=ON \
    -DWITH_X11_XINPUT=ON

   # for future blender
   #-DWITH_MOD_CLOTH_ELTOPO=ON\

   # Note: Fix for gcc 4.9 :/
   # -DCMAKE_C_FLAGS_RELEASE="-fno-delete-null-pointer-checks -DNDEBUG"
   # -DCMAKE_CXX_FLAGS_RELEASE="-fno-delete-null-pointer-checks -DNDEBUG"

  make
}

package_blender() {
  cd $srcdir/$pkgbase-$pkgver/build

  make DESTDIR=$pkgdir install
  python -m compileall $pkgdir/usr/share/$pkgbase
  python -O -m compileall $pkgdir/usr/share/$pkgbase

  msg 'move io_import_gimp_image_to_scene.py and render_povray to blender-addon-gimp and blender-addon-povray'
  [[ -d $srcdir/$pkgbase-addon-gimp   ]] && rm -vr $srcdir/$pkgbase-addon-gimp
  [[ -d $srcdir/$pkgbase-addon-povray ]] && rm -vr $srcdir/$pkgbase-addon-povray
  install -vm755 -d $srcdir/$pkgbase-addon-{gimp,povray}/usr/share/$pkgbase/${_pkgver%[a-z]}/scripts/addons
  mv -v $pkgdir/usr/share/$pkgbase/${_pkgver%[a-z]}/scripts/addons/io_import_gimp_image_to_scene.py \
        $srcdir/$pkgbase-addon-gimp/usr/share/$pkgbase/${_pkgver%[a-z]}/scripts/addons
  mv -v $pkgdir/usr/share/$pkgbase/${_pkgver%[a-z]}/scripts/addons/render_povray \
        $srcdir/$pkgbase-addon-povray/usr/share/$pkgbase/${_pkgver%[a-z]}/scripts/addons
}

package_blender-addon-gimp() {
  pkgdesc='A addon for the Blender which allows import GIMP 2.6 images (xcf files) to scene (as polygon plane images)'
  arch=('any')
  depends=("$pkgbase>=$(($epoch-1)):$_depver" "$pkgbase<$epoch:${_depver%%.*}.$((${_depver#*.}+1))" 'xcftools')
  makedepends=()
  optdepends=('gimp: for edit xcf files')
  conflicts=("$pkgbase<$epoch:$_pkgver")
  replaces=()
  options=()
  install=

  mv -v $srcdir/$pkgbase-addon-gimp/usr $pkgdir
}

package_blender-addon-povray() {
  pkgdesc='A addon for the Blender which allows render with POV-Ray'
  depends=("$pkgbase>=$(($epoch-1)):$_depver" "$pkgbase<$epoch:${_depver%%.*}.$((${_depver#*.}+1))" "povray>=$_povver")
  makedepends=()
  optdepends=()
  conflicts=("$pkgbase<$epoch:$_pkgver")
  replaces=()
  options=()
  install=

  mv -v $srcdir/$pkgbase-addon-povray/usr $pkgdir
}