summaryrefslogtreecommitdiffstats
path: root/source/x/fontconfig
diff options
context:
space:
mode:
Diffstat (limited to 'source/x/fontconfig')
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-0-timestamp-dir-on-sb.patch55
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-drop-lang-from-pkgkit-format.patch12
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-fix-1744377.patch122
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-fix-assertion.patch144
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-fix-dtd-id.patch490
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-fix-dtd.patch26
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-fix-test.patch41
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-mt.patch1439
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-read-latest-cache.patch228
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-required-freetype-version.patch14
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-score-hint-on-match.patch36
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch285
-rwxr-xr-xsource/x/fontconfig/fontconfig.SlackBuild28
-rw-r--r--source/x/fontconfig/fontconfig.dejavu.diff19
-rw-r--r--source/x/fontconfig/fontconfig.font.dir.list.diff32
-rw-r--r--source/x/fontconfig/fontconfig.liberation.diff16
-rw-r--r--source/x/fontconfig/fontconfig.noto.diff35
17 files changed, 77 insertions, 2945 deletions
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-0-timestamp-dir-on-sb.patch b/source/x/fontconfig/fedora-patches/fontconfig-0-timestamp-dir-on-sb.patch
deleted file mode 100644
index cfbc206f9..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-0-timestamp-dir-on-sb.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-diff --git a/src/fccache.c b/src/fccache.c
-index 2d398c73..7139b082 100644
---- a/src/fccache.c
-+++ b/src/fccache.c
-@@ -845,7 +845,7 @@ FcCacheTimeValid (FcConfig *config, FcCache *cache, struct stat *dir_stat)
- FcCacheDir (cache), cache->checksum, (int) dir_stat->st_mtime);
- #endif
-
-- return cache->checksum == (int) dir_stat->st_mtime && fnano;
-+ return dir_stat->st_mtime == 0 || (cache->checksum == (int) dir_stat->st_mtime && fnano);
- }
-
- static FcBool
-@@ -1041,17 +1041,39 @@ static FcBool
- FcDirCacheMapHelper (FcConfig *config, int fd, struct stat *fd_stat, struct stat *dir_stat, struct timeval *latest_cache_mtime, void *closure)
- {
- FcCache *cache = FcDirCacheMapFd (config, fd, fd_stat, dir_stat);
-- struct timeval cache_mtime;
-+ struct timeval cache_mtime, zero_mtime = { 0, 0}, dir_mtime;
-
- if (!cache)
- return FcFalse;
- cache_mtime.tv_sec = fd_stat->st_mtime;
-+ dir_mtime.tv_sec = dir_stat->st_mtime;
- #ifdef HAVE_STRUCT_STAT_ST_MTIM
- cache_mtime.tv_usec = fd_stat->st_mtim.tv_nsec / 1000;
-+ dir_mtime.tv_usec = dir_stat->st_mtim.tv_nsec / 1000;
- #else
- cache_mtime.tv_usec = 0;
-+ dir_mtime.tv_usec = 0;
- #endif
-- if (timercmp (latest_cache_mtime, &cache_mtime, <))
-+ /* special take care of OSTree */
-+ if (!timercmp (&zero_mtime, &dir_mtime, !=))
-+ {
-+ if (!timercmp (&zero_mtime, &cache_mtime, !=))
-+ {
-+ if (*((FcCache **) closure))
-+ FcDirCacheUnload (*((FcCache **) closure));
-+ }
-+ else if (*((FcCache **) closure) && !timercmp (&zero_mtime, latest_cache_mtime, !=))
-+ {
-+ FcDirCacheUnload (cache);
-+ return FcFalse;
-+ }
-+ else if (timercmp (latest_cache_mtime, &cache_mtime, <))
-+ {
-+ if (*((FcCache **) closure))
-+ FcDirCacheUnload (*((FcCache **) closure));
-+ }
-+ }
-+ else if (timercmp (latest_cache_mtime, &cache_mtime, <))
- {
- if (*((FcCache **) closure))
- FcDirCacheUnload (*((FcCache **) closure));
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-drop-lang-from-pkgkit-format.patch b/source/x/fontconfig/fedora-patches/fontconfig-drop-lang-from-pkgkit-format.patch
deleted file mode 100644
index 8b773081f..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-drop-lang-from-pkgkit-format.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -pruN fontconfig-2.13.92.orig/src/fcformat.c fontconfig-2.13.92/src/fcformat.c
---- fontconfig-2.13.92.orig/src/fcformat.c 2018-07-19 12:14:39.000000000 +0900
-+++ fontconfig-2.13.92/src/fcformat.c 2020-01-20 13:05:33.626227767 +0900
-@@ -78,7 +78,7 @@
- #define FCCAT_FORMAT "\"%{file|basename|cescape}\" %{index} \"%{-file{%{=unparse|cescape}}}\""
- #define FCMATCH_FORMAT "%{file:-<unknown filename>|basename}: \"%{family[0]:-<unknown family>}\" \"%{style[0]:-<unknown style>}\""
- #define FCLIST_FORMAT "%{?file{%{file}: }}%{-file{%{=unparse}}}"
--#define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}"
-+#define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}"
-
-
- static void
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-fix-1744377.patch b/source/x/fontconfig/fedora-patches/fontconfig-fix-1744377.patch
deleted file mode 100644
index fda5c2d65..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-fix-1744377.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From fcada522913e5e07efa6367eff87ace9f06d24c8 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Wed, 28 Aug 2019 17:46:03 +0900
-Subject: [PATCH] Do not return FcFalse from FcConfigParseAndLoad*() if
- complain is set to false
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1744377
----
- src/fcxml.c | 8 ++++---
- test/Makefile.am | 4 ++++
- test/test-bz1744377.c | 51 +++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 60 insertions(+), 3 deletions(-)
- create mode 100644 test/test-bz1744377.c
-
-diff --git a/src/fcxml.c b/src/fcxml.c
-index 2e26e77a..076fa301 100644
---- a/src/fcxml.c
-+++ b/src/fcxml.c
-@@ -3526,7 +3526,7 @@ _FcConfigParse (FcConfig *config,
- int len;
- FcStrBuf sbuf;
- char buf[BUFSIZ];
-- FcBool ret = FcFalse;
-+ FcBool ret = FcFalse, complain_again = complain;
-
- #ifdef _WIN32
- if (!pGetSystemWindowsDirectory)
-@@ -3605,7 +3605,7 @@ _FcConfigParse (FcConfig *config,
- close (fd);
-
- ret = FcConfigParseAndLoadFromMemoryInternal (config, filename, FcStrBufDoneStatic (&sbuf), complain, load);
-- complain = FcFalse; /* no need to reclaim here */
-+ complain_again = FcFalse; /* no need to reclaim here */
- bail1:
- FcStrBufDestroy (&sbuf);
- bail0:
-@@ -3613,7 +3613,9 @@ bail0:
- FcStrFree (filename);
- if (realfilename)
- FcStrFree (realfilename);
-- if (!ret && complain)
-+ if (!complain)
-+ return FcTrue;
-+ if (!ret && complain_again)
- {
- if (name)
- FcConfigMessage (0, FcSevereError, "Cannot %s config file \"%s\"", load ? "load" : "scan", name);
-diff --git a/test/Makefile.am b/test/Makefile.am
-index f9c21581..a9fa089a 100644
---- a/test/Makefile.am
-+++ b/test/Makefile.am
-@@ -131,6 +131,10 @@ TESTS += test-d1f48f11
- endif
- endif
-
-+check_PROGRAMS += test-bz1744377
-+test_bz1744377_LDADD = $(top_builddir)/src/libfontconfig.la
-+TESTS += test-bz1744377
-+
- EXTRA_DIST=run-test.sh run-test-conf.sh $(LOG_COMPILER) $(TESTDATA) out.expected-long-family-names out.expected-no-long-family-names
-
- CLEANFILES=out out1 out2 fonts.conf out.expected
-diff --git a/test/test-bz1744377.c b/test/test-bz1744377.c
-new file mode 100644
-index 00000000..d7f10535
---- /dev/null
-+++ b/test/test-bz1744377.c
-@@ -0,0 +1,51 @@
-+/*
-+ * fontconfig/test/test-bz1744377.c
-+ *
-+ * Copyright © 2000 Keith Packard
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the author(s) not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The authors make no
-+ * representations about the suitability of this software for any purpose. It
-+ * is provided "as is" without express or implied warranty.
-+ *
-+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ */
-+#include <fontconfig/fontconfig.h>
-+
-+int
-+main (void)
-+{
-+ const FcChar8 *doc = ""
-+ "<fontconfig>\n"
-+ " <include ignore_missing=\"yes\">blahblahblah</include>\n"
-+ "</fontconfig>\n"
-+ "";
-+ const FcChar8 *doc2 = ""
-+ "<fontconfig>\n"
-+ " <include ignore_missing=\"no\">blahblahblah</include>\n"
-+ "</fontconfig>\n"
-+ "";
-+ FcConfig *cfg = FcConfigCreate ();
-+
-+ if (!FcConfigParseAndLoadFromMemory (cfg, doc, FcTrue))
-+ return 1;
-+ if (FcConfigParseAndLoadFromMemory (cfg, doc2, FcTrue))
-+ return 1;
-+ if (!FcConfigParseAndLoadFromMemory (cfg, doc2, FcFalse))
-+ return 1;
-+
-+ FcConfigDestroy (cfg);
-+
-+ return 0;
-+}
---
-2.23.0
-
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-fix-assertion.patch b/source/x/fontconfig/fedora-patches/fontconfig-fix-assertion.patch
deleted file mode 100644
index 2e337364d..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-fix-assertion.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From fbc05949ef52c8a8d69233eed77f6636dffec280 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Wed, 26 Feb 2020 15:42:21 +0900
-Subject: [PATCH] Fix assertion in FcFini()
-
-Due to the unproper initialization of `latest_mtime', the duplicate caches
-was still in fcCacheChains with no references. which means no one frees
-them. thus, the memory leak was happened.
-
-Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/227
----
- src/fccache.c | 9 +++++----
- src/fcinit.c | 4 ++--
- 2 files changed, 7 insertions(+), 6 deletions(-)
-
-diff --git a/src/fccache.c b/src/fccache.c
-index 4744a84..035458e 100644
---- a/src/fccache.c
-+++ b/src/fccache.c
-@@ -365,7 +365,6 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- struct stat file_stat, dir_stat;
- FcBool ret = FcFalse;
- const FcChar8 *sysroot = FcConfigGetSysRoot (config);
-- struct timeval latest_mtime = (struct timeval){ 0 };
-
- if (sysroot)
- d = FcStrBuildFilename (sysroot, dir, NULL);
-@@ -390,6 +389,8 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- #ifndef _WIN32
- FcBool retried = FcFalse;
- #endif
-+ struct timeval latest_mtime = (struct timeval){ 0 };
-+
- if (sysroot)
- cache_hashed = FcStrBuildFilename (sysroot, cache_dir, cache_base, NULL);
- else
-@@ -1081,12 +1082,12 @@ FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat)
-
- if (!file_stat)
- file_stat = &my_file_stat;
-- fd = FcDirCacheOpenFile (cache_file, file_stat);
-- if (fd < 0)
-- return NULL;
- config = FcConfigReference (NULL);
- if (!config)
- return NULL;
-+ fd = FcDirCacheOpenFile (cache_file, file_stat);
-+ if (fd < 0)
-+ return NULL;
- cache = FcDirCacheMapFd (config, fd, file_stat, NULL);
- FcConfigDestroy (config);
- close (fd);
-diff --git a/src/fcinit.c b/src/fcinit.c
-index 6f82ebd..0e1421e 100644
---- a/src/fcinit.c
-+++ b/src/fcinit.c
-@@ -199,10 +199,10 @@ void
- FcFini (void)
- {
- FcConfigFini ();
-- FcCacheFini ();
-+ FcConfigPathFini ();
- FcDefaultFini ();
- FcObjectFini ();
-- FcConfigPathFini ();
-+ FcCacheFini ();
- }
-
- /*
---
-2.24.1
-
-From 6f6b39780215714386606ca1c5457a7106639ff4 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Mon, 23 Mar 2020 14:03:47 +0900
-Subject: [PATCH] Fix assertion in FcCacheFini() again
-
-The previous fix in fbc05949ef52c8a8d69233eed77f6636dffec280 was wrong. reverting.
-
-When reading older caches, FcDirCacheMapHelper() returns FcFalse and
-it became the return value from FcDirCacheProcess() too, which is wrong.
-Actually one of calls for FcDirCacheMapHelper() should be successfully
-finished and closure should have a valid pointer for cache.
-
-Due to this, the proper finalization process wasn't running against
-cache in closure.
-
-Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/227
----
- src/fccache.c | 17 +++++++++++++++--
- 1 file changed, 15 insertions(+), 2 deletions(-)
-
-diff --git a/src/fccache.c b/src/fccache.c
-index 035458e..2d398c7 100644
---- a/src/fccache.c
-+++ b/src/fccache.c
-@@ -365,6 +365,7 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- struct stat file_stat, dir_stat;
- FcBool ret = FcFalse;
- const FcChar8 *sysroot = FcConfigGetSysRoot (config);
-+ struct timeval latest_mtime = (struct timeval){ 0 };
-
- if (sysroot)
- d = FcStrBuildFilename (sysroot, dir, NULL);
-@@ -389,7 +390,6 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- #ifndef _WIN32
- FcBool retried = FcFalse;
- #endif
-- struct timeval latest_mtime = (struct timeval){ 0 };
-
- if (sysroot)
- cache_hashed = FcStrBuildFilename (sysroot, cache_dir, cache_base, NULL);
-@@ -445,6 +445,8 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- }
- FcStrListDone (list);
-
-+ if (closure)
-+ return !!(*((FcCache **)closure) != NULL);
- return ret;
- }
-
-@@ -792,7 +794,18 @@ FcCacheFini (void)
- int i;
-
- for (i = 0; i < FC_CACHE_MAX_LEVEL; i++)
-- assert (fcCacheChains[i] == NULL);
-+ {
-+ if (FcDebug() & FC_DBG_CACHE)
-+ {
-+ if (fcCacheChains[i] != NULL)
-+ {
-+ FcCacheSkip *s = fcCacheChains[i];
-+ printf("Fontconfig error: not freed %p (dir: %s, refcount %d)\n", s->cache, FcCacheDir(s->cache), s->ref.count);
-+ }
-+ }
-+ else
-+ assert (fcCacheChains[i] == NULL);
-+ }
- assert (fcCacheMaxLevel == 0);
-
- free_lock ();
---
-2.24.1
-
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-fix-dtd-id.patch b/source/x/fontconfig/fedora-patches/fontconfig-fix-dtd-id.patch
deleted file mode 100644
index 9045fc053..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-fix-dtd-id.patch
+++ /dev/null
@@ -1,490 +0,0 @@
-diff -uNr fontconfig-2.13.92.orig/conf.d/05-reset-dirs-sample.conf fontconfig-2.13.92/conf.d/05-reset-dirs-sample.conf
---- fontconfig-2.13.92.orig/conf.d/05-reset-dirs-sample.conf 2019-05-08 10:22:25.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/05-reset-dirs-sample.conf 2020-03-28 15:53:41.792757065 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <description>Re-define fonts dirs sample</description>
-
-diff -uNr fontconfig-2.13.92.orig/conf.d/09-autohint-if-no-hinting.conf fontconfig-2.13.92/conf.d/09-autohint-if-no-hinting.conf
---- fontconfig-2.13.92.orig/conf.d/09-autohint-if-no-hinting.conf 2019-07-30 13:03:27.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/09-autohint-if-no-hinting.conf 2020-03-28 15:53:41.764757635 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-autohint.conf fontconfig-2.13.92/conf.d/10-autohint.conf
---- fontconfig-2.13.92.orig/conf.d/10-autohint.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-autohint.conf 2020-03-28 15:53:41.829756312 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-hinting-full.conf fontconfig-2.13.92/conf.d/10-hinting-full.conf
---- fontconfig-2.13.92.orig/conf.d/10-hinting-full.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-hinting-full.conf 2020-03-28 15:53:41.714758653 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-hinting-medium.conf fontconfig-2.13.92/conf.d/10-hinting-medium.conf
---- fontconfig-2.13.92.orig/conf.d/10-hinting-medium.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-hinting-medium.conf 2020-03-28 15:53:41.809756719 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-hinting-none.conf fontconfig-2.13.92/conf.d/10-hinting-none.conf
---- fontconfig-2.13.92.orig/conf.d/10-hinting-none.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-hinting-none.conf 2020-03-28 15:53:41.796756984 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-hinting-slight.conf fontconfig-2.13.92/conf.d/10-hinting-slight.conf
---- fontconfig-2.13.92.orig/conf.d/10-hinting-slight.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-hinting-slight.conf 2020-03-28 15:53:41.760757717 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-no-sub-pixel.conf fontconfig-2.13.92/conf.d/10-no-sub-pixel.conf
---- fontconfig-2.13.92.orig/conf.d/10-no-sub-pixel.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-no-sub-pixel.conf 2020-03-28 15:53:41.743758063 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-scale-bitmap-fonts.conf fontconfig-2.13.92/conf.d/10-scale-bitmap-fonts.conf
---- fontconfig-2.13.92.orig/conf.d/10-scale-bitmap-fonts.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-scale-bitmap-fonts.conf 2020-03-28 15:53:41.727758389 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-sub-pixel-bgr.conf fontconfig-2.13.92/conf.d/10-sub-pixel-bgr.conf
---- fontconfig-2.13.92.orig/conf.d/10-sub-pixel-bgr.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-sub-pixel-bgr.conf 2020-03-28 15:53:41.841756068 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-sub-pixel-rgb.conf fontconfig-2.13.92/conf.d/10-sub-pixel-rgb.conf
---- fontconfig-2.13.92.orig/conf.d/10-sub-pixel-rgb.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-sub-pixel-rgb.conf 2020-03-28 15:53:41.723758470 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-sub-pixel-vbgr.conf fontconfig-2.13.92/conf.d/10-sub-pixel-vbgr.conf
---- fontconfig-2.13.92.orig/conf.d/10-sub-pixel-vbgr.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-sub-pixel-vbgr.conf 2020-03-28 15:53:41.772757472 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-sub-pixel-vrgb.conf fontconfig-2.13.92/conf.d/10-sub-pixel-vrgb.conf
---- fontconfig-2.13.92.orig/conf.d/10-sub-pixel-vrgb.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-sub-pixel-vrgb.conf 2020-03-28 15:53:41.706758816 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/10-unhinted.conf fontconfig-2.13.92/conf.d/10-unhinted.conf
---- fontconfig-2.13.92.orig/conf.d/10-unhinted.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/10-unhinted.conf 2020-03-28 15:53:41.739758145 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/11-lcdfilter-default.conf fontconfig-2.13.92/conf.d/11-lcdfilter-default.conf
---- fontconfig-2.13.92.orig/conf.d/11-lcdfilter-default.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/11-lcdfilter-default.conf 2020-03-28 15:53:41.731758307 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/11-lcdfilter-legacy.conf fontconfig-2.13.92/conf.d/11-lcdfilter-legacy.conf
---- fontconfig-2.13.92.orig/conf.d/11-lcdfilter-legacy.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/11-lcdfilter-legacy.conf 2020-03-28 15:53:41.837756149 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/11-lcdfilter-light.conf fontconfig-2.13.92/conf.d/11-lcdfilter-light.conf
---- fontconfig-2.13.92.orig/conf.d/11-lcdfilter-light.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/11-lcdfilter-light.conf 2020-03-28 15:53:41.768757554 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/20-unhint-small-vera.conf fontconfig-2.13.92/conf.d/20-unhint-small-vera.conf
---- fontconfig-2.13.92.orig/conf.d/20-unhint-small-vera.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/20-unhint-small-vera.conf 2020-03-28 15:53:41.784757228 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/25-unhint-nonlatin.conf fontconfig-2.13.92/conf.d/25-unhint-nonlatin.conf
---- fontconfig-2.13.92.orig/conf.d/25-unhint-nonlatin.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/25-unhint-nonlatin.conf 2020-03-28 15:53:41.817756556 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/30-metric-aliases.conf fontconfig-2.13.92/conf.d/30-metric-aliases.conf
---- fontconfig-2.13.92.orig/conf.d/30-metric-aliases.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/30-metric-aliases.conf 2020-03-28 15:53:41.718758572 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/40-nonlatin.conf fontconfig-2.13.92/conf.d/40-nonlatin.conf
---- fontconfig-2.13.92.orig/conf.d/40-nonlatin.conf 2019-05-08 10:22:25.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/40-nonlatin.conf 2020-03-28 15:53:41.735758226 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/45-generic.conf fontconfig-2.13.92/conf.d/45-generic.conf
---- fontconfig-2.13.92.orig/conf.d/45-generic.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/45-generic.conf 2020-03-28 15:53:41.833756231 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/45-latin.conf fontconfig-2.13.92/conf.d/45-latin.conf
---- fontconfig-2.13.92.orig/conf.d/45-latin.conf 2019-05-08 10:22:25.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/45-latin.conf 2020-03-28 15:53:41.756757798 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/49-sansserif.conf fontconfig-2.13.92/conf.d/49-sansserif.conf
---- fontconfig-2.13.92.orig/conf.d/49-sansserif.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/49-sansserif.conf 2020-03-28 15:53:41.845755987 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/50-user.conf fontconfig-2.13.92/conf.d/50-user.conf
---- fontconfig-2.13.92.orig/conf.d/50-user.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/50-user.conf 2020-03-28 15:53:41.710758735 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/51-local.conf fontconfig-2.13.92/conf.d/51-local.conf
---- fontconfig-2.13.92.orig/conf.d/51-local.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/51-local.conf 2020-03-28 15:53:41.805756801 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/60-generic.conf fontconfig-2.13.92/conf.d/60-generic.conf
---- fontconfig-2.13.92.orig/conf.d/60-generic.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/60-generic.conf 2020-03-28 15:53:41.702758898 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/60-latin.conf fontconfig-2.13.92/conf.d/60-latin.conf
---- fontconfig-2.13.92.orig/conf.d/60-latin.conf 2019-05-08 10:22:25.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/60-latin.conf 2020-03-28 15:53:41.752757880 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/65-fonts-persian.conf fontconfig-2.13.92/conf.d/65-fonts-persian.conf
---- fontconfig-2.13.92.orig/conf.d/65-fonts-persian.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/65-fonts-persian.conf 2020-03-28 15:53:41.748757961 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <!--
- fonts-persian.conf
- To configure Persian fonts from The FarsiWeb Project.
-diff -uNr fontconfig-2.13.92.orig/conf.d/65-khmer.conf fontconfig-2.13.92/conf.d/65-khmer.conf
---- fontconfig-2.13.92.orig/conf.d/65-khmer.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/65-khmer.conf 2020-03-28 15:53:41.813756638 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/65-nonlatin.conf fontconfig-2.13.92/conf.d/65-nonlatin.conf
---- fontconfig-2.13.92.orig/conf.d/65-nonlatin.conf 2019-05-08 10:22:25.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/65-nonlatin.conf 2020-03-28 15:53:41.825756394 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/69-unifont.conf fontconfig-2.13.92/conf.d/69-unifont.conf
---- fontconfig-2.13.92.orig/conf.d/69-unifont.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/69-unifont.conf 2020-03-28 15:53:41.821756475 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/70-no-bitmaps.conf fontconfig-2.13.92/conf.d/70-no-bitmaps.conf
---- fontconfig-2.13.92.orig/conf.d/70-no-bitmaps.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/70-no-bitmaps.conf 2020-03-28 15:53:41.788757147 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/70-yes-bitmaps.conf fontconfig-2.13.92/conf.d/70-yes-bitmaps.conf
---- fontconfig-2.13.92.orig/conf.d/70-yes-bitmaps.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/70-yes-bitmaps.conf 2020-03-28 15:53:41.780757310 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/80-delicious.conf fontconfig-2.13.92/conf.d/80-delicious.conf
---- fontconfig-2.13.92.orig/conf.d/80-delicious.conf 2018-06-05 12:36:38.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/80-delicious.conf 2020-03-28 15:53:41.800756903 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/conf.d/90-synthetic.conf fontconfig-2.13.92/conf.d/90-synthetic.conf
---- fontconfig-2.13.92.orig/conf.d/90-synthetic.conf 2018-07-19 05:14:39.000000000 +0200
-+++ fontconfig-2.13.92/conf.d/90-synthetic.conf 2020-03-28 15:53:41.776757391 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
- <its:translateRule translate="no" selector="/fontconfig/*[not(self::description)]"/>
-diff -uNr fontconfig-2.13.92.orig/doc/fontconfig-user.html fontconfig-2.13.92/doc/fontconfig-user.html
---- fontconfig-2.13.92.orig/doc/fontconfig-user.html 2019-08-09 13:12:38.000000000 +0200
-+++ fontconfig-2.13.92/doc/fontconfig-user.html 2020-03-28 15:53:41.694759061 +0100
-@@ -422,7 +422,7 @@
- ><PRE
- CLASS="PROGRAMLISTING"
- > &#60;?xml version="1.0"?&#62;
-- &#60;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&#62;
-+ &#60;!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"&#62;
- &#60;fontconfig&#62;
- ...
- &#60;/fontconfig&#62;
-@@ -1240,7 +1240,7 @@
- ><PRE
- CLASS="PROGRAMLISTING"
- >&#60;?xml version="1.0"?&#62;
--&#60;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&#62;
-+&#60;!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"&#62;
- &#60;!-- /etc/fonts/fonts.conf file to configure system font access --&#62;
- &#60;fontconfig&#62;
- &#60;!--
-@@ -1367,7 +1367,7 @@
- ><PRE
- CLASS="PROGRAMLISTING"
- >&#60;?xml version="1.0"?&#62;
--&#60;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&#62;
-+&#60;!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"&#62;
- &#60;!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration --&#62;
- &#60;fontconfig&#62;
-
-diff -uNr fontconfig-2.13.92.orig/doc/fontconfig-user.sgml fontconfig-2.13.92/doc/fontconfig-user.sgml
---- fontconfig-2.13.92.orig/doc/fontconfig-user.sgml 2018-11-15 13:20:50.000000000 +0100
-+++ fontconfig-2.13.92/doc/fontconfig-user.sgml 2020-03-28 15:53:41.680759345 +0100
-@@ -300,7 +300,7 @@
- following structure:
- <programlisting>
- &lt;?xml version="1.0"?&gt;
-- &lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
-+ &lt;!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"&gt;
- &lt;fontconfig&gt;
- ...
- &lt;/fontconfig&gt;
-@@ -573,7 +573,7 @@
- </para>
- <programlisting>
- &lt;?xml version="1.0"?&gt;
--&lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
-+&lt;!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"&gt;
- &lt;!-- &confdir;/fonts.conf file to configure system font access --&gt;
- &lt;fontconfig&gt;
- &lt;!--
-@@ -684,7 +684,7 @@
- </para>
- <programlisting>
- &lt;?xml version="1.0"?&gt;
--&lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
-+&lt;!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"&gt;
- &lt;!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration --&gt;
- &lt;fontconfig&gt;
-
-diff -uNr fontconfig-2.13.92.orig/doc/fontconfig-user.txt fontconfig-2.13.92/doc/fontconfig-user.txt
---- fontconfig-2.13.92.orig/doc/fontconfig-user.txt 2019-08-09 13:12:20.000000000 +0200
-+++ fontconfig-2.13.92/doc/fontconfig-user.txt 2020-03-28 15:53:41.689759162 +0100
-@@ -261,7 +261,7 @@
- following structure:
-
- <?xml version="1.0"?>
-- <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+ <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- ...
- </fontconfig>
-@@ -573,7 +573,7 @@
- This is an example of a system-wide configuration file
-
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <!-- /etc/fonts/fonts.conf file to configure system font access -->
- <fontconfig>
- <!--
-@@ -683,7 +683,7 @@
- $XDG_CONFIG_HOME/fontconfig/fonts.conf
-
- <?xml version="1.0"?>
-- <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+ <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration -->
- <fontconfig>
-
-diff -uNr fontconfig-2.13.92.orig/doc/fonts-conf.5 fontconfig-2.13.92/doc/fonts-conf.5
---- fontconfig-2.13.92.orig/doc/fonts-conf.5 2019-08-09 13:12:20.000000000 +0200
-+++ fontconfig-2.13.92/doc/fonts-conf.5 2020-03-28 15:53:41.685759244 +0100
-@@ -264,7 +264,7 @@
- .sp
- .nf
- <?xml version="1.0"?>
-- <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+ <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <fontconfig>
- \&...
- </fontconfig>
-@@ -554,7 +554,7 @@
- .sp
- .nf
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <!-- /etc/fonts/fonts.conf file to configure system font access -->
- <fontconfig>
- <!--
-@@ -666,7 +666,7 @@
- .sp
- .nf
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration -->
- <fontconfig>
-
-diff -uNr fontconfig-2.13.92.orig/fonts.conf.in fontconfig-2.13.92/fonts.conf.in
---- fontconfig-2.13.92.orig/fonts.conf.in 2019-05-08 10:22:25.000000000 +0200
-+++ fontconfig-2.13.92/fonts.conf.in 2020-03-28 15:53:41.698758979 +0100
-@@ -1,5 +1,5 @@
- <?xml version="1.0"?>
--<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
- <!-- /etc/fonts/fonts.conf file to configure system font access -->
- <fontconfig>
- <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-fix-dtd.patch b/source/x/fontconfig/fedora-patches/fontconfig-fix-dtd.patch
deleted file mode 100644
index 51655890d..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-fix-dtd.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From a4aa66a858f1ecd375c5efe5916398281f73f794 Mon Sep 17 00:00:00 2001
-From: Jan Tojnar <jtojnar@gmail.com>
-Date: Wed, 20 Nov 2019 02:13:58 +0000
-Subject: [PATCH] Correct reset-dirs in DTD
-
-Empty elements need to be declared as such in well-formed DTDs.
----
- fonts.dtd | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/fonts.dtd b/fonts.dtd
-index f8c9f2c..40ecb4e 100644
---- a/fonts.dtd
-+++ b/fonts.dtd
-@@ -124,7 +124,7 @@
- <!--
- Reset the list of fonts directories
- -->
--<!ELEMENT reset-dirs >
-+<!ELEMENT reset-dirs EMPTY>
-
- <!--
- Periodically rescan the font configuration and
---
-2.24.1
-
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-fix-test.patch b/source/x/fontconfig/fedora-patches/fontconfig-fix-test.patch
deleted file mode 100644
index 5ccaabafb..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-fix-test.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-diff -pruN fontconfig-2.13.92.orig/test/run-test.sh fontconfig-2.13.92/test/run-test.sh
---- fontconfig-2.13.92.orig/test/run-test.sh 2020-01-30 20:19:55.148680493 +0900
-+++ fontconfig-2.13.92/test/run-test.sh 2020-01-30 20:25:48.604550017 +0900
-@@ -409,7 +409,7 @@ rm -rf $MYCACHEBASEDIR $MYCONFIG my-font
-
- fi # if [ "x$EXEEXT" = "x" ]
-
--if [ -x $BUILDTESTDIR/test-crbug1004254 ]; then
-+if [ -x $BUILDTESTDIR/test-crbug1004254 ] && [ 0 -eq 1 ]; then
- dotest "MT-safe global config"
- prep
- curl -s -o $FONTDIR/noto.zip https://noto-website-2.storage.googleapis.com/pkgs/NotoSans-hinted.zip
-From 8bddcb113779178e5b5ed711db08d9bfbff924cc Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Thu, 5 Dec 2019 19:55:06 +0900
-Subject: [PATCH] Fix a test fail when no bwrap was available
-
-Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/201
----
- test/run-test.sh | 5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
-diff --git a/test/run-test.sh b/test/run-test.sh
-index e1ee6d0..9b2e54b 100644
---- a/test/run-test.sh
-+++ b/test/run-test.sh
-@@ -40,9 +40,8 @@ ECHO=true
- FCLIST="$LOG_COMPILER ../fc-list/fc-list$EXEEXT"
- FCCACHE="$LOG_COMPILER ../fc-cache/fc-cache$EXEEXT"
-
--which bwrap > /dev/null 2>&1
--if [ $? -eq 0 ]; then
-- BWRAP=`which bwrap`
-+if [ -x "$(command -v bwrap)" ]; then
-+ BWRAP="$(command -v bwrap)"
- fi
-
- FONT1=$TESTDIR/4x6.pcf
---
-2.24.1
-
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-mt.patch b/source/x/fontconfig/fedora-patches/fontconfig-mt.patch
deleted file mode 100644
index 31a3748c8..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-mt.patch
+++ /dev/null
@@ -1,1439 +0,0 @@
-From b5bcf61fe789e66df2de609ec246cb7e4d326180 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Fri, 1 Nov 2019 14:43:42 +0900
-Subject: [PATCH 3/9] Use FcConfigReference/Destroy appropriately instead of
- FcConfigGetCurrent
-
-This may improves to be MT-safe.
-
-Reported at https://bugs.chromium.org/p/chromium/issues/detail?id=1004254
----
- doc/fcconfig.fncs | 20 ++++
- fontconfig/fontconfig.h | 4 +-
- src/fccache.c | 73 +++++++++---
- src/fccfg.c | 237 ++++++++++++++++++++++++---------------
- src/fcdir.c | 31 ++++-
- src/fcinit.c | 15 ++-
- src/fclist.c | 25 +++--
- src/fcmatch.c | 48 ++++----
- test/Makefile.am | 5 +
- test/run-test.sh | 15 +++
- test/test-crbug1004254.c | 116 +++++++++++++++++++
- 11 files changed, 436 insertions(+), 153 deletions(-)
- create mode 100644 test/test-crbug1004254.c
-
-diff --git a/doc/fcconfig.fncs b/doc/fcconfig.fncs
-index 82769d5..e709b54 100644
---- a/doc/fcconfig.fncs
-+++ b/doc/fcconfig.fncs
-@@ -174,6 +174,10 @@ Returns one of the two sets of fonts from the configuration as specified
- by <parameter>set</parameter>. This font set is owned by the library and must
- not be modified or freed.
- If <parameter>config</parameter> is NULL, the current configuration is used.
-+ </para><para>
-+This function isn't MT-safe. <function>FcConfigReference</function> must be called
-+before using this and then <function>FcConfigDestroy</function> when
-+the return value is no longer referenced.
- @@
-
- @RET@ FcBlanks *
-@@ -407,6 +411,10 @@ parse error, semantic error or allocation failure. Otherwise returns FcTrue.
- Obtains the system root directory in 'config' if available. All files
- (including file properties in patterns) obtained from this 'config' are
- relative to this system root directory.
-+ </para><para>
-+This function isn't MT-safe. <function>FcConfigReference</function> must be called
-+before using this and then <function>FcConfigDestroy</function> when
-+the return value is no longer referenced.
- @SINCE@ 2.10.92
- @@
-
-@@ -433,6 +441,10 @@ When setting this on the current config this causes changing current config
- @PURPOSE@ Initialize the iterator
- @DESC@
- Initialize 'iter' with the first iterator in the config file information list.
-+ </para><para>
-+This function isn't MT-safe. <function>FcConfigReference</function> must be called
-+before using this and then <function>FcConfigDestroy</function> when the relevant
-+values are no longer referenced.
- @SINCE@ 2.12.91
- @@
-
-@@ -444,6 +456,10 @@ Initialize 'iter' with the first iterator in the config file information list.
- @DESC@
- Set 'iter' to point to the next node in the config file information list.
- If there is no next node, FcFalse is returned.
-+ </para><para>
-+This function isn't MT-safe. <function>FcConfigReference</function> must be called
-+before using <function>FcConfigFileInfoIterInit</function> and then
-+<function>FcConfigDestroy</function> when the relevant values are no longer referenced.
- @SINCE@ 2.12.91
- @@
-
-@@ -459,5 +475,9 @@ If there is no next node, FcFalse is returned.
- Obtain the filename, the description and the flag whether it is enabled or not
- for 'iter' where points to current configuration file information.
- If the iterator is invalid, FcFalse is returned.
-+ </para><para>
-+This function isn't MT-safe. <function>FcConfigReference</function> must be called
-+before using <function>FcConfigFileInfoIterInit</function> and then
-+<function>FcConfigDestroy</function> when the relevant values are no longer referenced.
- @SINCE@ 2.12.91
- @@
-diff --git a/fontconfig/fontconfig.h b/fontconfig/fontconfig.h
-index 2f0e8cf..c795245 100644
---- a/fontconfig/fontconfig.h
-+++ b/fontconfig/fontconfig.h
-@@ -375,7 +375,7 @@ FcPublic FcBool
- FcDirCacheClean (const FcChar8 *cache_dir, FcBool verbose);
-
- FcPublic void
--FcCacheCreateTagFile (const FcConfig *config);
-+FcCacheCreateTagFile (FcConfig *config);
-
- FcPublic FcBool
- FcDirCacheCreateUUID (FcChar8 *dir,
-@@ -437,7 +437,7 @@ FcPublic FcBlanks *
- FcConfigGetBlanks (FcConfig *config);
-
- FcPublic FcStrList *
--FcConfigGetCacheDirs (const FcConfig *config);
-+FcConfigGetCacheDirs (FcConfig *config);
-
- FcPublic int
- FcConfigGetRescanInterval (FcConfig *config);
-diff --git a/src/fccache.c b/src/fccache.c
-index c565560..d8f1dab 100644
---- a/src/fccache.c
-+++ b/src/fccache.c
-@@ -58,11 +58,15 @@ FcDirCacheDeleteUUID (const FcChar8 *dir,
- {
- FcBool ret = FcTrue;
- #ifndef _WIN32
-- const FcChar8 *sysroot = FcConfigGetSysRoot (config);
-+ const FcChar8 *sysroot;
- FcChar8 *target, *d;
- struct stat statb;
- struct timeval times[2];
-
-+ config = FcConfigReference (config);
-+ if (!config)
-+ return FcFalse;
-+ sysroot = FcConfigGetSysRoot (config);
- if (sysroot)
- d = FcStrBuildFilename (sysroot, dir, NULL);
- else
-@@ -94,6 +98,7 @@ FcDirCacheDeleteUUID (const FcChar8 *dir,
- bail:
- FcStrFree (d);
- #endif
-+ FcConfigDestroy (config);
-
- return ret;
- }
-@@ -265,7 +270,13 @@ FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config)
- #endif
- FcStrList *list;
- FcChar8 *cache_dir;
-- const FcChar8 *sysroot = FcConfigGetSysRoot (config);
-+ const FcChar8 *sysroot;
-+ FcBool ret = FcTrue;
-+
-+ config = FcConfigReference (config);
-+ if (!config)
-+ return FcFalse;
-+ sysroot = FcConfigGetSysRoot (config);
-
- FcDirCacheBasenameMD5 (config, dir, cache_base);
- #ifndef _WIN32
-@@ -274,7 +285,10 @@ FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config)
-
- list = FcStrListCreate (config->cacheDirs);
- if (!list)
-- return FcFalse;
-+ {
-+ ret = FcFalse;
-+ goto bail;
-+ }
-
- while ((cache_dir = FcStrListNext (list)))
- {
-@@ -304,8 +318,11 @@ FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config)
- FcDirCacheDeleteUUID (dir, config);
- /* return FcFalse if something went wrong */
- if (cache_dir)
-- return FcFalse;
-- return FcTrue;
-+ ret = FcFalse;
-+bail:
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- static int
-@@ -1041,10 +1058,15 @@ FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file)
- {
- FcCache *cache = NULL;
-
-+ config = FcConfigReference (config);
-+ if (!config)
-+ return NULL;
- if (!FcDirCacheProcess (config, dir,
- FcDirCacheMapHelper,
- &cache, cache_file))
-- return NULL;
-+ cache = NULL;
-+
-+ FcConfigDestroy (config);
-
- return cache;
- }
-@@ -1055,13 +1077,16 @@ FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat)
- int fd;
- FcCache *cache;
- struct stat my_file_stat;
-+ FcConfig *config;
-
- if (!file_stat)
- file_stat = &my_file_stat;
- fd = FcDirCacheOpenFile (cache_file, file_stat);
- if (fd < 0)
- return NULL;
-- cache = FcDirCacheMapFd (FcConfigGetCurrent (), fd, file_stat, NULL);
-+ config = FcConfigReference (NULL);
-+ cache = FcDirCacheMapFd (config, fd, file_stat, NULL);
-+ FcConfigDestroy (config);
- close (fd);
- return cache;
- }
-@@ -1155,12 +1180,16 @@ FcBool
- FcDirCacheValid (const FcChar8 *dir)
- {
- FcConfig *config;
-+ FcBool ret;
-
-- config = FcConfigGetCurrent ();
-+ config = FcConfigReference (NULL);
- if (!config)
- return FcFalse;
-
-- return FcDirCacheValidConfig (dir, config);
-+ ret = FcDirCacheValidConfig (dir, config);
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- /*
-@@ -1438,9 +1467,13 @@ FcDirCacheClean (const FcChar8 *cache_dir, FcBool verbose)
- FcCache *cache;
- struct stat target_stat;
- const FcChar8 *sysroot;
-+ FcConfig *config;
-
-+ config = FcConfigReference (NULL);
-+ if (!config)
-+ return FcFalse;
- /* FIXME: this API needs to support non-current FcConfig */
-- sysroot = FcConfigGetSysRoot (NULL);
-+ sysroot = FcConfigGetSysRoot (config);
- if (sysroot)
- dir = FcStrBuildFilename (sysroot, cache_dir, NULL);
- else
-@@ -1448,7 +1481,8 @@ FcDirCacheClean (const FcChar8 *cache_dir, FcBool verbose)
- if (!dir)
- {
- fprintf (stderr, "Fontconfig error: %s: out of memory\n", cache_dir);
-- return FcFalse;
-+ ret = FcFalse;
-+ goto bail;
- }
- if (access ((char *) dir, W_OK) != 0)
- {
-@@ -1525,8 +1559,10 @@ FcDirCacheClean (const FcChar8 *cache_dir, FcBool verbose)
- }
-
- closedir (d);
-- bail0:
-+bail0:
- FcStrFree (dir);
-+bail:
-+ FcConfigDestroy (config);
-
- return ret;
- }
-@@ -1968,15 +2004,20 @@ FcDirCacheCreateTagFile (const FcChar8 *cache_dir)
- }
-
- void
--FcCacheCreateTagFile (const FcConfig *config)
-+FcCacheCreateTagFile (FcConfig *config)
- {
- FcChar8 *cache_dir = NULL, *d = NULL;
- FcStrList *list;
-- const FcChar8 *sysroot = FcConfigGetSysRoot (config);
-+ const FcChar8 *sysroot;
-+
-+ config = FcConfigReference (config);
-+ if (!config)
-+ return;
-+ sysroot = FcConfigGetSysRoot (config);
-
- list = FcConfigGetCacheDirs (config);
- if (!list)
-- return;
-+ goto bail;
-
- while ((cache_dir = FcStrListNext (list)))
- {
-@@ -1992,6 +2033,8 @@ FcCacheCreateTagFile (const FcConfig *config)
- if (d)
- FcStrFree (d);
- FcStrListDone (list);
-+bail:
-+ FcConfigDestroy (config);
- }
-
- #define __fccache__
-diff --git a/src/fccfg.c b/src/fccfg.c
-index 21ccd25..11dc876 100644
---- a/src/fccfg.c
-+++ b/src/fccfg.c
-@@ -237,12 +237,12 @@ FcConfigUptoDate (FcConfig *config)
- {
- FcFileTime config_time, config_dir_time, font_time;
- time_t now = time(0);
-+ FcBool ret = FcTrue;
-+
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return FcFalse;
-- }
-+ return FcFalse;
-+
- config_time = FcConfigNewestFile (config->configFiles);
- config_dir_time = FcConfigNewestFile (config->configDirs);
- font_time = FcConfigNewestFile (config->fontDirs);
-@@ -258,13 +258,19 @@ FcConfigUptoDate (FcConfig *config)
- fprintf (stderr,
- "Fontconfig warning: Directory/file mtime in the future. New fonts may not be detected.\n");
- config->rescanTime = now;
-- return FcTrue;
-+ goto bail;
- }
- else
-- return FcFalse;
-+ {
-+ ret = FcFalse;
-+ goto bail;
-+ }
- }
- config->rescanTime = now;
-- return FcTrue;
-+bail:
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- FcExpr *
-@@ -291,11 +297,26 @@ FcConfigReference (FcConfig *config)
- {
- if (!config)
- {
-- config = FcConfigGetCurrent ();
-+ /* Do not use FcConfigGetCurrent () for the purpose of obtaining current FcConfig here.
-+ * because the reference counter must be increased before setting it to _fcConfig.
-+ */
-+ retry:
-+ config = fc_atomic_ptr_get (&_fcConfig);
- if (!config)
-- return 0;
-- }
-+ {
-+ config = FcConfigCreate ();
-+ FcRefInc (&config->ref);
-
-+ config = FcInitLoadOwnConfigAndFonts (config);
-+ if (!fc_atomic_ptr_cmpexch (&_fcConfig, NULL, config))
-+ {
-+ FcConfigDestroy (config); /* To decrease the refcount for the above one. */
-+ FcConfigDestroy (config); /* To destroy it actualy */
-+ goto retry;
-+ }
-+ return config;
-+ }
-+ }
- FcRefInc (&config->ref);
-
- return config;
-@@ -475,25 +496,32 @@ FcBool
- FcConfigBuildFonts (FcConfig *config)
- {
- FcFontSet *fonts;
-+ FcBool ret = FcTrue;
-
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return FcFalse;
-- }
-+ return FcFalse;
-
- fonts = FcFontSetCreate ();
- if (!fonts)
-- return FcFalse;
-+ {
-+ ret = FcFalse;
-+ goto bail;
-+ }
-
- FcConfigSetFonts (config, fonts, FcSetSystem);
-
- if (!FcConfigAddDirList (config, FcSetSystem, config->fontDirs))
-- return FcFalse;
-+ {
-+ ret = FcFalse;
-+ goto bail;
-+ }
- if (FcDebug () & FC_DBG_FONTSET)
- FcFontSetPrint (fonts);
-- return FcTrue;
-+bail:
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- FcBool
-@@ -537,13 +565,15 @@ FcConfigAddConfigDir (FcConfig *config,
- FcStrList *
- FcConfigGetConfigDirs (FcConfig *config)
- {
-+ FcStrList *ret;
-+
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return 0;
-- }
-- return FcStrListCreate (config->configDirs);
-+ return NULL;
-+ ret = FcStrListCreate (config->configDirs);
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- FcBool
-@@ -579,13 +609,15 @@ FcConfigResetFontDirs (FcConfig *config)
- FcStrList *
- FcConfigGetFontDirs (FcConfig *config)
- {
-+ FcStrList *ret;
-+
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return 0;
-- }
-- return FcStrListCreate (config->fontDirs);
-+ return NULL;
-+ ret = FcStrListCreate (config->fontDirs);
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- static FcBool
-@@ -670,15 +702,17 @@ FcConfigAddCacheDir (FcConfig *config,
- }
-
- FcStrList *
--FcConfigGetCacheDirs (const FcConfig *config)
-+FcConfigGetCacheDirs (FcConfig *config)
- {
-+ FcStrList *ret;
-+
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return 0;
-- }
-- return FcStrListCreate (config->cacheDirs);
-+ return NULL;
-+ ret = FcStrListCreate (config->cacheDirs);
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- FcBool
-@@ -699,13 +733,15 @@ FcConfigAddConfigFile (FcConfig *config,
- FcStrList *
- FcConfigGetConfigFiles (FcConfig *config)
- {
-+ FcStrList *ret;
-+
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return 0;
-- }
-- return FcStrListCreate (config->configFiles);
-+ return NULL;
-+ ret = FcStrListCreate (config->configFiles);
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- FcChar8 *
-@@ -784,25 +820,26 @@ FcConfigAddBlank (FcConfig *config FC_UNUSED,
- int
- FcConfigGetRescanInterval (FcConfig *config)
- {
-+ int ret;
-+
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return 0;
-- }
-- return config->rescanInterval;
-+ return 0;
-+ ret = config->rescanInterval;
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- FcBool
- FcConfigSetRescanInterval (FcConfig *config, int rescanInterval)
- {
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return FcFalse;
-- }
-+ return FcFalse;
- config->rescanInterval = rescanInterval;
-+ FcConfigDestroy (config);
-+
- return FcTrue;
- }
-
-@@ -1670,15 +1707,13 @@ FcConfigSubstituteWithPat (FcConfig *config,
- FcBool retval = FcTrue;
- FcTest **tst = NULL;
-
-- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return FcFalse;
-- }
--
- if (kind < FcMatchKindBegin || kind >= FcMatchKindEnd)
- return FcFalse;
-+
-+ config = FcConfigReference (config);
-+ if (!config)
-+ return FcFalse;
-+
- s = config->subst[kind];
- if (kind == FcMatchPattern)
- {
-@@ -1973,6 +2008,7 @@ bail1:
- free (value);
- if (tst)
- free (tst);
-+ FcConfigDestroy (config);
-
- return retval;
- }
-@@ -2290,12 +2326,9 @@ FcConfigGetFilename (FcConfig *config,
- FcChar8 *file, *dir, **path, **p;
- const FcChar8 *sysroot;
-
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return NULL;
-- }
-+ return NULL;
- sysroot = FcConfigGetSysRoot (config);
- if (!url || !*url)
- {
-@@ -2306,7 +2339,10 @@ FcConfigGetFilename (FcConfig *config,
- file = 0;
-
- if (FcStrIsAbsoluteFilename(url))
-- return FcConfigFileExists (sysroot, url);
-+ {
-+ file = FcConfigFileExists (sysroot, url);
-+ goto bail;
-+ }
-
- if (*url == '~')
- {
-@@ -2330,7 +2366,10 @@ FcConfigGetFilename (FcConfig *config,
- {
- path = FcConfigGetPath ();
- if (!path)
-- return NULL;
-+ {
-+ file = NULL;
-+ goto bail;
-+ }
- for (p = path; *p; p++)
- {
- FcChar8 *s;
-@@ -2347,6 +2386,9 @@ FcConfigGetFilename (FcConfig *config,
- }
- FcConfigFreePath (path);
- }
-+bail:
-+ FcConfigDestroy (config);
-+
- return file;
- }
-
-@@ -2409,17 +2451,18 @@ FcConfigAppFontAddFile (FcConfig *config,
- FcStrSet *subdirs;
- FcStrList *sublist;
- FcChar8 *subdir;
-+ FcBool ret = FcTrue;
-
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return FcFalse;
-- }
-+ return FcFalse;
-
- subdirs = FcStrSetCreateEx (FCSS_GROW_BY_64);
- if (!subdirs)
-- return FcFalse;
-+ {
-+ ret = FcFalse;
-+ goto bail;
-+ }
-
- set = FcConfigGetFonts (config, FcSetApplication);
- if (!set)
-@@ -2428,7 +2471,8 @@ FcConfigAppFontAddFile (FcConfig *config,
- if (!set)
- {
- FcStrSetDestroy (subdirs);
-- return FcFalse;
-+ ret = FcFalse;
-+ goto bail;
- }
- FcConfigSetFonts (config, set, FcSetApplication);
- }
-@@ -2436,7 +2480,8 @@ FcConfigAppFontAddFile (FcConfig *config,
- if (!FcFileScanConfig (set, subdirs, file, config))
- {
- FcStrSetDestroy (subdirs);
-- return FcFalse;
-+ ret = FcFalse;
-+ goto bail;
- }
- if ((sublist = FcStrListCreate (subdirs)))
- {
-@@ -2447,7 +2492,10 @@ FcConfigAppFontAddFile (FcConfig *config,
- FcStrListDone (sublist);
- }
- FcStrSetDestroy (subdirs);
-- return FcTrue;
-+bail:
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- FcBool
-@@ -2456,17 +2504,18 @@ FcConfigAppFontAddDir (FcConfig *config,
- {
- FcFontSet *set;
- FcStrSet *dirs;
-+ FcBool ret = FcTrue;
-
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return FcFalse;
-- }
-+ return FcFalse;
-
- dirs = FcStrSetCreateEx (FCSS_GROW_BY_64);
- if (!dirs)
-- return FcFalse;
-+ {
-+ ret = FcFalse;
-+ goto bail;
-+ }
-
- set = FcConfigGetFonts (config, FcSetApplication);
- if (!set)
-@@ -2475,7 +2524,8 @@ FcConfigAppFontAddDir (FcConfig *config,
- if (!set)
- {
- FcStrSetDestroy (dirs);
-- return FcFalse;
-+ ret = FcFalse;
-+ goto bail;
- }
- FcConfigSetFonts (config, set, FcSetApplication);
- }
-@@ -2485,23 +2535,26 @@ FcConfigAppFontAddDir (FcConfig *config,
- if (!FcConfigAddDirList (config, FcSetApplication, dirs))
- {
- FcStrSetDestroy (dirs);
-- return FcFalse;
-+ ret = FcFalse;
-+ goto bail;
- }
- FcStrSetDestroy (dirs);
-- return FcTrue;
-+bail:
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- void
- FcConfigAppFontClear (FcConfig *config)
- {
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return;
-- }
-+ return;
-
- FcConfigSetFonts (config, 0, FcSetApplication);
-+
-+ FcConfigDestroy (config);
- }
-
- /*
-diff --git a/src/fcdir.c b/src/fcdir.c
-index 7d7b23c..693c845 100644
---- a/src/fcdir.c
-+++ b/src/fcdir.c
-@@ -167,7 +167,16 @@ FcFileScan (FcFontSet *set,
- const FcChar8 *file,
- FcBool force FC_UNUSED)
- {
-- return FcFileScanConfig (set, dirs, file, FcConfigGetCurrent ());
-+ FcConfig *config;
-+ FcBool ret;
-+
-+ config = FcConfigReference (NULL);
-+ if (!config)
-+ return FcFalse;
-+ ret = FcFileScanConfig (set, dirs, file, config);
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- /*
-@@ -271,10 +280,19 @@ FcDirScan (FcFontSet *set,
- const FcChar8 *dir,
- FcBool force FC_UNUSED)
- {
-+ FcConfig *config;
-+ FcBool ret;
-+
- if (cache || !force)
- return FcFalse;
-
-- return FcDirScanConfig (set, dirs, dir, force, FcConfigGetCurrent ());
-+ config = FcConfigReference (NULL);
-+ if (!config)
-+ return FcFalse;
-+ ret = FcDirScanConfig (set, dirs, dir, force, config);
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- /*
-@@ -353,12 +371,16 @@ FcDirCacheRescan (const FcChar8 *dir, FcConfig *config)
- FcCache *new = NULL;
- struct stat dir_stat;
- FcStrSet *dirs;
-- const FcChar8 *sysroot = FcConfigGetSysRoot (config);
-+ const FcChar8 *sysroot;
- FcChar8 *d = NULL;
- #ifndef _WIN32
- int fd = -1;
- #endif
-
-+ config = FcConfigReference (config);
-+ if (!config)
-+ return NULL;
-+ sysroot = FcConfigGetSysRoot (config);
- cache = FcDirCacheLoad (dir, config, NULL);
- if (!cache)
- goto bail;
-@@ -401,6 +423,7 @@ bail1:
- bail:
- if (d)
- FcStrFree (d);
-+ FcConfigDestroy (config);
-
- return new;
- }
-@@ -413,6 +436,7 @@ FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config)
- {
- FcCache *cache = NULL;
-
-+ config = FcConfigReference (config);
- /* Try to use existing cache file */
- if (!force)
- cache = FcDirCacheLoad (dir, config, NULL);
-@@ -420,6 +444,7 @@ FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config)
- /* Not using existing cache file, construct new cache */
- if (!cache)
- cache = FcDirCacheScan (dir, config);
-+ FcConfigDestroy (config);
-
- return cache;
- }
-diff --git a/src/fcinit.c b/src/fcinit.c
-index 5831a19..6f82ebd 100644
---- a/src/fcinit.c
-+++ b/src/fcinit.c
-@@ -229,7 +229,8 @@ FcInitReinitialize (void)
- FcBool
- FcInitBringUptoDate (void)
- {
-- FcConfig *config = FcConfigGetCurrent ();
-+ FcConfig *config = FcConfigReference (NULL);
-+ FcBool ret = FcTrue;
- time_t now;
-
- if (!config)
-@@ -238,19 +239,23 @@ FcInitBringUptoDate (void)
- * rescanInterval == 0 disables automatic up to date
- */
- if (config->rescanInterval == 0)
-- return FcTrue;
-+ goto bail;
- /*
- * Check no more often than rescanInterval seconds
- */
- now = time (0);
- if (config->rescanTime + config->rescanInterval - now > 0)
-- return FcTrue;
-+ goto bail;
- /*
- * If up to date, don't reload configuration
- */
- if (FcConfigUptoDate (0))
-- return FcTrue;
-- return FcInitReinitialize ();
-+ goto bail;
-+ ret = FcInitReinitialize ();
-+bail:
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- #define __fcinit__
-diff --git a/src/fclist.c b/src/fclist.c
-index 494bdea..053803b 100644
---- a/src/fclist.c
-+++ b/src/fclist.c
-@@ -491,11 +491,10 @@ FcFontSetList (FcConfig *config,
- {
- if (!FcInitBringUptoDate ())
- goto bail0;
--
-- config = FcConfigGetCurrent ();
-- if (!config)
-- goto bail0;
- }
-+ config = FcConfigReference (config);
-+ if (!config)
-+ goto bail0;
- FcListHashTableInit (&table);
-
- if (!os)
-@@ -558,7 +557,7 @@ FcFontSetList (FcConfig *config,
- */
- ret = FcFontSetCreate ();
- if (!ret)
-- goto bail0;
-+ goto bail1;
- for (i = 0; i < FC_LIST_HASH_SIZE; i++)
- while ((bucket = table.buckets[i]))
- {
-@@ -570,6 +569,7 @@ FcFontSetList (FcConfig *config,
-
- if (destroy_os)
- FcObjectSetDestroy (os);
-+ FcConfigDestroy (config);
-
- return ret;
-
-@@ -577,6 +577,7 @@ bail2:
- FcFontSetDestroy (ret);
- bail1:
- FcListHashTableCleanup (&table);
-+ FcConfigDestroy (config);
- bail0:
- if (destroy_os)
- FcObjectSetDestroy (os);
-@@ -588,24 +589,26 @@ FcFontList (FcConfig *config,
- FcPattern *p,
- FcObjectSet *os)
- {
-- FcFontSet *sets[2];
-+ FcFontSet *sets[2], *ret;
- int nsets;
-
- if (!config)
- {
- if (!FcInitBringUptoDate ())
- return 0;
--
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return 0;
- }
-+ config = FcConfigReference (config);
-+ if (!config)
-+ return NULL;
- nsets = 0;
- if (config->fonts[FcSetSystem])
- sets[nsets++] = config->fonts[FcSetSystem];
- if (config->fonts[FcSetApplication])
- sets[nsets++] = config->fonts[FcSetApplication];
-- return FcFontSetList (config, sets, nsets, p, os);
-+ ret = FcFontSetList (config, sets, nsets, p, os);
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
- #define __fclist__
- #include "fcaliastail.h"
-diff --git a/src/fcmatch.c b/src/fcmatch.c
-index 78bcf7b..3bc352b 100644
---- a/src/fcmatch.c
-+++ b/src/fcmatch.c
-@@ -845,7 +845,7 @@ FcFontSetMatch (FcConfig *config,
- FcPattern *p,
- FcResult *result)
- {
-- FcPattern *best;
-+ FcPattern *best, *ret = NULL;
-
- assert (sets != NULL);
- assert (p != NULL);
-@@ -853,17 +853,16 @@ FcFontSetMatch (FcConfig *config,
-
- *result = FcResultNoMatch;
-
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return 0;
-- }
-+ return NULL;
- best = FcFontSetMatchInternal (sets, nsets, p, result);
- if (best)
-- return FcFontRenderPrepare (config, p, best);
-- else
-- return NULL;
-+ ret = FcFontRenderPrepare (config, p, best);
-+
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- FcPattern *
-@@ -873,19 +872,16 @@ FcFontMatch (FcConfig *config,
- {
- FcFontSet *sets[2];
- int nsets;
-- FcPattern *best;
-+ FcPattern *best, *ret = NULL;
-
- assert (p != NULL);
- assert (result != NULL);
-
- *result = FcResultNoMatch;
-
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return 0;
-- }
-+ return NULL;
- nsets = 0;
- if (config->fonts[FcSetSystem])
- sets[nsets++] = config->fonts[FcSetSystem];
-@@ -894,9 +890,11 @@ FcFontMatch (FcConfig *config,
-
- best = FcFontSetMatchInternal (sets, nsets, p, result);
- if (best)
-- return FcFontRenderPrepare (config, p, best);
-- else
-- return NULL;
-+ ret = FcFontRenderPrepare (config, p, best);
-+
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
-
- typedef struct _FcSortNode {
-@@ -1183,7 +1181,7 @@ FcFontSort (FcConfig *config,
- FcCharSet **csp,
- FcResult *result)
- {
-- FcFontSet *sets[2];
-+ FcFontSet *sets[2], *ret;
- int nsets;
-
- assert (p != NULL);
-@@ -1191,18 +1189,18 @@ FcFontSort (FcConfig *config,
-
- *result = FcResultNoMatch;
-
-+ config = FcConfigReference (config);
- if (!config)
-- {
-- config = FcConfigGetCurrent ();
-- if (!config)
-- return 0;
-- }
-+ return NULL;
- nsets = 0;
- if (config->fonts[FcSetSystem])
- sets[nsets++] = config->fonts[FcSetSystem];
- if (config->fonts[FcSetApplication])
- sets[nsets++] = config->fonts[FcSetApplication];
-- return FcFontSetSort (config, sets, nsets, p, trim, csp, result);
-+ ret = FcFontSetSort (config, sets, nsets, p, trim, csp, result);
-+ FcConfigDestroy (config);
-+
-+ return ret;
- }
- #define __fcmatch__
- #include "fcaliastail.h"
-diff --git a/test/Makefile.am b/test/Makefile.am
-index e44aa0b..aae45cb 100644
---- a/test/Makefile.am
-+++ b/test/Makefile.am
-@@ -42,6 +42,11 @@ test_pthread_LDADD = $(top_builddir)/src/libfontconfig.la
- # We don't enable this test by default because it will require config and fonts
- # to meaningfully test anything, and we are not installed yet.
- #TESTS += test-pthread
-+
-+check_PROGRAMS += test-crbug1004254
-+test_crbug1004254_LDADD = $(top_builddir)/src/libfontconfig.la
-+# Disabling this for the same reason as above but trying to run in run-test.sh.
-+#TESTS += test-crbug1004254
- endif
- check_PROGRAMS += test-bz89617
- test_bz89617_CFLAGS = \
-diff --git a/test/run-test.sh b/test/run-test.sh
-index 8ad09e3..e1ee6d0 100644
---- a/test/run-test.sh
-+++ b/test/run-test.sh
-@@ -20,6 +20,8 @@
- # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- # PERFORMANCE OF THIS SOFTWARE.
-+set -e
-+
- case "$OSTYPE" in
- msys ) MyPWD=`pwd -W` ;; # On Msys/MinGW, returns a MS Windows style path.
- * ) MyPWD=`pwd` ;; # On any other platforms, returns a Unix style path.
-@@ -408,4 +410,17 @@ rm -rf $MYCACHEBASEDIR $MYCONFIG my-fonts.conf my-out my-out.expected
-
- fi # if [ "x$EXEEXT" = "x" ]
-
-+if [ -x $BUILDTESTDIR/test-crbug1004254 ]; then
-+ dotest "MT-safe global config"
-+ prep
-+ curl -s -o $FONTDIR/noto.zip https://noto-website-2.storage.googleapis.com/pkgs/NotoSans-hinted.zip
-+ (cd $FONTDIR; unzip noto.zip)
-+ if [ -n ${SOURCE_DATE_EPOCH:-} ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
-+ touch -m -t "`date -d \"@${SOURCE_DATE_EPOCH}\" +%y%m%d%H%M.%S`" $FONTDIR
-+ fi
-+ $BUILDTESTDIR/test-crbug1004254
-+else
-+ echo "No test-crbug1004254: skipped"
-+fi
-+
- rm -rf $FONTDIR $CACHEFILE $CACHEDIR $BASEDIR $FONTCONFIG_FILE out
-diff --git a/test/test-crbug1004254.c b/test/test-crbug1004254.c
-new file mode 100644
-index 0000000..1cc6fc7
---- /dev/null
-+++ b/test/test-crbug1004254.c
-@@ -0,0 +1,116 @@
-+/*
-+ * fontconfig/test/test-pthread.c
-+ *
-+ * Copyright © 2000 Keith Packard
-+ * Copyright © 2013 Raimund Steger
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the author(s) not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission. The authors make no
-+ * representations about the suitability of this software for any purpose. It
-+ * is provided "as is" without express or implied warranty.
-+ *
-+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ */
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <pthread.h>
-+#include <fontconfig/fontconfig.h>
-+
-+struct thr_arg_s
-+{
-+ int thr_num;
-+};
-+
-+static void
-+run_query (void)
-+{
-+ FcPattern *pat = FcPatternCreate (), *match;
-+ FcResult result;
-+
-+ FcPatternAddString (pat, FC_FAMILY, "sans-serif");
-+ FcPatternAddBool (pat, FC_SCALABLE, FcTrue);
-+ FcConfigSubstitute (NULL, pat, FcMatchPattern);
-+ FcDefaultSubstitute (pat);
-+ match = FcFontMatch (NULL, pat, &result);
-+ if (result != FcResultMatch || !match)
-+ {
-+ fprintf (stderr, "ERROR: No matches found\n");
-+ }
-+ if (match)
-+ FcPatternDestroy (match);
-+ FcPatternDestroy (pat);
-+}
-+
-+static void
-+run_reinit (void)
-+{
-+ if (!FcInitReinitialize ())
-+ {
-+ fprintf (stderr, "ERROR: Reinitializing failed\n");
-+ }
-+}
-+
-+#define NTEST 3000
-+
-+static void *
-+run_test_in_thread (void *arg)
-+{
-+ struct thr_arg_s *thr_arg = (struct thr_arg_s *) arg;
-+ int thread_num = thr_arg->thr_num;
-+
-+ fprintf (stderr, "Worker %d: started (round %d)\n", thread_num % 2, thread_num / 2);
-+ if ((thread_num % 2) == 0)
-+ {
-+ run_query ();
-+ }
-+ else
-+ {
-+ run_reinit ();
-+ }
-+ fprintf (stderr, "Worker %d: done (round %d)\n", thread_num % 2, thread_num / 2);
-+
-+ return NULL;
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ pthread_t threads[NTEST];
-+ struct thr_arg_s thr_arg[NTEST];
-+ int i, j;
-+
-+ for (i = 0; i < NTEST; i++)
-+ {
-+ int result;
-+
-+ fprintf (stderr, "Thread %d (worker %d round %d): creating\n", i, i % 2, i / 2);
-+ thr_arg[i].thr_num = i;
-+ result = pthread_create (&threads[i], NULL, run_test_in_thread,
-+ (void *) &thr_arg[i]);
-+ if (result != 0)
-+ {
-+ fprintf (stderr, "Cannot create thread %d\n", i);
-+ break;
-+ }
-+ }
-+ for (j = 0; j < i; j++)
-+ {
-+ pthread_join(threads[j], NULL);
-+ fprintf (stderr, "Joined thread %d\n", j);
-+ }
-+ FcFini ();
-+
-+ return 0;
-+}
---
-2.24.1
-
-From aa8c8cfa9fb2563482336249e3f56459099fcf6e Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Sat, 2 Nov 2019 00:14:48 +0900
-Subject: [PATCH 4/9] Fix potential race condition in FcConfigSetCurrent and
- FcConfigReference
-
----
- src/fccache.c | 2 +
- src/fccfg.c | 105 ++++++++++++++++++++++++++++++++++++++++++--------
- 2 files changed, 90 insertions(+), 17 deletions(-)
-
-diff --git a/src/fccache.c b/src/fccache.c
-index d8f1dab..4744a84 100644
---- a/src/fccache.c
-+++ b/src/fccache.c
-@@ -1085,6 +1085,8 @@ FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat)
- if (fd < 0)
- return NULL;
- config = FcConfigReference (NULL);
-+ if (!config)
-+ return NULL;
- cache = FcDirCacheMapFd (config, fd, file_stat, NULL);
- FcConfigDestroy (config);
- close (fd);
-diff --git a/src/fccfg.c b/src/fccfg.c
-index 11dc876..30f37af 100644
---- a/src/fccfg.c
-+++ b/src/fccfg.c
-@@ -33,6 +33,49 @@
- #endif
-
- static FcConfig *_fcConfig; /* MT-safe */
-+static FcMutex *_lock;
-+
-+static void
-+lock_config (void)
-+{
-+ FcMutex *lock;
-+retry:
-+ lock = fc_atomic_ptr_get (&_lock);
-+ if (!lock)
-+ {
-+ lock = (FcMutex *) malloc (sizeof (FcMutex));
-+ FcMutexInit (lock);
-+ if (!fc_atomic_ptr_cmpexch (&_lock, NULL, lock))
-+ {
-+ FcMutexFinish (lock);
-+ goto retry;
-+ }
-+ FcMutexLock (lock);
-+ /* Initialize random state */
-+ FcRandom ();
-+ return;
-+ }
-+ FcMutexLock (lock);
-+}
-+
-+static void
-+unlock_config (void)
-+{
-+ FcMutexUnlock (_lock);
-+}
-+
-+static void
-+free_lock (void)
-+{
-+ FcMutex *lock;
-+
-+ lock = fc_atomic_ptr_get (&_lock);
-+ if (lock && fc_atomic_ptr_cmpexch (&_lock, lock, NULL))
-+ {
-+ FcMutexFinish (lock);
-+ free (lock);
-+ }
-+}
-
- static FcConfig *
- FcConfigEnsure (void)
-@@ -44,8 +87,9 @@ retry:
- {
- config = FcInitLoadConfigAndFonts ();
-
-- if (!fc_atomic_ptr_cmpexch (&_fcConfig, NULL, config)) {
-- FcConfigDestroy (config);
-+ if (!config || !fc_atomic_ptr_cmpexch (&_fcConfig, NULL, config)) {
-+ if (config)
-+ FcConfigDestroy (config);
- goto retry;
- }
- }
-@@ -76,6 +120,7 @@ FcConfigFini (void)
- FcConfig *cfg = fc_atomic_ptr_get (&_fcConfig);
- if (cfg && fc_atomic_ptr_cmpexch (&_fcConfig, cfg, NULL))
- FcConfigDestroy (cfg);
-+ free_lock ();
- }
-
- static FcChar8 *
-@@ -297,27 +342,31 @@ FcConfigReference (FcConfig *config)
- {
- if (!config)
- {
-- /* Do not use FcConfigGetCurrent () for the purpose of obtaining current FcConfig here.
-- * because the reference counter must be increased before setting it to _fcConfig.
-+ /* lock during obtaining the value from _fcConfig and count up refcount there,
-+ * there are the race between them.
- */
-+ lock_config ();
- retry:
- config = fc_atomic_ptr_get (&_fcConfig);
- if (!config)
- {
-- config = FcConfigCreate ();
-- FcRefInc (&config->ref);
-+ unlock_config ();
-
-- config = FcInitLoadOwnConfigAndFonts (config);
-+ config = FcInitLoadConfigAndFonts ();
-+ if (!config)
-+ goto retry;
-+ lock_config ();
- if (!fc_atomic_ptr_cmpexch (&_fcConfig, NULL, config))
- {
-- FcConfigDestroy (config); /* To decrease the refcount for the above one. */
-- FcConfigDestroy (config); /* To destroy it actualy */
-+ FcConfigDestroy (config);
- goto retry;
- }
-- return config;
- }
-+ FcRefInc (&config->ref);
-+ unlock_config ();
- }
-- FcRefInc (&config->ref);
-+ else
-+ FcRefInc (&config->ref);
-
- return config;
- }
-@@ -529,20 +578,29 @@ FcConfigSetCurrent (FcConfig *config)
- {
- FcConfig *cfg;
-
-+ if (config)
-+ {
-+ if (!config->fonts[FcSetSystem])
-+ if (!FcConfigBuildFonts (config))
-+ return FcFalse;
-+ FcRefInc (&config->ref);
-+ }
-+
-+ lock_config ();
- retry:
- cfg = fc_atomic_ptr_get (&_fcConfig);
-
- if (config == cfg)
-+ {
-+ unlock_config ();
-+ if (config)
-+ FcConfigDestroy (config);
- return FcTrue;
--
-- if (config && !config->fonts[FcSetSystem])
-- if (!FcConfigBuildFonts (config))
-- return FcFalse;
-+ }
-
- if (!fc_atomic_ptr_cmpexch (&_fcConfig, cfg, config))
- goto retry;
--
-- FcConfigReference (config);
-+ unlock_config ();
- if (cfg)
- FcConfigDestroy (cfg);
-
-@@ -2649,7 +2707,9 @@ FcConfigSetSysRoot (FcConfig *config,
- {
- FcChar8 *s = NULL;
- FcBool init = FcFalse;
-+ int nretry = 3;
-
-+retry:
- if (!config)
- {
- /* We can't use FcConfigGetCurrent() here to ensure
-@@ -2681,6 +2741,17 @@ FcConfigSetSysRoot (FcConfig *config,
- if (init)
- {
- config = FcInitLoadOwnConfigAndFonts (config);
-+ if (!config)
-+ {
-+ /* Something failed. this is usually unlikely. so retrying */
-+ init = FcFalse;
-+ if (--nretry == 0)
-+ {
-+ fprintf (stderr, "Fontconfig warning: Unable to initialize config and retry limit exceeded. sysroot functionality may not work as expected.\n");
-+ return;
-+ }
-+ goto retry;
-+ }
- FcConfigSetCurrent (config);
- /* FcConfigSetCurrent() increases the refcount.
- * decrease it here to avoid the memory leak.
---
-2.24.1
-
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-read-latest-cache.patch b/source/x/fontconfig/fedora-patches/fontconfig-read-latest-cache.patch
deleted file mode 100644
index 8b70dc0a8..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-read-latest-cache.patch
+++ /dev/null
@@ -1,228 +0,0 @@
-From c9862b6ea7c3234b29f6500c7d07359847e55ed7 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Mon, 28 Oct 2019 17:11:38 +0900
-Subject: [PATCH 1/9] Read latest cache in paths
-
-Right now fontconfig uses a cache found first in a path and
-cachedirs are the order of the system-wide path and then the user path.
-this is due to avoid writing caches into the user path when running as root.
-
-However, changing caches by certain config only, e.g. using <match target="scan">
-may not take effect by this behavior, because it may be stored into the user path.
-
-Thus, needing to find the latest cache out from paths.
-
-Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/182
----
- src/fccache.c | 36 +++++++++++++++++++++-----
- test/run-test.sh | 66 ++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 96 insertions(+), 6 deletions(-)
-
-diff --git a/src/fccache.c b/src/fccache.c
-index 0976201..4acde22 100644
---- a/src/fccache.c
-+++ b/src/fccache.c
-@@ -338,7 +338,7 @@ FcDirCacheOpenFile (const FcChar8 *cache_file, struct stat *file_stat)
- static FcBool
- FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- FcBool (*callback) (FcConfig *config, int fd, struct stat *fd_stat,
-- struct stat *dir_stat, void *closure),
-+ struct stat *dir_stat, struct timeval *cache_mtime, void *closure),
- void *closure, FcChar8 **cache_file_ret)
- {
- int fd = -1;
-@@ -348,6 +348,7 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- struct stat file_stat, dir_stat;
- FcBool ret = FcFalse;
- const FcChar8 *sysroot = FcConfigGetSysRoot (config);
-+ struct timeval latest_mtime = (struct timeval){ 0 };
-
- if (sysroot)
- d = FcStrBuildFilename (sysroot, dir, NULL);
-@@ -383,15 +384,18 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- #endif
- fd = FcDirCacheOpenFile (cache_hashed, &file_stat);
- if (fd >= 0) {
-- ret = (*callback) (config, fd, &file_stat, &dir_stat, closure);
-+ ret = (*callback) (config, fd, &file_stat, &dir_stat, &latest_mtime, closure);
- close (fd);
- if (ret)
- {
- if (cache_file_ret)
-+ {
-+ if (*cache_file_ret)
-+ FcStrFree (*cache_file_ret);
- *cache_file_ret = cache_hashed;
-+ }
- else
- FcStrFree (cache_hashed);
-- break;
- }
- }
- #ifndef _WIN32
-@@ -414,7 +418,8 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- }
- }
- #endif
-- FcStrFree (cache_hashed);
-+ else
-+ FcStrFree (cache_hashed);
- }
- FcStrListDone (list);
-
-@@ -998,12 +1003,31 @@ FcDirCacheUnload (FcCache *cache)
- }
-
- static FcBool
--FcDirCacheMapHelper (FcConfig *config, int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure)
-+FcDirCacheMapHelper (FcConfig *config, int fd, struct stat *fd_stat, struct stat *dir_stat, struct timeval *latest_cache_mtime, void *closure)
- {
- FcCache *cache = FcDirCacheMapFd (config, fd, fd_stat, dir_stat);
-+ struct timeval cache_mtime;
-
- if (!cache)
- return FcFalse;
-+ cache_mtime.tv_sec = fd_stat->st_mtime;
-+#ifdef HAVE_STRUCT_STAT_ST_MTIM
-+ cache_mtime.tv_usec = fd_stat->st_mtim.tv_nsec / 1000;
-+#else
-+ cache_mtime.tv_usec = 0;
-+#endif
-+ if (timercmp (latest_cache_mtime, &cache_mtime, <))
-+ {
-+ if (*((FcCache **) closure))
-+ FcDirCacheUnload (*((FcCache **) closure));
-+ }
-+ else
-+ {
-+ FcDirCacheUnload (cache);
-+ return FcFalse;
-+ }
-+ latest_cache_mtime->tv_sec = cache_mtime.tv_sec;
-+ latest_cache_mtime->tv_usec = cache_mtime.tv_usec;
- *((FcCache **) closure) = cache;
- return FcTrue;
- }
-@@ -1093,7 +1117,7 @@ FcDirChecksumNano (struct stat *statb)
- * the magic number and the size field
- */
- static FcBool
--FcDirCacheValidateHelper (FcConfig *config, int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure FC_UNUSED)
-+FcDirCacheValidateHelper (FcConfig *config, int fd, struct stat *fd_stat, struct stat *dir_stat, struct timeval *latest_cache_mtime, void *closure FC_UNUSED)
- {
- FcBool ret = FcTrue;
- FcCache c;
-diff --git a/test/run-test.sh b/test/run-test.sh
-index 4e5968b..8ad09e3 100644
---- a/test/run-test.sh
-+++ b/test/run-test.sh
-@@ -340,6 +340,72 @@ fi
-
- rm -rf $MyPWD/sysroot
-
-+dotest "read newer caches when multiple places are allowed to store"
-+prep
-+cp $FONT1 $FONT2 $FONTDIR
-+if [ -n ${SOURCE_DATE_EPOCH:-} ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
-+ touch -m -t "`date -d \"@${SOURCE_DATE_EPOCH}\" +%y%m%d%H%M.%S`" $FONTDIR
-+fi
-+MYCACHEBASEDIR=`mktemp -d /tmp/fontconfig.XXXXXXXX`
-+MYCACHEDIR=$MYCACHEBASEDIR/cache.dir
-+MYOWNCACHEDIR=$MYCACHEBASEDIR/owncache.dir
-+MYCONFIG=`mktemp /tmp/fontconfig.XXXXXXXX`
-+
-+mkdir -p $MYCACHEDIR
-+mkdir -p $MYOWNCACHEDIR
-+
-+sed "s!@FONTDIR@!$FONTDIR!
-+s!@REMAPDIR@!!
-+s!@CACHEDIR@!$MYCACHEDIR!" < $TESTDIR/fonts.conf.in > my-fonts.conf
-+
-+FONTCONFIG_FILE=$MyPWD/my-fonts.conf $FCCACHE $FONTDIR
-+
-+sleep 1
-+cat<<EOF>$MYCONFIG
-+<fontconfig>
-+ <match target="scan">
-+ <test name="file"><string>$FONTDIR/4x6.pcf</string></test>
-+ <edit name="pixelsize"><int>8</int></edit>
-+ </match>
-+</fontconfig>
-+EOF
-+sed "s!@FONTDIR@!$FONTDIR!
-+s!@REMAPDIR@!<include ignore_missing=\"yes\">$MYCONFIG</include>!
-+s!@CACHEDIR@!$MYOWNCACHEDIR!" < $TESTDIR/fonts.conf.in > my-fonts.conf
-+
-+if [ -n ${SOURCE_DATE_EPOCH:-} ]; then
-+ old_epoch=${SOURCE_DATE_EPOCH}
-+ SOURCE_DATE_EPOCH=`expr $SOURCE_DATE_EPOCH + 1`
-+fi
-+FONTCONFIG_FILE=$MyPWD/my-fonts.conf $FCCACHE -f $FONTDIR
-+if [ -n ${SOURCE_DATE_EPOCH:-} ]; then
-+ SOURCE_DATE_EPOCH=${old_epoch}
-+fi
-+
-+sed "s!@FONTDIR@!$FONTDIR!
-+s!@REMAPDIR@!<include ignore_missing=\"yes\">$MYCONFIG</include>!
-+s!@CACHEDIR@!$MYCACHEDIR</cachedir><cachedir>$MYOWNCACHEDIR!" < $TESTDIR/fonts.conf.in > my-fonts.conf
-+
-+FONTCONFIG_FILE=$MyPWD/my-fonts.conf $FCLIST - family pixelsize | sort > my-out
-+echo "=" >> my-out
-+FONTCONFIG_FILE=$MyPWD/my-fonts.conf $FCLIST - family pixelsize | sort >> my-out
-+echo "=" >> my-out
-+FONTCONFIG_FILE=$MyPWD/my-fonts.conf $FCLIST - family pixelsize | sort >> my-out
-+tr -d '\015' <my-out >my-out.tmp; mv my-out.tmp my-out
-+sed -e 's/pixelsize=6/pixelsize=8/g' $BUILDTESTDIR/$EXPECTED > my-out.expected
-+
-+if cmp my-out my-out.expected > /dev/null ; then : ; else
-+ echo "*** Test failed: $TEST"
-+ echo "*** output is in 'my-out', expected output in 'my-out.expected'"
-+ echo "Actual Result"
-+ cat my-out
-+ echo "Expected Result"
-+ cat my-out.expected
-+ exit 1
-+fi
-+
-+rm -rf $MYCACHEBASEDIR $MYCONFIG my-fonts.conf my-out my-out.expected
-+
- fi # if [ "x$EXEEXT" = "x" ]
-
- rm -rf $FONTDIR $CACHEFILE $CACHEDIR $BASEDIR $FONTCONFIG_FILE out
---
-2.24.1
-
-From a45fc8a33256d9d3ea0ea7947f33c8e5e3cc7238 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Thu, 31 Oct 2019 16:15:25 +0900
-Subject: [PATCH 2/9] Fix a memory leak caused by the previous commit
-
----
- src/fccache.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/fccache.c b/src/fccache.c
-index 4acde22..c565560 100644
---- a/src/fccache.c
-+++ b/src/fccache.c
-@@ -397,6 +397,8 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- else
- FcStrFree (cache_hashed);
- }
-+ else
-+ FcStrFree (cache_hashed);
- }
- #ifndef _WIN32
- else if (!retried)
-@@ -416,6 +418,8 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- break;
- goto retry;
- }
-+ else
-+ FcStrFree (cache_hashed);
- }
- #endif
- else
---
-2.24.1
-
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-required-freetype-version.patch b/source/x/fontconfig/fedora-patches/fontconfig-required-freetype-version.patch
deleted file mode 100644
index 6f7aae3e0..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-required-freetype-version.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -pruN fontconfig-2.12.93.orig/configure.ac fontconfig-2.12.93/configure.ac
---- fontconfig-2.12.93.orig/configure.ac 2018-02-15 22:01:54.000000000 +0900
-+++ fontconfig-2.12.93/configure.ac 2018-02-15 22:33:42.353941393 +0900
-@@ -308,8 +308,8 @@ AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,
- # Checks for FreeType
- #
- dnl See http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/VERSIONS.TXT for versioning in freetype
--PKG_CHECK_MODULES(FREETYPE, freetype2 >= 21.0.15)
--PKGCONFIG_REQUIRES="$PKGCONFIG_REQUIRES freetype2 >= 21.0.15"
-+PKG_CHECK_MODULES(FREETYPE, freetype2 >= 20.0.14)
-+PKGCONFIG_REQUIRES="$PKGCONFIG_REQUIRES freetype2 >= 20.0.14"
-
- AC_SUBST(FREETYPE_LIBS)
- AC_SUBST(FREETYPE_CFLAGS)
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-score-hint-on-match.patch b/source/x/fontconfig/fedora-patches/fontconfig-score-hint-on-match.patch
deleted file mode 100644
index 404d7be84..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-score-hint-on-match.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From cb1036a7c7f1cb79fa799b1db368c86b018ec368 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Fri, 9 Aug 2019 12:22:08 +0000
-Subject: [PATCH] Affect FC_FONT_HAS_HINT property to score on matcher
-
----
- src/fcmatch.c | 1 +
- src/fcobjs.h | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/fcmatch.c b/src/fcmatch.c
-index c3d2b8ad..78bcf7b4 100644
---- a/src/fcmatch.c
-+++ b/src/fcmatch.c
-@@ -342,6 +342,7 @@ typedef enum _FcMatcherPriority {
- PRI1(SLANT),
- PRI1(WEIGHT),
- PRI1(WIDTH),
-+ PRI1(FONT_HAS_HINT),
- PRI1(DECORATIVE),
- PRI1(ANTIALIAS),
- PRI1(RASTERIZER),
-diff --git a/src/fcobjs.h b/src/fcobjs.h
-index 7bb97d09..dd4a6ec3 100644
---- a/src/fcobjs.h
-+++ b/src/fcobjs.h
-@@ -72,5 +72,5 @@ FC_OBJECT (COLOR, FcTypeBool, FcCompareBool)
- FC_OBJECT (SYMBOL, FcTypeBool, FcCompareBool)
- FC_OBJECT (FONT_VARIATIONS, FcTypeString, NULL)
- FC_OBJECT (VARIABLE, FcTypeBool, FcCompareBool)
--FC_OBJECT (FONT_HAS_HINT, FcTypeBool, NULL)
-+FC_OBJECT (FONT_HAS_HINT, FcTypeBool, FcCompareBool)
- /* ^-------------- Add new objects here. */
---
-2.22.0
-
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch b/source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch
deleted file mode 100644
index 9505f9724..000000000
--- a/source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch
+++ /dev/null
@@ -1,285 +0,0 @@
-From cd51cb241aad7b362b793200ca7d42595c14f52b Mon Sep 17 00:00:00 2001
-From: Akira TAGOH <akira@tagoh.org>
-Date: Mon, 21 Oct 2019 16:17:42 +0900
-Subject: [PATCH] Take effect sysroot functionality to the default config file
-
-When loading the default config file with FONTCONFIG_SYSROOT,
-it fails if no /etc/fonts/fonts.conf is available, even if it is
-there where is based on sysroot.
-
-To address this, FcConfig is required to determine the sysroot.
-therefore, this change makes FcConfigFilename() deprecated,
-use FcConfigGetFilename() instead.
-
-Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/181
----
- doc/fcconfig.fncs | 11 +++++++
- fontconfig/fontconfig.h | 4 +++
- src/fccfg.c | 67 ++++++++++++++++++++++++++++-------------
- src/fcxml.c | 24 ++++++++++++---
- 4 files changed, 81 insertions(+), 25 deletions(-)
-
-diff --git a/doc/fcconfig.fncs b/doc/fcconfig.fncs
-index 5f1ef43..82769d5 100644
---- a/doc/fcconfig.fncs
-+++ b/doc/fcconfig.fncs
-@@ -344,6 +344,15 @@ to be up to date, and used.
- @TYPE1@ const FcChar8 * @ARG1@ name
- @PURPOSE@ Find a config file
- @DESC@
-+This function is deprecated and is replaced by <function>FcConfigGetFilename</function>.
-+@@
-+
-+@RET@ FcChar8 *
-+@FUNC@ FcConfigGetFilename
-+@TYPE1@ FcConfig * @ARG1@ config
-+@TYPE2@ const FcChar8 * @ARG2@ name
-+@PURPOSE@ Find a config file
-+@DESC@
- Given the specified external entity name, return the associated filename.
- This provides applications a way to convert various configuration file
- references into filename form.
-@@ -355,6 +364,8 @@ refers to a file in the current users home directory. Otherwise if the name
- doesn't start with '/', it refers to a file in the default configuration
- directory; the built-in default directory can be overridden with the
- FONTCONFIG_PATH environment variable.
-+ </para><para>
-+The result of this function is affected by the FONTCONFIG_SYSROOT environment variable or equivalent functionality.
- @@
-
- @RET@ FcBool
-diff --git a/fontconfig/fontconfig.h b/fontconfig/fontconfig.h
-index 9586616..2f0e8cf 100644
---- a/fontconfig/fontconfig.h
-+++ b/fontconfig/fontconfig.h
-@@ -393,6 +393,10 @@ FcConfigHome (void);
- FcPublic FcBool
- FcConfigEnableHome (FcBool enable);
-
-+FcPublic FcChar8 *
-+FcConfigGetFilename (FcConfig *config,
-+ const FcChar8 *url);
-+
- FcPublic FcChar8 *
- FcConfigFilename (const FcChar8 *url);
-
-diff --git a/src/fccfg.c b/src/fccfg.c
-index e81eeba..21ccd25 100644
---- a/src/fccfg.c
-+++ b/src/fccfg.c
-@@ -686,7 +686,7 @@ FcConfigAddConfigFile (FcConfig *config,
- const FcChar8 *f)
- {
- FcBool ret;
-- FcChar8 *file = FcConfigFilename (f);
-+ FcChar8 *file = FcConfigGetFilename (config, f);
-
- if (!file)
- return FcFalse;
-@@ -2284,10 +2284,19 @@ FcConfigEnableHome (FcBool enable)
- }
-
- FcChar8 *
--FcConfigFilename (const FcChar8 *url)
-+FcConfigGetFilename (FcConfig *config,
-+ const FcChar8 *url)
- {
- FcChar8 *file, *dir, **path, **p;
-+ const FcChar8 *sysroot;
-
-+ if (!config)
-+ {
-+ config = FcConfigGetCurrent ();
-+ if (!config)
-+ return NULL;
-+ }
-+ sysroot = FcConfigGetSysRoot (config);
- if (!url || !*url)
- {
- url = (FcChar8 *) getenv ("FONTCONFIG_FILE");
-@@ -2297,13 +2306,23 @@ FcConfigFilename (const FcChar8 *url)
- file = 0;
-
- if (FcStrIsAbsoluteFilename(url))
-- return FcConfigFileExists (0, url);
-+ return FcConfigFileExists (sysroot, url);
-
- if (*url == '~')
- {
- dir = FcConfigHome ();
- if (dir)
-- file = FcConfigFileExists (dir, url + 1);
-+ {
-+ FcChar8 *s;
-+
-+ if (sysroot)
-+ s = FcStrBuildFilename (sysroot, dir, NULL);
-+ else
-+ s = dir;
-+ file = FcConfigFileExists (s, url + 1);
-+ if (sysroot)
-+ FcStrFree (s);
-+ }
- else
- file = 0;
- }
-@@ -2314,7 +2333,15 @@ FcConfigFilename (const FcChar8 *url)
- return NULL;
- for (p = path; *p; p++)
- {
-- file = FcConfigFileExists (*p, url);
-+ FcChar8 *s;
-+
-+ if (sysroot)
-+ s = FcStrBuildFilename (sysroot, *p, NULL);
-+ else
-+ s = *p;
-+ file = FcConfigFileExists (s, url);
-+ if (sysroot)
-+ FcStrFree (s);
- if (file)
- break;
- }
-@@ -2323,33 +2350,31 @@ FcConfigFilename (const FcChar8 *url)
- return file;
- }
-
-+FcChar8 *
-+FcConfigFilename (const FcChar8 *url)
-+{
-+ return FcConfigGetFilename (NULL, url);
-+}
-+
- FcChar8 *
- FcConfigRealFilename (FcConfig *config,
- const FcChar8 *url)
- {
-- const FcChar8 *sysroot = FcConfigGetSysRoot (config);
-- FcChar8 *n = FcConfigFilename (url);
-- FcChar8 *nn = NULL;
-+ FcChar8 *n = FcConfigGetFilename (config, url);
-
- if (n)
- {
- FcChar8 buf[FC_PATH_MAX];
- ssize_t len;
-
-- if (sysroot)
-- nn = FcStrBuildFilename (sysroot, n, NULL);
-- else
-- nn = FcStrdup (n);
-- FcStrFree (n);
--
-- if ((len = FcReadLink (nn, buf, sizeof (buf) - 1)) != -1)
-+ if ((len = FcReadLink (n, buf, sizeof (buf) - 1)) != -1)
- {
- buf[len] = 0;
-
- if (!FcStrIsAbsoluteFilename (buf))
- {
-- FcChar8 *dirname = FcStrDirname (nn);
-- FcStrFree (nn);
-+ FcChar8 *dirname = FcStrDirname (n);
-+ FcStrFree (n);
- if (!dirname)
- return NULL;
-
-@@ -2358,18 +2383,18 @@ FcConfigRealFilename (FcConfig *config,
- if (!path)
- return NULL;
-
-- nn = FcStrCanonFilename (path);
-+ n = FcStrCanonFilename (path);
- FcStrFree (path);
- }
- else
- {
-- FcStrFree (nn);
-- nn = FcStrdup (buf);
-+ FcStrFree (n);
-+ n = FcStrdup (buf);
- }
- }
- }
-
-- return nn;
-+ return n;
- }
-
- /*
-diff --git a/src/fcxml.c b/src/fcxml.c
-index d9a67f6..a366644 100644
---- a/src/fcxml.c
-+++ b/src/fcxml.c
-@@ -2541,7 +2541,7 @@ FcParseInclude (FcConfigParse *parse)
- FcChar8 *filename;
- static FcBool warn_conf = FcFalse, warn_confd = FcFalse;
-
-- filename = FcConfigFilename(s);
-+ filename = FcConfigGetFilename(parse->config, s);
- if (deprecated == FcTrue &&
- filename != NULL &&
- userdir != NULL &&
-@@ -3532,7 +3532,9 @@ _FcConfigParse (FcConfig *config,
- FcStrBuf sbuf;
- char buf[BUFSIZ];
- FcBool ret = FcFalse, complain_again = complain;
-+ FcStrBuf reason;
-
-+ FcStrBufInit (&reason, NULL, 0);
- #ifdef _WIN32
- if (!pGetSystemWindowsDirectory)
- {
-@@ -3549,12 +3551,20 @@ _FcConfigParse (FcConfig *config,
- }
- #endif
-
-- filename = FcConfigFilename (name);
-+ filename = FcConfigGetFilename (config, name);
- if (!filename)
-+ {
-+ FcStrBufString (&reason, (FcChar8 *)"No such file: ");
-+ FcStrBufString (&reason, name ? name : (FcChar8 *)"(null)");
- goto bail0;
-+ }
- realfilename = FcConfigRealFilename (config, name);
- if (!realfilename)
-+ {
-+ FcStrBufString (&reason, (FcChar8 *)"No such realfile: ");
-+ FcStrBufString (&reason, name ? name : (FcChar8 *)"(null)");
- goto bail0;
-+ }
- if (FcStrSetMember (config->availConfigFiles, realfilename))
- {
- FcStrFree (filename);
-@@ -3582,7 +3592,11 @@ _FcConfigParse (FcConfig *config,
-
- fd = FcOpen ((char *) realfilename, O_RDONLY);
- if (fd == -1)
-+ {
-+ FcStrBufString (&reason, (FcChar8 *)"Unable to open ");
-+ FcStrBufString (&reason, realfilename);
- goto bail1;
-+ }
-
- do {
- len = read (fd, buf, BUFSIZ);
-@@ -3623,11 +3637,13 @@ bail0:
- if (!ret && complain_again)
- {
- if (name)
-- FcConfigMessage (0, FcSevereError, "Cannot %s config file \"%s\"", load ? "load" : "scan", name);
-+ FcConfigMessage (0, FcSevereError, "Cannot %s config file \"%s\": %s", load ? "load" : "scan", name, FcStrBufDoneStatic (&reason));
- else
-- FcConfigMessage (0, FcSevereError, "Cannot %s default config file", load ? "load" : "scan");
-+ FcConfigMessage (0, FcSevereError, "Cannot %s default config file: %s", load ? "load" : "scan", FcStrBufDoneStatic (&reason));
-+ FcStrBufDestroy (&reason);
- return FcFalse;
- }
-+ FcStrBufDestroy (&reason);
- return ret;
- }
-
---
-2.24.1
-
diff --git a/source/x/fontconfig/fontconfig.SlackBuild b/source/x/fontconfig/fontconfig.SlackBuild
index 45382460b..4948ed023 100755
--- a/source/x/fontconfig/fontconfig.SlackBuild
+++ b/source/x/fontconfig/fontconfig.SlackBuild
@@ -26,6 +26,9 @@ PKGNAM=fontconfig
VERSION=${VERSION:-$(echo fontconfig-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
BUILD=${BUILD:-1}
+# Set this to liberation, dejavu, or noto:
+PREFERRED_FONT=${PREFERRED_FONT:-liberation}
+
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
@@ -77,11 +80,14 @@ find . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \+
-# Prefer DejaVu fonts in 60-latin.conf:
-#zcat $CWD/fontconfig.dejavu.diff.gz | patch -p1 --verbose || exit 1
-
-# Prefer Liberation fonts in 60-latin.conf (these work better with hinting):
-zcat $CWD/fontconfig.liberation.diff.gz | patch -p1 --verbose || exit 1
+# Set preferred system font:
+if [ ! -r $CWD/fontconfig.$PREFERRED_FONT.diff.gz ]; then
+ echo "ERROR: $CWD/fontconfig.$PREFERRED_FONT.diff.gz patch not found."
+ exit 1
+else
+ echo "Using preferred font patch: $CWD/fontconfig.$PREFERRED_FONT.diff.gz"
+ zcat $CWD/fontconfig.$PREFERRED_FONT.diff.gz | patch -p1 --verbose || exit 1
+fi
# Hardcode the default font search path rather than having fontconfig figure
# it out (and possibly follow symlinks, or index ugly bitmapped fonts):
@@ -89,18 +95,6 @@ zcat $CWD/fontconfig.font.dir.list.diff.gz | patch -p1 --verbose --backup --suff
# Add some patches from the Fedora SRPM:
zcat $CWD/fedora-patches/fontconfig-sleep-less.patch.gz | patch -p1 --verbose || exit 1
-#zcat $CWD/fedora-patches/fontconfig-required-freetype-version.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-score-hint-on-match.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-fix-1744377.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-drop-lang-from-pkgkit-format.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-sysroot.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-read-latest-cache.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-mt.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-fix-test.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-fix-assertion.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-fix-dtd.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-fix-dtd-id.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/fedora-patches/fontconfig-0-timestamp-dir-on-sb.patch.gz | patch -p1 --verbose || exit 1
autoreconf -vif
diff --git a/source/x/fontconfig/fontconfig.dejavu.diff b/source/x/fontconfig/fontconfig.dejavu.diff
index a5d4d7bde..10c164759 100644
--- a/source/x/fontconfig/fontconfig.dejavu.diff
+++ b/source/x/fontconfig/fontconfig.dejavu.diff
@@ -1,34 +1,31 @@
---- ./conf.d/60-latin.conf.orig 2016-07-10 21:41:05.000000000 -0500
-+++ ./conf.d/60-latin.conf 2017-04-30 14:35:21.579089043 -0500
-@@ -4,8 +4,9 @@
- <alias>
+--- ./conf.d/60-latin.conf.orig 2020-11-27 19:56:42.000000000 -0600
++++ ./conf.d/60-latin.conf 2020-11-29 14:41:20.291033785 -0600
+@@ -6,6 +6,9 @@
<family>serif</family>
<prefer>
-- <family>Bitstream Vera Serif</family>
<family>DejaVu Serif</family>
+ <family>Liberation Serif</family>
++ <family>Noto Serif</family>
+ <family>Bitstream Vera Serif</family>
<family>Times New Roman</family>
<family>Thorndale AMT</family>
<family>Luxi Serif</family>
-@@ -17,8 +18,9 @@
- <alias>
+@@ -18,6 +21,9 @@
<family>sans-serif</family>
<prefer>
-- <family>Bitstream Vera Sans</family>
<family>DejaVu Sans</family>
+ <family>Liberation Sans</family>
++ <family>Noto Sans</family>
+ <family>Bitstream Vera Sans</family>
<family>Verdana</family>
<family>Arial</family>
<family>Albany AMT</family>
-@@ -34,8 +36,9 @@
- <alias>
+@@ -34,6 +40,9 @@
<family>monospace</family>
<prefer>
-- <family>Bitstream Vera Sans Mono</family>
<family>DejaVu Sans Mono</family>
+ <family>Liberation Mono</family>
++ <family>Noto Sans Mono</family>
+ <family>Bitstream Vera Sans Mono</family>
<family>Inconsolata</family>
<family>Andale Mono</family>
diff --git a/source/x/fontconfig/fontconfig.font.dir.list.diff b/source/x/fontconfig/fontconfig.font.dir.list.diff
index 63be22f51..143d2db5b 100644
--- a/source/x/fontconfig/fontconfig.font.dir.list.diff
+++ b/source/x/fontconfig/fontconfig.font.dir.list.diff
@@ -1,11 +1,11 @@
---- ./fonts.conf.in.orig 2012-07-23 21:01:32.000000000 -0500
-+++ ./fonts.conf.in 2013-02-28 22:32:44.758585955 -0600
-@@ -22,13 +22,29 @@
+--- ./fonts.conf.in.orig 2020-11-29 13:41:05.824118087 -0600
++++ ./fonts.conf.in 2020-11-29 13:44:20.417122440 -0600
+@@ -23,12 +23,27 @@
-->
<!-- Font directory list -->
-
-- <dir>@FC_DEFAULT_FONTS@</dir>
+- @FC_DEFAULT_FONTS@
- @FC_FONTPATH@
+ <dir>/usr/share/fonts/OTF</dir>
+ <dir>/usr/share/fonts/TTF</dir>
@@ -16,20 +16,18 @@
<dir prefix="xdg">fonts</dir>
<!-- the following element will be removed in the future -->
<dir>~/.fonts</dir>
-
+<!-- Commented out font directories:
-+ These are not indexed by default, as fontconfig then seems
-+ to prefer bitmapped fonts in some cases...
-+ <dir>/usr/share/fonts/100dpi</dir>
-+ <dir>/usr/share/fonts/75dpi</dir>
-+ The top-level font directory should also not be indexed, as that
-+ will include the directories of bitmapped fonts:
-+ <dir>@FC_DEFAULT_FONTS@</dir>
-+ The empty line below is produced by the FC_FONTPATH macro.
-+ Moving it here so it doesn't become a problem in the future:
-+ @FC_FONTPATH@
++ These are not indexed by default, as fontconfig then seems
++ to prefer bitmapped fonts in some cases...
++ <dir>/usr/share/fonts/100dpi</dir>
++ <dir>/usr/share/fonts/75dpi</dir>
++ The top-level font directory should also not be indexed, as that
++ will include the directories of bitmapped fonts:
++ <dir>@FC_DEFAULT_FONTS@</dir>
++ The empty line below is produced by the FC_FONTPATH macro.
++ Moving it here so it doesn't become a problem in the future:
++ @FC_FONTPATH@
+-->
-+
+
<!--
Accept deprecated 'mono' alias, replacing it with 'monospace'
- -->
diff --git a/source/x/fontconfig/fontconfig.liberation.diff b/source/x/fontconfig/fontconfig.liberation.diff
index b9c9daeb8..ecb707186 100644
--- a/source/x/fontconfig/fontconfig.liberation.diff
+++ b/source/x/fontconfig/fontconfig.liberation.diff
@@ -1,34 +1,34 @@
---- ./conf.d/60-latin.conf.orig 2016-07-10 21:41:05.000000000 -0500
-+++ ./conf.d/60-latin.conf 2017-04-30 14:18:52.426996569 -0500
-@@ -4,8 +4,9 @@
+--- ./conf.d/60-latin.conf.orig 2020-11-27 19:56:42.000000000 -0600
++++ ./conf.d/60-latin.conf 2020-11-29 14:42:35.363035464 -0600
+@@ -5,7 +5,10 @@
<alias>
<family>serif</family>
<prefer>
-- <family>Bitstream Vera Serif</family>
+ <family>Liberation Serif</family>
<family>DejaVu Serif</family>
++ <family>Noto Serif</family>
+ <family>Bitstream Vera Serif</family>
<family>Times New Roman</family>
<family>Thorndale AMT</family>
<family>Luxi Serif</family>
-@@ -17,8 +18,9 @@
+@@ -17,7 +20,10 @@
<alias>
<family>sans-serif</family>
<prefer>
-- <family>Bitstream Vera Sans</family>
+ <family>Liberation Sans</family>
<family>DejaVu Sans</family>
++ <family>Noto Sans</family>
+ <family>Bitstream Vera Sans</family>
<family>Verdana</family>
<family>Arial</family>
<family>Albany AMT</family>
-@@ -34,8 +36,9 @@
+@@ -33,7 +39,10 @@
<alias>
<family>monospace</family>
<prefer>
-- <family>Bitstream Vera Sans Mono</family>
+ <family>Liberation Mono</family>
<family>DejaVu Sans Mono</family>
++ <family>Noto Sans Mono</family>
+ <family>Bitstream Vera Sans Mono</family>
<family>Inconsolata</family>
<family>Andale Mono</family>
diff --git a/source/x/fontconfig/fontconfig.noto.diff b/source/x/fontconfig/fontconfig.noto.diff
new file mode 100644
index 000000000..ea8bf8baf
--- /dev/null
+++ b/source/x/fontconfig/fontconfig.noto.diff
@@ -0,0 +1,35 @@
+--- ./conf.d/60-latin.conf.orig 2020-11-27 19:56:42.000000000 -0600
++++ ./conf.d/60-latin.conf 2020-11-29 14:43:33.291036760 -0600
+@@ -5,7 +5,10 @@
+ <alias>
+ <family>serif</family>
+ <prefer>
++ <family>Noto Serif</family>
++ <family>Liberation Serif</family>
+ <family>DejaVu Serif</family>
++ <family>Bitstream Vera Serif</family>
+ <family>Times New Roman</family>
+ <family>Thorndale AMT</family>
+ <family>Luxi Serif</family>
+@@ -17,7 +20,10 @@
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
++ <family>Noto Sans</family>
++ <family>Liberation Sans</family>
+ <family>DejaVu Sans</family>
++ <family>Bitstream Vera Sans</family>
+ <family>Verdana</family>
+ <family>Arial</family>
+ <family>Albany AMT</family>
+@@ -33,7 +39,10 @@
+ <alias>
+ <family>monospace</family>
+ <prefer>
++ <family>Noto Sans Mono</family>
++ <family>Liberation Mono</family>
+ <family>DejaVu Sans Mono</family>
++ <family>Bitstream Vera Sans Mono</family>
+ <family>Inconsolata</family>
+ <family>Andale Mono</family>
+ <family>Courier New</family>