115 lines · 4.7 KB · Shell
RawDownload
#!/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