summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.rss62
-rw-r--r--ChangeLog.txt50
-rw-r--r--FILELIST.TXT202
-rwxr-xr-xrecompress.sh13
-rwxr-xr-xsource/a/shadow/shadow.SlackBuild8
-rwxr-xr-xsource/l/libexif/libexif.SlackBuild2
-rw-r--r--source/l/libexif/libexif.url1
-rw-r--r--source/l/libexif/slack-desc2
-rwxr-xr-xsource/l/oniguruma/oniguruma.SlackBuild3
-rwxr-xr-xsource/l/python-packaging/python-packaging.SlackBuild2
-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-sleep-less.patch12
-rw-r--r--source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch285
-rwxr-xr-xsource/x/fontconfig/fontconfig.SlackBuild20
-rw-r--r--source/x/fontconfig/fontconfig.url1
-rw-r--r--source/x/fontconfig/slack-desc2
26 files changed, 3170 insertions, 102 deletions
diff --git a/ChangeLog.rss b/ChangeLog.rss
index 1687963db..29a6e5bb8 100644
--- a/ChangeLog.rss
+++ b/ChangeLog.rss
@@ -11,10 +11,68 @@
<description>Tracking Slackware development in git.</description>
<language>en-us</language>
<id xmlns="http://www.w3.org/2005/Atom">urn:uuid:c964f45e-6732-11e8-bbe5-107b4450212f</id>
- <pubDate>Mon, 18 May 2020 23:30:26 GMT</pubDate>
- <lastBuildDate>Tue, 19 May 2020 06:59:47 GMT</lastBuildDate>
+ <pubDate>Tue, 19 May 2020 19:47:49 GMT</pubDate>
+ <lastBuildDate>Wed, 20 May 2020 06:59:58 GMT</lastBuildDate>
<generator>maintain_current_git.sh v 1.11</generator>
<item>
+ <title>Tue, 19 May 2020 19:47:49 GMT</title>
+ <pubDate>Tue, 19 May 2020 19:47:49 GMT</pubDate>
+ <link>https://git.slackware.nl/current/tag/?h=20200519194749</link>
+ <guid isPermaLink="false">20200519194749</guid>
+ <description>
+ <![CDATA[<pre>
+a/shadow-4.8.1-x86_64-8.txz: Rebuilt.
+ It seems that /etc/suauth is not supported when PAM is in use, even if
+ configure.ac is hacked to enable it. I've removed the man pages for it,
+ and would suggest using sudo as a replacement.
+l/libexif-0.6.22-x86_64-1.txz: Upgraded.
+ This update fixes bugs and security issues:
+ CVE-2018-20030: Fix for recursion DoS
+ CVE-2020-13114: Time consumption DoS when parsing canon array markers
+ CVE-2020-13113: Potential use of uninitialized memory
+ CVE-2020-13112: Various buffer overread fixes due to integer overflows
+ in maker notes
+ CVE-2020-0093: read overflow
+ CVE-2019-9278: replaced integer overflow checks the compiler could
+ optimize away by safer constructs
+ CVE-2020-12767: fixed division by zero
+ CVE-2016-6328: fixed integer overflow when parsing maker notes
+ CVE-2017-7544: fixed buffer overread
+ For more information, see:
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20030
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13114
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13113
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13112
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0093
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9278
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-12767
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6328
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7544
+ (* Security fix *)
+l/oniguruma-6.9.5_rev1-x86_64-2.txz: Rebuilt.
+ Rebuilt with --enable-posix-api. Thanks to MisterL.
+l/python-packaging-20.4-x86_64-1.txz: Upgraded.
+n/bind-9.16.3-x86_64-1.txz: Upgraded.
+ This update fixes a security issue:
+ A malicious actor who intentionally exploits the lack of effective
+ limitation on the number of fetches performed when processing referrals
+ can, through the use of specially crafted referrals, cause a recursing
+ server to issue a very large number of fetches in an attempt to process
+ the referral. This has at least two potential effects: The performance of
+ the recursing server can potentially be degraded by the additional work
+ required to perform these fetches, and the attacker can exploit this
+ behavior to use the recursing server as a reflector in a reflection attack
+ with a high amplification factor.
+ For more information, see:
+ https://kb.isc.org/docs/cve-2020-8616
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8616
+ (* Security fix *)
+x/fontconfig-2.13.92-x86_64-1.txz: Upgraded.
+x/xf86-input-libinput-0.30.0-x86_64-1.txz: Upgraded.
+ </pre>]]>
+ </description>
+ </item>
+ <item>
<title>Mon, 18 May 2020 23:30:26 GMT</title>
<pubDate>Mon, 18 May 2020 23:30:26 GMT</pubDate>
<link>https://git.slackware.nl/current/tag/?h=20200518233026</link>
diff --git a/ChangeLog.txt b/ChangeLog.txt
index 8094b4b63..7ecc48308 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,3 +1,53 @@
+Tue May 19 19:47:49 UTC 2020
+a/shadow-4.8.1-x86_64-8.txz: Rebuilt.
+ It seems that /etc/suauth is not supported when PAM is in use, even if
+ configure.ac is hacked to enable it. I've removed the man pages for it,
+ and would suggest using sudo as a replacement.
+l/libexif-0.6.22-x86_64-1.txz: Upgraded.
+ This update fixes bugs and security issues:
+ CVE-2018-20030: Fix for recursion DoS
+ CVE-2020-13114: Time consumption DoS when parsing canon array markers
+ CVE-2020-13113: Potential use of uninitialized memory
+ CVE-2020-13112: Various buffer overread fixes due to integer overflows
+ in maker notes
+ CVE-2020-0093: read overflow
+ CVE-2019-9278: replaced integer overflow checks the compiler could
+ optimize away by safer constructs
+ CVE-2020-12767: fixed division by zero
+ CVE-2016-6328: fixed integer overflow when parsing maker notes
+ CVE-2017-7544: fixed buffer overread
+ For more information, see:
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20030
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13114
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13113
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13112
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0093
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9278
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-12767
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6328
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7544
+ (* Security fix *)
+l/oniguruma-6.9.5_rev1-x86_64-2.txz: Rebuilt.
+ Rebuilt with --enable-posix-api. Thanks to MisterL.
+l/python-packaging-20.4-x86_64-1.txz: Upgraded.
+n/bind-9.16.3-x86_64-1.txz: Upgraded.
+ This update fixes a security issue:
+ A malicious actor who intentionally exploits the lack of effective
+ limitation on the number of fetches performed when processing referrals
+ can, through the use of specially crafted referrals, cause a recursing
+ server to issue a very large number of fetches in an attempt to process
+ the referral. This has at least two potential effects: The performance of
+ the recursing server can potentially be degraded by the additional work
+ required to perform these fetches, and the attacker can exploit this
+ behavior to use the recursing server as a reflector in a reflection attack
+ with a high amplification factor.
+ For more information, see:
+ https://kb.isc.org/docs/cve-2020-8616
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8616
+ (* Security fix *)
+x/fontconfig-2.13.92-x86_64-1.txz: Upgraded.
+x/xf86-input-libinput-0.30.0-x86_64-1.txz: Upgraded.
++--------------------------+
Mon May 18 23:30:26 UTC 2020
d/Cython-0.29.18-x86_64-1.txz: Upgraded.
kde/kde-workspace-4.11.22-x86_64-8.txz: Rebuilt.
diff --git a/FILELIST.TXT b/FILELIST.TXT
index d57c04b4c..c06ab1248 100644
--- a/FILELIST.TXT
+++ b/FILELIST.TXT
@@ -1,20 +1,20 @@
-Mon May 18 23:42:01 UTC 2020
+Tue May 19 20:10:57 UTC 2020
Here is the file list for this directory. If you are using a
mirror site and find missing or extra files in the disk
subdirectories, please have the archive administrator refresh
the mirror.
-drwxr-xr-x 12 root root 4096 2020-05-18 23:30 .
+drwxr-xr-x 12 root root 4096 2020-05-19 19:47 .
-rw-r--r-- 1 root root 10064 2016-06-30 18:39 ./ANNOUNCE.14_2
-rw-r--r-- 1 root root 14975 2020-02-08 21:06 ./CHANGES_AND_HINTS.TXT
--rw-r--r-- 1 root root 963511 2020-05-18 19:46 ./CHECKSUMS.md5
--rw-r--r-- 1 root root 163 2020-05-18 19:46 ./CHECKSUMS.md5.asc
+-rw-r--r-- 1 root root 963604 2020-05-18 23:42 ./CHECKSUMS.md5
+-rw-r--r-- 1 root root 163 2020-05-18 23:42 ./CHECKSUMS.md5.asc
-rw-r--r-- 1 root root 17976 1994-06-10 02:28 ./COPYING
-rw-r--r-- 1 root root 35147 2007-06-30 04:21 ./COPYING3
-rw-r--r-- 1 root root 19573 2016-06-23 20:08 ./COPYRIGHT.TXT
-rw-r--r-- 1 root root 616 2006-10-02 04:37 ./CRYPTO_NOTICE.TXT
--rw-r--r-- 1 root root 885395 2020-05-18 23:30 ./ChangeLog.txt
+-rw-r--r-- 1 root root 888099 2020-05-19 19:47 ./ChangeLog.txt
drwxr-xr-x 3 root root 4096 2013-03-20 22:17 ./EFI
drwxr-xr-x 2 root root 4096 2020-05-17 22:58 ./EFI/BOOT
-rw-r--r-- 1 root root 1417216 2019-07-05 18:54 ./EFI/BOOT/bootx64.efi
@@ -25,9 +25,9 @@ drwxr-xr-x 2 root root 4096 2020-05-17 22:58 ./EFI/BOOT
-rwxr-xr-x 1 root root 2504 2019-07-05 18:54 ./EFI/BOOT/make-grub.sh
-rw-r--r-- 1 root root 10722 2013-09-21 19:02 ./EFI/BOOT/osdetect.cfg
-rw-r--r-- 1 root root 1273 2013-08-12 21:08 ./EFI/BOOT/tools.cfg
--rw-r--r-- 1 root root 1266386 2020-05-18 19:45 ./FILELIST.TXT
+-rw-r--r-- 1 root root 1266496 2020-05-18 23:42 ./FILELIST.TXT
-rw-r--r-- 1 root root 1572 2012-08-29 18:27 ./GPG-KEY
--rw-r--r-- 1 root root 752105 2020-05-18 23:39 ./PACKAGES.TXT
+-rw-r--r-- 1 root root 752221 2020-05-19 20:09 ./PACKAGES.TXT
-rw-r--r-- 1 root root 8564 2016-06-28 21:33 ./README.TXT
-rw-r--r-- 1 root root 3629 2020-05-15 07:03 ./README.initrd
-rw-r--r-- 1 root root 34412 2017-12-01 17:44 ./README_CRYPT.TXT
@@ -828,13 +828,13 @@ drwxr-xr-x 2 root root 4096 2012-09-20 18:06 ./patches
-rw-r--r-- 1 root root 575 2012-09-20 18:06 ./patches/FILE_LIST
-rw-r--r-- 1 root root 14 2012-09-20 18:06 ./patches/MANIFEST.bz2
-rw-r--r-- 1 root root 224 2012-09-20 18:06 ./patches/PACKAGES.TXT
-drwxr-xr-x 18 root root 4096 2020-05-18 23:40 ./slackware64
--rw-r--r-- 1 root root 297246 2020-05-18 23:40 ./slackware64/CHECKSUMS.md5
--rw-r--r-- 1 root root 163 2020-05-18 23:40 ./slackware64/CHECKSUMS.md5.asc
--rw-r--r-- 1 root root 370093 2020-05-18 23:37 ./slackware64/FILE_LIST
--rw-r--r-- 1 root root 3817906 2020-05-18 23:38 ./slackware64/MANIFEST.bz2
+drwxr-xr-x 18 root root 4096 2020-05-19 20:09 ./slackware64
+-rw-r--r-- 1 root root 297249 2020-05-19 20:09 ./slackware64/CHECKSUMS.md5
+-rw-r--r-- 1 root root 163 2020-05-19 20:09 ./slackware64/CHECKSUMS.md5.asc
+-rw-r--r-- 1 root root 370096 2020-05-19 20:06 ./slackware64/FILE_LIST
+-rw-r--r-- 1 root root 3818241 2020-05-19 20:07 ./slackware64/MANIFEST.bz2
lrwxrwxrwx 1 root root 15 2009-08-23 23:34 ./slackware64/PACKAGES.TXT -> ../PACKAGES.TXT
-drwxr-xr-x 2 root root 28672 2020-05-18 19:40 ./slackware64/a
+drwxr-xr-x 2 root root 28672 2020-05-19 20:06 ./slackware64/a
-rw-r--r-- 1 root root 327 2018-06-24 18:44 ./slackware64/a/aaa_base-14.2-x86_64-5.txt
-rw-r--r-- 1 root root 10820 2018-06-24 18:44 ./slackware64/a/aaa_base-14.2-x86_64-5.txz
-rw-r--r-- 1 root root 163 2018-06-24 18:44 ./slackware64/a/aaa_base-14.2-x86_64-5.txz.asc
@@ -1115,9 +1115,9 @@ drwxr-xr-x 2 root root 28672 2020-05-18 19:40 ./slackware64/a
-rw-r--r-- 1 root root 406 2020-01-15 17:44 ./slackware64/a/sed-4.8-x86_64-1.txt
-rw-r--r-- 1 root root 249488 2020-01-15 17:44 ./slackware64/a/sed-4.8-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-01-15 17:44 ./slackware64/a/sed-4.8-x86_64-1.txz.asc
--rw-r--r-- 1 root root 422 2020-05-16 19:48 ./slackware64/a/shadow-4.8.1-x86_64-7.txt
--rw-r--r-- 1 root root 1392896 2020-05-16 19:48 ./slackware64/a/shadow-4.8.1-x86_64-7.txz
--rw-r--r-- 1 root root 163 2020-05-16 19:48 ./slackware64/a/shadow-4.8.1-x86_64-7.txz.asc
+-rw-r--r-- 1 root root 422 2020-05-19 18:57 ./slackware64/a/shadow-4.8.1-x86_64-8.txt
+-rw-r--r-- 1 root root 1376432 2020-05-19 18:57 ./slackware64/a/shadow-4.8.1-x86_64-8.txz
+-rw-r--r-- 1 root root 163 2020-05-19 18:57 ./slackware64/a/shadow-4.8.1-x86_64-8.txz.asc
-rw-r--r-- 1 root root 623 2018-04-13 13:12 ./slackware64/a/sharutils-4.15.2-x86_64-2.txt
-rw-r--r-- 1 root root 264912 2018-04-13 13:12 ./slackware64/a/sharutils-4.15.2-x86_64-2.txz
-rw-r--r-- 1 root root 163 2018-04-13 13:12 ./slackware64/a/sharutils-4.15.2-x86_64-2.txz.asc
@@ -2520,7 +2520,7 @@ drwxr-xr-x 2 root root 20480 2016-03-10 03:11 ./slackware64/kdei
-rw-r--r-- 1 root root 7544 2018-03-01 07:54 ./slackware64/kdei/maketag
-rw-r--r-- 1 root root 7544 2018-03-01 07:54 ./slackware64/kdei/maketag.ez
-rw-r--r-- 1 root root 1500 2018-03-01 07:54 ./slackware64/kdei/tagfile
-drwxr-xr-x 2 root root 69632 2020-05-18 23:37 ./slackware64/l
+drwxr-xr-x 2 root root 69632 2020-05-19 20:06 ./slackware64/l
-rw-r--r-- 1 root root 338 2020-05-16 19:55 ./slackware64/l/ConsoleKit2-1.2.1-x86_64-4.txt
-rw-r--r-- 1 root root 193724 2020-05-16 19:55 ./slackware64/l/ConsoleKit2-1.2.1-x86_64-4.txz
-rw-r--r-- 1 root root 163 2020-05-16 19:55 ./slackware64/l/ConsoleKit2-1.2.1-x86_64-4.txz.asc
@@ -2973,9 +2973,9 @@ drwxr-xr-x 2 root root 69632 2020-05-18 23:37 ./slackware64/l
-rw-r--r-- 1 root root 543 2019-08-02 18:22 ./slackware64/l/libevent-2.1.11-x86_64-1.txt
-rw-r--r-- 1 root root 276000 2019-08-02 18:22 ./slackware64/l/libevent-2.1.11-x86_64-1.txz
-rw-r--r-- 1 root root 163 2019-08-02 18:22 ./slackware64/l/libevent-2.1.11-x86_64-1.txz.asc
--rw-r--r-- 1 root root 396 2018-04-13 14:57 ./slackware64/l/libexif-0.6.21-x86_64-2.txt
--rw-r--r-- 1 root root 321184 2018-04-13 14:57 ./slackware64/l/libexif-0.6.21-x86_64-2.txz
--rw-r--r-- 1 root root 163 2018-04-13 14:57 ./slackware64/l/libexif-0.6.21-x86_64-2.txz.asc
+-rw-r--r-- 1 root root 432 2020-05-19 17:30 ./slackware64/l/libexif-0.6.22-x86_64-1.txt
+-rw-r--r-- 1 root root 389192 2020-05-19 17:30 ./slackware64/l/libexif-0.6.22-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-05-19 17:30 ./slackware64/l/libexif-0.6.22-x86_64-1.txz.asc
-rw-r--r-- 1 root root 292 2018-04-13 14:58 ./slackware64/l/libfakekey-0.3-x86_64-2.txt
-rw-r--r-- 1 root root 16608 2018-04-13 14:58 ./slackware64/l/libfakekey-0.3-x86_64-2.txz
-rw-r--r-- 1 root root 163 2018-04-13 14:58 ./slackware64/l/libfakekey-0.3-x86_64-2.txz.asc
@@ -3251,9 +3251,9 @@ drwxr-xr-x 2 root root 69632 2020-05-18 23:37 ./slackware64/l
-rw-r--r-- 1 root root 411 2018-04-13 15:09 ./slackware64/l/ocl-icd-2.2.12-x86_64-2.txt
-rw-r--r-- 1 root root 30916 2018-04-13 15:09 ./slackware64/l/ocl-icd-2.2.12-x86_64-2.txz
-rw-r--r-- 1 root root 163 2018-04-13 15:09 ./slackware64/l/ocl-icd-2.2.12-x86_64-2.txz.asc
--rw-r--r-- 1 root root 459 2020-04-30 17:39 ./slackware64/l/oniguruma-6.9.5_rev1-x86_64-1.txt
--rw-r--r-- 1 root root 218500 2020-04-30 17:39 ./slackware64/l/oniguruma-6.9.5_rev1-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-04-30 17:39 ./slackware64/l/oniguruma-6.9.5_rev1-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 459 2020-05-19 17:59 ./slackware64/l/oniguruma-6.9.5_rev1-x86_64-2.txt
+-rw-r--r-- 1 root root 219836 2020-05-19 17:59 ./slackware64/l/oniguruma-6.9.5_rev1-x86_64-2.txz
+-rw-r--r-- 1 root root 163 2020-05-19 17:59 ./slackware64/l/oniguruma-6.9.5_rev1-x86_64-2.txz.asc
-rw-r--r-- 1 root root 463 2020-02-16 05:22 ./slackware64/l/openal-soft-1.20.1-x86_64-1.txt
-rw-r--r-- 1 root root 748300 2020-02-16 05:22 ./slackware64/l/openal-soft-1.20.1-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-02-16 05:22 ./slackware64/l/openal-soft-1.20.1-x86_64-1.txz.asc
@@ -3362,9 +3362,9 @@ drwxr-xr-x 2 root root 69632 2020-05-18 23:37 ./slackware64/l
-rw-r--r-- 1 root root 502 2020-05-01 03:59 ./slackware64/l/python-notify2-0.3.1-x86_64-5.txt
-rw-r--r-- 1 root root 9172 2020-05-01 03:59 ./slackware64/l/python-notify2-0.3.1-x86_64-5.txz
-rw-r--r-- 1 root root 163 2020-05-01 03:59 ./slackware64/l/python-notify2-0.3.1-x86_64-5.txz.asc
--rw-r--r-- 1 root root 333 2020-05-01 04:01 ./slackware64/l/python-packaging-20.3-x86_64-2.txt
--rw-r--r-- 1 root root 48548 2020-05-01 04:01 ./slackware64/l/python-packaging-20.3-x86_64-2.txz
--rw-r--r-- 1 root root 163 2020-05-01 04:01 ./slackware64/l/python-packaging-20.3-x86_64-2.txz.asc
+-rw-r--r-- 1 root root 333 2020-05-19 17:37 ./slackware64/l/python-packaging-20.4-x86_64-1.txt
+-rw-r--r-- 1 root root 49216 2020-05-19 17:37 ./slackware64/l/python-packaging-20.4-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-05-19 17:37 ./slackware64/l/python-packaging-20.4-x86_64-1.txz.asc
-rw-r--r-- 1 root root 526 2020-05-03 01:50 ./slackware64/l/python-pillow-7.1.2-x86_64-1.txt
-rw-r--r-- 1 root root 633852 2020-05-03 01:50 ./slackware64/l/python-pillow-7.1.2-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-05-03 01:50 ./slackware64/l/python-pillow-7.1.2-x86_64-1.txz.asc
@@ -3531,7 +3531,7 @@ drwxr-xr-x 2 root root 69632 2020-05-18 23:37 ./slackware64/l
-rw-r--r-- 1 root root 463 2019-12-29 18:55 ./slackware64/l/zstd-1.4.4-x86_64-2.txt
-rw-r--r-- 1 root root 405812 2019-12-29 18:55 ./slackware64/l/zstd-1.4.4-x86_64-2.txz
-rw-r--r-- 1 root root 163 2019-12-29 18:55 ./slackware64/l/zstd-1.4.4-x86_64-2.txz.asc
-drwxr-xr-x 2 root root 36864 2020-05-18 19:40 ./slackware64/n
+drwxr-xr-x 2 root root 36864 2020-05-19 20:06 ./slackware64/n
-rw-r--r-- 1 root root 357 2020-05-10 18:00 ./slackware64/n/ModemManager-1.12.10-x86_64-1.txt
-rw-r--r-- 1 root root 1806496 2020-05-10 18:00 ./slackware64/n/ModemManager-1.12.10-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-05-10 18:00 ./slackware64/n/ModemManager-1.12.10-x86_64-1.txz.asc
@@ -3547,9 +3547,9 @@ drwxr-xr-x 2 root root 36864 2020-05-18 19:40 ./slackware64/n
-rw-r--r-- 1 root root 683 2018-04-13 15:29 ./slackware64/n/biff+comsat-0.17-x86_64-2.txt
-rw-r--r-- 1 root root 11216 2018-04-13 15:29 ./slackware64/n/biff+comsat-0.17-x86_64-2.txz
-rw-r--r-- 1 root root 163 2018-04-13 15:29 ./slackware64/n/biff+comsat-0.17-x86_64-2.txz.asc
--rw-r--r-- 1 root root 334 2020-04-15 18:45 ./slackware64/n/bind-9.16.2-x86_64-1.txt
--rw-r--r-- 1 root root 2272212 2020-04-15 18:45 ./slackware64/n/bind-9.16.2-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-04-15 18:45 ./slackware64/n/bind-9.16.2-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 334 2020-05-19 17:29 ./slackware64/n/bind-9.16.3-x86_64-1.txt
+-rw-r--r-- 1 root root 2276168 2020-05-19 17:29 ./slackware64/n/bind-9.16.3-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-05-19 17:29 ./slackware64/n/bind-9.16.3-x86_64-1.txz.asc
-rw-r--r-- 1 root root 333 2020-03-15 18:37 ./slackware64/n/bluez-5.54-x86_64-1.txt
-rw-r--r-- 1 root root 1113904 2020-03-15 18:37 ./slackware64/n/bluez-5.54-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-03-15 18:37 ./slackware64/n/bluez-5.54-x86_64-1.txz.asc
@@ -4023,7 +4023,7 @@ drwxr-xr-x 2 root root 4096 2020-04-05 21:10 ./slackware64/tcl
-rw-r--r-- 1 root root 227 2019-11-22 21:51 ./slackware64/tcl/tk-8.6.10-x86_64-1.txt
-rw-r--r-- 1 root root 1780348 2019-11-22 21:51 ./slackware64/tcl/tk-8.6.10-x86_64-1.txz
-rw-r--r-- 1 root root 163 2019-11-22 21:51 ./slackware64/tcl/tk-8.6.10-x86_64-1.txz.asc
-drwxr-xr-x 2 root root 65536 2020-05-18 19:40 ./slackware64/x
+drwxr-xr-x 2 root root 65536 2020-05-19 20:06 ./slackware64/x
-rw-r--r-- 1 root root 257 2018-04-13 16:03 ./slackware64/x/anthy-9100h-x86_64-2.txt
-rw-r--r-- 1 root root 5074404 2018-04-13 16:03 ./slackware64/x/anthy-9100h-x86_64-2.txz
-rw-r--r-- 1 root root 163 2018-04-13 16:03 ./slackware64/x/anthy-9100h-x86_64-2.txz.asc
@@ -4162,9 +4162,9 @@ drwxr-xr-x 2 root root 65536 2020-05-18 19:40 ./slackware64/x
-rw-r--r-- 1 root root 451 2018-06-06 02:14 ./slackware64/x/font-xfree86-type1-1.0.4-noarch-3.txt
-rw-r--r-- 1 root root 36508 2018-06-06 02:14 ./slackware64/x/font-xfree86-type1-1.0.4-noarch-3.txz
-rw-r--r-- 1 root root 163 2018-06-06 02:14 ./slackware64/x/font-xfree86-type1-1.0.4-noarch-3.txz.asc
--rw-r--r-- 1 root root 348 2018-09-12 19:29 ./slackware64/x/fontconfig-2.13.1-x86_64-1.txt
--rw-r--r-- 1 root root 303464 2018-09-12 19:29 ./slackware64/x/fontconfig-2.13.1-x86_64-1.txz
--rw-r--r-- 1 root root 163 2018-09-12 19:29 ./slackware64/x/fontconfig-2.13.1-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 385 2020-05-19 18:39 ./slackware64/x/fontconfig-2.13.92-x86_64-1.txt
+-rw-r--r-- 1 root root 315392 2020-05-19 18:39 ./slackware64/x/fontconfig-2.13.92-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-05-19 18:39 ./slackware64/x/fontconfig-2.13.92-x86_64-1.txz.asc
-rw-r--r-- 1 root root 372 2020-01-06 18:34 ./slackware64/x/fonttosfnt-1.1.0-x86_64-1.txt
-rw-r--r-- 1 root root 31540 2020-01-06 18:34 ./slackware64/x/fonttosfnt-1.1.0-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-01-06 18:34 ./slackware64/x/fonttosfnt-1.1.0-x86_64-1.txz.asc
@@ -4605,9 +4605,9 @@ drwxr-xr-x 2 root root 65536 2020-05-18 19:40 ./slackware64/x
-rw-r--r-- 1 root root 475 2018-05-11 23:28 ./slackware64/x/xf86-input-keyboard-1.9.0-x86_64-3.txt
-rw-r--r-- 1 root root 26076 2018-05-11 23:28 ./slackware64/x/xf86-input-keyboard-1.9.0-x86_64-3.txz
-rw-r--r-- 1 root root 163 2018-05-11 23:28 ./slackware64/x/xf86-input-keyboard-1.9.0-x86_64-3.txz.asc
--rw-r--r-- 1 root root 468 2019-08-12 20:56 ./slackware64/x/xf86-input-libinput-0.29.0-x86_64-1.txt
--rw-r--r-- 1 root root 50152 2019-08-12 20:56 ./slackware64/x/xf86-input-libinput-0.29.0-x86_64-1.txz
--rw-r--r-- 1 root root 163 2019-08-12 20:56 ./slackware64/x/xf86-input-libinput-0.29.0-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 468 2020-05-19 19:21 ./slackware64/x/xf86-input-libinput-0.30.0-x86_64-1.txt
+-rw-r--r-- 1 root root 50508 2020-05-19 19:21 ./slackware64/x/xf86-input-libinput-0.30.0-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-05-19 19:21 ./slackware64/x/xf86-input-libinput-0.30.0-x86_64-1.txz.asc
-rw-r--r-- 1 root root 428 2018-06-19 18:00 ./slackware64/x/xf86-input-mouse-1.9.3-x86_64-1.txt
-rw-r--r-- 1 root root 49684 2018-06-19 18:00 ./slackware64/x/xf86-input-mouse-1.9.3-x86_64-1.txz
-rw-r--r-- 1 root root 163 2018-06-19 18:00 ./slackware64/x/xf86-input-mouse-1.9.3-x86_64-1.txz.asc
@@ -5139,11 +5139,11 @@ drwxr-xr-x 2 root root 4096 2019-02-17 23:51 ./slackware64/y
-rw-r--r-- 1 root root 1147 2018-03-01 07:55 ./slackware64/y/maketag
-rw-r--r-- 1 root root 1147 2018-03-01 07:55 ./slackware64/y/maketag.ez
-rw-r--r-- 1 root root 14 2018-03-01 07:55 ./slackware64/y/tagfile
-drwxr-xr-x 19 root root 4096 2020-05-18 23:42 ./source
--rw-r--r-- 1 root root 495649 2020-05-18 23:42 ./source/CHECKSUMS.md5
--rw-r--r-- 1 root root 163 2020-05-18 23:42 ./source/CHECKSUMS.md5.asc
--rw-r--r-- 1 root root 697791 2020-05-18 23:41 ./source/FILE_LIST
--rw-r--r-- 1 root root 20786602 2020-05-18 23:41 ./source/MANIFEST.bz2
+drwxr-xr-x 19 root root 4096 2020-05-19 20:10 ./source
+-rw-r--r-- 1 root root 497055 2020-05-19 20:10 ./source/CHECKSUMS.md5
+-rw-r--r-- 1 root root 163 2020-05-19 20:10 ./source/CHECKSUMS.md5.asc
+-rw-r--r-- 1 root root 699457 2020-05-19 20:10 ./source/FILE_LIST
+-rw-r--r-- 1 root root 20797725 2020-05-19 20:10 ./source/MANIFEST.bz2
-rw-r--r-- 1 root root 1314 2006-10-02 04:40 ./source/README.TXT
drwxr-xr-x 115 root root 4096 2020-05-17 23:32 ./source/a
-rw-r--r-- 1 root root 1034 2019-05-04 17:56 ./source/a/FTBFSlog
@@ -5968,7 +5968,7 @@ drwxr-xr-x 2 root root 4096 2020-05-08 19:34 ./source/a/shadow/pam.d-su
-rw-r--r-- 1 root root 1611196 2020-01-24 21:43 ./source/a/shadow/shadow-4.8.1.tar.xz
-rw-r--r-- 1 root root 488 2020-01-24 21:45 ./source/a/shadow/shadow-4.8.1.tar.xz.asc
-rw-r--r-- 1 root root 734 2013-12-14 21:05 ./source/a/shadow/shadow.CVE-2005-4890.relax.diff.gz
--rwxr-xr-x 1 root root 8256 2020-05-16 19:32 ./source/a/shadow/shadow.SlackBuild
+-rwxr-xr-x 1 root root 8499 2020-05-19 18:54 ./source/a/shadow/shadow.SlackBuild
-rw-r--r-- 1 root root 522 2020-02-06 23:30 ./source/a/shadow/shadow.login.display.short.hostname.diff.gz
-rw-r--r-- 1 root root 39 2019-06-17 02:57 ./source/a/shadow/shadow.url
-rw-r--r-- 1 root root 876 2018-11-09 20:31 ./source/a/shadow/slack-desc
@@ -9208,11 +9208,12 @@ drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/l/libevent
-rw-r--r-- 1 root root 746646 2019-08-01 21:44 ./source/l/libevent/libevent-2.1.11-stable.tar.lz
-rwxr-xr-x 1 root root 4571 2019-09-29 23:48 ./source/l/libevent/libevent.SlackBuild
-rw-r--r-- 1 root root 999 2018-02-27 06:12 ./source/l/libevent/slack-desc
-drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/l/libexif
--rw-r--r-- 1 root root 899556 2012-07-12 20:35 ./source/l/libexif/libexif-0.6.21.tar.xz
--rwxr-xr-x 1 root root 3771 2019-09-29 23:48 ./source/l/libexif/libexif.SlackBuild
+drwxr-xr-x 2 root root 4096 2020-05-19 17:29 ./source/l/libexif
+-rw-r--r-- 1 root root 1347040 2020-05-18 19:57 ./source/l/libexif/libexif-0.6.22.tar.xz
+-rwxr-xr-x 1 root root 3771 2020-05-19 17:29 ./source/l/libexif/libexif.SlackBuild
-rw-r--r-- 1 root root 197 2011-02-09 07:02 ./source/l/libexif/libexif.pc.diff.gz
--rw-r--r-- 1 root root 851 2018-02-27 06:12 ./source/l/libexif/slack-desc
+-rw-r--r-- 1 root root 36 2020-05-19 17:28 ./source/l/libexif/libexif.url
+-rw-r--r-- 1 root root 887 2020-05-19 17:27 ./source/l/libexif/slack-desc
drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/l/libfakekey
-rw-r--r-- 1 root root 9288 2017-11-24 22:31 ./source/l/libfakekey/libfakekey-0.3.tar.xz
-rwxr-xr-x 1 root root 3740 2019-09-29 23:48 ./source/l/libfakekey/libfakekey.SlackBuild
@@ -9713,7 +9714,7 @@ drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/l/ocl-icd
-rw-r--r-- 1 root root 898 2018-02-27 06:12 ./source/l/ocl-icd/slack-desc
drwxr-xr-x 2 root root 4096 2020-04-30 17:38 ./source/l/oniguruma
-rw-r--r-- 1 root root 372788 2020-04-26 07:20 ./source/l/oniguruma/oniguruma-6.9.5_rev1.tar.lz
--rwxr-xr-x 1 root root 4159 2020-04-20 19:41 ./source/l/oniguruma/oniguruma.SlackBuild
+-rwxr-xr-x 1 root root 4182 2020-05-19 17:59 ./source/l/oniguruma/oniguruma.SlackBuild
-rw-r--r-- 1 root root 916 2019-12-01 18:11 ./source/l/oniguruma/slack-desc
drwxr-xr-x 2 root root 4096 2020-02-16 05:22 ./source/l/openal-soft
-rw-r--r-- 1 root root 275 2020-02-12 22:38 ./source/l/openal-soft/doinst.sh.gz
@@ -9899,10 +9900,10 @@ drwxr-xr-x 2 root root 4096 2019-12-29 19:15 ./source/l/python-notify2
-rwxr-xr-x 1 root root 2573 2020-05-01 03:59 ./source/l/python-notify2/python-notify2.SlackBuild
-rw-r--r-- 1 root root 37 2018-02-23 21:12 ./source/l/python-notify2/python-notify2.url
-rw-r--r-- 1 root root 996 2018-02-27 06:12 ./source/l/python-notify2/slack-desc
-drwxr-xr-x 2 root root 4096 2020-03-06 01:41 ./source/l/python-packaging
--rw-r--r-- 1 root root 56432 2020-03-05 07:48 ./source/l/python-packaging/packaging-20.3.tar.lz
+drwxr-xr-x 2 root root 4096 2020-05-19 17:36 ./source/l/python-packaging
+-rw-r--r-- 1 root root 57322 2020-05-19 06:30 ./source/l/python-packaging/packaging-20.4.tar.lz
-rw-r--r-- 1 root root 36 2020-01-25 18:33 ./source/l/python-packaging/packaging.url
--rwxr-xr-x 1 root root 2904 2020-05-01 04:00 ./source/l/python-packaging/python-packaging.SlackBuild
+-rwxr-xr-x 1 root root 2904 2020-05-19 17:36 ./source/l/python-packaging/python-packaging.SlackBuild
-rw-r--r-- 1 root root 829 2018-08-27 18:22 ./source/l/python-packaging/slack-desc
drwxr-xr-x 2 root root 4096 2020-05-03 01:49 ./source/l/python-pillow
-rw-r--r-- 1 root root 572136 2020-05-03 01:48 ./source/l/python-pillow/Pillow-7.1.2.tar.lz
@@ -10345,13 +10346,13 @@ drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/n/biff+comsat
-rw-r--r-- 1 root root 729 2004-06-21 20:51 ./source/n/biff+comsat/biff+comsat.badutmp.diff.gz
-rw-r--r-- 1 root root 1222 2001-06-03 08:32 ./source/n/biff+comsat/biff+comsat.offset.diff.gz
-rw-r--r-- 1 root root 1142 2018-02-27 06:13 ./source/n/biff+comsat/slack-desc
-drwxr-xr-x 3 root root 4096 2020-04-15 18:41 ./source/n/bind
+drwxr-xr-x 3 root root 4096 2020-05-19 17:26 ./source/n/bind
-rw-r--r-- 1 root root 5120 2007-06-08 04:48 ./source/n/bind/3link.sh
--rw-r--r-- 1 root root 4559216 2020-04-15 16:39 ./source/n/bind/bind-9.16.2.tar.xz
--rw-r--r-- 1 root root 874 2020-04-15 16:39 ./source/n/bind/bind-9.16.2.tar.xz.asc
--rw-r--r-- 1 root root 874 2020-04-15 16:39 ./source/n/bind/bind-9.16.2.tar.xz.sha1.asc
--rw-r--r-- 1 root root 874 2020-04-15 16:39 ./source/n/bind/bind-9.16.2.tar.xz.sha256.asc
--rw-r--r-- 1 root root 874 2020-04-15 16:39 ./source/n/bind/bind-9.16.2.tar.xz.sha512.asc
+-rw-r--r-- 1 root root 4573044 2020-05-19 07:49 ./source/n/bind/bind-9.16.3.tar.xz
+-rw-r--r-- 1 root root 833 2020-05-19 07:49 ./source/n/bind/bind-9.16.3.tar.xz.asc
+-rw-r--r-- 1 root root 833 2020-05-19 07:49 ./source/n/bind/bind-9.16.3.tar.xz.sha1.asc
+-rw-r--r-- 1 root root 833 2020-05-19 07:49 ./source/n/bind/bind-9.16.3.tar.xz.sha256.asc
+-rw-r--r-- 1 root root 833 2020-05-19 07:49 ./source/n/bind/bind-9.16.3.tar.xz.sha512.asc
-rwxr-xr-x 1 root root 5385 2020-03-18 17:56 ./source/n/bind/bind.SlackBuild
drwxr-xr-x 2 root root 4096 2019-08-19 18:12 ./source/n/bind/caching-example
-rw-r--r-- 1 root root 195 2001-05-18 02:03 ./source/n/bind/caching-example/localhost.zone
@@ -11460,7 +11461,7 @@ drwxr-xr-x 2 root root 4096 2019-11-22 21:49 ./source/tcl/tk
-rw-r--r-- 1 root root 677 2018-11-16 18:36 ./source/tcl/tk/slack-desc
-rwxr-xr-x 1 root root 4428 2019-11-22 21:51 ./source/tcl/tk/tk.SlackBuild
-rw-r--r-- 1 root root 2944580 2019-11-21 19:49 ./source/tcl/tk/tk8.6.10-src.tar.lz
-drwxr-xr-x 53 root root 4096 2020-03-25 18:14 ./source/x
+drwxr-xr-x 53 root root 4096 2020-05-19 18:38 ./source/x
-rw-r--r-- 1 root root 958 2019-10-12 17:05 ./source/x/FTBFSlog
drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/x/anthy
-rw-r--r-- 1 root root 3198760 2009-02-07 16:33 ./source/x/anthy/anthy-9100h.tar.xz
@@ -11475,15 +11476,30 @@ drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/x/dejavu-fonts-ttf
-rwxr-xr-x 1 root root 2983 2019-09-29 23:48 ./source/x/dejavu-fonts-ttf/dejavu-fonts-ttf.SlackBuild
-rw-r--r-- 1 root root 169 2018-06-05 22:36 ./source/x/dejavu-fonts-ttf/doinst.sh.gz
-rw-r--r-- 1 root root 904 2018-02-27 06:13 ./source/x/dejavu-fonts-ttf/slack-desc
-drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/x/fontconfig
+drwxr-xr-x 3 root root 4096 2020-05-19 18:10 ./source/x/fontconfig
-rw-r--r-- 1 root root 139 2013-02-28 21:07 ./source/x/fontconfig/doinst.sh.gz
--rw-r--r-- 1 root root 1362948 2018-08-30 08:27 ./source/x/fontconfig/fontconfig-2.13.1.tar.lz
--rwxr-xr-x 1 root root 6545 2019-09-29 23:48 ./source/x/fontconfig/fontconfig.SlackBuild
+drwxr-xr-x 2 root root 4096 2020-05-19 17:42 ./source/x/fontconfig/fedora-patches
+-rw-r--r-- 1 root root 675 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-0-timestamp-dir-on-sb.patch.gz
+-rw-r--r-- 1 root root 438 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-drop-lang-from-pkgkit-format.patch.gz
+-rw-r--r-- 1 root root 1969 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-fix-1744377.patch.gz
+-rw-r--r-- 1 root root 1629 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-fix-assertion.patch.gz
+-rw-r--r-- 1 root root 2275 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-fix-dtd-id.patch.gz
+-rw-r--r-- 1 root root 452 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-fix-dtd.patch.gz
+-rw-r--r-- 1 root root 814 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-fix-test.patch.gz
+-rw-r--r-- 1 root root 9115 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-mt.patch.gz
+-rw-r--r-- 1 root root 2578 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-read-latest-cache.patch.gz
+-rw-r--r-- 1 root root 419 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-required-freetype-version.patch.gz
+-rw-r--r-- 1 root root 622 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-score-hint-on-match.patch.gz
+-rw-r--r-- 1 root root 326 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-sleep-less.patch.gz
+-rw-r--r-- 1 root root 2714 2020-04-23 09:20 ./source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch.gz
+-rw-r--r-- 1 root root 1413128 2019-08-09 11:17 ./source/x/fontconfig/fontconfig-2.13.92.tar.xz
+-rwxr-xr-x 1 root root 7824 2020-05-19 18:38 ./source/x/fontconfig/fontconfig.SlackBuild
-rw-r--r-- 1 root root 340 2017-04-30 19:35 ./source/x/fontconfig/fontconfig.dejavu.diff.gz
-rw-r--r-- 1 root root 574 2013-03-01 04:32 ./source/x/fontconfig/fontconfig.font.dir.list.diff.gz
-rw-r--r-- 1 root root 346 2017-04-30 19:19 ./source/x/fontconfig/fontconfig.liberation.diff.gz
+-rw-r--r-- 1 root root 30 2020-05-19 02:12 ./source/x/fontconfig/fontconfig.url
-rw-r--r-- 1 root root 657 2007-01-25 05:00 ./source/x/fontconfig/setup.05.fontconfig
--rw-r--r-- 1 root root 806 2018-02-27 06:13 ./source/x/fontconfig/slack-desc
+-rw-r--r-- 1 root root 843 2020-05-19 02:09 ./source/x/fontconfig/slack-desc
drwxr-xr-x 2 root root 4096 2019-09-30 16:57 ./source/x/freeglut
-rw-r--r-- 1 root root 444 2012-02-13 00:02 ./source/x/freeglut/RATIONALE
-rw-r--r-- 1 root root 313505 2019-09-29 19:13 ./source/x/freeglut/freeglut-3.2.1.tar.lz
@@ -12364,35 +12380,35 @@ drwxr-xr-x 2 root root 12288 2020-05-18 17:50 ./source/x/x11/slack-desc
-rw-r--r-- 1 root root 874 2012-04-08 03:18 ./source/x/x11/slack-desc/libXfontcache
-rw-r--r-- 1 root root 748 2012-04-08 03:18 ./source/x/x11/slack-desc/libXft
-rw-r--r-- 1 root root 749 2012-04-08 03:18 ./source/x/x11/slack-desc/libXi
--rw-r--r-- 1 root root 846 2012-04-08 03:19 ./source/x/x11/slack-desc/libXinerama
--rw-r--r-- 1 root root 806 2018-02-26 22:56 ./source/x/x11/slack-desc/libXmu
--rw-r--r-- 1 root root 738 2012-04-08 03:23 ./source/x/x11/slack-desc/libXp
--rw-r--r-- 1 root root 770 2012-04-08 03:24 ./source/x/x11/slack-desc/libXpm
--rw-r--r-- 1 root root 853 2015-04-21 01:58 ./source/x/x11/slack-desc/libXpresent
--rw-r--r-- 1 root root 821 2012-04-08 03:24 ./source/x/x11/slack-desc/libXrandr
--rw-r--r-- 1 root root 838 2012-04-08 03:24 ./source/x/x11/slack-desc/libXrender
--rw-r--r-- 1 root root 779 2012-04-08 03:25 ./source/x/x11/slack-desc/libXres
--rw-r--r-- 1 root root 744 2012-04-08 03:26 ./source/x/x11/slack-desc/libXt
--rw-r--r-- 1 root root 792 2012-04-08 03:26 ./source/x/x11/slack-desc/libXtst
--rw-r--r-- 1 root root 777 2012-04-08 03:26 ./source/x/x11/slack-desc/libXv
--rw-r--r-- 1 root root 777 2012-04-08 02:52 ./source/x/x11/slack-desc/libXvMC
--rw-r--r-- 1 root root 844 2012-04-08 03:27 ./source/x/x11/slack-desc/libXxf86dga
--rw-r--r-- 1 root root 864 2012-04-08 03:27 ./source/x/x11/slack-desc/libXxf86misc
--rw-r--r-- 1 root root 829 2012-04-08 03:27 ./source/x/x11/slack-desc/libXxf86vm
--rw-r--r-- 1 root root 777 2012-04-08 03:28 ./source/x/x11/slack-desc/libdmx
--rw-r--r-- 1 root root 807 2012-04-08 03:28 ./source/x/x11/slack-desc/libfontenc
--rw-r--r-- 1 root root 840 2012-04-08 03:29 ./source/x/x11/slack-desc/libpciaccess
--rw-r--r-- 1 root root 1003 2012-04-08 03:30 ./source/x/x11/slack-desc/libpthread-stubs
--rw-r--r-- 1 root root 900 2018-02-26 22:57 ./source/x/x11/slack-desc/libxcb
--rw-r--r-- 1 root root 824 2012-04-08 02:45 ./source/x/x11/slack-desc/libxkbfile
--rw-r--r-- 1 root root 847 2014-05-13 05:34 ./source/x/x11/slack-desc/libxshmfence
--rw-r--r-- 1 root root 707 2012-04-08 03:30 ./source/x/x11/slack-desc/listres
--rw-r--r-- 1 root root 778 2012-04-08 03:31 ./source/x/x11/slack-desc/lndir
--rw-r--r-- 1 root root 826 2018-02-26 22:57 ./source/x/x11/slack-desc/luit
--rw-r--r-- 1 root root 818 2012-04-08 03:31 ./source/x/x11/slack-desc/makedepend
--rw-r--r-- 1 root root 890 2012-04-08 03:31 ./source/x/x11/slack-desc/mkcomposecache
--rw-r--r-- 1 root root 837 2019-10-28 19:03 ./source/x/x11/slack-desc/mkfontscale
--rw-r--r-- 1 root root 679 2012-04-08 03:32 ./source/x/x11/slack-desc/oclock
+-rw-r--r-- 1 root root 846 2012-04-08 03:19 ./source/x/x11/slack-desc/libXinerama
+-rw-r--r-- 1 root root 806 2018-02-26 22:56 ./source/x/x11/slack-desc/libXmu
+-rw-r--r-- 1 root root 738 2012-04-08 03:23 ./source/x/x11/slack-desc/libXp
+-rw-r--r-- 1 root root 770 2012-04-08 03:24 ./source/x/x11/slack-desc/libXpm
+-rw-r--r-- 1 root root 853 2015-04-21 01:58 ./source/x/x11/slack-desc/libXpresent
+-rw-r--r-- 1 root root 821 2012-04-08 03:24 ./source/x/x11/slack-desc/libXrandr
+-rw-r--r-- 1 root root 838 2012-04-08 03:24 ./source/x/x11/slack-desc/libXrender
+-rw-r--r-- 1 root root 779 2012-04-08 03:25 ./source/x/x11/slack-desc/libXres
+-rw-r--r-- 1 root root 744 2012-04-08 03:26 ./source/x/x11/slack-desc/libXt
+-rw-r--r-- 1 root root 792 2012-04-08 03:26 ./source/x/x11/slack-desc/libXtst
+-rw-r--r-- 1 root root 777 2012-04-08 03:26 ./source/x/x11/slack-desc/libXv
+-rw-r--r-- 1 root root 777 2012-04-08 02:52 ./source/x/x11/slack-desc/libXvMC
+-rw-r--r-- 1 root root 844 2012-04-08 03:27 ./source/x/x11/slack-desc/libXxf86dga
+-rw-r--r-- 1 root root 864 2012-04-08 03:27 ./source/x/x11/slack-desc/libXxf86misc
+-rw-r--r-- 1 root root 829 2012-04-08 03:27 ./source/x/x11/slack-desc/libXxf86vm
+-rw-r--r-- 1 root root 777 2012-04-08 03:28 ./source/x/x11/slack-desc/libdmx
+-rw-r--r-- 1 root root 807 2012-04-08 03:28 ./source/x/x11/slack-desc/libfontenc
+-rw-r--r-- 1 root root 840 2012-04-08 03:29 ./source/x/x11/slack-desc/libpciaccess
+-rw-r--r-- 1 root root 1003 2012-04-08 03:30 ./source/x/x11/slack-desc/libpthread-stubs
+-rw-r--r-- 1 root root 900 2018-02-26 22:57 ./source/x/x11/slack-desc/libxcb
+-rw-r--r-- 1 root root 824 2012-04-08 02:45 ./source/x/x11/slack-desc/libxkbfile
+-rw-r--r-- 1 root root 847 2014-05-13 05:34 ./source/x/x11/slack-desc/libxshmfence
+-rw-r--r-- 1 root root 707 2012-04-08 03:30 ./source/x/x11/slack-desc/listres
+-rw-r--r-- 1 root root 778 2012-04-08 03:31 ./source/x/x11/slack-desc/lndir
+-rw-r--r-- 1 root root 826 2018-02-26 22:57 ./source/x/x11/slack-desc/luit
+-rw-r--r-- 1 root root 818 2012-04-08 03:31 ./source/x/x11/slack-desc/makedepend
+-rw-r--r-- 1 root root 890 2012-04-08 03:31 ./source/x/x11/slack-desc/mkcomposecache
+-rw-r--r-- 1 root root 837 2019-10-28 19:03 ./source/x/x11/slack-desc/mkfontscale
+-rw-r--r-- 1 root root 679 2012-04-08 03:32 ./source/x/x11/slack-desc/oclock
-rw-r--r-- 1 root root 823 2012-04-08 02:44 ./source/x/x11/slack-desc/pixman
-rw-r--r-- 1 root root 732 2018-02-26 22:57 ./source/x/x11/slack-desc/presentproto
-rw-r--r-- 1 root root 731 2012-04-08 03:32 ./source/x/x11/slack-desc/printproto
@@ -12653,12 +12669,12 @@ drwxr-xr-x 2 root root 4096 2020-02-01 19:14 ./source/x/x11/src/data
drwxr-xr-x 2 root root 4096 2015-05-04 05:55 ./source/x/x11/src/doc
-rw-r--r-- 1 root root 333452 2015-05-01 06:18 ./source/x/x11/src/doc/xorg-docs-1.7.1.tar.xz
-rw-r--r-- 1 root root 110976 2012-06-06 02:42 ./source/x/x11/src/doc/xorg-sgml-doctools-1.11.tar.xz
-drwxr-xr-x 2 root root 4096 2020-01-19 19:11 ./source/x/x11/src/driver
+drwxr-xr-x 2 root root 4096 2020-05-19 19:20 ./source/x/x11/src/driver
-rw-r--r-- 1 root root 236544 2011-05-04 23:02 ./source/x/x11/src/driver/xf86-input-acecad-1.5.0.tar.xz
-rw-r--r-- 1 root root 345048 2018-05-29 02:33 ./source/x/x11/src/driver/xf86-input-evdev-2.10.6.tar.xz
-rw-r--r-- 1 root root 291860 2016-11-17 23:02 ./source/x/x11/src/driver/xf86-input-joystick-1.6.3.tar.xz
-rw-r--r-- 1 root root 290104 2016-11-17 04:29 ./source/x/x11/src/driver/xf86-input-keyboard-1.9.0.tar.xz
--rw-r--r-- 1 root root 308644 2019-08-12 02:38 ./source/x/x11/src/driver/xf86-input-libinput-0.29.0.tar.xz
+-rw-r--r-- 1 root root 309420 2020-05-19 06:23 ./source/x/x11/src/driver/xf86-input-libinput-0.30.0.tar.xz
-rw-r--r-- 1 root root 318204 2018-06-19 04:36 ./source/x/x11/src/driver/xf86-input-mouse-1.9.3.tar.xz
-rw-r--r-- 1 root root 229120 2011-06-28 00:52 ./source/x/x11/src/driver/xf86-input-penmount-1.5.0.tar.xz
-rw-r--r-- 1 root root 427964 2018-05-29 03:19 ./source/x/x11/src/driver/xf86-input-synaptics-1.9.1.tar.xz
diff --git a/recompress.sh b/recompress.sh
index 8e9df55e3..8f83de0d1 100755
--- a/recompress.sh
+++ b/recompress.sh
@@ -1271,6 +1271,19 @@ gzip ./source/x/libvdpau/doinst.sh
gzip ./source/x/ttf-tlwg/doinst.sh
gzip ./source/x/xterm/doinst.sh
gzip ./source/x/fontconfig/fontconfig.font.dir.list.diff
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-drop-lang-from-pkgkit-format.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-sleep-less.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-fix-assertion.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-score-hint-on-match.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-0-timestamp-dir-on-sb.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-fix-dtd-id.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-required-freetype-version.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-read-latest-cache.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-fix-1744377.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-fix-dtd.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-fix-test.patch
+gzip ./source/x/fontconfig/fedora-patches/fontconfig-mt.patch
gzip ./source/x/fontconfig/doinst.sh
gzip ./source/x/fontconfig/fontconfig.liberation.diff
gzip ./source/x/fontconfig/fontconfig.dejavu.diff
diff --git a/source/a/shadow/shadow.SlackBuild b/source/a/shadow/shadow.SlackBuild
index 21d4d875e..403268789 100755
--- a/source/a/shadow/shadow.SlackBuild
+++ b/source/a/shadow/shadow.SlackBuild
@@ -24,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=shadow
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-7}
+BUILD=${BUILD:-8}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -192,6 +192,12 @@ if [ "$SHIP_SU" = "NO" ]; then
find $PKG/usr/man -name suauth.5 | xargs rm
fi
+# /etc/suauth doesn't work with PAM, even if configure.ac is hacked to try
+# to turn the feature on, so remove the man pages if we're using PAM:
+if [ -L /lib${LIBDIRSUFFIX}/libpam.so.? ]; then
+ find $PKG/usr/man -name suauth.5 | xargs rm
+fi
+
# /bin/groups is provided by coreutils.
rm -f $PKG/bin/groups
find $PKG -name groups.1 -exec rm {} \+
diff --git a/source/l/libexif/libexif.SlackBuild b/source/l/libexif/libexif.SlackBuild
index 3a0f3319f..384e8f185 100755
--- a/source/l/libexif/libexif.SlackBuild
+++ b/source/l/libexif/libexif.SlackBuild
@@ -24,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=libexif
VERSION=${VERSION:-$(echo libexif-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-2}
+BUILD=${BUILD:-1}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
diff --git a/source/l/libexif/libexif.url b/source/l/libexif/libexif.url
new file mode 100644
index 000000000..a89894e47
--- /dev/null
+++ b/source/l/libexif/libexif.url
@@ -0,0 +1 @@
+https://github.com/libexif/libexif/
diff --git a/source/l/libexif/slack-desc b/source/l/libexif/slack-desc
index ee12ae10c..378cab10b 100644
--- a/source/l/libexif/slack-desc
+++ b/source/l/libexif/slack-desc
@@ -13,7 +13,7 @@ libexif: to store extra information in images such as the JPEG files produced
libexif: by digital cameras. The libexif library allows programs such as
libexif: gthumb to parse, edit, and save EXIF data.
libexif:
-libexif:
+libexif: Homepage: https://libexif.github.io
libexif:
libexif:
libexif:
diff --git a/source/l/oniguruma/oniguruma.SlackBuild b/source/l/oniguruma/oniguruma.SlackBuild
index 68573881b..cde0b2646 100755
--- a/source/l/oniguruma/oniguruma.SlackBuild
+++ b/source/l/oniguruma/oniguruma.SlackBuild
@@ -25,7 +25,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=oniguruma
SRCNAM=oniguruma
VERSION=${VERSION:-$(echo $SRCNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-1}
+BUILD=${BUILD:-2}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -100,6 +100,7 @@ CXXFLAGS="$SLKCFLAGS" \
--localstatedir=/var \
--docdir=/usr/doc/$PKGNAM-$VERSION \
--mandir=/usr/man \
+ --enable-posix-api \
--disable-static \
--build=$ARCH-slackware-linux || exit 1
make $NUMJOBS || make || exit 1
diff --git a/source/l/python-packaging/python-packaging.SlackBuild b/source/l/python-packaging/python-packaging.SlackBuild
index 26d8f4c21..8d3430d7a 100755
--- a/source/l/python-packaging/python-packaging.SlackBuild
+++ b/source/l/python-packaging/python-packaging.SlackBuild
@@ -25,7 +25,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=python-packaging
VERSION=${VERSION:-$(echo packaging-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-2}
+BUILD=${BUILD:-1}
SRCNAM=packaging
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
new file mode 100644
index 000000000..cfbc206f9
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-0-timestamp-dir-on-sb.patch
@@ -0,0 +1,55 @@
+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
new file mode 100644
index 000000000..8b773081f
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-drop-lang-from-pkgkit-format.patch
@@ -0,0 +1,12 @@
+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
new file mode 100644
index 000000000..fda5c2d65
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-fix-1744377.patch
@@ -0,0 +1,122 @@
+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
new file mode 100644
index 000000000..2e337364d
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-fix-assertion.patch
@@ -0,0 +1,144 @@
+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
new file mode 100644
index 000000000..9045fc053
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-fix-dtd-id.patch
@@ -0,0 +1,490 @@
+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
new file mode 100644
index 000000000..51655890d
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-fix-dtd.patch
@@ -0,0 +1,26 @@
+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
new file mode 100644
index 000000000..5ccaabafb
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-fix-test.patch
@@ -0,0 +1,41 @@
+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
new file mode 100644
index 000000000..31a3748c8
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-mt.patch
@@ -0,0 +1,1439 @@
+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
new file mode 100644
index 000000000..8b70dc0a8
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-read-latest-cache.patch
@@ -0,0 +1,228 @@
+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
new file mode 100644
index 000000000..6f7aae3e0
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-required-freetype-version.patch
@@ -0,0 +1,14 @@
+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
new file mode 100644
index 000000000..404d7be84
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-score-hint-on-match.patch
@@ -0,0 +1,36 @@
+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-sleep-less.patch b/source/x/fontconfig/fedora-patches/fontconfig-sleep-less.patch
new file mode 100644
index 000000000..bd9c58c0a
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-sleep-less.patch
@@ -0,0 +1,12 @@
+diff -pruN fontconfig-2.12.91.orig/fc-cache/fc-cache.c fontconfig-2.12.91/fc-cache/fc-cache.c
+--- fontconfig-2.12.91.orig/fc-cache/fc-cache.c 2017-11-20 21:02:20.000000000 +0900
++++ fontconfig-2.12.91/fc-cache/fc-cache.c 2017-12-14 16:59:19.002003145 +0900
+@@ -413,7 +413,7 @@ main (int argc, char **argv)
+ */
+ /* the resolution of mtime on FAT is 2 seconds */
+ if (changed)
+- sleep (2);
++ sleep (1);
+ if (verbose)
+ printf ("%s: %s\n", argv[0], ret ? _("failed") : _("succeeded"));
+ return ret;
diff --git a/source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch b/source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch
new file mode 100644
index 000000000..9505f9724
--- /dev/null
+++ b/source/x/fontconfig/fedora-patches/fontconfig-sysroot.patch
@@ -0,0 +1,285 @@
+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 408dc9f9b..45382460b 100755
--- a/source/x/fontconfig/fontconfig.SlackBuild
+++ b/source/x/fontconfig/fontconfig.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2008, 2009, 2010, 2013, 2017, 2018 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# Copyright 2008, 2009, 2010, 2013, 2017, 2018, 2020 Patrick J. Volkerding, Sebeka, Minnesota, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -87,6 +87,23 @@ zcat $CWD/fontconfig.liberation.diff.gz | patch -p1 --verbose || exit 1
# it out (and possibly follow symlinks, or index ugly bitmapped fonts):
zcat $CWD/fontconfig.font.dir.list.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit 1
+# 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
+
CFLAGS=$SLKCFLAGS \
./configure \
--prefix=/usr \
@@ -99,6 +116,7 @@ CFLAGS=$SLKCFLAGS \
--with-xmldir=/etc/fonts \
--localstatedir=/var \
--enable-static=no \
+ --enable-libxml2 \
--build=$ARCH-slackware-linux || exit 1
make $NUMJOBS || make || exit 1
diff --git a/source/x/fontconfig/fontconfig.url b/source/x/fontconfig/fontconfig.url
new file mode 100644
index 000000000..b5a0de36d
--- /dev/null
+++ b/source/x/fontconfig/fontconfig.url
@@ -0,0 +1 @@
+http://fontconfig.org/release
diff --git a/source/x/fontconfig/slack-desc b/source/x/fontconfig/slack-desc
index 26a83258a..0d222047f 100644
--- a/source/x/fontconfig/slack-desc
+++ b/source/x/fontconfig/slack-desc
@@ -13,7 +13,7 @@ fontconfig: font configuration, customization, and application access.
fontconfig:
fontconfig: Fontconfig is written and maintained by Keith Packard.
fontconfig:
-fontconfig:
+fontconfig: Homepage: https://www.fontconfig.org
fontconfig:
fontconfig:
fontconfig: