#!/bin/sh# SPDX-License-Identifier: GPL-2.0-only# Copyright (C) Akira Yokosawa, 2024## For "make pdfdocs", reports of build errors of translations.pdf started# arriving early 2024 [1, 2]. It turned out that Fedora and openSUSE# tumbleweed have started deploying variable-font [3] format of "Noto CJK"# fonts [4, 5]. For PDF, a LaTeX package named xeCJK is used for CJK# (Chinese, Japanese, Korean) pages. xeCJK requires XeLaTeX/XeTeX, which# does not (and likely never will) understand variable fonts for historical# reasons.## The build error happens even when both of variable- and non-variable-format# fonts are found on the build system. To make matters worse, Fedora enlists# variable "Noto CJK" fonts in the requirements of langpacks-ja, -ko, -zh_CN,# -zh_TW, etc. Hence developers who have interest in CJK pages are more# likely to encounter the build errors.## This script is invoked from the error path of "make pdfdocs" and emits# suggestions if variable-font files of "Noto CJK" fonts are in the list of# fonts accessible from XeTeX.## References:# [1]: https://lore.kernel.org/r/8734tqsrt7.fsf@meer.lwn.net/# [2]: https://lore.kernel.org/r/1708585803.600323099@f111.i.mail.ru/# [3]: https://en.wikipedia.org/wiki/Variable_font# [4]: https://fedoraproject.org/wiki/Changes/Noto_CJK_Variable_Fonts# [5]: https://build.opensuse.org/request/show/1157217##===========================================================================# Workarounds for building translations.pdf#===========================================================================## * Denylist "variable font" Noto CJK fonts.# - Create $HOME/deny-vf/fontconfig/fonts.conf from template below, with# tweaks if necessary. Remove leading "# ".# - Path of fontconfig/fonts.conf can be overridden by setting an env# variable FONTS_CONF_DENY_VF.## * Template:# -----------------------------------------------------------------# <?xml version="1.0"?># <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"># <fontconfig># <!--# Ignore variable-font glob (not to break xetex)# --># <selectfont># <rejectfont># <!--# for Fedora# --># <glob>/usr/share/fonts/google-noto-*-cjk-vf-fonts</glob># <!--# for openSUSE tumbleweed# --># <glob>/usr/share/fonts/truetype/Noto*CJK*-VF.otf</glob># </rejectfont># </selectfont># </fontconfig># -----------------------------------------------------------------## The denylisting is activated for "make pdfdocs".## * For skipping CJK pages in PDF# - Uninstall texlive-xecjk.# Denylisting is not needed in this case.## * For printing CJK pages in PDF# - Need non-variable "Noto CJK" fonts.# * Fedora# - google-noto-sans-cjk-fonts# - google-noto-serif-cjk-fonts# * openSUSE tumbleweed# - Non-variable "Noto CJK" fonts are not available as distro packages# as of April, 2024. Fetch a set of font files from upstream Noto# CJK Font released at:# https://github.com/notofonts/noto-cjk/tree/main/Sans#super-otc# and at:# https://github.com/notofonts/noto-cjk/tree/main/Serif#super-otc# , then uncompress and deploy them.# - Remember to update fontconfig cache by running fc-cache.## !!! Caution !!!# Uninstalling "variable font" packages can be dangerous.# They might be depended upon by other packages important for your work.# Denylisting should be less invasive, as it is effective only while# XeLaTeX runs in "make pdfdocs".# Default per-user fontconfig path (overridden by env variable): ${FONTS_CONF_DENY_VF:=$HOME/deny-vf}export XDG_CONFIG_HOME=${FONTS_CONF_DENY_VF}notocjkvffonts=`fc-list : file family variable | \ grep 'variable=True' | \ grep -E -e 'Noto (Sans|Sans Mono|Serif) CJK' | \ sed -e 's/^/ /' -e 's/: Noto S.*$//' | sort | uniq`if [ "x$notocjkvffonts" != "x" ] ; then echo '=============================================================================' echo 'XeTeX is confused by "variable font" files listed below:' echo "$notocjkvffonts" echo echo 'For CJK pages in PDF, they need to be hidden from XeTeX by denylisting.' echo 'Or, CJK pages can be skipped by uninstalling texlive-xecjk.' echo echo 'For more info on denylisting, other options, and variable font, see header' echo 'comments of scripts/check-variable-fonts.sh.' echo '============================================================================='fi# As this script is invoked from Makefile's error path, always error exit# regardless of whether any variable font is discovered or not.exit 1
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only
# Copyright (C) Akira Yokosawa, 2024
#
# For "make pdfdocs", reports of build errors of translations.pdf started
# arriving early 2024 [1, 2]. It turned out that Fedora and openSUSE
# tumbleweed have started deploying variable-font [3] format of "Noto CJK"
# fonts [4, 5]. For PDF, a LaTeX package named xeCJK is used for CJK
# (Chinese, Japanese, Korean) pages. xeCJK requires XeLaTeX/XeTeX, which
# does not (and likely never will) understand variable fonts for historical
# reasons.
#
# The build error happens even when both of variable- and non-variable-format
# fonts are found on the build system. To make matters worse, Fedora enlists
# variable "Noto CJK" fonts in the requirements of langpacks-ja, -ko, -zh_CN,
# -zh_TW, etc. Hence developers who have interest in CJK pages are more
# likely to encounter the build errors.
#
# This script is invoked from the error path of "make pdfdocs" and emits
# suggestions if variable-font files of "Noto CJK" fonts are in the list of
# fonts accessible from XeTeX.
#
# References:
# [1]: https://lore.kernel.org/r/8734tqsrt7.fsf@meer.lwn.net/
# [2]: https://lore.kernel.org/r/1708585803.600323099@f111.i.mail.ru/
# [3]: https://en.wikipedia.org/wiki/Variable_font
# [4]: https://fedoraproject.org/wiki/Changes/Noto_CJK_Variable_Fonts
# [5]: https://build.opensuse.org/request/show/1157217
#
#===========================================================================
# Workarounds for building translations.pdf
#===========================================================================
#
# * Denylist "variable font" Noto CJK fonts.
# - Create $HOME/deny-vf/fontconfig/fonts.conf from template below, with
# tweaks if necessary. Remove leading "# ".
# - Path of fontconfig/fonts.conf can be overridden by setting an env
# variable FONTS_CONF_DENY_VF.
#
# * Template:
# -----------------------------------------------------------------
# <?xml version="1.0"?>
# <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
# <fontconfig>
# <!--
# Ignore variable-font glob (not to break xetex)
# -->
# <selectfont>
# <rejectfont>
# <!--
# for Fedora
# -->
# <glob>/usr/share/fonts/google-noto-*-cjk-vf-fonts</glob>
# <!--
# for openSUSE tumbleweed
# -->
# <glob>/usr/share/fonts/truetype/Noto*CJK*-VF.otf</glob>
# </rejectfont>
# </selectfont>
# </fontconfig>
# -----------------------------------------------------------------
#
# The denylisting is activated for "make pdfdocs".
#
# * For skipping CJK pages in PDF
# - Uninstall texlive-xecjk.
# Denylisting is not needed in this case.
#
# * For printing CJK pages in PDF
# - Need non-variable "Noto CJK" fonts.
# * Fedora
# - google-noto-sans-cjk-fonts
# - google-noto-serif-cjk-fonts
# * openSUSE tumbleweed
# - Non-variable "Noto CJK" fonts are not available as distro packages
# as of April, 2024. Fetch a set of font files from upstream Noto
# CJK Font released at:
# https://github.com/notofonts/noto-cjk/tree/main/Sans#super-otc
# and at:
# https://github.com/notofonts/noto-cjk/tree/main/Serif#super-otc
# , then uncompress and deploy them.
# - Remember to update fontconfig cache by running fc-cache.
#
# !!! Caution !!!
# Uninstalling "variable font" packages can be dangerous.
# They might be depended upon by other packages important for your work.
# Denylisting should be less invasive, as it is effective only while
# XeLaTeX runs in "make pdfdocs".
# Default per-user fontconfig path (overridden by env variable)
: ${FONTS_CONF_DENY_VF:=$HOME/deny-vf}
export XDG_CONFIG_HOME=${FONTS_CONF_DENY_VF}
notocjkvffonts=`fc-list : file family variable | \
grep 'variable=True' | \
grep -E -e 'Noto (Sans|Sans Mono|Serif) CJK' | \
sed -e 's/^/ /' -e 's/: Noto S.*$//' | sort | uniq`
if [ "x$notocjkvffonts" != "x" ] ; then
echo '============================================================================='
echo 'XeTeX is confused by "variable font" files listed below:'
echo "$notocjkvffonts"
echo
echo 'For CJK pages in PDF, they need to be hidden from XeTeX by denylisting.'
echo 'Or, CJK pages can be skipped by uninstalling texlive-xecjk.'
echo
echo 'For more info on denylisting, other options, and variable font, see header'
echo 'comments of scripts/check-variable-fonts.sh.'
echo '============================================================================='
fi
# As this script is invoked from Makefile's error path, always error exit
# regardless of whether any variable font is discovered or not.
exit 1