From af2a402ec7449348b50332919a66e54b552d6da0 Mon Sep 17 00:00:00 2001 From: Ulrich Müller Date: Thu, 15 Mar 2018 06:19:23 +0100 Subject: media-libs/fontconfig: Do not call setlocale in the library. Patch from upstream. https://bugs.freedesktop.org/show_bug.cgi?id=105492 Closes: https://bugs.gentoo.org/650332 Package-Manager: Portage-2.3.24, Repoman-2.3.6 --- .../files/fontconfig-2.13.0-locale.patch | 200 +++++++++++++++++---- media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild | 164 ----------------- media-libs/fontconfig/fontconfig-2.13.0-r2.ebuild | 164 +++++++++++++++++ 3 files changed, 334 insertions(+), 194 deletions(-) delete mode 100644 media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild create mode 100644 media-libs/fontconfig/fontconfig-2.13.0-r2.ebuild diff --git a/media-libs/fontconfig/files/fontconfig-2.13.0-locale.patch b/media-libs/fontconfig/files/fontconfig-2.13.0-locale.patch index 70868b1abc11..002e493a409e 100644 --- a/media-libs/fontconfig/files/fontconfig-2.13.0-locale.patch +++ b/media-libs/fontconfig/files/fontconfig-2.13.0-locale.patch @@ -1,37 +1,177 @@ https://bugs.gentoo.org/650332 +Do not set locale in the library. +Patch from upstream. -From 923b5be626a6e03fbaeee0b5cd6d0246c2f8f36f Mon Sep 17 00:00:00 2001 -From: Akira TAGOH -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/fc-cache/fc-cache.c ++++ b/fc-cache/fc-cache.c +@@ -41,6 +41,7 @@ + #include + #include + #include ++#include + + #if defined (_WIN32) + #define STRICT +@@ -302,6 +303,7 @@ + #if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + ++ setlocale (LC_ALL, ""); + #if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "Efrsy:Vvh", longopts, NULL)) != -1) + #else +--- a/fc-cat/fc-cat.c ++++ b/fc-cat/fc-cat.c +@@ -40,6 +40,7 @@ + #include + #include + #include ++#include + + #ifdef ENABLE_NLS + #include +@@ -271,6 +272,7 @@ + #if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + ++ setlocale (LC_ALL, ""); + #if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1) + #else +--- a/fc-conflist/fc-conflist.c ++++ b/fc-conflist/fc-conflist.c +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + + #ifdef ENABLE_NLS + #include +@@ -102,6 +103,7 @@ + #if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + ++ setlocale (LC_ALL, ""); + #if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "Vh", longopts, NULL)) != -1) + #else +--- a/fc-list/fc-list.c ++++ b/fc-list/fc-list.c +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + #ifdef HAVE_CONFIG_H + #include + #else +@@ -117,6 +118,7 @@ + #if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + ++ setlocale (LC_ALL, ""); + #if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "vbf:qVh", longopts, NULL)) != -1) + #else +--- a/fc-match/fc-match.c ++++ b/fc-match/fc-match.c +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + #ifdef ENABLE_NLS + #include +@@ -121,6 +122,7 @@ + #if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + ++ setlocale (LC_ALL, ""); + #if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "asvbf:Vh", longopts, NULL)) != -1) + #else +--- a/fc-pattern/fc-pattern.c ++++ b/fc-pattern/fc-pattern.c +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + #ifdef ENABLE_NLS + #include +@@ -111,6 +112,7 @@ + #if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + ++ setlocale (LC_ALL, ""); + #if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "cdf:Vh", longopts, NULL)) != -1) + #else +--- a/fc-query/fc-query.c ++++ b/fc-query/fc-query.c +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + + #ifdef ENABLE_NLS + #include +@@ -115,6 +116,7 @@ + #if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + ++ setlocale (LC_ALL, ""); + #if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "i:bf:Vh", longopts, NULL)) != -1) + #else +--- a/fc-scan/fc-scan.c ++++ b/fc-scan/fc-scan.c +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + + #ifdef ENABLE_NLS + #include +@@ -110,6 +111,7 @@ + #if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + ++ setlocale (LC_ALL, ""); + #if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "bf:Vh", longopts, NULL)) != -1) + #else --- 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; +@@ -26,7 +26,6 @@ + + #include "fcint.h" + #include +-#include + #include + + #if defined (_WIN32) && !defined (R_OK) +@@ -39,18 +38,6 @@ + FcConfigEnsure (void) + { + FcConfig *config; +- FcBool is_locale_initialized; +- static void *static_is_locale_initialized; +-retry_locale: +- is_locale_initialized = (intptr_t) fc_atomic_ptr_get (&static_is_locale_initialized); +- if (!is_locale_initialized) +- { +- 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 - + if (!config) diff --git a/media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild b/media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild deleted file mode 100644 index 12d1cab673b6..000000000000 --- a/media-libs/fontconfig/fontconfig-2.13.0-r1.ebuild +++ /dev/null @@ -1,164 +0,0 @@ -# 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 -} diff --git a/media-libs/fontconfig/fontconfig-2.13.0-r2.ebuild b/media-libs/fontconfig/fontconfig-2.13.0-r2.ebuild new file mode 100644 index 000000000000..12d1cab673b6 --- /dev/null +++ b/media-libs/fontconfig/fontconfig-2.13.0-r2.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 +} -- cgit v1.2.3-65-gdbad