diff options
author | Florian Schmaus <flow@gentoo.org> | 2024-01-30 11:48:12 +0100 |
---|---|---|
committer | Florian Schmaus <flow@gentoo.org> | 2024-01-30 12:28:31 +0100 |
commit | b5a162f8b12688094165a3bdb995dac394bb7ac6 (patch) | |
tree | 11f49c3bb5765b752dab24bb223e8271d30e0a04 /eclass | |
parent | dev-cpp/scitokens-cpp: restrict dependency to <jwt-cpp-0.7.0 (diff) | |
download | gentoo-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.eclass | 128 | ||||
-rw-r--r-- | eclass/texlive-module.eclass | 77 |
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 |