# Maintainer: AndyRTR <andyrtr@archlinux.org>
# Contributor: Bartłomiej Piotrowski <bpiotrowski@archlinux.org>

# ALARM: Kevin Mihelich <kevin@archlinuxarm.org>
#  - disable firebird until libfbclient is updated
#  - specify a US mirror
#  - remove --enable-lto from configure

highmem=1

# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
# Note: These are for Arch Linux use ONLY. For your own distribution, please
# get your own set of keys. Feel free to contact foutrelis@archlinux.org for
# more information.
_google_default_client_id=413772536636.apps.googleusercontent.com
_google_default_client_secret=0ZChLK6AxeA3Isu96MkwqDR4

pkgbase=libreoffice-still
pkgname=('libreoffice-still-sdk' 'libreoffice-still')
_LOver=7.5.9.2
pkgver=7.5.9
pkgrel=1
arch=('x86_64')
license=('LGPL3')
url="https://www.libreoffice.org/"
makedepends=('curl>=7.20.0' 'hunspell>=1.2.8' 'python' 'libwpd>=0.9.2' 'libwps'
	'neon>=0.28.6' 'pango' 'nspr' 'libjpeg' 'libxrandr' 'libgl' 'dbus-glib'
	'libxslt' 'redland' 'hyphen' 'lpsolve' 'gcc-libs' 'sh' 'graphite' 'icu' 
	'lcms2' 'poppler>=0.24.0' 'libvisio' 'libetonyek' 'libodfgen' 'libcdr'
	'libmspub' 'harfbuzz-icu' 'nss' 'hicolor-icon-theme'
	'gst-plugins-base-libs'	'sane' 'perl-archive-zip' 'zip' 'unzip' 'unixodbc' 'ant'
	'gperf' 'gtk3' 'gtk4' 'qt5-base' 'plasma-framework5' 'qt6-base' 'cppunit' 'beanshell' 'clucene'
	'junit' 'libmythes' 'libwpg'  'java-environment=11' 'postgresql-libs' 'mariadb-libs' 'libgl'
	'bluez-libs' 'gdb' 'doxygen'  'libatomic_ops'  #'mdds'
	'ttf-liberation' 'ttf-dejavu' 'ttf-carlito' 'libxinerama' 'libpagemaker' 'glm'
	'libabw' 'libmwaw' 'libe-book' 'coin-or-mp' 'liblangtag' # 'liborcus' 
	'libexttextcat' 'gobject-introspection' 'libcmis' # 'libfbclient'
	'libtommath' 'libzmf' 'xmlsec' 'rxvt-unicode' 'gpgme' 'libwebp'
	'libepubgen' 'libfreehand' 'libqxp' 'libstaroffice'  'boost' 'libnumbertext'
	'abseil-cpp' 'clang' 'zxing-cpp'
	'libffi' 'box2d' 'git'
)
options=('!lto') # using --enable-lto (for parallel link-time optimization)
_mirror="https://ftp.osuosl.org/pub/tdf/libreoffice/src/${pkgver}"
#_mirror="https://dev-builds.libreoffice.org/pre-releases/src"
_additional_source_url="https://dev-www.libreoffice.org/src"
_additional_source_url2="https://dev-www.libreoffice.org/extern"
source=(${_mirror}/libreoffice{,-help,-translations}-${_LOver}.tar.xz{,.asc}
	${_additional_source_url}/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
	${_additional_source_url}/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip # keep old bundled version, new system version ftbs
	${_additional_source_url}/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
	${_additional_source_url}/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz
	${_additional_source_url}/language-subtag-registry-2021-03-05.tar.bz2
	${_additional_source_url}/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
	${_additional_source_url}/d8bd5eed178db6e2b18eeed243f85aa8-flute-1.1.6.zip
	${_additional_source_url}/ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip
	${_additional_source_url}/pdfium-5778.tar.bz2
	${_additional_source_url}/dtoa-20180411.tgz
	${_additional_source_url}/lxml-4.1.1.tgz
	${_additional_source_url}/skia-m103-b301ff025004c9cd82816c86c547588e6c24b466.tar.xz
        ${_additional_source_url}/dragonbox-1.1.3.tar.gz
        ${_additional_source_url}/liborcus-0.17.2.tar.bz2
        ${_additional_source_url}/mdds-2.0.3.tar.bz2
	${_additional_source_url2}/8249374c274932a21846fa7629c2aa9b-officeotron-0.7.4-master.jar  # for test suite
	${_additional_source_url2}/odfvalidator-1.2.0-incubating-SNAPSHOT-jar-with-dependencies-971c54fd38a968f5860014b44301872706f9e540.jar # for test suite
	${_additional_source_url2}/f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
	${_additional_source_url2}/185d60944ea767075d27247c3162b3bc-unowinreg.dll
	make-pyuno-work-with-system-wide-module-install.diff
        623ea5c.diff
        fix-build-against-system-libxml-2.12.diff
	soffice-template.desktop.in 
	libreoffice-still.sh libreoffice-still.csh)
noextract=(35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
           798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
           a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
           0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz
           language-subtag-registry-2021-03-05.tar.bz2
           17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
           d8bd5eed178db6e2b18eeed243f85aa8-flute-1.1.6.zip
           ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip
           pdfium-5778.tar.bz2
           dtoa-20180411.tgz
           lxml-4.1.1.tgz
           skia-m103-b301ff025004c9cd82816c86c547588e6c24b466.tar.xz
           dragonbox-1.1.3.tar.gz
           liborcus-0.17.2.tar.bz2
           mdds-2.0.3.tar.bz2
           8249374c274932a21846fa7629c2aa9b-officeotron-0.7.4-master.jar  # for test suite
           odfvalidator-1.2.0-incubating-SNAPSHOT-jar-with-dependencies-971c54fd38a968f5860014b44301872706f9e540.jar  # for test suite
           f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
           185d60944ea767075d27247c3162b3bc-unowinreg.dll
)
validpgpkeys=('C2839ECAD9408FBE9531C3E9F434A1EFAFEEAEA3') # LibreOffice Build Team (CODE SIGNING KEY) <build@documentfoundation.org>
sha256sums=('372a7a131c940d0984c4fdeb5e03adc389a520a6adc397b649d3f267ad1188d6'
            'SKIP'
            'a391cb8d546eb0f4c718e9876a8ec2646130b977d592b0e27c467d0de32e31f5'
            'SKIP'
            '67bbfc017a334d93274b969d22f4814f5f29d78af2c386deae627c19d918aff2'
            'SKIP'
            'a49a58e8070ec111cc40efc9cdab32e8a1894d6a7788319306ccc461128e87c0'
            '1fb458d6aab06932693cc8a9b6e4e70944ee1ff052fa63606e3131df34e21753'
            '75823776fb51a9c526af904f1503a7afaaab900fba83eda64f8a41073724c870'
            '983941d31ee8d366085cadf28db75eb1f5cb03ba1e5853b98f12f7f51c63b776'
            'ce80e8face06bf2ada363e0c159e3f990c4116fdae9232ca43e6369aa82bf16a'
            'd30b13f4ba2e3b6a2d4f020c0dee0a9fb9fc6fbcc2d561f36b78da4bf3802370'
            '1b5b24f7bc543c0362b667692f78db8bab4ed6dafc6172f104d0bd3757d8a133'
            '233f66e8d25c5dd971716d4200203a612a407649686ef3b52075d04b4c9df0dd'
            'b1052ff24e9ffb11af017c444bb0f6ad508d64c9a0fb88cacb0e8210245dde06'
            '0082d0684f7db6f62361b76c4b7faba19e0c7ce5cb8e36c4b65fea8281e711b4'
            '940caef1ec7c78e0c34b0f6b94fe42d0f2022915ffc78643d28538a5cfd0f40e'
            'acb85cedafa10ce106b1823fb236b1b3e5d942a5741e8f8435cc8ccfec0afe76'
            'c094a6247e44104beaaa0d00c825beb6baf1a8e532dc22214747495317a65bd9'
            '09d63b05e9c594ec423778ab59b7a5aa1d76fdd71d25c7048b0258c4ec9c3384'
            '2a86c405a5929f749b27637509596421d46805753364ab258b035fd01fbde143'
            '9771fe42e133443c13ca187253763e17c8bc96a1a02aec9e1e8893367ffa9ce5'
            'f2443f27561af52324eee03a1892d9f569adc8db9e7bca55614898bc2a13a770'
            '984f2a479df79e27e7b01a5815ac53ae64e07746b882262d8a64566494515504'
            'f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140'
            'eafde646a7dbe46d20c291685b0beac2382174d78d66ee990e229a1bf6e6cec6'
            'c463654a73ecfbc242ff109726fb4faecdbfb3d91affafe919b24bea65afb563'
            '440c9af5f3d1213d8ed7177282380f25cbc981cabc8b590dcb777aaae84178e5'
            '793a52abff29b3db51a1db9686b561911b9b3de70bd6dd02bbc1d78fcd960648'
            'd0be8099cbee3c9dfda694a828149b881c345b204ab68826f317580aafb50879'
            'cd1b25ff390e436c6bffa65c6e12382236e3ccbf8d3aae51b1b59bcaed79fd8a'
            'b43ed267643fc5ced803dca010427b12b1f10db485173ccb19efb3395e60c82e'
            '66f2cb5d2ff9909ee9633aea73d5306fc8c4ff358fa526f45d9994210d3e23ff')

prepare() {

	cd libreoffice-$_LOver

	# move external sources into place
	mkdir "${srcdir}"/ext_sources && pushd "${srcdir}"/ext_sources
	for source in "${noextract[@]}"; do
		ln -s "${srcdir}"/$source .
	done
	popd
	
	# unowinreg.dll must be a file not a symlink or the result will become a broken symlink
	# /usr/share/libreoffice/sdk/classes/win/unowinreg.dll -> /build/libreoffice/src/185d60944ea767075d27247c3162b3bc-unowinreg.dll
	rm "${srcdir}"/ext_sources/185d60944ea767075d27247c3162b3bc-unowinreg.dll
	cp -f "${srcdir}"/185d60944ea767075d27247c3162b3bc-unowinreg.dll "${srcdir}"/ext_sources

	# fix not upstreamable pyuno paths - FS#54250
	patch -Np1 -i "${srcdir}"/make-pyuno-work-with-system-wide-module-install.diff

        # fix build - https://gerrit.libreoffice.org/c/core/+/145421
        patch -Np1 -i "${srcdir}"/623ea5c.diff

        # fix build with libxml2 2.12
        patch -Np1 -i "${srcdir}"/fix-build-against-system-libxml-2.12.diff

	#use the CFLAGS but remove the LibO overridden ones
	for i in $CFLAGS; do
		case "$i" in
			-O?|-pipe|-Wall|-g|-fexceptions) continue;;
		esac
		ARCH_FLAGS="$ARCH_FLAGS $i"
	done
}

build() {
	cd libreoffice-$_LOver

	# strip -s from Makeflags in case you use it to shorten build logs
	_MAKEFLAGS=${MAKEFLAGS/-s/}

        # Build only minimal debug info to reduce size (~1.2GB -> ~225MB)
        CFLAGS=${CFLAGS/-g /-g1 }
        CXXFLAGS=${CXXFLAGS/-g /-g1 }

	# http://site.icu-project.org/download/61#TOC-Migration-Issues
	CPPFLAGS+=' -DU_USING_ICU_NAMESPACE=1'

	# fix build with qt6 expecting libexec path
	export qt6_libexec_dirs="/usr/lib/qt6"

	./autogen.sh --with-extra-buildid="${pkgver}-${pkgrel}" \
		--with-vendor="Arch Linux" \
		--enable-split-app-modules \
		--with-parallelism=${_MAKEFLAGS/-j/} \
		--with-external-tar="${srcdir}/ext_sources" \
		--disable-fetch-external \
		--enable-release-build \
		--prefix=/usr --exec-prefix=/usr --sysconfdir=/etc \
		--libdir=/usr/lib --mandir=/usr/share/man \
		--with-lang="" \
		--with-help=html \
		--disable-avahi \
		--enable-dbus \
		--enable-evolution2\
		--enable-gio\
		--enable-gtk3-kde5 \
		--enable-kf5 \
		--enable-qt5 \
		--enable-qt6 \
		--enable-gtk3 \
		--enable-gtk4 \
		--enable-introspection \
		--enable-openssl \
		--enable-odk\
		--enable-python=system \
		--enable-scripting-beanshell \
		--enable-scripting-javascript \
		--disable-dconf \
		--disable-report-builder \
		--enable-ext-wiki-publisher \
		--enable-ext-nlpsolver \
		--without-fonts\
                --with-system-libxml \
		--with-system-libcdr \
		--without-system-mdds\
		--without-myspell-dicts \
		--with-system-libvisio \
		--with-system-libcmis \
		--with-system-libmspub \
		--with-system-libexttextcat \
		--without-system-orcus \
		--with-system-liblangtag \
		--with-system-libodfgen \
		--with-system-libmwaw \
		--with-system-libetonyek \
		--with-system-libfreehand \
		--disable-firebird-sdbc \
		--with-system-zxing \
		--with-system-libtommath \
		--with-system-libatomic-ops \
		--with-system-libebook \
		--with-system-libabw \
		--with-system-coinmp \
		--with-system-dicts \
		--with-external-dict-dir=/usr/share/hunspell \
		--with-external-hyph-dir=/usr/share/hyphen \
		--with-external-thes-dir=/usr/share/mythes \
		--with-system-beanshell \
		--with-system-cppunit\
		--with-system-graphite\
		--with-system-glm \
		--with-system-libnumbertext \
		--with-system-libwpg \
		--with-system-libwps \
		--with-system-redland\
		--with-system-libzmf \
		--with-system-gpgmepp \
		--with-system-libstaroffice \
		--with-jdk-home="/usr/lib/jvm/default" \
		--with-ant-home="/usr/share/ant"\
		--with-system-boost\
		--with-system-icu \
		--with-system-cairo \
		--with-system-libs \
		--with-system-mythes \
		--with-system-headers \
		--without-system-hsqldb \
		--with-system-clucene \
		--without-system-dragonbox \
		--without-system-libfixmath \
		--with-gdrive-client-id=${_google_default_client_id} \
		--with-gdrive-client-secret=${_google_default_client_secret} \
		--disable-dependency-tracking

	touch src.downloaded
	make build

	mkdir "${srcdir}"/fakeinstall
	make DESTDIR="${srcdir}"/fakeinstall distro-pack-install
}

#check() {
#	cd "${srcdir}"/build
#	make check
#}

package_libreoffice-still-sdk() {
	pkgdesc="Software Development Kit for LibreOffice maintenance branch"
	depends=('libreoffice-still' 'gcc-libs' 'sh' 'make' 'zip' 'gcc' 'java-environment')
	provides=('libreoffice-sdk')
	conflicts=('libreoffice-fresh-sdk')

	for dir in $(grep -h ^%dir libreoffice-$_LOver/file-lists/sdk{,_doc}_list.txt); do
		install -dm755 "${pkgdir}"/${dir/\%dir/}
	done

	for file in $(grep -h -v ^%dir libreoffice-$_LOver/file-lists/sdk{,_doc}_list.txt); do
		dirname=$(dirname $file)
		[[ -d "${pkgdir}"/$dirname ]] || install -dm755 "${pkgdir}"/$dirname
		mv "${srcdir}"/fakeinstall/${file} "${pkgdir}"/$file
	done

	# fix environment path to keep compatibility with other java-environments
	sed -i -e "s:\/usr\/lib\/jvm\/java-7-openjdk:\$J2SDKDIR:" \
		"${pkgdir}"/usr/lib/libreoffice/sdk/setsdkenv_unix.sh

	# fix permissions
	find "${pkgdir}"/usr/lib/libreoffice/sdk/examples -type f -exec chmod -x {} +
	
	# add LibreOfficeKit headers; FS#48066
	install -dm755 "${pkgdir}"/usr/include/LibreOfficeKit
	install -v -m644 "${srcdir}"/libreoffice-$_LOver/include/LibreOfficeKit/* "${pkgdir}"/usr/include/LibreOfficeKit
}

package_libreoffice-still() {
	pkgdesc="LibreOffice maintenance branch"
	depends=('curl>=7.20.0' 'hunspell>=1.2.8' 'python' 'libwpd>=0.9.2' 'libwps'
		'neon>=0.28.6' 'pango' 'nspr' 'libjpeg' 'libxrandr' 'libgl'
		'libxslt' 'redland' 'hyphen' 'lpsolve' 'gcc-libs' 'sh' 'graphite' 'icu' 
		'lcms2' 'poppler>=0.24.0' 'libvisio' 'libetonyek' 'libodfgen' 'libcdr'
		'libmspub' 'harfbuzz-icu' 'nss' 'clucene' 'hicolor-icon-theme'
		'desktop-file-utils' 'shared-mime-info' 'libpagemaker'
		'libxinerama' 'libabw' 'libmwaw' 'libe-book' 'libcups'
		'liblangtag' 'libexttextcat' 'libwebp' 'libcmis' # 'libfbclient' 'liborcus'
		'libtommath' 'libzmf' 'libatomic_ops' 'xmlsec' 'libnumbertext' 'gpgme' 
		'libfreehand' 'libstaroffice' 'libepubgen' 'libqxp' 'libepoxy' 'box2d'
		'zxing-cpp' 'xdg-utils'
                'libldap' 'fontconfig' 'zlib' 'libpng' 'freetype2' 'raptor' 'libxml2'
                'cairo' 'libx11' 'expat' 'glib2' 'boost-libs' 'libtiff' 'dbus' 'glibc'
                'librevenge' 'libxext' 'openjpeg2' )
	optdepends=('java-runtime:     adds java support'
		'java-environment: required by extension-wiki-publisher and extension-nlpsolver'
		'pstoedit:         translates PostScript and PDF graphics into other vector formats'
		'libmythes:        for use in thesaurus'
		'beanshell:       interactive java -- good for prototyping/macros'
		'libwpg:           library for importing and converting WordPerfect Graphics format'
		'sane:             for scanner access'
		'unixodbc:         adds ODBC database support'
		'gst-plugins-base-libs: for multimedia content, e.g. in Impress'
		'libpaper:         takes care of papersize'
		'postgresql-libs:  for postgresql-connector'
		'mariadb-libs:     for mysql-connector'
		'coin-or-mp:	   required by the Calc solver'
		'gtk3:             for GTK3 integration'
		'gtk4:             for GTK4 integration (experimental)'
		'kio5:             for KF5 KDE desktop integration'
		'qt6-base:         for Qt6 desktop integration')
	backup=(etc/libreoffice/sofficerc
		etc/libreoffice/bootstraprc
		etc/libreoffice/psprint.conf
		etc/profile.d/libreoffice-still.sh
		etc/profile.d/libreoffice-still.csh)
	provides=('libreoffice' 'libreoffice-en-US')
	conflicts=('libreoffice-fresh')

	mv fakeinstall/* "${pkgdir}"/

	# put configuration files into place
	install -dm755 "${pkgdir}"/etc/libreoffice
	install -m644 "${pkgdir}"/usr/lib/libreoffice/program/{bootstraprc,sofficerc} \
		"${pkgdir}"/etc/libreoffice/
	install -m644 "${pkgdir}"/usr/lib/libreoffice/share/psprint/psprint.conf \
	   	"${pkgdir}"/etc/libreoffice/

	# install dummy links to make them found by LibO
	cd "${pkgdir}"/usr/lib/libreoffice/program/
	ln -vsf /etc/libreoffice/{bootstraprc,sofficerc} .
	cd "${pkgdir}"/usr/lib/libreoffice/share/psprint/
	ln -vsf /etc/libreoffice/psprint.conf .

	# allow to preset desired VLC
	install -dm755 "${pkgdir}"/etc/profile.d
	install -m644 "${srcdir}"/libreoffice-still.{sh,csh} "${pkgdir}"/etc/profile.d/

	# make pyuno find its modules
        local site_packages=$(python -c "import site; print(site.getsitepackages()[0])")

	install -dm755 "${pkgdir}"/$site_packages
	ln -svf /usr/lib/libreoffice/program/uno.py \
		"${pkgdir}"/$site_packages/uno.py
	ln -svf /usr/lib/libreoffice/program/unohelper.py \
		"${pkgdir}"/$site_packages/unohelper.py
		
	# add a symlink required for gnome-documents; FS#51887
	# https://lists.freedesktop.org/archives/libreoffice/2016-March/073787.html
	ln -svf /usr/lib/libreoffice/program/liblibreofficekitgtk.so \
		"${pkgdir}"/usr/lib/liblibreofficekitgtk.so  

	# cleanup
	rm -rf "${pkgdir}"/usr/share/libreoffice/sdk

	# add application descriptions
	install -dm755 "${pkgdir}"/usr/share/metainfo
	install -v -m644 "${srcdir}"/libreoffice-$_LOver/sysui/desktop/appstream-appdata/*.xml \
		"${pkgdir}"/usr/share/metainfo

	# add kde filemanager templates; FS#61662 - file taken from Debian
	install -dm755 "${pkgdir}"/usr/share/templates/.source
	install -v -m644 "${srcdir}"/libreoffice-$_LOver/extras/source/shellnew/soffice.* \
		"${pkgdir}"/usr/share/templates/.source

	cat "${srcdir}"/soffice-template.desktop.in \
                | sed -e "s/@APP@/Writer/" \
                | sed -e "s/@EXT@/odt/" \
                | sed -e "s/@TYPE@/text/" \
                > "${pkgdir}"/usr/share/templates/soffice.odt.desktop
        cat "${srcdir}"/soffice-template.desktop.in \
                | sed -e "s/@APP@/Calc/" \
                | sed -e "s/@EXT@/ods/" \
                | sed -e "s/@TYPE@/spreadsheet/" \
                > "${pkgdir}"/usr/share/templates/soffice.ods.desktop
        cat "${srcdir}"/soffice-template.desktop.in \
                | sed -e "s/@APP@/Impress/" \
                | sed -e "s/@EXT@/odp/" \
                | sed -e "s/@TYPE@/presentation/" \
                > "${pkgdir}"/usr/share/templates/soffice.odp.desktop
        cat "${srcdir}"/soffice-template.desktop.in \
                | sed -e "s/@APP@/Draw/" \
                | sed -e "s/@EXT@/odg/" \
                | sed -e "s/@TYPE@/drawing/" \
                > "${pkgdir}"/usr/share/templates/soffice.odg.desktop

	# make all i18n lang packages with help section ('1') available to
	# fix "F1" not opening translated offline help opening in browser
	# see also /usr/lib/libreoffice/help/en-US/langnames.js
	echo "var languagesSet = new Set(['en-US','am','ar','ast','bg','bn',\
	'bn-IN','bo','bs','ca','ca-valencia','cs','da','de','dz','el',\
	'en-GB','en-ZA','eo','es','et','eu','fi','fr','gl','gu','he',\
	'hi','hr','hu','id','is','it','ja','ka','km','ko','lo','lt','lv',\
	'mk','nb','ne','nl','nn','om','pl','pt','pt-BR','ro','ru','si',\
	'sid','sk','sl','sq','sv','ta','tg','tr','ug','uk','vi','zh-CN','zh-TW'])" \
		> "${pkgdir}"/usr/lib/libreoffice/help/languages.js
}