1 #!/bin/sh 2 # SPDX-License-Identifier: GPL-2.0-only 3 # Copyright (C) Akira Yokosawa, 2024 4 # 5 # For "make pdfdocs", reports of build errors of translations.pdf started 6 # arriving early 2024 [1, 2]. It turned out that Fedora and openSUSE 7 # tumbleweed have started deploying variable-font [3] format of "Noto CJK" 8 # fonts [4, 5]. For PDF, a LaTeX package named xeCJK is used for CJK 9 # (Chinese, Japanese, Korean) pages. xeCJK requires XeLaTeX/XeTeX, which 10 # does not (and likely never will) understand variable fonts for historical 11 # reasons. 12 # 13 # The build error happens even when both of variable- and non-variable-format 14 # fonts are found on the build system. To make matters worse, Fedora enlists 15 # variable "Noto CJK" fonts in the requirements of langpacks-ja, -ko, -zh_CN, 16 # -zh_TW, etc. Hence developers who have interest in CJK pages are more 17 # likely to encounter the build errors. 18 # 19 # This script is invoked from the error path of "make pdfdocs" and emits 20 # suggestions if variable-font files of "Noto CJK" fonts are in the list of 21 # fonts accessible from XeTeX. 22 # 23 # References: 24 # [1]: https://lore.kernel.org/r/8734tqsrt7.fsf@meer.lwn.net/ 25 # [2]: https://lore.kernel.org/r/1708585803.600323099@f111.i.mail.ru/ 26 # [3]: https://en.wikipedia.org/wiki/Variable_font 27 # [4]: https://fedoraproject.org/wiki/Changes/Noto_CJK_Variable_Fonts 28 # [5]: https://build.opensuse.org/request/show/1157217 29 # 30 #=========================================================================== 31 # Workarounds for building translations.pdf 32 #=========================================================================== 33 # 34 # * Denylist "variable font" Noto CJK fonts. 35 # - Create $HOME/deny-vf/fontconfig/fonts.conf from template below, with 36 # tweaks if necessary. Remove leading "# ". 37 # - Path of fontconfig/fonts.conf can be overridden by setting an env 38 # variable FONTS_CONF_DENY_VF. 39 # 40 # * Template: 41 # ----------------------------------------------------------------- 42 # <?xml version="1.0"?> 43 # <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> 44 # <fontconfig> 45 # <!-- 46 # Ignore variable-font glob (not to break xetex) 47 # --> 48 # <selectfont> 49 # <rejectfont> 50 # <!-- 51 # for Fedora 52 # --> 53 # <glob>/usr/share/fonts/google-noto-*-cjk-vf-fonts</glob> 54 # <!-- 55 # for openSUSE tumbleweed 56 # --> 57 # <glob>/usr/share/fonts/truetype/Noto*CJK*-VF.otf</glob> 58 # </rejectfont> 59 # </selectfont> 60 # </fontconfig> 61 # ----------------------------------------------------------------- 62 # 63 # The denylisting is activated for "make pdfdocs". 64 # 65 # * For skipping CJK pages in PDF 66 # - Uninstall texlive-xecjk. 67 # Denylisting is not needed in this case. 68 # 69 # * For printing CJK pages in PDF 70 # - Need non-variable "Noto CJK" fonts. 71 # * Fedora 72 # - google-noto-sans-cjk-fonts 73 # - google-noto-serif-cjk-fonts 74 # * openSUSE tumbleweed 75 # - Non-variable "Noto CJK" fonts are not available as distro packages 76 # as of April, 2024. Fetch a set of font files from upstream Noto 77 # CJK Font released at: 78 # https://github.com/notofonts/noto-cjk/tree/main/Sans#super-otc 79 # and at: 80 # https://github.com/notofonts/noto-cjk/tree/main/Serif#super-otc 81 # , then uncompress and deploy them. 82 # - Remember to update fontconfig cache by running fc-cache. 83 # 84 # !!! Caution !!! 85 # Uninstalling "variable font" packages can be dangerous. 86 # They might be depended upon by other packages important for your work. 87 # Denylisting should be less invasive, as it is effective only while 88 # XeLaTeX runs in "make pdfdocs". 89 90 # Default per-user fontconfig path (overridden by env variable) 91 : ${FONTS_CONF_DENY_VF:=$HOME/deny-vf} 92 93 export XDG_CONFIG_HOME=${FONTS_CONF_DENY_VF} 94 95 notocjkvffonts=`fc-list : file family variable | \ 96 grep 'variable=True' | \ 97 grep -E -e 'Noto (Sans|Sans Mono|Serif) CJK' | \ 98 sed -e 's/^/ /' -e 's/: Noto S.*$//' | sort | uniq` 99 100 if [ "x$notocjkvffonts" != "x" ] ; then 101 echo '=============================================================================' 102 echo 'XeTeX is confused by "variable font" files listed below:' 103 echo "$notocjkvffonts" 104 echo 105 echo 'For CJK pages in PDF, they need to be hidden from XeTeX by denylisting.' 106 echo 'Or, CJK pages can be skipped by uninstalling texlive-xecjk.' 107 echo 108 echo 'For more info on denylisting, other options, and variable font, see header' 109 echo 'comments of scripts/check-variable-fonts.sh.' 110 echo '=============================================================================' 111 fi 112 113 # As this script is invoked from Makefile's error path, always error exit 114 # regardless of whether any variable font is discovered or not. 115 exit 1
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.