forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
media-libs/fontconfig: Fix handling of locale and of font weights.
Non-maintainer commit. Patches from upstream. Closes: https://bugs.gentoo.org/650332 Closes: https://bugs.gentoo.org/650370 Package-Manager: Portage-2.3.24, Repoman-2.3.6
- Loading branch information
Showing
3 changed files
with
294 additions
and
0 deletions.
There are no files selected for viewing
37 changes: 37 additions & 0 deletions
37
media-libs/fontconfig/files/fontconfig-2.13.0-locale.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
https://bugs.gentoo.org/650332 | ||
|
||
From 923b5be626a6e03fbaeee0b5cd6d0246c2f8f36f Mon Sep 17 00:00:00 2001 | ||
From: Akira TAGOH <[email protected]> | ||
Date: Wed, 14 Mar 2018 12:35:05 +0900 | ||
Subject: [PATCH] Do not override locale if already set by app | ||
|
||
https://bugs.freedesktop.org/show_bug.cgi?id=105492 | ||
--- | ||
src/fccfg.c | 7 ++++++- | ||
1 file changed, 6 insertions(+), 1 deletion(-) | ||
|
||
diff --git a/src/fccfg.c b/src/fccfg.c | ||
index eb0b76d..e311f17 100644 | ||
--- a/src/fccfg.c | ||
+++ b/src/fccfg.c | ||
@@ -45,11 +45,16 @@ retry_locale: | ||
is_locale_initialized = (intptr_t) fc_atomic_ptr_get (&static_is_locale_initialized); | ||
if (!is_locale_initialized) | ||
{ | ||
+ char *loc; | ||
+ | ||
is_locale_initialized = FcTrue; | ||
if (!fc_atomic_ptr_cmpexch (&static_is_locale_initialized, NULL, | ||
(void *)(intptr_t) is_locale_initialized)) | ||
goto retry_locale; | ||
- setlocale (LC_ALL, ""); | ||
+ | ||
+ loc = setlocale (LC_ALL, NULL); | ||
+ if (!loc || strcmp (loc, "C") == 0) | ||
+ setlocale (LC_ALL, ""); | ||
} | ||
retry_config: | ||
config = fc_atomic_ptr_get (&_fcConfig); | ||
-- | ||
2.16.2 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
https://bugs.gentoo.org/650370 | ||
|
||
From 198358dd8ff858c9e36531a7406ccb2246ae77b7 Mon Sep 17 00:00:00 2001 | ||
From: Akira TAGOH <[email protected]> | ||
Date: Mon, 12 Mar 2018 11:49:58 +0900 | ||
Subject: [PATCH 1/2] Allow the constant names in the range | ||
|
||
https://bugs.freedesktop.org/show_bug.cgi?id=105415 | ||
--- | ||
src/fcname.c | 34 +++++++++++++++++++++++++++++----- | ||
1 file changed, 29 insertions(+), 5 deletions(-) | ||
|
||
diff --git a/src/fcname.c b/src/fcname.c | ||
index 79e413e..15fb659 100644 | ||
--- a/src/fcname.c | ||
+++ b/src/fcname.c | ||
@@ -330,13 +330,37 @@ FcNameConvert (FcType type, FcChar8 *string) | ||
case FcTypeRange: | ||
if (sscanf ((char *) string, "[%lg %lg]", &b, &e) != 2) | ||
{ | ||
- v.u.d = strtod ((char *) string, &p); | ||
- if (p != NULL && p[0] != 0) | ||
+ char *sc, *ec; | ||
+ size_t len = strlen ((const char *) string); | ||
+ int si, ei; | ||
+ | ||
+ sc = malloc (len); | ||
+ ec = malloc (len); | ||
+ if (sc && ec && sscanf ((char *) string, "[%s %[^]]]", sc, ec) == 2) | ||
{ | ||
- v.type = FcTypeVoid; | ||
- break; | ||
+ if (FcNameConstant ((const FcChar8 *) sc, &si) && | ||
+ FcNameConstant ((const FcChar8 *) ec, &ei)) | ||
+ v.u.r = FcRangeCreateDouble (si, ei); | ||
+ else | ||
+ goto bail1; | ||
+ } | ||
+ else | ||
+ { | ||
+ bail1: | ||
+ v.type = FcTypeDouble; | ||
+ if (FcNameConstant (string, &si)) | ||
+ { | ||
+ v.u.d = (double) si; | ||
+ } else { | ||
+ v.u.d = strtod ((char *) string, &p); | ||
+ if (p != NULL && p[0] != 0) | ||
+ v.type = FcTypeVoid; | ||
+ } | ||
} | ||
- v.type = FcTypeDouble; | ||
+ if (sc) | ||
+ free (sc); | ||
+ if (ec) | ||
+ free (ec); | ||
} | ||
else | ||
v.u.r = FcRangeCreateDouble (b, e); | ||
-- | ||
2.16.2 | ||
|
||
From 4699406a68321179b14fae7412f828e2f37a7033 Mon Sep 17 00:00:00 2001 | ||
From: Akira TAGOH <[email protected]> | ||
Date: Wed, 14 Mar 2018 18:31:30 +0900 | ||
Subject: [PATCH 2/2] Add the value of the constant name to the implicit object | ||
in the pattern | ||
|
||
For objects which has been changed the object type to FcTypeRange. | ||
|
||
https://bugs.freedesktop.org/show_bug.cgi?id=105415 | ||
--- | ||
src/fcname.c | 4 ++++ | ||
1 file changed, 4 insertions(+) | ||
|
||
diff --git a/src/fcname.c b/src/fcname.c | ||
index 15fb659..c9320ae 100644 | ||
--- a/src/fcname.c | ||
+++ b/src/fcname.c | ||
@@ -490,6 +490,10 @@ FcNameParse (const FcChar8 *name) | ||
if (!FcPatternAddBool (pat, c->object, c->value)) | ||
goto bail2; | ||
break; | ||
+ case FcTypeRange: | ||
+ if (!FcPatternAddInteger (pat, c->object, c->value)) | ||
+ goto bail2; | ||
+ break; | ||
default: | ||
break; | ||
} | ||
-- | ||
2.16.2 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
# Copyright 1999-2018 Gentoo Foundation | ||
# Distributed under the terms of the GNU General Public License v2 | ||
|
||
EAPI=6 | ||
|
||
inherit autotools multilib-minimal readme.gentoo-r1 eapi7-ver | ||
|
||
DESCRIPTION="A library for configuring and customizing font access" | ||
HOMEPAGE="http://fontconfig.org/" | ||
SRC_URI="http://fontconfig.org/release/${P}.tar.bz2" | ||
|
||
LICENSE="MIT" | ||
SLOT="1.0" | ||
[[ $(ver_cut 3) -ge 90 ]] || \ | ||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~arm-linux ~x86-linux" | ||
IUSE="doc static-libs" | ||
|
||
# Purposefully dropped the xml USE flag and libxml2 support. Expat is the | ||
# default and used by every distro. See bug #283191. | ||
RDEPEND=">=dev-libs/expat-2.1.0-r3[${MULTILIB_USEDEP}] | ||
>=media-libs/freetype-2.8.1[${MULTILIB_USEDEP}] | ||
sys-apps/util-linux[${MULTILIB_USEDEP}]" | ||
DEPEND="${RDEPEND} | ||
virtual/pkgconfig | ||
doc? ( =app-text/docbook-sgml-dtd-3.1* | ||
app-text/docbook-sgml-utils[jadetex] )" | ||
PDEPEND="!x86-winnt? ( app-eselect/eselect-fontconfig ) | ||
virtual/ttf-fonts" | ||
|
||
PATCHES=( | ||
"${FILESDIR}"/${PN}-2.10.2-docbook.patch # 310157 | ||
"${FILESDIR}"/${PN}-2.12.3-latin-update.patch # 130466 + make liberation default | ||
"${FILESDIR}"/${P}-locale.patch #650332 | ||
"${FILESDIR}"/${P}-names.patch #650370 | ||
) | ||
|
||
MULTILIB_CHOST_TOOLS=( /usr/bin/fc-cache$(get_exeext) ) | ||
|
||
pkg_setup() { | ||
DOC_CONTENTS="Please make fontconfig configuration changes using | ||
\`eselect fontconfig\`. Any changes made to /etc/fonts/fonts.conf will be | ||
overwritten. If you need to reset your configuration to upstream defaults, | ||
delete the directory ${EROOT%/}/etc/fonts/conf.d/ and re-emerge fontconfig." | ||
} | ||
|
||
src_prepare() { | ||
default | ||
export GPERF=$(type -P true) # avoid dependency on gperf, #631980 | ||
sed -i -e 's/FC_GPERF_SIZE_T="unsigned int"/FC_GPERF_SIZE_T=size_t/' \ | ||
configure.ac || die # rest of gperf dependency fix, #631920 | ||
eautoreconf | ||
} | ||
|
||
multilib_src_configure() { | ||
local addfonts | ||
# harvest some font locations, such that users can benefit from the | ||
# host OS's installed fonts | ||
case ${CHOST} in | ||
*-darwin*) | ||
addfonts=",/Library/Fonts,/System/Library/Fonts" | ||
;; | ||
*-solaris*) | ||
[[ -d /usr/X/lib/X11/fonts/TrueType ]] && \ | ||
addfonts=",/usr/X/lib/X11/fonts/TrueType" | ||
[[ -d /usr/X/lib/X11/fonts/Type1 ]] && \ | ||
addfonts="${addfonts},/usr/X/lib/X11/fonts/Type1" | ||
;; | ||
*-linux-gnu) | ||
use prefix && [[ -d /usr/share/fonts ]] && \ | ||
addfonts=",/usr/share/fonts" | ||
;; | ||
esac | ||
|
||
local myeconfargs=( | ||
$(use_enable doc docbook) | ||
$(use_enable static-libs static) | ||
--enable-docs | ||
--localstatedir="${EPREFIX}"/var | ||
--with-default-fonts="${EPREFIX}"/usr/share/fonts | ||
--with-add-fonts="${EPREFIX}/usr/local/share/fonts${addfonts}" | ||
--with-templatedir="${EPREFIX}"/etc/fonts/conf.avail | ||
) | ||
|
||
ECONF_SOURCE="${S}" \ | ||
econf "${myeconfargs[@]}" | ||
} | ||
|
||
multilib_src_install() { | ||
default | ||
|
||
# avoid calling this multiple times, bug #459210 | ||
if multilib_is_native_abi; then | ||
# stuff installed from build-dir | ||
emake -C doc DESTDIR="${D}" install-man | ||
|
||
insinto /etc/fonts | ||
doins fonts.conf | ||
fi | ||
} | ||
|
||
multilib_src_install_all() { | ||
einstalldocs | ||
find "${ED}" -name "*.la" -delete || die | ||
|
||
# fc-lang directory contains language coverage datafiles | ||
# which are needed to test the coverage of fonts. | ||
insinto /usr/share/fc-lang | ||
doins fc-lang/*.orth | ||
|
||
dodoc doc/fontconfig-user.{txt,pdf} | ||
|
||
if [[ -e ${ED}usr/share/doc/fontconfig/ ]]; then | ||
mv "${ED}"usr/share/doc/fontconfig/* "${ED}"/usr/share/doc/${P} || die | ||
rm -rf "${ED}"usr/share/doc/fontconfig | ||
fi | ||
|
||
# Changes should be made to /etc/fonts/local.conf, and as we had | ||
# too much problems with broken fonts.conf we force update it ... | ||
echo 'CONFIG_PROTECT_MASK="/etc/fonts/fonts.conf"' > "${T}"/37fontconfig | ||
doenvd "${T}"/37fontconfig | ||
|
||
# As of fontconfig 2.7, everything sticks their noses in here. | ||
dodir /etc/sandbox.d | ||
echo 'SANDBOX_PREDICT="/var/cache/fontconfig"' > "${ED}"/etc/sandbox.d/37fontconfig | ||
|
||
readme.gentoo_create_doc | ||
} | ||
|
||
pkg_preinst() { | ||
# Bug #193476 | ||
# /etc/fonts/conf.d/ contains symlinks to ../conf.avail/ to include various | ||
# config files. If we install as-is, we'll blow away user settings. | ||
ebegin "Syncing fontconfig configuration to system" | ||
if [[ -e ${EROOT}/etc/fonts/conf.d ]]; then | ||
for file in "${EROOT}"/etc/fonts/conf.avail/*; do | ||
f=${file##*/} | ||
if [[ -L ${EROOT}/etc/fonts/conf.d/${f} ]]; then | ||
[[ -f ${ED}etc/fonts/conf.avail/${f} ]] \ | ||
&& ln -sf ../conf.avail/"${f}" "${ED}"etc/fonts/conf.d/ &>/dev/null | ||
else | ||
[[ -f ${ED}etc/fonts/conf.avail/${f} ]] \ | ||
&& rm "${ED}"etc/fonts/conf.d/"${f}" &>/dev/null | ||
fi | ||
done | ||
fi | ||
eend $? | ||
} | ||
|
||
pkg_postinst() { | ||
einfo "Cleaning broken symlinks in ${EROOT%/}/etc/fonts/conf.d/" | ||
find -L "${EROOT}"etc/fonts/conf.d/ -type l -delete | ||
|
||
readme.gentoo_print_elog | ||
|
||
if [[ ${ROOT} = / ]]; then | ||
multilib_pkg_postinst() { | ||
ebegin "Creating global font cache for ${ABI}" | ||
"${EPREFIX}"/usr/bin/${CHOST}-fc-cache -srf | ||
eend $? | ||
} | ||
|
||
multilib_parallel_foreach_abi multilib_pkg_postinst | ||
fi | ||
} |