# Template file for 'texlive'
pkgname=texlive
version=20230313
revision=1
build_wrksrc="build"
build_style=gnu-configure
configure_script="../configure"
configure_args="
 --enable-biber
 --enable-epsfwin
 --enable-ipc
 --enable-luajittex
 --enable-luajithbtex
 --enable-mfluajit
 --enable-mfluajit-nowin
 --enable-luatex
 --enable-luahbtex
 --enable-mflua
 --enable-mfluajit
 --enable-mfluajit-nowin
 --enable-mftalkwin
 --enable-regiswin
 --enable-shared
 --enable-tektronixwin
 --enable-unitermwin
 --enable-xetex
 --enable-dvipng
 --enable-dvipsk
 --enable-ps2eps
 --enable-psutils
 --disable-bibtex-x
 --disable-chktex
 --disable-cjkutils
 --disable-detex
 --disable-dialog
 --disable-dvi2tty
 --disable-dvisvgm
 --disable-largefile
 --disable-lcdf-typetools
 --disable-multiplatform
 --disable-native-texlive-build
 --disable-pdfopen
 --disable-ps2pkm
 --disable-t1utils
 --disable-tex4htk
 --disable-ttf2pk2
 --disable-vlna
 --disable-xindy
 --disable-xpdfopen
 --with-ps=gs
 --with-banner-add=/VoidLinux
 --with-system-cairo
 --with-system-freetype2
 --with-system-gd
 --with-system-graphite2
 --with-system-gmp
 --with-system-harfbuzz
 --with-system-icu
 --with-system-libpaper
 --with-system-libpng
 --with-system-mpfr
 --with-system-pixman
 --with-system-teckit
 --with-system-zlib
 --with-system-zziplib
 --with-xdvi-x-toolkit=Xaw"
hostmakedepends="pkg-config perl lua52-BitOp texinfo libXaw-devel"
makedepends="cairo-devel freetype-devel gd-devel graphite-devel gmp-devel
 harfbuzz-devel icu-devel libpaper-devel libpng-devel mpfr-devel
 pixman-devel libteckit-devel zlib-devel zziplib-devel libXaw-devel"
depends="dialog ghostscript perl-Tk texlive-core texlive-latexmk xbps-triggers"
short_desc="TeX Live"
maintainer="fosslinux <fosslinux@aussies.space>"
license="GPL-2.0-or-later"
homepage="https://tug.org/texlive/"
distfiles="ftp://tug.org/texlive/historic/2023/texlive-${version}-source.tar.xz"
checksum=3878aa0e1ed0301c053b0e2ee4e9ad999c441345f4882e79bdd1c8f4ce9e79b9
python_version=3
# Virtual package cares only about year part of version
provides="tex-${version%${version#????}}_1"

if [ "$CROSS_BUILD" ] ; then
	# Tangle is required for cross compile
	hostmakedepends+=" texlive"
fi

case "$XBPS_TARGET_MACHINE" in
	mips*) broken="cannot find libraries" ;;
esac

build_options="luajit"

_luajit_host_cc="cc"
if [ "$XBPS_WORDSIZE" != "$XBPS_TARGET_WORDSIZE" ] ; then
	case "$XBPS_MACHINE" in
		x86_64*)
			hostmakedepends+=" cross-i686-linux-musl"
			_luajit_host_cc="i686-linux-musl-gcc -static"
			;;
		ppc64le*) _luajit_host_cc="broken" ;; # no 32-bit counterpart yet
		ppc64*)
			hostmakedepends+=" cross-powerpc-linux-musl"
			_luajit_host_cc="powerpc-linux-musl-gcc -static"
			;;
		*) _luajit_host_cc="broken" ;;
	esac
fi

if [ "${_luajit_host_cc}" != "broken" ] ; then
	build_options_default+=" luajit"
fi

if [ ! "$build_option_luajit" ] ; then
	configure_args+=" --disable-luajittex --disable-mfluajit
	 --disable-mfluajit-nowin --disable-luajithbtex"
else
	if [ "${_luajit_host_cc}" = "broken" ] ; then
		nocross="Cannot cross compile LuaJIT for different wordsizes"
	fi
fi

case "$XBPS_TARGET_MACHINE" in
	aarch64*) DASM_ARCH=arm64 ;;
	arm*) DASM_ARCH=arm ;;
	mips64*) DASM_ARCH=mips64 ;;
	mips*) DASM_ARCH=mips ;;
	ppc*) DASM_ARCH=ppc ;;
	i686*) DASM_ARCH=x86 ;;
	x86_64*) DASM_ARCH=x64 ;;
esac
export DASM_ARCH

post_extract() {
	mkdir -p "${build_wrksrc}"
	cp -rf texk/web2c "${build_wrksrc}/web2c-host"
}

post_patch() {
	pushd "${wrksrc}/libs/luajit/LuaJIT-src"

	# Apply all LuaJIT patches first
	for i in ${FILESDIR}/luajit-patches/*.patch ; do
		msg_normal "patching: $(basename ${i})\n"
		patch -sNp1 -i ${i}
	done

	popd
}

pre_build() {
	if [ -n "$build_option_luajit" ] ; then
		export HOST_CC="${_luajit_host_cc}"
		export HOSTCC="${_luajit_host_cc}"
		if [ -n "$CROSS_BUILD" ] ; then
			# LuaJIT configure script does not cross compile correctly
			local _cflags=$CFLAGS
			local _ldflags=$LDFLAGS
			unset CFLAGS LDFLAGS
			mkdir -p "${wrksrc}/build/libs/luajit/native"
			cd "${wrksrc}/build/libs/luajit/native"
			PREFIX=/usr HOST_LUA=lua5.2 HOST_CFLAGS="$XBPS_CFLAGS" \
			HOST_LDFLAGS="$XBPS_LDFLAGS" TARGET_CFLAGS="${_cflags}" \
			TARGET_LDFLAGS="${_ldflags}" CROSS="${XBPS_CROSS_TRIPLET}-" \
				../../../../libs/luajit/native/configure \
					--build=${XBPS_TRIPLET} \
					--host=${XBPS_CROSS_TRIPLET} \
					--target=${XBPS_CROSS_TRIPLET}
			CFLAGS="${_cflags}"
			LDFLAGS="${_ldflags}"
			# Replace configure script with dummy script
			cd "${wrksrc}"
			cat > libs/luajit/native/configure << EOF
#!/bin/sh
printf "already complete\\n"
EOF
		fi
	fi

	# web2c should not be cross
	mkdir -p "${wrksrc}/build/texk/web2c/web2c"
	cd "${wrksrc}/build/texk/web2c/web2c"
	unset CC CXX
	CFLAGS="$XBPS_CFLAGS" LDFLAGS="$XBPS_LDFLAGS" RANLIB=ranlib \
		../../../../texk/web2c/web2c/configure

	# Replace configure script with dummy script
	cd "${wrksrc}"
	cat > texk/web2c/web2c/configure << EOF
#!/bin/sh
printf "already complete\\n"
EOF

	# himktables needs to be built on host
	if [ -n "${CROSS_BUILD}" ]; then
		cd "${wrksrc}/build/texk/web2c"
		ctangle ../../../texk/web2c/hitexdir/hiformat.w
		gcc -o himktables himktables.c
		./himktables > hitables.c
		patch -d "${wrksrc}" -Np1 -i ${FILESDIR}/remove-himktables.patch
	fi
}

post_install() {
	# These tools are still useful for a texlive workflow, but are modified
	# psutils and conflict with psutils; rename them to have a tl- prefix
	for f in extractres includeres psbook psjoin psnup psresize psselect \
			 pstops epsffit ; do
		mv "${DESTDIR}/usr/share/man/man1/"{,tl-}"${f}.1"
		mv "${DESTDIR}/usr/bin/"{,tl-}"${f}"
	done
	cp -rf ${wrksrc}/texk/tests/TeXLive \
		"${DESTDIR}/usr/share/texmf-dist/scripts/texlive"
	sed -i -e 's:^\(TEXMFROOT *= *\)$SELFAUTOPARENT$:\1/usr/share:g' \
		"${DESTDIR}/usr/share/texmf-dist/web2c/texmf.cnf"
	# Remove files provided by other texlive-* packages
	while IFS=' ' read -r f p ; do
		if [ "$p" = "$pkgname" ] && ! [ -e "${DESTDIR}/usr/share/texmf-dist/${f}" ]; then
			msg_error "$pkgver: missing file $f\n"
		elif [ "$p" != "$pkgname" ] && [ -e "${DESTDIR}/usr/share/texmf-dist/${f}" ]; then
			echo "removed $f"
			mkdir -p ${DESTDIR}/usr/share/texlive/removed
			echo "$f" >> ${DESTDIR}/usr/share/texlive/removed/$pkgname.txt
			rm -f "${DESTDIR}/usr/share/texmf-dist/$f"
		fi
	done < "${XBPS_COMMONDIR}/environment/build-style/texmf/ownership.txt"
	for cmd in amstex cslatex csplain eplain etex jadetex latex mex llatex \
				mltex mllatex pdfetex pdfcslatex pdfcsplain pdfjadetex \
				pdflatex pdfmex pdfxmltex texsis utf8mex xmltex ; do
		ln -s pdftex "${DESTDIR}/usr/bin/${cmd}"
	done
	for cmd in lollipop ; do
		ln -s tex "${DESTDIR}/usr/bin/${cmd}"
	done
	ln -s eptex "${DESTDIR}/usr/bin/platex"
	ln -s euptex "${DESTDIR}/usr/bin/uplatex"
	# Create tlmgr smallscript
	rm -f "${DESTDIR}/usr/bin/tlmgr"
	vbin "${FILESDIR}/tlmgr"
}

texlive-XeTeX_package() {
	depends="${sourcepkg}>=${version}_${revision}"
	short_desc+=" - engine supporting modern typography"
	pkg_install() {
		vmove usr/share/texmf-dist/scripts/texlive-extra/xe*.sh
		vmove usr/bin/xetex
		vmove usr/share/man/man1/xe*.1
		ln -s xetex "${PKGDESTDIR}/usr/bin/xelatex"
	}
}

texlive-dvi_package() {
	depends="${sourcepkg}>=${version}_${revision}"
	short_desc+=" - tools for dvi based workflow"
	pkg_install() {
		for i in afm2tfm bbox tl-extractres tl-includeres tl-psbook tl-psjoin \
				 tl-psnup tl-psresize tl-psselect tl-pstops ; do
			vmove "usr/bin/${i}"
			vmove "usr/share/man/man1/${i}.1"
		done
		vmove usr/bin/dvi*
	}
}

texlive-LuaTeX_package() {
	depends="${sourcepkg}>=${version}_${revision} bash"
	short_desc+=" - extended pdfTeX using Lua"
	pkg_install() {
		if [ "$build_option_luajit" ] ; then
			for i in luajittex mfluajit mfluajit-nowin luajithbtex texluajit \
					 texluajitc ; do
				vmove "usr/bin/${i}"
			done
		fi
		for i in checkcites cllualatex cluttex diadia digestif getmapdl l3build luafindfont luahbtex \
				 luaotfload-tool luatex lwarpmk m-tx \
				 makeglossaries-lite mflua mflua-nowin musixflx musixtex pmxchords \
				 ptex2pdf texlua texluac xindex ; do
			vmove "usr/bin/${i}"
		done
		for i in checkcites cluttex diadia digestif getmap glossaries/makeglossaries-lite.lua \
				 l3build luafindfont luaotfload lwarp m-tx musixtex pmxchords ptex2pdf xindex ; do
			vmove "usr/share/texmf-dist/scripts/${i}"
		done
		for i in luatex texlua texluac ; do
			vmove "usr/share/man/man1/${i}.1"
		done
		vmove "usr/lib/libtexlua*.so.*"
		for cmd in dvilualatex dviluatex optex ; do
			ln -s luatex "${PKGDESTDIR}/usr/bin/${cmd}"
		done
		ln -s luahbtex "${PKGDESTDIR}/usr/bin/lualatex"
	}
}

texlive-LuaTeX-devel_package() {
	depends="${sourcepkg}-devel>=${version}_${revision}
	 ${sourcepkg}-LuaTeX>=${version}_${revision}"
	short_desc+=" - extended pdfTeX using Lua - development files"
	pkg_install() {
		for i in texlua53 $(vopt_if luajit texluajit); do
			vmove "usr/include/${i}"
			vmove "usr/lib/lib${i}.a"
			vmove "usr/lib/lib${i}.so"
			vmove "usr/lib/pkgconfig/${i}.pc"
		done
	}
}

texlive-Xdvi_package() {
	depends="${sourcepkg}>=${version}_${revision}"
	short_desc+=" - displaying DVI files on the X window system"
	pkg_install() {
		for i in xdvi xdvi-xaw xdvipdfmx ; do
			vmove "usr/bin/${i}"
		done
		vmove usr/share/texmf-dist/xdvi
		for i in xdvi xdvipdfmx ; do
			vmove "usr/share/man/man1/${i}.1"
		done
		vmove usr/share/applications/xdvi.desktop
	}
}

libsynctex_package() {
	short_desc+=" - libsynctex"
	pkg_install() {
		vmove "usr/lib/libsynctex.so.*"
	}
}

texlive-devel_package() {
	depends="${sourcepkg}>=${version}_${revision}"
	short_desc+=" - development files"
	pkg_install() {
		for i in kpathsea ptexenc synctex; do
			vmove "usr/include/${i}"
			vmove "usr/lib/lib${i}.a"
			vmove "usr/lib/lib${i}.so"
			vmove "usr/lib/pkgconfig/${i}.pc"
		done
	}
}

texlive-BibTeX_package() {
	depends="${sourcepkg}>=${version}_${revision} bash"
	short_desc+=" - reference management software"
	pkg_install() {
		for i in bbl2bib ctanbib ; do
			vmove "usr/bin/${i}"
		done
		for i in bib2gls bibcop bibexport ; do
			vmove "usr/share/texmf-dist/scripts/${i}"
		done
		vmove usr/bin/bib*
		vmove usr/share/man/man1/bibtex.1
	}
}

texlive-ConTeXt_package() {
	build_style=meta
	short_desc+=" (transitional package)"
	depends="texlive>=${version}_${revision}"
}

texlive-PythonTeX_package() {
	depends="${sourcepkg}>=${version}_${revision} python3"
	short_desc+=" - executing Python in LaTeX"
	pkg_install() {
		vmove usr/bin/*pythontex
		vmove usr/share/texmf-dist/scripts/pythontex
	}
}

texlive-latexmk_package() {
	depends="perl"
	short_desc+=" - script for compiling the correct number of times"
	pkg_install() {
		vmove usr/bin/latexmk
		vmove usr/share/texmf-dist/scripts/latexmk
	}
}
