mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	 5384258f4e
			
		
	
	
		5384258f4e
		
	
	
	
	
		
			
			As mentioned in "Assumption:", current grep expression can't catch
font files whose names are changed from upstream "Noto CJK fonts".
To avoid false negatives, use command of the form:
    fc-list : file family variable
, where ":" works as a wildcard pattern.
Variable fonts can be detected by filtering the output with
"variable=True" and "Noto CJK" font-family variants.
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Link: https://lore.kernel.org/r/c62ba2e6-c124-4e91-8011-cb1da408a3c5@gmail.com
		
	
			
		
			
				
	
	
		
			115 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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
 |