-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Hello once again,
and of course I get to apologize some more due to forgetting to attach the
new patch.

Henrik

On 2020-08-02 at 17:15, ahve...@gmail.com wrote:
> I'm sorry for my lack of testing but I didn't notice that it was doing
> everything except updating the fontconfig cache when dealing with the
fonts
> packages. So, here should be hopefully the complete version, as
originally
> intented.
>
> Henrik
>
> On 2020-08-02 at 13:54, ahve...@gmail.com wrote:
> > Hi,
> > According to the bug[1] it should be all right to restore the font
parts
> in
> > the xorg-3 eclass. Matt didn't object either. Currently upgrading the
> > font-* packages to EAPI 7 and seemed to work the same way as with 5.
> >
> > [1] https://bugs.gentoo.org/712064
> >
> > Henrik Pihl
-----BEGIN PGP SIGNATURE-----
Version: FlowCrypt Email Encryption 7.8.8
Comment: Seamlessly send and receive encrypted email

wsFzBAEBCgAGBQJfJvyxACEJELLeoy9dd+JHFiEEZ+1cZjaUPp4qaEdxst6j
L1134kfMZBAAuOppKJ+HT73gj/Fug7ZDlGY9+uH/RyokDU5jDD+A3eSqLtK0
462767d/Of9kjmkJxJv55OGB/XVkZGZTbWpsdwS6GnsG5cj9KsblbBQU5a0g
lRcxbzJuHoNRdhVwz48Z9vC0g41mm3Plj03TmkaM2ys1CVyDlZDylAQOTSPP
a3YSkIj4VfzoSClnwH8sXNAZyqobIU9Av+wIQt0dYkve7Z6LH1OcRJgk8jFQ
siOp6mnqJMb5rvioZyuBUZwOdNL5GD3qbFXJn10Ek+fYZzcE/1pqySbfoLtl
IhtqGp9v4lYz7Yv9MLwEl+XjabJOZbZBRceHIXRJbjLCZEUpDmwFO9NObc8e
KhsFlI3DjM8nz/EyEFIw3/51zENcJPpwlSbDPus6N5nIOjKzGCEOJNpigG5P
uD5Es1s5QCgHf77lB8eRDQoa+u+UwiTbLWUlDIVM3IyYc6crpIM4eAM9mKVA
Jge6EKiRG62IuIAMcPYWNzVxa+TfJWJgpy5Jdu5frxV1Vh8LplTQYIWh5U7G
Jtq1WiGC1u2Jwyk/M8LOqtaymekeG6BSTvYf4Me1FK4+vRL7G4YeYg6LZj36
RmJz0IeVXfRC+BAit7ctBD4AOfAlNQ9UJIpHnEKNXTGLqtDVuHeF+VEOuJWL
GHsyorcfdpJjtbIKmCvuraysWo/I34u3Qgg=
=XKvL
-----END PGP SIGNATURE-----
diff --git a/eclass/xorg-3.eclass b/eclass/xorg-3.eclass
index 168e58b42c8..a52c0146baa 100644
--- a/eclass/xorg-3.eclass
+++ b/eclass/xorg-3.eclass
@@ -27,6 +27,20 @@ if [[ ${PV} == *9999* ]]; then
 	XORG_EAUTORECONF="yes"
 fi
 
+# If we're a font package, but not the font.alias one
+FONT_ECLASS=""
+if [[ ${CATEGORY} = media-fonts ]]; then
+	case ${PN} in
+	font-alias|font-util)
+		;;
+	font*)
+		# Activate font code in the rest of the eclass
+		FONT="yes"
+		FONT_ECLASS="font"
+		;;
+	esac
+fi
+
 # @ECLASS-VARIABLE: XORG_MULTILIB
 # @DESCRIPTION:
 # If set to 'yes', the multilib support for package will be enabled. Set
@@ -34,13 +48,14 @@ fi
 : ${XORG_MULTILIB:="no"}
 
 # we need to inherit autotools first to get the deps
-inherit autotools libtool multilib toolchain-funcs flag-o-matic ${GIT_ECLASS}
+inherit autotools libtool multilib toolchain-funcs flag-o-matic ${GIT_ECLASS} \
+	flag-o-matic ${FONT_ECLASS} ${GIT_ECLASS}
 
 if [[ ${XORG_MULTILIB} == yes ]]; then
 	inherit multilib-minimal
 fi
 
-EXPORTED_FUNCTIONS="src_prepare src_configure src_unpack src_compile src_install"
+EXPORTED_FUNCTIONS="src_prepare src_configure src_unpack src_compile src_install pkg_postinst pkg_postrm"
 case "${EAPI:-0}" in
 	7) ;;
 	*) die "EAPI=${EAPI} is not supported" ;;
@@ -66,7 +81,7 @@ IUSE=""
 # @ECLASS-VARIABLE: XORG_MODULE
 # @DESCRIPTION:
 # The subdirectory to download source from. Possible settings are app,
-# doc, data, util, driver, lib, proto, xserver. Set above the
+# doc, data, util, driver, font, lib, proto, xserver. Set above the
 # inherit to override the default autoconfigured module.
 : ${XORG_MODULE:="auto"}
 if [[ ${XORG_MODULE} == auto ]]; then
@@ -116,7 +131,9 @@ EAUTORECONF_DEPEND+="
 	>=sys-devel/libtool-2.2.6a
 	sys-devel/m4"
 if [[ ${PN} != util-macros ]] ; then
-	EAUTORECONF_DEPEND+=" >=x11-misc/util-macros-1.18 >=media-fonts/font-util-1.2.0"
+	EAUTORECONF_DEPEND+=" >=x11-misc/util-macros-1.18"
+	# Required even by xorg-server
+	[[ ${PN} == "font-util" ]] || EAUTORECONF_DEPEND+=" >=media-fonts/font-util-1.2.0"
 fi
 WANT_AUTOCONF="latest"
 WANT_AUTOMAKE="latest"
@@ -129,6 +146,36 @@ BDEPEND+=" ${EAUTORECONF_DEPENDS}"
 unset EAUTORECONF_DEPENDS
 unset EAUTORECONF_DEPEND
 
+if [[ ${FONT} == yes ]]; then
+	RDEPEND+=" media-fonts/encodings
+		>=x11-apps/mkfontscale-1.2.0"
+	PDEPEND+=" media-fonts/font-alias"
+	DEPEND+=" >=media-fonts/font-util-1.2.0
+		>=x11-apps/mkfontscale-1.2.0"
+
+	# @ECLASS-VARIABLE: FONT_DIR
+	# @DESCRIPTION:
+	# If you're creating a font package and the suffix of PN is not equal to
+	# the subdirectory of /usr/share/fonts/ it should install into, set
+	# FONT_DIR to that directory or directories. Set before inheriting this
+	# eclass.
+	[[ -z ${FONT_DIR} ]] && FONT_DIR=${PN##*-}
+
+	# Fix case of font directories
+	FONT_DIR=${FONT_DIR/ttf/TTF}
+	FONT_DIR=${FONT_DIR/otf/OTF}
+	FONT_DIR=${FONT_DIR/type1/Type1}
+	FONT_DIR=${FONT_DIR/speedo/Speedo}
+
+	# Set up configure options, wrapped so ebuilds can override if need be
+	[[ -z ${FONT_OPTIONS} ]] && FONT_OPTIONS="--with-fontdir=\"${EPREFIX}/usr/share/fonts/${FONT_DIR}\""
+
+	[[ ${PN} = font-misc-misc || ${PN} = font-schumacher-misc || ${PN##*-} = 75dpi || ${PN##*-} = 100dpi || ${PN##*-} = cyrillic ]] && IUSE+=" nls"
+fi
+
+# If we're a driver package, then enable DRIVER case
+[[ ${PN} == xf86-video-* || ${PN} == xf86-input-* ]] && DRIVER="yes"
+
 # @ECLASS-VARIABLE: XORG_STATIC
 # @DESCRIPTION:
 # Enables static-libs useflag. Set to no, if your package gets:
@@ -138,6 +185,7 @@ unset EAUTORECONF_DEPEND
 
 # Add static-libs useflag where useful.
 if [[ ${XORG_STATIC} == yes \
+		&& ${FONT} != yes \
 		&& ${CATEGORY} != app-doc \
 		&& ${CATEGORY} != x11-apps \
 		&& ${CATEGORY} != x11-drivers \
@@ -224,6 +272,15 @@ debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: RDEPEND=${RDEPEND}"
 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: PDEPEND=${PDEPEND}"
 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: BDEPEND=${BDEPEND}"
 
+# @FUNCTION: xorg-3_pkg_setup
+# @DESCRIPTION:
+# Setup prefix compat
+xorg-3_pkg_setup() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	[[ ${FONT} == yes ]] && font_pkg_setup "$@"
+}
+
 # @FUNCTION: xorg-3_src_unpack
 # @DESCRIPTION:
 # Simply unpack source code.
@@ -235,6 +292,8 @@ xorg-3_src_unpack() {
 	else
 		unpack ${A}
 	fi
+
+	[[ -n ${FONT_OPTIONS} ]] && einfo "Detected font directory: ${FONT_DIR}"
 }
 
 # @FUNCTION: xorg-3_reconf_source
@@ -270,6 +329,40 @@ xorg-3_src_prepare() {
 	xorg-3_reconf_source
 }
 
+# @FUNCTION: xorg-3_font_configure
+# @DESCRIPTION:
+# If a font package, perform any necessary configuration steps
+xorg-3_font_configure() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if has nls ${IUSE//+} && ! use nls; then
+		if grep -q -s "disable-all-encodings" ${ECONF_SOURCE:-.}/configure; then
+			FONT_OPTIONS+="
+				--disable-all-encodings
+				--enable-iso8859-1"
+		else
+			FONT_OPTIONS+="
+				--disable-iso8859-2
+				--disable-iso8859-3
+				--disable-iso8859-4
+				--disable-iso8859-5
+				--disable-iso8859-6
+				--disable-iso8859-7
+				--disable-iso8859-8
+				--disable-iso8859-9
+				--disable-iso8859-10
+				--disable-iso8859-11
+				--disable-iso8859-12
+				--disable-iso8859-13
+				--disable-iso8859-14
+				--disable-iso8859-15
+				--disable-iso8859-16
+				--disable-jisx0201
+				--disable-koi8-r"
+		fi
+	fi
+}
+
 # @FUNCTION: xorg-3_flags_setup
 # @DESCRIPTION:
 # Set up CFLAGS for a debug build
@@ -308,6 +401,8 @@ xorg-3_src_configure() {
 	# @DEFAULT_UNSET
 	local xorgconfadd=("${XORG_CONFIGURE_OPTIONS[@]}")
 
+	[[ -n "${FONT}" ]] && xorg-3_font_configure
+
 	# Check if package supports disabling of dep tracking
 	# Fixes warnings like:
 	#    WARNING: unrecognized options: --disable-dependency-tracking
@@ -323,6 +418,7 @@ xorg-3_src_configure() {
 	local econfargs=(
 		${dep_track}
 		${selective_werror}
+		${FONT_OPTIONS}
 		"${xorgconfadd[@]}"
 	)
 
@@ -388,4 +484,81 @@ xorg-3_src_install() {
 
 	# Don't install libtool archives (even for modules)
 	find "${D}" -type f -name '*.la' -delete || die
+
+	[[ -n ${FONT} ]] && remove_font_metadata
+}
+
+# @FUNCTION: xorg-3_pkg_postinst
+# @DESCRIPTION:
+# Run X-specific post-installation tasks on the live filesystem. The
+# only task right now is some setup for font packages.
+xorg-3_pkg_postinst() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ -n ${FONT} ]]; then
+		create_fonts_scale
+		create_fonts_dir
+		font_pkg_postinst "$@"
+
+		ewarn "Installed fonts changed. Run 'xset fp rehash' if you are using non-fontconfig applications."
+	fi
+}
+
+# @FUNCTION: xorg-3_pkg_postrm
+# @DESCRIPTION:
+# Run X-specific post-removal tasks on the live filesystem. The only
+# task right now is some cleanup for font packages.
+xorg-3_pkg_postrm() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ -n ${FONT} ]]; then
+		# if we're doing an upgrade, postinst will do
+		if [[ -z ${REPLACED_BY_VERSION} ]]; then
+			create_fonts_scale
+			create_fonts_dir
+			font_pkg_postrm "$@"
+		fi
+	fi
+}
+
+# @FUNCTION: remove_font_metadata
+# @DESCRIPTION:
+# Don't let the package install generated font files that may overlap
+# with other packages. Instead, they're generated in pkg_postinst().
+remove_font_metadata() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${FONT_DIR} != Speedo && ${FONT_DIR} != CID ]]; then
+		einfo "Removing font metadata"
+		rm -rf "${ED}"/usr/share/fonts/${FONT_DIR}/fonts.{scale,dir,cache-1}
+	fi
+}
+
+# @FUNCTION: create_fonts_scale
+# @DESCRIPTION:
+# Create fonts.scale file, used by the old server-side fonts subsystem.
+create_fonts_scale() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	if [[ ${FONT_DIR} != Speedo && ${FONT_DIR} != CID ]]; then
+		ebegin "Generating fonts.scale"
+			mkfontscale \
+				-a "${EROOT}/usr/share/fonts/encodings/encodings.dir" \
+				-- "${EROOT}/usr/share/fonts/${FONT_DIR}"
+		eend $?
+	fi
+}
+
+# @FUNCTION: create_fonts_dir
+# @DESCRIPTION:
+# Create fonts.dir file, used by the old server-side fonts subsystem.
+create_fonts_dir() {
+	debug-print-function ${FUNCNAME} "$@"
+
+	ebegin "Generating fonts.dir"
+			mkfontdir \
+				-e "${EROOT}"/usr/share/fonts/encodings \
+				-e "${EROOT}"/usr/share/fonts/encodings/large \
+				-- "${EROOT}/usr/share/fonts/${FONT_DIR}"
+	eend $?
 }

Reply via email to