# 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'
_gitrev='git1'
_gittagver='2.76'
_gittagrev='b'
_gitaddtagver='2.76a'
_gittratagver='2.76'
# blender:
_gitcommit='f337feaf5a1d727cb9f93634e58fcef5b374bade'
# blender-addons:
_gitaddonscommit='51446dc2af8aa29ef2342ded6b10774ff626c288'
# blender-addons-contrib:
_gitaddonscontribcommit='9f29e18707917ec5be262431d2e09dbb85332f41'
# blender-translations:
_gittranslationscommit='8c99467b0f95f4e1fd700ba8d961afb704f05b30'

pkgbase='blender'
pkgname=("${pkgbase}" "${pkgbase}-addon-gimp" "${pkgbase}-addon-povray")
[[ "${_git}" = 'yes' ]] &&					pkgver="${_gittagver}.${_gitrev}.${_gitcommit}"	# git commit
[[ "${_git}" = 'no'  ]] && [[ -z "${_gittagrev}"   ]] &&	pkgver="${_gittagver}"				# official release
[[ "${_git}" = 'no'  ]] && [[ "${#_gittagrev}" > 1 ]] &&	pkgver="${_gittagver}${_gittagrev/-/}"		# release candidate
[[ "${_git}" = 'no'  ]] && [[ "${#_gittagrev}" = 1 ]] &&	pkgver="${_gittagver}.${_gittagrev}"		# revision
pkgrel='1.parabola1'
epoch='17'
_jpgver='1.5'
_llvmver='3.6'
_povver='3.7'
_pyver='3.5'
pkgdesc='A fully integrated 3D graphics creation suite, without nonfree CUDA support'
arch=('i686' 'x86_64' 'armv7h')
license=('GPL')
url="http://www.${pkgbase}.org"
depends=('boost-libs' 'desktop-file-utils' 'ffmpeg' 'fftw' 'freeglut' 'freetype2'
         'glew' 'hicolor-icon-theme' 'jack' 'jemalloc' 'libpng' 'libsndfile' 'libspnav'
         'libtiff' 'openal' 'opencolorio' 'opencollada' 'openexr' 'openimageio'
         'openjpeg' 'openshadinglanguage' 'opensubdiv' 'ptex' 'python' 'python-requests'
         'shared-mime-info' 'xdg-utils')
makedepends=('boost' 'cmake' 'git' 'llvm' 'mesa') # 'bullet' (boost: for cycles, booleans, audaspace and/or i18n)
options=('!strip')
[[ "${_git}" = 'no'  ]] && source=("${pkgbase}-${pkgver}::git://git.${pkgbase}.org/${pkgbase}.git#tag=v${_gittagver}${_gittagrev}"				# blender
                                   "${pkgbase}-addons-${pkgver}::git://git.${pkgbase}.org/${pkgbase}-addons.git#tag=v${_gitaddtagver}"				# addons for blender
                                   "${pkgbase}-translations-${pkgver}::git://git.${pkgbase}.org/${pkgbase}-translations.git#tag=v${_gittratagver}")		# translations for blender
[[ "${_git}" = 'yes' ]] && source=("${pkgbase}-${pkgver}::git://git.${pkgbase}.org/${pkgbase}.git#commit=${_gitcommit}"						# blender
                                   "${pkgbase}-addons-${pkgver}::git://git.${pkgbase}.org/${pkgbase}-addons.git#commit=${_gitaddonscommit}"			# addons for blender
                                   "${pkgbase}-translations-${pkgver}::git://git.${pkgbase}.org/${pkgbase}-translations.git#commit=${_gittranslationscommit}")	# translations for blender
source+=("git://git.${pkgbase}.org/${pkgbase}-addons-contrib.git#commit=${_gitaddonscontribcommit}"								# addons contrib for blender
         "git://git.${pkgbase}.org/scons.git")															# scons
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_INSTALL_PREFIX='/usr' \
    -DCYCLES_OSL='/usr' \
    -DLLVM_STATIC='ON' \
    -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_PTEX='ON' \
    -DWITH_CYCLES_STANDALONE='OFF' \
    -DWITH_CYCLES_STANDALONE_GUI='OFF' \
    -DWITH_FFTW3='ON' \
    -DWITH_FREESTYLE='ON' \
    -DWITH_GAMEENGINE='ON' \
    -DWITH_GHOST_DEBUG='OFF' \
    -DWITH_GHOST_SDL='OFF' \
    -DWITH_GHOST_XDND='ON' \
    -DWITH_GL_EGL='OFF' \
    -DWITH_GL_PROFILE_COMPAT='ON' \
    -DWITH_GL_PROFILE_CORE='OFF' \
    -DWITH_GL_PROFILE_ES20='OFF' \
    -DWITH_GLEW_ES='OFF' \
    -DWITH_GLEW_MX='OFF' \
    -DWITH_GLU='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='OFF' \
    -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_CLOTH_ELTOPO='OFF' \
    -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_OPENSUBDIV='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_SDL_DYNLOAD='OFF' \
    -DWITH_STATIC_LIBS='OFF' \
    -DWITH_SYSTEM_BULLET='OFF' \
    -DWITH_SYSTEM_GLEW='ON' \
    -DWITH_SYSTEM_OPENJPEG='ON' \
    -DWITH_X11_XF86VMODE='ON' \
    -DWITH_X11_XINPUT='ON'
  make
}

package_blender() {
  optdepends=('bullet: for Rigid Bodies and Physics Simulation'
              #'opencl-mesa: for rendering with optional Mesa OpenCL'
              "${pkgbase}-addon-gimp: for import GIMP images to scene"
              "${pkgbase}-addon-luxrender: for optional renderer and exporter with LuxRender"
              "${pkgbase}-addon-mitsuba: for optional renderer and exporter with Mitsuba (pcr repo)"
              "${pkgbase}-addon-ogre: for export to Ogre3D formats (pcr repo)"
              "${pkgbase}-addon-povray:  for optional renderer with POV-Ray"
              "${pkgbase}-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")
  install="${pkgbase}.install"
  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 ${pkgbase}-addon-gimp and ${pkgbase}-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%%[.r][a-z]*}/scripts/addons"
  mv -v "${pkgdir}/usr/share/${pkgbase}/${pkgver%%[.r][a-z]*}/scripts/addons/io_import_gimp_image_to_scene.py" \
        "${srcdir}/${pkgbase}-addon-gimp/usr/share/${pkgbase}/${pkgver%%[.r][a-z]*}/scripts/addons"
  mv -v "${pkgdir}/usr/share/${pkgbase}/${pkgver%%[.r][a-z]*}/scripts/addons/render_povray" \
        "${srcdir}/${pkgbase}-addon-povray/usr/share/${pkgbase}/${pkgver%%[.r][a-z]*}/scripts/addons"
}

package_blender-addon-gimp() {
  _relver="${pkgver%%[.r][a-z]*}"
  _minver="${_relver#*.}"
  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}:${pkgver%%[.r][a-z]*}rc1" "${pkgbase}<${epoch}:${pkgver%%[.r]*}.$(($_minver+1))rc1" 'xcftools')
  optdepends=('gimp: for edit xcf files')

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

package_blender-addon-povray() {
  _relver="${pkgver%%[.r][a-z]*}"
  _minver="${_relver#*.}"
  pkgdesc='A addon for the Blender which allows render with POV-Ray'
  depends=("${pkgbase}>=${epoch}:${pkgver%%[.r][a-z]*}rc1" "${pkgbase}<${epoch}:${pkgver%%[.r]*}.$(($_minver+1))rc1" "povray>=${_povver}")

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