# Maintainer: aur.chaotic.cx

_pkgname="freecad"
pkgname="$_pkgname-git"
pkgver=1.1.1.r2864.g0c59126
pkgrel=2
pkgdesc="A general purpose 3D CAD modeler"
url="https://github.com/FreeCAD/FreeCAD"
license=('LGPL-2.1-or-later')
arch=('x86_64')

depends=(
  'coin'
  'hicolor-icon-theme'
  'libGL.so'                    # libglvnd
  'libboost_program_options.so' # boost-libs
  'libboost_thread.so'          # boost-libs
  'libfmt.so'                   # fmt
  'libfreetype.so'              # freetype2
  'libspnav'
  'libyaml-cpp.so' # yaml-cpp
  'libz.so'        # zlib
  'med'
  'opencascade'
  'pyside6'
  'python'
  'python-importlib-metadata'
  'python-lazy-loader'
  'python-matplotlib'
  'python-numpy'
  'python-packaging'
  'python-pip'
  'python-pivy'
  'python-ply'
  'python-requests'
  'python-typing_extensions'
  'python-yaml'
  'qt6-base'
  'qt6-svg'
  'qt6-tools'
  'shiboken6'
  'vtk'
  'xerces-c'
)
makedepends=(
  'boost'
  'cmake'
  'eigen'
  'fast_float'
  'git'
  'glew'
  'ninja'
  'nlohmann-json'
  'pybind11'
  'python-lark-parser'
  'swig'
)
optdepends=(
  'openscad: OpenSCAD support'
  'graphviz: dependency graph support'
  'python-pip: support installing python dependencies for addons'
  'calculix-ccx: FEM solver backend'
)

provides=("$_pkgname")
conflicts=("$_pkgname")

options=('!lto')

_pkgsrc="$_pkgname"
source=("$_pkgsrc"::"git+$url.git")
sha256sums=('SKIP')

prepare() {
  cd "$_pkgsrc"
  git submodule update --init --recursive --depth=1

  # remove cmake version check
  sed -E -e '/FATAL_ERROR/d' \
    -e '1i cmake_minimum_required(VERSION 4.0)' \
    -i CMakeLists.txt
}

pkgver() {
  cd "$_pkgsrc"
  local _tag _version _revision _hash
  _tag=$(git tag | grep -Ev '[A-Za-z]{2}' | sort -rV | head -1)
  _version="${_tag:?}"
  _revision=$(git rev-list --count --cherry-pick "$_tag"...HEAD)
  _hash=$(git rev-parse --short=7 HEAD)
  printf '%s.r%s.g%s' "${_version:?}" "${_revision:?}" "${_hash:?}"
}

build() {
  local _cmake_options=(
    -B build
    -S "$_pkgsrc"
    -G Ninja
    -DCMAKE_BUILD_TYPE=None
    -DCMAKE_INSTALL_PREFIX=/usr/lib/freecad
    -DCMAKE_INSTALL_DATADIR=/usr/share/freecad
    -DCMAKE_INSTALL_DATAROOTDIR=/usr/share
    -DCMAKE_INSTALL_DOCDIR=/usr/share/freecad/doc
    -DBUILD_TESTING=OFF
    -Wno-dev

    -DBUILD_DESIGNER_PLUGIN=ON
    -DBUILD_ENABLE_CXX_STD=C++17
    -DBUILD_FLAT_MESH=ON
    -DENABLE_DEVELOPER_TESTS=OFF
    -DFREECAD_QT_VERSION=6
    -DFREECAD_USE_EXTERNAL_COIN_PIVY=ON
    -DFREECAD_USE_EXTERNAL_JSON=ON
    -DFREECAD_USE_PCL=OFF
    -DFREECAD_USE_QT_FILEDIALOG=ON
    -DINSTALL_TO_SITEPACKAGES=ON
    -DPYTHON_EXECUTABLE=/usr/bin/python
  )

  cmake "${_cmake_options[@]}"
  cmake --build build
}

package() {
  DESTDIR="$pkgdir" cmake --install build

  # tools
  install -Dm755 "$_pkgsrc"/src/Tools/fcinfo -t "$pkgdir/usr/bin/"

  # symlinks
  install -d "$pkgdir/usr/bin"
  ln -sf /usr/lib/freecad/bin/FreeCAD "$pkgdir/usr/bin/freecad"
  ln -sf /usr/lib/freecad/bin/FreeCAD "$pkgdir/usr/bin/FreeCAD"
  ln -sf /usr/lib/freecad/bin/FreeCADCmd "$pkgdir/usr/bin/freecadcmd"
  ln -sf /usr/lib/freecad/bin/FreeCADCmd "$pkgdir/usr/bin/FreeCADCmd"
}
