Loading...
Note: File does not exist in v3.15.
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
93export XDG_CONFIG_HOME=${FONTS_CONF_DENY_VF}
94
95notocjkvffonts=`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
100if [ "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 '============================================================================='
111fi
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.
115exit 1