summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorFlorian Schmaus <flow@gentoo.org>2024-01-30 11:48:12 +0100
committerFlorian Schmaus <flow@gentoo.org>2024-01-30 12:28:31 +0100
commitb5a162f8b12688094165a3bdb995dac394bb7ac6 (patch)
tree11f49c3bb5765b752dab24bb223e8271d30e0a04 /eclass
parentdev-cpp/scitokens-cpp: restrict dependency to <jwt-cpp-0.7.0 (diff)
downloadgentoo-b5a162f8b12688094165a3bdb995dac394bb7ac6.tar.gz
gentoo-b5a162f8b12688094165a3bdb995dac394bb7ac6.tar.bz2
gentoo-b5a162f8b12688094165a3bdb995dac394bb7ac6.zip
eclass: update texlive eclasses for texlive 2023
Signed-off-by: Florian Schmaus <flow@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r--eclass/texlive-common.eclass128
-rw-r--r--eclass/texlive-module.eclass77
2 files changed, 124 insertions, 81 deletions
diff --git a/eclass/texlive-common.eclass b/eclass/texlive-common.eclass
index f43d10926857..fab6ff66ecd5 100644
--- a/eclass/texlive-common.eclass
+++ b/eclass/texlive-common.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2023 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: texlive-common.eclass
@@ -6,7 +6,7 @@
# tex@gentoo.org
# @AUTHOR:
# Original Author: Alexis Ballier <aballier@gentoo.org>
-# @SUPPORTED_EAPIS: 7
+# @SUPPORTED_EAPIS: 7 8
# @BLURB: Provide various functions used by both texlive-core and texlive modules
# @DESCRIPTION:
# Purpose: Provide various functions used by both texlive-core and texlive
@@ -15,53 +15,83 @@
# Note that this eclass *must* not assume the presence of any standard tex too
case ${EAPI} in
- 7) inherit eapi8-dosym ;;
+ 7)
+ inherit eapi8-dosym
+ ;;
+ 8) ;;
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
esac
if [[ -z ${_TEXLIVE_COMMON_ECLASS} ]]; then
_TEXLIVE_COMMON_ECLASS=1
-TEXMF_PATH=/usr/share/texmf
-TEXMF_DIST_PATH=/usr/share/texmf-dist
-TEXMF_VAR_PATH=/var/lib/texmf
+# @ECLASS_VARIABLE: CTAN_MIRROR_URL
+# @USER_VARIABLE
+# @DESCRIPTION:
+# This variable can be used to set the CTAN mirror that will be used to fetch
+# CTAN artifacts. Note that this mirror is usually only used as fallback
+# in case the Gentoo mirrors do not hold the requested files.
+#
+# Only Gentoo TeX developers may want to set this.
+#
+# Example:
+# @CODE
+# CTAN_MIRROR_URL='https://ftp.fau.de/ctan/' emerge -1v app-text/texlive-core
+# @CODE
+: "${CTAN_MIRROR_URL:="https://mirrors.ctan.org"}"
# @FUNCTION: texlive-common_handle_config_files
# @DESCRIPTION:
# Has to be called in src_install after having installed the files in ${D}
-# This function will move the relevant files to /etc/texmf and symling them
+# This function will move the relevant files to /etc/texmf and symlink them
# from their original location. This is to allow easy update of texlive's
-# configuration
-
+# configuration.
+# Called by app-text/texlive-core and texlive-module.eclass.
texlive-common_handle_config_files() {
+ local texmf_path
+ # Starting with TeX Live 2023, we install in texmf-dist, where a
+ # distribution-provided TeX Live installation is supposed to be,
+ # instead of texmf.
+ if ver_test -ge 2023; then
+ texmf_path=/usr/share/texmf-dist
+ else
+ texmf_path=/usr/share/texmf
+ fi
+
# Handle config files properly
- [[ -d ${ED}${TEXMF_PATH} ]] || return
- cd "${ED}${TEXMF_PATH}" || die
+ [[ -d ${ED}${texmf_path} ]] || return
+ cd "${ED}${texmf_path}" || die
while read -r f; do
- if [[ ${f#*config} != ${f} || ${f#doc} != ${f} || ${f#source} != ${f} || ${f#tex} != ${f} ]] ; then
+ if [[ ${f#*config} != "${f}" || ${f#doc} != "${f}" || ${f#source} != "${f}" || ${f#tex} != "${f}" ]] ; then
continue
fi
- dodir /etc/texmf/$(dirname ${f}).d
- einfo "Moving (and symlinking) ${EPREFIX}${TEXMF_PATH}/${f} to ${EPREFIX}/etc/texmf/$(dirname ${f}).d"
- mv "${ED}/${TEXMF_PATH}/${f}" "${ED}/etc/texmf/$(dirname ${f}).d" || die "mv ${f} failed."
- dosym8 -r /etc/texmf/$(dirname ${f}).d/$(basename ${f}) ${TEXMF_PATH}/${f}
- done < <(find -name '*.cnf' -type f -o -name '*.cfg' -type f | sed -e "s:\./::g")
+ local rel_dir
+ rel_dir="$(dirname "${f}")"
+
+ dodir "/etc/texmf/${rel_dir}.d"
+ einfo "Moving (and symlinking) ${EPREFIX}${texmf_path}/${f} to ${EPREFIX}/etc/texmf/${rel_dir}.d"
+ mv "${ED}/${texmf_path}/${f}" "${ED}/etc/texmf/${rel_dir}.d" || die "mv ${f} failed."
+
+ local dosym=dosym
+ [[ ${EAPI} == 7 ]] && dosym=dosym8
+ ${dosym} -r "/etc/texmf/${rel_dir}.d/$(basename "${f}")" "${texmf_path}/${f}"
+ done < <(find . -name '*.cnf' -type f -o -name '*.cfg' -type f | sed -e "s:\./::g")
}
# @FUNCTION: texlive-common_is_file_present_in_texmf
# @DESCRIPTION:
# Return if a file is present in the texmf tree
# Call it from the directory containing texmf and texmf-dist
-
+# Called by app-text/texlive-core.
texlive-common_is_file_present_in_texmf() {
local mark="${T}/${1}.found"
if [[ -d texmf ]]; then
- find texmf -name ${1} -exec touch ${mark} {} + || die
+ find texmf -name "${1}" -exec touch "${mark}" {} + || die
fi
if [[ -d texmf-dist ]]; then
- find texmf-dist -name ${1} -exec touch ${mark} {} + || die
+ find texmf-dist -name "${1}" -exec touch "${mark}" {} + || die
fi
[ -f "${mark}" ]
}
@@ -77,7 +107,7 @@ texlive-common_is_file_present_in_texmf() {
# ( Arguments are switched because texlinks main function sends them switched )
# This function should not be called from an ebuild, prefer etexlinks that will
# also do the fmtutil file parsing.
-
+# Called by texlive-common.eclass and texlive-module.eclass.
texlive-common_do_symlinks() {
while [[ ${#} != 0 ]]; do
case ${1} in
@@ -88,13 +118,13 @@ texlive-common_do_symlinks() {
einfo "Symlink ${1} -> ${2} skipped (texlive-core takes care of it)"
;;
*)
- if [[ ${1} == ${2} ]]; then
+ if [[ ${1} == "${2}" ]]; then
einfo "Symlink ${1} -> ${2} skipped"
elif [[ -e ${ED}/usr/bin/${1} || -L ${ED}/usr/bin/${1} ]]; then
einfo "Symlink ${1} skipped (file exists)"
else
einfo "Making symlink from ${1} to ${2}"
- dosym ${2} /usr/bin/${1}
+ dosym "${2}" "/usr/bin/${1}"
fi
;;
esac
@@ -114,7 +144,7 @@ texlive-common_do_symlinks() {
# the same dir as the source)
# Also, as this eclass must not depend on a tex distribution to be installed we
# cannot use texlinks from here.
-
+# Called by texlive-module.eclass.
etexlinks() {
# Install symlinks from formats to engines
texlive-common_do_symlinks $(sed '/^[ ]*#/d; /^[ ]*$/d' "$1" | awk '{print $1, $2}')
@@ -125,13 +155,14 @@ etexlinks() {
# @DESCRIPTION:
# Symlinks a script from the texmf tree to /usr/bin. Requires permissions to be
# correctly set for the file that it will point to.
-
+# Called by app-text/epspdf and texlive-module.eclass.
dobin_texmf_scripts() {
while [[ ${#} -gt 0 ]] ; do
- local trg=$(basename ${1} | sed 's,\.[^/]*$,,' | tr '[:upper:]' '[:lower:]')
+ local trg
+ trg=$(basename "${1}" | sed 's,\.[^/]*$,,' | tr '[:upper:]' '[:lower:]')
einfo "Installing ${1} as ${trg} bin wrapper"
[[ -x ${ED}/usr/share/${1} ]] || die "Trying to install a non existing or non executable symlink to /usr/bin: ${1}"
- dosym ../share/${1} /usr/bin/${trg}
+ dosym "../share/${1}" "/usr/bin/${trg}"
shift
done
}
@@ -141,7 +172,8 @@ dobin_texmf_scripts() {
# Runs texmf-update if it is available and prints a warning otherwise. This
# function helps in factorizing some code. Useful in ebuilds' pkg_postinst and
# pkg_postrm phases.
-
+# Called by app-text/dvipsk, app-text/texlive-core, dev-libs/kpathsea, and
+# texlive-module.eclass.
etexmf-update() {
if has_version 'app-text/texlive-core' ; then
if [[ -z ${ROOT} && -x "${EPREFIX}"/usr/sbin/texmf-update ]] ; then
@@ -159,7 +191,6 @@ etexmf-update() {
# Runs fmtutil-sys if it is available and prints a warning otherwise. This
# function helps in factorizing some code. Used in ebuilds' pkg_postinst to
# force a rebuild of TeX formats.
-
efmtutil-sys() {
if has_version 'app-text/texlive-core' ; then
if [[ -z ${ROOT} && -x "${EPREFIX}"/usr/bin/fmtutil-sys ]] ; then
@@ -173,4 +204,43 @@ efmtutil-sys() {
fi
}
+# @FUNCTION: texlive-common_append_to_src_uri
+# @DESCRIPTION:
+# Takes the name of a variable as input. The variable must contain a
+# list of texlive packages. Every texlive package in the variable is
+# transformed to an URL and appended to SRC_URI.
+texlive-common_append_to_src_uri() {
+ local tl_uri=( ${!1} )
+
+ # Starting from TeX Live 2009, upstream provides .tar.xz modules.
+ local tl_pkgext=tar.xz
+
+ local tl_uri_prefix="https://dev.gentoo.org/~@dev@/distfiles/texlive/tl-"
+ local tl_2023_uri_prefix="https://dev.gentoo.org/~@dev@/distfiles/texlive/"
+
+ local tl_dev
+ # If the version is less than 2023 and the package is the
+ # dev-texlive category, we fallback to the old SRC_URI layout. With
+ # the 2023 bump, packages outside the dev-texlive category start to
+ # inherit texlive-common.eclass.
+ if ver_test -lt 2023 && [[ ${CATEGORY} == dev-texlive ]]; then
+ local texlive_lt_2023_devs=( zlogene dilfridge sam )
+ local tl_uri_suffix="-${PV}.${tl_pkgext}"
+
+ tl_uri=( "${tl_uri[@]/%/${tl_uri_suffix}}" )
+ for tl_dev in "${texlive_lt_2023_devs[@]}"; do
+ SRC_URI+=" ${tl_uri[*]/#/${tl_uri_prefix/@dev@/${tl_dev}}}"
+ done
+ else
+ local texlive_ge_2023_devs=( flow )
+ local tl_mirror="${CTAN_MIRROR_URL%/}/systems/texlive/tlnet/archive/"
+
+ tl_uri=( "${tl_uri[@]/%/.${tl_pkgext}}" )
+ SRC_URI+=" ${tl_uri[*]/#/${tl_mirror}}"
+ for tl_dev in "${texlive_ge_2023_devs[@]}"; do
+ SRC_URI+=" ${tl_uri[*]/#/${tl_2023_uri_prefix/@dev@/${tl_dev}}}"
+ done
+ fi
+}
+
fi
diff --git a/eclass/texlive-module.eclass b/eclass/texlive-module.eclass
index 9e7e5db2e8f8..afcd4532975a 100644
--- a/eclass/texlive-module.eclass
+++ b/eclass/texlive-module.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2023 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: texlive-module.eclass
@@ -6,7 +6,7 @@
# tex@gentoo.org
# @AUTHOR:
# Original Author: Alexis Ballier <aballier@gentoo.org>
-# @SUPPORTED_EAPIS: 7
+# @SUPPORTED_EAPIS: 7 8
# @BLURB: Provide generic install functions so that modular texlive's texmf ebuild will only have to inherit this eclass
# @DESCRIPTION:
# Purpose: Provide generic install functions so that modular texlive's texmf ebuilds will
@@ -72,7 +72,7 @@
# e.g. for enabling/disabling a feature
case ${EAPI} in
- 7) ;;
+ 7|8) ;;
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
esac
@@ -83,59 +83,33 @@ inherit texlive-common
HOMEPAGE="https://www.tug.org/texlive/"
-COMMON_DEPEND=">=app-text/texlive-core-${TL_PV:-${PV}}"
-
-IUSE="source"
-
-# Starting from TeX Live 2009, upstream provides .tar.xz modules.
-PKGEXT=tar.xz
-
-# Now where should we get these files?
-TEXLIVE_DEVS=${TEXLIVE_DEVS:- zlogene dilfridge sam }
+IUSE="doc source"
+RDEPEND=">=app-text/texlive-core-${TL_PV:-${PV}}"
# We do not need anything from SYSROOT:
# Everything is built from the texlive install in /
# Generated files are noarch
-BDEPEND="${COMMON_DEPEND}
- app-arch/xz-utils"
+BDEPEND="
+ ${RDEPEND}
+ app-arch/xz-utils
+"
-tl_uri_prefix="https://dev.gentoo.org/~@dev@/distfiles/texlive/tl-"
-tl_uri_suffix="-${PV}.${PKGEXT}"
-
-tl_uri=( ${TEXLIVE_MODULE_CONTENTS} )
-tl_uri=( "${tl_uri[@]/%/${tl_uri_suffix}}" )
-for tldev in ${TEXLIVE_DEVS}; do
- SRC_URI+=" ${tl_uri[*]/#/${tl_uri_prefix/@dev@/${tldev}}}"
-done
+texlive-common_append_to_src_uri TEXLIVE_MODULE_CONTENTS
# Forge doc SRC_URI
if [[ -n ${TEXLIVE_MODULE_DOC_CONTENTS} ]]; then
SRC_URI+=" doc? ("
- tl_uri=( ${TEXLIVE_MODULE_DOC_CONTENTS} )
- tl_uri=( "${tl_uri[@]/%/${tl_uri_suffix}}" )
- for tldev in ${TEXLIVE_DEVS}; do
- SRC_URI+=" ${tl_uri[*]/#/${tl_uri_prefix/@dev@/${tldev}}}"
- done
+ texlive-common_append_to_src_uri TEXLIVE_MODULE_DOC_CONTENTS
SRC_URI+=" )"
fi
# Forge source SRC_URI
if [[ -n ${TEXLIVE_MODULE_SRC_CONTENTS} ]]; then
SRC_URI+=" source? ("
- tl_uri=( ${TEXLIVE_MODULE_SRC_CONTENTS} )
- tl_uri=( "${tl_uri[@]/%/${tl_uri_suffix}}" )
- for tldev in ${TEXLIVE_DEVS}; do
- SRC_URI+=" ${tl_uri[*]/#/${tl_uri_prefix/@dev@/${tldev}}}"
- done
+ texlive-common_append_to_src_uri TEXLIVE_MODULE_SRC_CONTENTS
SRC_URI+=" )"
fi
-unset tldev tl_uri tl_uri_prefix tl_uri_suffix
-
-RDEPEND="${COMMON_DEPEND}"
-
-IUSE="${IUSE} doc"
-
# @ECLASS_VARIABLE: TEXLIVE_MODULE_OPTIONAL_ENGINE
# @DEFAULT_UNSET
# @DESCRIPTION:
@@ -155,17 +129,16 @@ S="${WORKDIR}"
# Only for TeX Live 2009 and later.
# After unpacking, the files that need to be relocated are moved accordingly.
-RELOC_TARGET=texmf-dist
-
texlive-module_src_unpack() {
unpack ${A}
+ local RELOC_TARGET=texmf-dist
sed -n -e 's:\s*RELOC/::p' tlpkg/tlpobj/* > "${T}/reloclist" || die
sed -e 's/\/[^/]*$//' -e "s:^:${RELOC_TARGET}/:" "${T}/reloclist" |
sort -u |
xargs mkdir -p || die
local i dir="" files=()
- while read i; do
+ while read -r i; do
if [[ ${RELOC_TARGET}/${i%/*} != "${dir}" ]]; then
# new dir, do the previous move
[[ -z ${dir} ]] || mv "${files[@]}" "${dir}" || die
@@ -282,7 +255,7 @@ texlive-module_make_language_lua_lines() {
fi
if [[ -n ${luaspecial} ]]; then
- printf "\t\tspecial = '%s',\n" "$luaspecial" >> "${dest}" || die
+ printf "\t\tspecial = '%s',\n" "${luaspecial}" >> "${dest}" || die
fi
printf "\t},\n" >> "${dest}" || die
@@ -310,7 +283,7 @@ texlive-module_src_compile() {
for i in $(<"${T}/jobs");
do
- j="$(echo $i | tr '#' ' ')"
+ j="$(echo "${i}" | tr '#' ' ')"
command=${j%% *}
parameter=${j#* }
case ${command} in
@@ -325,16 +298,16 @@ texlive-module_src_compile() {
addDvipdfmMap)
echo "f ${parameter}" >> "${S}/${PN}-config";;
AddHyphen)
- texlive-module_make_language_def_lines ${parameter}
- texlive-module_make_language_dat_lines ${parameter}
- texlive-module_make_language_lua_lines ${parameter}
+ texlive-module_make_language_def_lines "${parameter}"
+ texlive-module_make_language_dat_lines "${parameter}"
+ texlive-module_make_language_lua_lines "${parameter}"
;;
AddFormat)
- texlive-module_add_format ${parameter};;
+ texlive-module_add_format "${parameter}";;
BuildFormat)
einfo "Format ${parameter} already built.";;
BuildLanguageDat)
- einfo "Language file $parameter already generated.";;
+ einfo "Language file ${parameter} already generated.";;
*)
die "No rule to process ${command}. Please file a bug."
esac
@@ -355,7 +328,7 @@ texlive-module_src_compile() {
mkdir texmf-var/web2c || die
fi
VARTEXFONTS="${T}/fonts" TEXMFHOME="${S}/texmf:${S}/texmf-dist:${S}/texmf-var"\
- env -u TEXINPUTS $fmt_call --cnffile "${i}" --fmtdir "${S}/texmf-var/web2c" --all\
+ env -u TEXINPUTS "${fmt_call}" --cnffile "${i}" --fmtdir "${S}/texmf-var/web2c" --all\
|| die "failed to build format ${i}"
fi
done
@@ -431,14 +404,14 @@ texlive-module_src_install() {
[[ -n ${TEXLIVE_MODULE_BINSCRIPTS} ]] && dobin_texmf_scripts ${TEXLIVE_MODULE_BINSCRIPTS}
if [[ -n ${TEXLIVE_MODULE_BINLINKS} ]] ; then
+ dodir "/usr/bin"
for i in ${TEXLIVE_MODULE_BINLINKS} ; do
- [[ -f ${ED}/usr/bin/${i%:*} ]] || die "Trying to install an invalid BINLINK. This should not happen. Please file a bug."
- dosym ${i%:*} /usr/bin/${i#*:}
+ [[ -f ${ED}/usr/bin/${i%:*} ]] || die "Trying to install an invalid BINLINK ${i%:*}. This should not happen. Please file a bug."
+ dosym "${i%:*}" "/usr/bin/${i#*:}"
done
fi
texlive-common_handle_config_files
- TEXMF_PATH=${TEXMF_DIST_PATH} texlive-common_handle_config_files
}
# @FUNCTION: texlive-module_pkg_postinst