# Maintainer: aur.chaotic.cx

_pkgname="gimp"
pkgname="$_pkgname-git"
pkgver=3.2.4.r948.gc199760
pkgrel=1
pkgdesc="GNU Image Manipulation Program"
url="https://gitlab.gnome.org/GNOME/gimp"
license=('GPL-3.0-or-later')
arch=('x86_64')

depends=(
  'appstream'
  'babl'
  'cairo'
  'cfitsio'
  'ffmpeg' # gegl
  'gegl'
  'lcms2'
  'libgexiv2'
  'libgudev'
  'librsvg'
  'libwmf'
  'libxmu'
  'mypaint-brushes'
  'openexr'
  'poppler-data'
  'poppler-glib'
  'python-gobject'
  'sdl2' # gegl
)
makedepends=(
  'aalib'
  'alsa-lib'
  'bash-completion'
  'curl'
  'ghostscript'
  'git'
  'gjs'
  'glib-networking'
  'glib2-devel'
  'glibc-locales' # prevent setlocale() failed
  'gobject-introspection'
  'intltool'
  'iso-codes'
  'libheif'
  'libmng'
  'libwebp'
  'libxpm'
  'libxslt'
  'lua51-lgi'
  'luajit'
  'meson'
  'python-cairo'
  'python-packaging'
  'qoi'
  'vala'
  'webkit2gtk-4.1'
  'zlib'
)
checkdepends=(
  'xorg-server-xvfb'
)
optdepends=(
  'aalib: ASCII art support'
  'alsa-lib: for MIDI event controller module'
  'curl: for URI support'
  'ghostscript: for postscript support'
  'gjs: JavaScript scripting support'
  'gutenprint: for sophisticated printing only as gimp has built-in cups print support'
  'iso-codes: Language support'
  'libheif: HEIF support'
  'libjxl: JPEG XL support'
  'libmng: MNG support'
  'libwebp: WebP support'
  'libxpm: XPM support'
  'lua-lgi: LUA scripting support'
  'luajit: LUA scripting support'
)

provides=("$_pkgname=${pkgver%%.g}")
conflicts=("$_pkgname")

_pkgsrc="gimp"
source=(
  "$_pkgsrc"::"git+https://gitlab.gnome.org/GNOME/gimp.git"
  'gimp-data'::'git+https://gitlab.gnome.org/GNOME/gimp-data.git'
)
sha256sums=(
  'SKIP'
  'SKIP'
)

pkgver() {
  cd "$_pkgsrc"
  git describe --long --tags --abbrev=7 --match="GIMP_*" --exclude='GIMP_*[a-zA-Z][a-zA-Z]*' \
    | sed -E 's/^[^0-9]*//;s/([^-]*-g)/r\1/;s/_RC/RC/;s/[-_]/./g'
}

prepare() {
  local _submodules _module

  cd "$_pkgsrc"
  _submodules=(
    'gimp-data'::'gimp-data'
  )
  for _module in "${_submodules[@]}"; do
    git submodule init "${_module##*::}"
    git submodule set-url "${_module##*::}" "$srcdir/${_module%::*}"
    git -c protocol.file.allow=always submodule update "${_module##*::}"
  done

  # fix batch-interpreter name
  sed -E -e 's&"python-fu-eval"&"plug-in-script-fu-eval"&' -i "gimp-data/images/meson.build"
}

build() {
  local meson_options=(
    --prefix=/usr
    --sysconfdir=/etc
    --libexecdir=/usr/bin
    -Dappdata-test=disabled
    -Dcheck-update=no
    -Dgi-docgen=disabled
    -Dheadless-tests=enabled
    -Dilbm=disabled
    -Dlua=true
  )

  arch-meson "$_pkgsrc" build "${meson_options[@]}"
  meson compile -C build
}

check() {
  ninja -C "build" test || true
}

package() {
  meson install -C build --destdir "$pkgdir"

  local _gimpver=$(
    echo "$pkgdir"/usr/share/gimp/[0-9]* \
      | sed -E -e 's&'"$pkgdir"'/usr/share/gimp/&\n&g;s& &\n&g' \
      | sort -bur | head -1
  )

  # launcher
  sed \
    -e 's/^\(Name.*\)/\1 (devel)/g' \
    -e 's/Icon=gimp/Icon=gimp-'"${_gimpver:?}"'/g' \
    -i "$pkgdir/usr/share/applications/gimp.desktop"
  mv "$pkgdir/usr/share/applications"/gimp{,-$_gimpver}.desktop

  # appdata.xml
  sed \
    -e 's/org.gimp.GIMP/org.gimp.GIMP-'"$_gimpver"'/g' \
    -e 's/gimp.desktop/gimp-'"$_gimpver"'.desktop/g' \
    -i "$pkgdir/usr/share/metainfo/org.gimp.GIMP.appdata.xml"
  mv "$pkgdir/usr/share/metainfo"/org.gimp.GIMP{,-$_gimpver}.appdata.xml

  # icons
  for i in 16 22 24 32 48 256; do
    mv "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps"/gimp{,-$_gimpver}.png
  done

  # conflicts
  local _conflicts=(
    usr/bin/gimp
    usr/bin/gimp-console
    usr/bin/gimptool
    usr/share/man/man1/gimp-console.1
    usr/share/man/man1/gimp.1
    usr/share/man/man1/gimptool.1
    usr/share/man/man5/gimprc.5
  )

  for i in "${_conflicts[@]}"; do
    rm -rf "$pkgdir/$i"
  done

  # palette
  install -Dm644 /dev/stdin "$pkgdir/usr/share/gimp/$_gimpver/palettes/Linux.gpl" << 'END'
GIMP Palette
Name: linux
#
  0   0   0
  0   0 170
  0 170   0
  0 170 170
170   0   0
170   0 170
170  85   0
170 170 170
 85  85  85
 85  85 255
 85 255  85
 85 255 255
255  85  85
255  85 255
255 255  85
255 255 255
END
}
