Skip to content

Commit

Permalink
media-libs/fontconfig: Fix handling of locale and of font weights.
Browse files Browse the repository at this point in the history
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
ulm committed Mar 14, 2018
1 parent 25ffcc9 commit 34fb871
Show file tree
Hide file tree
Showing 3 changed files with 294 additions and 0 deletions.
37 changes: 37 additions & 0 deletions media-libs/fontconfig/files/fontconfig-2.13.0-locale.patch
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

93 changes: 93 additions & 0 deletions media-libs/fontconfig/files/fontconfig-2.13.0-names.patch
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

164 changes: 164 additions & 0 deletions media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild
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
}

0 comments on commit 34fb871

Please sign in to comment.