#!/usr/bin/env bash

# copy with `rsync -r scripts/texmf/texmf/ texmf/ -ic`

set -e

pkgname="texmf"

basedir=$(dirname $(readlink -f "$BASH_SOURCE"))
pkgdir=$(readlink -fm "$basedir/$pkgname")
srcdir=$(readlink -fm "$basedir/src/")

mkdir -p "$basedir" "$pkgdir" "$srcdir"

echo "Getting sources.."
cd "$srcdir"
sed -e 's/#.*//' -e 's/\s\+$//' -e '/^$/ d' "$basedir/sources.txt" | while read -r src dest; do
	case "$src" in
	git+*)
		url=${src##git+}
		ref=${url##*@}
		url=${url%@*}
		: "${dest:="${url##*/}"}"

		echo "Getting git repository '$url'.."
		if [ ! -d "$dest" ]; then
			git clone --depth=1 --branch="$ref" -c advice.detachedHead=false "$url" "$dest"
		fi
	;;
	svn+*)
		url=${src##svn+}
		: "${dest:="${url##*/}"}"

		echo "Getting subversion repository '$url'.."
		if [ ! -d "$dest" ]; then
			svn checkout --username anonsvn --password anonsvn "$url" "$dest"
		fi
	;;
	svnfile+*)
		url=${src##svnfile+}
		: "${dest:="${url##*/}"}"

		echo "Getting subversion file '$url'.."
		if [ ! -f "$dest" ]; then
			svn export --force --username anonsvn --password anonsvn "$url" "$dest"
		fi
	;;
	http://*|https://*)
		url=$src
		: "${dest:="${url##*/}"}"

		echo "Getting remote source '$url'.."
		if [ ! -f "$dest" ]; then
			curl -fLo "$dest" "$url"
		fi

		case "$dest" in
		*.zip)
			unzip -uo "$dest" ;;
		*.tar*)
			tar -xf "$dest" ;;
		esac
	;;
	*)
		echo "Getting local source '$src'.."
		cp -rf "$basedir/files/$src" .
	esac
done

patch() {
	# don't complain if patch is already applied (by previous build)
	command patch -N -p1 "$@" || true
}

install() {
	command install -Dm644 "$@"
}


## PATCH SOURCES

# patch luaotfload
patch -i luaotfload.patch

export TEXMF="$pkgdir"
export TEXMFDOTDIR

# use docstrip.dtx as docstrip.tex
ln -sf docstrip.dtx docstrip.tex

# generate lipsum.ltd.tex
TEXMFDOTDIR=.:lipsum mmluatex -ini 'lipsum.ins'

# generate some lualibs files
TEXMFDOTDIR=.:lualibs mmluatex -ini '\catcode`\{=1 \catcode`\}=2 \let\obeyspaces\relax \input lualibs.dtx'

# install luatex generic packages
install hyph-utf8/tex/generic/hyph-utf8/patterns/tex/* -t "$TEXMF/tex/hyph-utf8"
install UnicodeData.txt CaseFolding.txt PropList.txt ScriptExtensions.txt Scripts.txt SpecialCasing.txt auxiliary/WordBreakProperty.txt -t "$TEXMF/tex/unicode-data"
install lualibs*.lua lualibs/lualibs*-merged.lua lualibs/*-compat.lua -t "$TEXMF/tex/lualibs"
install luaotfload/luaotfload*.lua luaotfload/fontloader-????-??-??.lua luaotfload/fontloader-basics-gen.lua -t "$TEXMF/tex/luaotfload"
rm -f "$TEXMF/tex/luaotfload/luaotfload-characters.lua"
install lua-uni-algos/*.lua -t "$TEXMF/tex/lua-uni-algos"

# install external files needed by optex
install lipsum.sty *.ltd.tex -t "$TEXMF/tex/lipsum"
install hyphen.tex -t "$TEXMF/tex/knuth-lib"
install emoji-table.def -t "$TEXMF/tex/emoji"
(cd luavlna; install luavlna.lua luavlna-presi.lua luavlna-si.lua luavlna-predegrees.lua luavlna-sufdegrees.lua -t "$TEXMF/tex/luavlna")

# install fonts
install rsfs/type1/afm/* -t "$TEXMF/fonts/afm"
install rsfs/type1/*.pfb -t "$TEXMF/fonts/type1"

# install optex
optexdir=optex
[[ -e optex/optex/base ]] && optexdir=optex/optex
install "$optexdir/base/"* -t "$TEXMF/tex/optex/base"
install "$optexdir/pkg/"*  -t "$TEXMF/tex/optex/pkg"

# install optex extra
install pdfextra/pdfextra.opm -t "$TEXMF/tex/pdfextra"
install lua-widow-control/*.opm lua-widow-control/*.lua -t "$TEXMF/tex/lua-widow-control"

# install minim
install minim*/*.tex minim*/*.lua minim*/*.ini -t "$TEXMF/tex/minim"
install minim*/*.mp -t "$TEXMF/metapost/minim"
rm -f "$TEXMF/tex/minim/minim-lamp."* "$TEXMF/metapost/minim/minim-lamp."* "$TEXMF/metapost/minim/minim-hatching-doc.mp"

# install PGF/TikZ
install base/tex/* -t "$TEXMF/tex/pgf"
(cd "$TEXMF/tex/pgf"; rm -rf pgfsys-*.def pgfutil-*.def *.sty LUA_CODING_STYLE example_graph_for_ascii_displayer.txt t-*.tex)
install base/tex/pgfsys-common-pdf.def base/tex/pgfsys-luatex.def base/tex/pgfutil-plain.def -t "$TEXMF/tex/pgf"

# install metapost base files
install mp-base/*.mp -t "$TEXMF/metapost/base"

# install our files
install mmoptex.ini -t "$TEXMF/tex/mmoptex"

# create ls-R database
(
	cd "$TEXMF";
	ls -LAR ./ > ls-R
	# the format file will be added at built time
	printf '%s\n' "" "./web2c:" "mmoptex.fmt" >> ls-R
)

printf '\n%s\n' "Done, "$pkgname" created succesfully."
