Merge tag 'sched-urgent-2024-06-02' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-block.git] / scripts / check-variable-fonts.sh
CommitLineData
1e596d5e
AY
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#
1e596d5e
AY
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
5384258f
AY
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`
1e596d5e 99
5384258f 100if [ "x$notocjkvffonts" != "x" ] ; then
1e596d5e
AY
101 echo '============================================================================='
102 echo 'XeTeX is confused by "variable font" files listed below:'
5384258f 103 echo "$notocjkvffonts"
1e596d5e
AY
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