commit:     34fb871502ff7941c54b6058727caf3ef563dc39
Author:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 14 12:31:50 2018 +0000
Commit:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
CommitDate: Wed Mar 14 12:31:50 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=34fb8715

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

 .../files/fontconfig-2.13.0-locale.patch           |  37 +++++
 .../fontconfig/files/fontconfig-2.13.0-names.patch |  93 ++++++++++++
 media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild  | 164 +++++++++++++++++++++
 3 files changed, 294 insertions(+)

diff --git a/media-libs/fontconfig/files/fontconfig-2.13.0-locale.patch 
b/media-libs/fontconfig/files/fontconfig-2.13.0-locale.patch
new file mode 100644
index 00000000000..70868b1abc1
--- /dev/null
+++ b/media-libs/fontconfig/files/fontconfig-2.13.0-locale.patch
@@ -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
+

diff --git a/media-libs/fontconfig/files/fontconfig-2.13.0-names.patch 
b/media-libs/fontconfig/files/fontconfig-2.13.0-names.patch
new file mode 100644
index 00000000000..dddc8bb9572
--- /dev/null
+++ b/media-libs/fontconfig/files/fontconfig-2.13.0-names.patch
@@ -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
+

diff --git a/media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild 
b/media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild
new file mode 100644
index 00000000000..12d1cab673b
--- /dev/null
+++ b/media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild
@@ -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
+}

Reply via email to