Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.6.
  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