# Description: The Qt WebEngine module provides a web browser engine
# URL: https://www.qt.io/
# Maintainer: Tim Biermann, tbier at posteo dot de
# Depends on: libvpx nodejs nss qt5 xorg-libxkbfile xorg-libxscrnsaver xorg-libxtst python3-html5lib
# Optional: glib icu jsoncpp krb5 krb5 lcms2 libevent libsrtp libxml2 libxslt minizip opus pipewire pulseaudio re2 snappy

name=qtwebengine
version=5.15.19
release=3

# https://github.com/qt/qtwebengine/commits/5.15
_qtwebengine_commit=a5d11cd6f8c487443c15c7e3a6cd8090b65cb313
# from $_qtwebengine_commit/src/3rdparty
_chromium_commit=6d29e9cfcfffa7632cc3858ceaf8940677ba9c91

source=(https://github.com/qt/qtwebengine/archive/$_qtwebengine_commit/$name-$_qtwebengine_commit.tar.gz
  https://github.com/qt/qtwebengine-chromium/archive/$_chromium_commit/$name-chromium-$_chromium_commit.tar.gz
  qtwebengine-5.15.2-disable-fatal-warnings.patch
  qtwebengine-5.15.2_p20210224-chromium-87-v8-icu68.patch
  qtwebengine-5.15.2_p20.1.621-clang-libc++.patch
  qtwebengine-5.15.2_p20211015-pdfium-system-lcms2.patch
  qtwebengine-5.15.13-icu_73-1.patch
  qt5-webengine-pipewire-0.3.patch
  qtwebengine-5.15.15-c++17.patch
  qtwebengine-system-absl-compat.patch
  programm_manager.patch
  ninja-1.12.patch
  no-h264.patch
  python3.12-six.patch
)

build() {
  cd qtwebengine-$_qtwebengine_commit

  rm -rf src/3rdparty
  mv $SRC/qtwebengine-chromium-$_chromium_commit src/3rdparty
  mkdir -pv .git src/3rdparty/chromium/.git

  # https://www.linuxfromscratch.org/blfs/view/svn/x/qtwebengine.html
  patch -p1 -i $SRC/qtwebengine-5.15.2-disable-fatal-warnings.patch
  patch -p1 -i $SRC/qtwebengine-5.15.2_p20210224-chromium-87-v8-icu68.patch
  patch -p1 -i $SRC/qtwebengine-5.15.2_p20.1.621-clang-libc++.patch
  patch -p1 -i $SRC/qtwebengine-5.15.2_p20211015-pdfium-system-lcms2.patch
  patch -p1 -i $SRC/qtwebengine-5.15.13-icu_73-1.patch
  patch -p1 -d src/3rdparty -i $SRC/qt5-webengine-pipewire-0.3.patch
  patch -p1 -i $SRC/ninja-1.12.patch
  patch -p1 -i $SRC/no-h264.patch
  patch -p1 -d src/3rdparty/chromium -i $SRC/python3.12-six.patch

  if prt-get isinst re2; then
    patch -p1 -i $SRC/qtwebengine-system-absl-compat.patch
    patch -p1 -i $SRC/programm_manager.patch
    patch -p1 -i $SRC/qtwebengine-5.15.15-c++17.patch
    export CXXFLAGS+=' -std=gnu++17'
    find . -name "*.pro" -o -name "*.pri" |while read r; do
      echo 'QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++17' >>$r
    done
  fi

  sed -e 's/\^(?i)/(?i)^/' \
    -i src/3rdparty/chromium/tools/metrics/ukm/ukm_model.py &&
  sed -e "s/'rU'/'r'/" \
    -i src/3rdparty/chromium/tools/grit/grit/util.py
  sed -e 's/^#define BA_LB_COUNT.*$/#define BA_LB_COUNT 40/' \
    -i src/3rdparty/chromium/third_party/blink/renderer/platform/text/text_break_iterator.cc

  sed -e '/^MODULE_VERSION/s/5.*/5.15.2/' -i .qmake.conf
  find -type f -name "*.pr[io]" | \
    xargs sed -i -e 's|INCLUDEPATH += |&$$QTWEBENGINE_ROOT/include |'

  prt-get isinst pulseaudio && sed -e '/link_pulseaudio/s/false/true/' \
    -i src/3rdparty/chromium/media/media_options.gni

  test -n "$JOBS" && export NINJAFLAGS+=" -j ${JOBS-1}"

  prt-get isinst ccache && export \
    QMAKE_CC="ccache ${CC:-gcc}" \
    QMAKE_LINK_C="ccache ${CC:-gcc}" \
    QMAKE_LINK_C_SHLIB="ccache ${CC:-gcc}" \
    QMAKE_CXX="ccache ${CXX:-g++}" \
    QMAKE_LINK="ccache ${CXX:-g++}" \
    QMAKE_LINK_SHLIB="ccache ${CXX:-g++}" \
    QMAKESPEC=/usr/lib/qt5/mkspecs/${QMAKE_XSPEC:-linux-g++}
    PATH="$(echo ${PATH} | awk -v RS=: -v ORS=: '/ccache/ {next} {print}' | sed 's/:*$//')"
  sed -i -e 's|"-Wno-unknown-attributes",|"-Wno-enum-constexpr-conversion",\n      &|' \
    src/3rdparty/chromium/build/config/compiler/BUILD.gn

  #SYSLIBS="freetype harfbuzz-ng libdrm libevent libpng libxml libxslt"
  #/usr/bin/python3 ./src/3rdparty/chromium/build/linux/unbundle/replace_gn_files.py --system-libraries $SYSLIBS

  install -d build
  cd build

  prt-get isinst pulseaudio && PKGMK_QTWEBENGINE+=' -pulseaudio' || PKGMK_QTWEBENGINE+=' -no-pulseaudio'
  prt-get isinst pipewire && PKGMK_QTWEBENGINE+=' -webengine-webrtc-pipewire'
  prt-get isinst icu && PKGMK_QTWEBENGINE+=' -webengine-icu' || PKGMK_QTWEBENGINE+=' -no-webengine-icu'

  qmake-qt5 .. -- \
    $PKGMK_QTWEBENGINE \
    -proprietary-codecs \
    -system-opus \
    -system-webp \
    -no-feature-webengine-embedded-build

  make
  make INSTALL_ROOT=$PKG install

  find "$PKG/usr/lib" -type f -name '*.prl' \
    -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;
}
