# Maintainer (arch): Felix Yan <felixonmars@archlinux.org>
# Maintainer (arch): Antonio Rojas <arojas@archlinux.org>
# Contributor: Andrea Scarpino <andrea@archlinux.org>
# Maintainer: Andreas Grapentin <andreas@grapentin.org>
# Contributor: André Silva <emulatorman@hyperbola.info>
# Contributor: jc_gargma <jc_gargma@iserlohn-fortress.net>
# Contributor: SolveFinder <kwopleq@proton.me>
# Contributor: bill-auger <bill-auger@programmer.net>


# parabola changes and rationale:
#  - disable DRM
#  - pin to strongly-coupled dependency versions


pkgname=okular
pkgver=25.08.2
pkgrel=4
_pkgver_armv7h=23.08.5
_pkgrel_armv7h=1
_pkgver_i686=23.04.2
_pkgrel_i686=1.0
eval "[[ -v _pkgver_${CARCH} ]] && pkgver=\$_pkgver_${CARCH}" # our different arches do not
eval "[[ -v _pkgrel_${CARCH} ]] && pkgrel=\$_pkgrel_${CARCH}" # always roll at the same speed
pkgrel+=.parabola1
pkgdesc='Document Viewer'
arch=(x86_64)
arch+=(armv7h i686)
url='https://apps.kde.org/okular/'
license=(GPL-2.0-or-later LGPL-2.0-or-later)
depends=(discount
         djvulibre
         freetype2
         gcc-libs
         glibc
         plasma-activities
         karchive
         kbookmarks
         kcolorscheme
         kcompletion
         kconfig
         kconfigwidgets
         kcoreaddons
         kcrash
         ki18n
         kiconthemes
         kio
         kitemviews
         kparts
         kpty
         ktextwidgets
         kwallet
         kwidgetsaddons
         kwindowsystem
         kxmlgui
         libkexiv2
         libspectre
         libtiff
         phonon-qt6
         poppler-qt6
         purpose
         qt6-base
         qt6-declarative
         qt6-speech
         qt6-svg
         threadweaver
         zlib)
makedepends=(ebook-tools
             extra-cmake-modules
             kdegraphics-mobipocket
             kdoctools)
optdepends=('ebook-tools: mobi and epub support'
            'kdegraphics-mobipocket: mobi support'
            'unarchiver: Comic Book Archive support') # 'unrar' non-free
groups=(kde-applications
        kde-graphics)
source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz{,.sig})
_source_armv7h=$pkgname-$pkgver.tar.gz::https://invent.kde.org/graphics/okular/-/archive/v$pkgver/$pkgname-v$pkgver.tar.gz
_source_i686=$pkgname-$pkgver.tar.gz::https://invent.kde.org/graphics/okular/-/archive/v$pkgver/$pkgname-v$pkgver.tar.gz
eval "[[ -v _source_${CARCH} ]] && source=( \$_source_${CARCH} )" # upstream source-ball
source+=(disable-drm.patch)
sha256sums=('de401cd34376d678a16a361473514844f78800b398e3b0db6bde85a09e635392'
            'SKIP')
_sha256sum_armv7h=b780da3f815f0d881087b72e2932d7fa24d626426ef6e5e84c563d5becd4cab8
_sha256sum_i686=8dd4cb983104c884acb1c8a2329588aba70a3a46f4af2ed92e768e99b6381a3b
eval "[[ -v _sha256sum_${CARCH} ]] && sha256sums=( \$_sha256sum_${CARCH} )" # upstream source-ball (no sig)
sha256sums+=('83cf760b3ae6e03d49e02369375dae3ecc05a6800d512dd9ffeaac1648c19457')
validpgpkeys=(CA262C6C83DE4D2FB28A332A3A6A4DB839EAA6D7  # Albert Astals Cid <aacid@kde.org>
              F23275E4BF10AFC1DF6914A6DBD2CE893E2D1C87  # Christoph Feck <cfeck@kde.org>
              D81C0CB38EB725EF6691C385BB463350D6EF31EF) # Heiko Becker <heiko.becker@kde.org>
options=(!zipman)


## per-arch dependency tweaks ##

case "${CARCH}" in
armv7h) # armv7h FTBS with QT6 - trying QT5
        # -- No Qt5 qmake executable found. Can't check QT_INSTALL_PREFIX
        #   Could not find a package configuration file provided by "Qt5" (requested version 5.15.2)
        depends=( ${depends[*]/karchive/karchive5}             )
        depends=( ${depends[*]/kbookmarks/kbookmarks5}         )
        depends=( ${depends[*]/kcolorscheme/}                  )
        depends=( ${depends[*]/kcompletion/kcompletion5}       )
        depends=( ${depends[*]/kconfigwidgets/kconfigwidgets5} )
        depends=( ${depends[*]/kdoctools/}                     )    # archarm does not build 'kdoctools5'
        depends=( ${depends[*]/ki18n/ki18n5}                   )
        depends=( ${depends[*]/kio/kio5}                       )
        depends=( ${depends[*]/kparts/kparts5}                 )
        depends=( ${depends[*]/kpty/kpty5}                     )
        depends=( ${depends[*]/kwindowsystem/kwindowsystem5}   )
        depends=( ${depends[*]/phonon-qt6/}                    )    # archarm does not build 'phonon-qt5'
        depends=( ${depends[*]/plasma-activities/kactivities5} )
        depends=( ${depends[*]/purpose/}                       )    # archarm does not build 'purpose5'
        depends=( ${depends[*]/qt6/qt5}                        )
        depends=( ${depends[*]/threadweaver/threadweaver5}     ) ;;
        # armv7h FTBS with QT5 due to missing 'kdoctools5' 'phonon-qt5' 'purpose5'
i686  ) # KDE 6 support is only in extra-staging
        depends=( ${depends[*]/purpose/}                      )  # KDE 6 (extra-staging)
        # -- The following REQUIRED packages have not been found:
        # * KF5JS (required version >= 5.92.0)
        # * KF5Purpose, A framework for services and actions integration
        # * CHM, A library for dealing with Microsoft ITSS/CHM format files, <http://www.jedrea.com/chmlib>
        # * KF5KHtml, HTML rendering library
        depends+=( purpose ) # WIP
        depends=( ${depends[*]/kcolorscheme/}                 )    # KDE 6 (extra-staging)
        depends=( ${depends[*]/qt6/qt5}                       )    # KDE 6 (extra-staging)
        depends=( ${depends[*]/plasma-activities/kactivities} ) ;; # KDE 6 (extra-staging)
        # TODO: waiting for 'qt5-webkit' rebuild
        # :: unable to satisfy dependency 'qt5-base<5.15.16' required by qt5-webkit
        # :: unable to satisfy dependency 'qt5-webkit' required by signon-ui
        # :: unable to satisfy dependency 'signon-ui' required by kaccounts-integration
        # :: unable to satisfy dependency 'kaccounts-integration' required by purpose
esac


_version_constraint() # (dep_pkgname [precision])
{
  Log() { [[ "${FUNCNAME[2]}" == package ]] && echo "$@" >&2 || : ; }


  local dep_pkgname=$1
  declare -i req_precision=$2
  local full_version=$(pacman -S --print-format='%v' ${dep_pkgname} 2> /dev/null | tail -n 1)
  local n_dots=$(tmp=${full_version%-*} ; tmp=${tmp//[^\.]} ; echo "${#tmp}" ;)
  local def_precision=$(( n_dots + 1 ))
  local is_prec_valid=$(( req_precision > 0 && req_precision <= def_precision ))
  local precision=$((( is_prec_valid )) && echo ${req_precision} || echo ${def_precision})
  local epoch_rx='[0-9]+:'
  local pkgver_rx='[0-9A-Za-z_]+'
  pkgver_rx=$(sed 's|\]|\+]|' <<<${pkgver_rx}) # according to the wiki, '+' is not allowed,
                                               # but some pkgver have it (eg: 5.15.10+kde+r130)
  local subver_rx='\.'${pkgver_rx}
  local pkgrel_rx='[0-9]+'
  local garbage_rx='[^0-9].*'
  local capture_rx=${pkgver_rx}
  for (( n_dots=1 ; n_dots < precision ; ++n_dots )) ; do capture_rx+=${subver_rx} ; done ;
  local epoch version pkgrel has_dot_char version_min version_max constraint_string
  declare -i subver subver_inc pkgrel_inc

  if   [[ "${full_version}" =~ ^(${epoch_rx})*(${capture_rx})(${subver_rx})*-(${pkgrel_rx}).*$ ]]
  then epoch=${BASH_REMATCH[1]}   # optional epoch
       version=${BASH_REMATCH[2]} # pkgver cut to the requested precision
       #unused=${BASH_REMATCH[3]} # discarded pkgver segments
       pkgrel=${BASH_REMATCH[4]}  # pkgrel with non-numerics right-trimmed
       has_dot_char=$([[ "${version}" =~ \. ]] ; echo $(( ! $? )) ; )
       subver=$(sed "s|${garbage_rx}||" <<<${version##*.}) # right-trim from any non-numeric
       version=$( (( has_dot_char )) && echo ${version%.*}.${subver} || echo ${subver} )
       version=${epoch}${version}
       subver_inc=$(( subver + 1 ))
       pkgrel_inc=$(( pkgrel + 1 ))
       version_min=$(   (( ! is_prec_valid    )) && echo ${full_version%-*}-${pkgrel} || \
                                                    echo ${version}                      )
       version_max=$( ( (( ! is_prec_valid    )) && echo ${full_version%-*}-${pkgrel_inc} ) || \
                      ( [[ "${version}" =~ \. ]] && echo ${version%.*}.${subver_inc}      ) || \
                                                    echo ${subver_inc}                         )
       constraint_string="${dep_pkgname}>=${version_min} ${dep_pkgname}<${version_max}"

       Log "Applied version constraint: '${constraint_string}'"
  elif [[ -z "${full_version}" ]]
  then constraint_string=''
  else Log "ERROR: in _version_constraint() parsing: dep_pkgname='${dep_pkgname}' full_version='${full_version}'"
       exit 1
  fi

  unset -f Log

  echo -n "${constraint_string}"
}


prepare() {
  [[ "${CARCH}" == x86_64 ]] || ln -s $pkgname-v$pkgver $pkgname-$pkgver # minimize diff

  cd $pkgname-$pkgver

  echo "applying disable-drm.patch"
  patch -Np1 -i "$srcdir"/disable-drm.patch
}

build() {
  local parabola_opts=()

  case "${CARCH}" in
  armv7h) parabola_opts+=( '-DFORCE_NOT_REQUIRED_DEPENDENCIES=KF5DocTools;KF5Purpose;Phonon4Qt5;KF5KExiv2;CHM;KF5KHtml;QMobipocket' ) ;;
  esac

  cmake -B build -S $pkgname-$pkgver \
    ${parabola_opts[*]}              \
    -DBUILD_TESTING=OFF
  cmake --build build
}

package() {
  # pin to strongly-coupled dependency versions
  depends=( ${depends[*]/plasma-activities/} $(_version_constraint plasma-activities 3) )

  DESTDIR="$pkgdir" cmake --install build
}
