# Maintainer (arch): Antonio Rojas <arojas@archlinux.org>
# Maintainer (arch): Felix Yan <felixonmars@archlinux.org>
# Maintainer: Parabola Hackers <dev@lists.parabola.nu>
# Contributor: bill-auger <bill-auger@programmer.net>


# parabola changes and rationale:
# libre:
# - remove 'qt6-webengine' dependency
# technical:
# - add support for armv7h and i686
# - build from versioned source-ball rather than VCS


pkgbase=pyside6
pkgname=(pyside6
         pyside6-tools
         shiboken6)
_qtver=6.7.0
_clangver=17.0.6
pkgver=${_qtver/-/}
pkgrel=4
_pkgver_i686=6.4.2
_pkgrel_i686=5.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
arch=(x86_64)
arch+=(armv7h i686)
url='https://www.qt.io'
license=(LGPL)
makedepends=(clang
             cmake
             git
             llvm
             ninja
             python-numpy
             python-setuptools
             qt6-3d
             qt6-charts
             qt6-connectivity
             qt6-datavis3d
             qt6-graphs
             qt6-httpserver
             qt6-location
             qt6-multimedia
             qt6-networkauth
             qt6-positioning
             qt6-quick3d
             qt6-remoteobjects
             qt6-scxml
             qt6-sensors
             qt6-serialbus
             qt6-serialport
             qt6-shadertools
             qt6-speech
             qt6-svg
             qt6-tools
             qt6-webchannel
             qt6-webengine
             qt6-websockets)
makedepends=( ${makedepends[*]/git/}           )
makedepends=( ${makedepends[*]/qt6-webengine/} )
_src_dir=pyside-setup-everywhere-src-$_qtver
source=(https://download.qt.io/official_releases/QtForPython/pyside6/PySide6-$pkgver-src/${_src_dir}.tar.xz
        fix-build.patch)
sha256sums=('82eae370737df5ecf539c165d09d7c81d5fc6153a541b8d3d37b11275f9e3e8f'
            '77b83cb164ea87d826259864f6a81fb33199510e1948d6daaf5c8d5ab55735a7')

prepare() {
  ln -fs ${_src_dir} pyside-setup # link source-ball root dir as VCS root dirname

  patch -d pyside-setup -p1 < fix-build.patch
}

build() {
  cmake -B build -S pyside-setup -G Ninja \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCMAKE_BUILD_TYPE=None \
    -DSHIBOKEN_PYTHON_LIBRARIES=`pkgconf python3-embed --libs` \
    -DBUILD_TESTS=OFF \
    -DFORCE_LIMITED_API=no \
    -DNO_QT_TOOLS=yes
  PYTHONPATH="$PWD"/build/sources \
  cmake --build build
}

package_shiboken6() {
  pkgdesc='Generates bindings for C++ libraries using CPython source code'
  depends=(clang=$_clangver
           gcc-libs
           glibc
           libxml2
           libxslt
           llvm
           python
           qt6-base)
  optdepends=('python: Python bindings')

  DESTDIR="$pkgdir" cmake --install build/sources/shiboken6

# Install egg-info
  export PATH="/usr/lib/qt6/bin:$PATH"
  cd pyside-setup
  python setup.py egg_info --build-type=shiboken6
  python setup.py egg_info --build-type=shiboken6-generator
  _pythonpath=`python -c "from sysconfig import get_path; print(get_path('platlib'))"`
  cp -r shiboken6*.egg-info "$pkgdir"/$_pythonpath
}

package_pyside6() {
  pkgdesc='Enables the use of Qt6 APIs in Python applications'
  depends=(gcc-libs
           glibc
           python
           qt6-base
           qt6-declarative
           shiboken6)
  optdepends=('qt6-3d: Qt3D bindings'
              'qt6-charts: QtCharts bindings'
              'qt6-connectivity: QtBluetooth and QtNfc bindings'
              'qt6-datavis3d: QtDataVisualization bindings'
              'qt6-graphs: QtGraphs bindings'
              'qt6-httpserver: QtHttpServer bindings'
              'qt6-location: QtLocation bindings'
              'qt6-multimedia: QtMultimedia bindings'
              'qt6-networkauth: QtNetworkAuth bindings'
              'qt6-positioning: QtPositioning bindings'
              'qt6-quick3d: QtQuick3D bindings'
              'qt6-remoteobjects: QtRemoteObjects bindings'
              'qt6-scxml: QtScxml bindings'
              'qt6-sensors: QtSensors bindings'
              'qt6-serialbus: QtSerialBus bindings'
              'qt6-serialport: QtSerialPort bindings'
              'qt6-speech: QtTextToSpeech bindings'
              'qt6-svg: QtSvg bindings'
              'qt6-tools: QtHelp, QtUiTools bindings'
              'qt6-webchannel: QtWebChannel bindings'
              #'qt6-webengine: QtWebEngine bindings'
              'qt6-websockets: QtWebSockets bindings')
  provides=(qt6-python-bindings)

  DESTDIR="$pkgdir" cmake --install build/sources/pyside6

# Install egg-info
  export PATH="/usr/lib/qt6/bin:$PATH"
  cd pyside-setup
  python setup.py egg_info --build-type=pyside6
  _pythonpath=`python -c "from sysconfig import get_path; print(get_path('platlib'))"`
  cp -r PySide6.egg-info "$pkgdir"/$_pythonpath

# Install pyi files
  install -Dm644 "$srcdir"/build/sources/pyside6/PySide6/*.pyi -t "$pkgdir"/usr/lib/python*/site-packages/PySide6
}

package_pyside6-tools() {
  pkgdesc='Tools for pyside6'
  depends=(pyside6
           python)
  optdepends=('nuitka: for deploy.py')

  DESTDIR="$pkgdir" cmake --install build/sources/pyside-tools

# Add convenience pyside6-designer wrapper
# Entry points in /usr/bin are not installed in the cmake build. This is the only one that does anything besides wrapping the Qt executable
  echo "export LD_PRELOAD="`python -c "from sysconfig import get_config_var; print(get_config_var('LDLIBRARY'))"` > pyside6-designer
  echo "exec designer6 \$@" >> pyside6-designer
  install -Dm755 pyside6-designer -t "$pkgdir"/usr/bin
}
