diff --git a/.fmf/version b/.fmf/version
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/.fmf/version
@@ -0,0 +1 @@
+1
diff --git a/.gitignore b/.gitignore
index bc18404..8ea9665 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,9 @@ fontconfig-2.8.0.tar.gz
/fontconfig-2.13.96.tar.xz
/fontconfig-2.14.0.tar.xz
/fontconfig-2.14.1.tar.xz
+/fontconfig-2.14.2.tar.xz
+/fontconfig-2.15.0.tar.xz
+/fontconfig-2.16.0.tar.xz
+/fontconfig-2.16.1.tar.xz
+/fontconfig-2.16.2.tar.xz
+/fontconfig-2.17.0.tar.xz
diff --git a/10-sub-pixel-rgb-for-kde.conf b/10-sub-pixel-rgb-for-kde.conf
deleted file mode 100644
index 63fd752..0000000
--- a/10-sub-pixel-rgb-for-kde.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
- Enable sub-pixel rendering with the RGB stripes layout for KDE only
-
-
-
-
- KDE
-
- rgb
-
-
diff --git a/fontconfig-desktop-property.patch b/fontconfig-desktop-property.patch
deleted file mode 100644
index c7a81a3..0000000
--- a/fontconfig-desktop-property.patch
+++ /dev/null
@@ -1,337 +0,0 @@
-From 6715a14f138df01c11110488b7edbf514e4076b4 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH
-Date: Fri, 25 Nov 2022 21:15:32 +0900
-Subject: [PATCH] Add FC_DESKTOP_NAME property
-
-To allow users to have desktop-specific matching rule.
----
- fontconfig/fontconfig.h | 27 ++++++++++---------
- src/fcdefault.c | 58 ++++++++++++++++++++++++++++++++++++++---
- src/fcint.h | 7 +++--
- src/fcobjs.h | 1 +
- src/fcxml.c | 14 +++++-----
- 5 files changed, 82 insertions(+), 25 deletions(-)
-
-diff --git a/fontconfig/fontconfig.h b/fontconfig/fontconfig.h
-index 09292a3..ac5a0b0 100644
---- a/fontconfig/fontconfig.h
-+++ b/fontconfig/fontconfig.h
-@@ -128,6 +128,7 @@ typedef int FcBool;
- #define FC_POSTSCRIPT_NAME "postscriptname" /* String */
- #define FC_FONT_HAS_HINT "fonthashint" /* Bool - true if font has hinting */
- #define FC_ORDER "order" /* Integer */
-+#define FC_DESKTOP_NAME "desktop" /* String */
-
- #define FC_CACHE_SUFFIX ".cache-" FC_CACHE_VERSION
- #define FC_DIR_CACHE_FILE "fonts.cache-" FC_CACHE_VERSION
-@@ -285,7 +286,7 @@ typedef struct _FcObjectSet {
- int sobject;
- const char **objects;
- } FcObjectSet;
--
-+
- typedef enum _FcMatchKind {
- FcMatchPattern, FcMatchFont, FcMatchScan,
- FcMatchKindEnd,
-@@ -400,7 +401,7 @@ FcConfigGetFilename (FcConfig *config,
-
- FcPublic FcChar8 *
- FcConfigFilename (const FcChar8 *url);
--
-+
- FcPublic FcConfig *
- FcConfigCreate (void);
-
-@@ -418,7 +419,7 @@ FcConfigGetCurrent (void);
-
- FcPublic FcBool
- FcConfigUptoDate (FcConfig *config);
--
-+
- FcPublic FcBool
- FcConfigBuildFonts (FcConfig *config);
-
-@@ -548,12 +549,12 @@ FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b);
- #define FC_CHARSET_DONE ((FcChar32) -1)
-
- FcPublic FcChar32
--FcCharSetFirstPage (const FcCharSet *a,
-+FcCharSetFirstPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next);
-
- FcPublic FcChar32
--FcCharSetNextPage (const FcCharSet *a,
-+FcCharSetNextPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next);
-
-@@ -609,7 +610,7 @@ FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file);
-
- FcPublic FcCache *
- FcDirCacheRescan (const FcChar8 *dir, FcConfig *config);
--
-+
- FcPublic FcCache *
- FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config);
-
-@@ -772,7 +773,7 @@ FcFontSetMatch (FcConfig *config,
-
- FcPublic FcPattern *
- FcFontMatch (FcConfig *config,
-- FcPattern *p,
-+ FcPattern *p,
- FcResult *result);
-
- FcPublic FcPattern *
-@@ -890,10 +891,10 @@ FcPatternHash (const FcPattern *p);
-
- FcPublic FcBool
- FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
--
-+
- FcPublic FcBool
- FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append);
--
-+
- FcPublic FcResult
- FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v);
-
-@@ -956,7 +957,7 @@ FcPatternGetRange (const FcPattern *p, const char *object, int id, FcRange **r);
-
- FcPublic FcPattern *
- FcPatternVaBuild (FcPattern *p, va_list va);
--
-+
- FcPublic FcPattern *
- FcPatternBuild (FcPattern *p, ...) FC_ATTRIBUTE_SENTINEL(0);
-
-@@ -1025,10 +1026,10 @@ FcStrCopy (const FcChar8 *s);
-
- FcPublic FcChar8 *
- FcStrCopyFilename (const FcChar8 *s);
--
-+
- FcPublic FcChar8 *
- FcStrPlus (const FcChar8 *s1, const FcChar8 *s2);
--
-+
- FcPublic void
- FcStrFree (FcChar8 *s);
-
-@@ -1145,7 +1146,7 @@ _FCFUNCPROTOEND
- * Deprecated functions are placed here to help users fix their code without
- * digging through documentation
- */
--
-+
- #define FcConfigGetRescanInverval FcConfigGetRescanInverval_REPLACE_BY_FcConfigGetRescanInterval
- #define FcConfigSetRescanInverval FcConfigSetRescanInverval_REPLACE_BY_FcConfigSetRescanInterval
-
-diff --git a/src/fcdefault.c b/src/fcdefault.c
-index a9a3b72..6995216 100644
---- a/src/fcdefault.c
-+++ b/src/fcdefault.c
-@@ -211,28 +211,73 @@ retry:
- return prgname;
- }
-
-+static FcChar8 *default_desktop_name;
-+
-+FcChar8 *
-+FcGetDesktopName (void)
-+{
-+ FcChar8 *desktop_name;
-+retry:
-+ desktop_name = fc_atomic_ptr_get (&default_desktop_name);
-+ if (!desktop_name)
-+ {
-+ char *s = getenv ("XDG_CURRENT_DESKTOP");
-+
-+ if (!s)
-+ desktop_name = FcStrdup ("");
-+ else
-+ desktop_name = FcStrdup (s);
-+ if (!desktop_name)
-+ {
-+ fprintf (stderr, "Fontconfig error: out of memory in %s\n",
-+ __FUNCTION__);
-+ return NULL;
-+ }
-+
-+ if (!fc_atomic_ptr_cmpexch(&default_desktop_name, NULL, desktop_name))
-+ {
-+ free (desktop_name);
-+ goto retry;
-+ }
-+ }
-+ if (desktop_name && !desktop_name[0])
-+ return NULL;
-+
-+ return desktop_name;
-+}
-+
- void
- FcDefaultFini (void)
- {
- FcChar8 *lang;
- FcStrSet *langs;
- FcChar8 *prgname;
-+ FcChar8 *desktop;
-
- lang = fc_atomic_ptr_get (&default_lang);
-- if (lang && fc_atomic_ptr_cmpexch (&default_lang, lang, NULL)) {
-+ if (lang && fc_atomic_ptr_cmpexch (&default_lang, lang, NULL))
-+ {
- free (lang);
- }
-
- langs = fc_atomic_ptr_get (&default_langs);
-- if (langs && fc_atomic_ptr_cmpexch (&default_langs, langs, NULL)) {
-+ if (langs && fc_atomic_ptr_cmpexch (&default_langs, langs, NULL))
-+ {
- FcRefInit (&langs->ref, 1);
- FcStrSetDestroy (langs);
- }
-
- prgname = fc_atomic_ptr_get (&default_prgname);
-- if (prgname && fc_atomic_ptr_cmpexch (&default_prgname, prgname, NULL)) {
-+ if (prgname && fc_atomic_ptr_cmpexch (&default_prgname, prgname, NULL))
-+ {
- free (prgname);
- }
-+
-+ desktop = fc_atomic_ptr_get (&default_desktop_name);
-+ if (desktop && fc_atomic_ptr_cmpexch(&default_desktop_name, desktop, NULL))
-+ {
-+ free (desktop);
-+ }
- }
-
- void
-@@ -336,6 +381,13 @@ FcDefaultSubstitute (FcPattern *pattern)
- FcPatternObjectAddString (pattern, FC_PRGNAME_OBJECT, prgname);
- }
-
-+ if (FcPatternObjectGet (pattern, FC_DESKTOP_NAME_OBJECT, 0, &v) == FcResultNoMatch)
-+ {
-+ FcChar8 *desktop = FcGetDesktopName ();
-+ if (desktop)
-+ FcPatternObjectAddString (pattern, FC_DESKTOP_NAME_OBJECT, desktop);
-+ }
-+
- if (!FcPatternFindObjectIter (pattern, &iter, FC_ORDER_OBJECT))
- FcPatternObjectAddInteger (pattern, FC_ORDER_OBJECT, 0);
- }
-diff --git a/src/fcint.h b/src/fcint.h
-index c615b66..78cee54 100644
---- a/src/fcint.h
-+++ b/src/fcint.h
-@@ -199,7 +199,7 @@ typedef struct _FcValueList {
- } FcValueList;
-
- #define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList)
--
-+
- typedef int FcObject;
-
- /* The 1024 is to leave some room for future added internal objects, such
-@@ -238,7 +238,7 @@ struct _FcPattern {
- FcFontSetFonts(fs)[i], \
- FcPattern) : \
- fs->fonts[i])
--
-+
- typedef enum _FcOp {
- FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet,
- FcOpNil,
-@@ -909,6 +909,9 @@ FcGetDefaultLang (void);
- FcPrivate FcChar8 *
- FcGetPrgname (void);
-
-+FcPrivate FcChar8 *
-+FcGetDesktopName (void);
-+
- FcPrivate void
- FcDefaultFini (void);
-
-diff --git a/src/fcobjs.h b/src/fcobjs.h
-index acc0471..1cd8ed3 100644
---- a/src/fcobjs.h
-+++ b/src/fcobjs.h
-@@ -74,4 +74,5 @@ FC_OBJECT (FONT_VARIATIONS, FcTypeString, NULL)
- FC_OBJECT (VARIABLE, FcTypeBool, FcCompareBool)
- FC_OBJECT (FONT_HAS_HINT, FcTypeBool, FcCompareBool)
- FC_OBJECT (ORDER, FcTypeInteger, FcCompareNumber)
-+FC_OBJECT (DESKTOP_NAME, FcTypeString, NULL)
- /* ^-------------- Add new objects here. */
-diff --git a/src/fcxml.c b/src/fcxml.c
-index 82a46f2..74c892d 100644
---- a/src/fcxml.c
-+++ b/src/fcxml.c
-@@ -367,7 +367,7 @@ typedef enum _FcElement {
- FcElementDescription,
- FcElementRemapDir,
- FcElementResetDirs,
--
-+
- FcElementRescan,
-
- FcElementPrefer,
-@@ -731,7 +731,7 @@ FcTypecheckExpr (FcConfigParse *parse, FcExpr *expr, FcType type)
- if (o)
- FcTypecheckValue (parse, o->type, type);
- }
-- else
-+ else
- FcConfigMessage (parse, FcSevereWarning,
- "invalid constant used : %s",
- expr->u.constant);
-@@ -794,7 +794,7 @@ FcTestCreate (FcConfigParse *parse,
- if (test)
- {
- const FcObjectType *o;
--
-+
- test->kind = kind;
- test->qual = qual;
- test->object = FcObjectFromName ((const char *) field);
-@@ -1533,7 +1533,7 @@ FcStrtod (char *s, char **end)
- {
- char buf[128];
- int slen = strlen (s);
--
-+
- if (slen + dlen > (int) sizeof (buf))
- {
- if (end)
-@@ -3101,7 +3101,7 @@ FcParsePattern (FcConfigParse *parse)
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
--
-+
- while ((vstack = FcVStackPeek (parse)))
- {
- switch ((int) vstack->tag) {
-@@ -3176,7 +3176,7 @@ FcEndElement(void *userData, const XML_Char *name FC_UNUSED)
- case FcElementRescan:
- FcParseRescan (parse);
- break;
--
-+
- case FcElementPrefer:
- FcParseFamilies (parse, FcVStackPrefer);
- break;
-@@ -3512,7 +3512,7 @@ FcConfigParseAndLoadFromMemoryInternal (FcConfig *config,
- XML_SetDoctypeDeclHandler (p, FcStartDoctypeDecl, FcEndDoctypeDecl);
- XML_SetElementHandler (p, FcStartElement, FcEndElement);
- XML_SetCharacterDataHandler (p, FcCharacterData);
--
-+
- #endif /* ENABLE_LIBXML2 */
-
- #ifndef ENABLE_LIBXML2
---
-2.38.1
-
diff --git a/fontconfig-disable-network-required-test.patch b/fontconfig-disable-network-required-test.patch
index 8481f39..e048b49 100644
--- a/fontconfig-disable-network-required-test.patch
+++ b/fontconfig-disable-network-required-test.patch
@@ -1,7 +1,87 @@
-diff -pruN fontconfig-2.13.93.orig/test/run-test.sh fontconfig-2.13.93/test/run-test.sh
---- fontconfig-2.13.93.orig/test/run-test.sh 2020-11-28 10:56:42.000000000 +0900
-+++ fontconfig-2.13.93/test/run-test.sh 2020-11-28 12:39:57.345644527 +0900
-@@ -421,18 +421,18 @@ rm -rf "$MYCACHEBASEDIR" "$MYCONFIG" my-
+diff -pruN fontconfig-2.17.0.orig/test/meson.build fontconfig-2.17.0/test/meson.build
+--- fontconfig-2.17.0.orig/test/meson.build 2025-06-27 12:12:04.000000000 +0900
++++ fontconfig-2.17.0/test/meson.build 2025-06-27 14:41:08.843726446 +0900
+@@ -1,16 +1,16 @@
+-fetch_test_fonts = custom_target(
+- 'fetch_test_fonts',
+- output: 'testfonts',
+- command: [
+- python3,
+- join_paths(meson.project_source_root(), 'build-aux', 'fetch-testfonts.py'),
+- '--target-dir',
+- '@BUILD_ROOT@/testfonts',
+- '--try-symlink',
+- ],
+- build_by_default: false,
+- build_always_stale: true,
+-)
++#fetch_test_fonts = custom_target(
++# 'fetch_test_fonts',
++# output: 'testfonts',
++# command: [
++# python3,
++# join_paths(meson.project_source_root(), 'build-aux', 'fetch-testfonts.py'),
++# '--target-dir',
++# '@BUILD_ROOT@/testfonts',
++# '--try-symlink',
++# ],
++# build_by_default: false,
++# build_always_stale: true,
++#)
+
+ tests = [
+ ['test-bz89617.c', {'c_args': ['-DSRCDIR="@0@"'.format(meson.current_source_dir())]}],
+@@ -33,7 +33,7 @@ if host_machine.system() != 'windows'
+ ]
+ tests_not_parallel += [
+ # FIXME: this needs NotoSans-hinted.zip font downloaded and unpacked into test build directory! see run-test.sh
+- ['test-crbug1004254.c', {'dependencies': dependency('threads')}], # for pthread
++ # ['test-crbug1004254.c', {'dependencies': dependency('threads')}], # for pthread
+ ['test-mt-fccfg.c', {'include_directories': include_directories('../src'), 'dependencies': dependency('threads')}],
+ ]
+
+@@ -74,10 +74,10 @@ foreach test_data : tests + tests_not_pa
+ endforeach
+
+
+-if get_option('fontations').enabled()
+- rust = import('rust')
+- rust.test('fc_fontations_rust_tests', fc_fontations, link_with: [libfontconfig_internal], depends: fetch_test_fonts, env: ['builddir=@0@'.format(meson.project_build_root())],)
+-endif
++#if get_option('fontations').enabled()
++# rust = import('rust')
++# rust.test('fc_fontations_rust_tests', fc_fontations, link_with: [libfontconfig_internal], depends: fetch_test_fonts, env: ['builddir=@0@'.format(meson.project_build_root())],)
++#endif
+
+ fs = import('fs')
+
+@@ -92,14 +92,14 @@ if host_machine.system() != 'windows'
+
+ test('run_test_sh', find_program('run-test.sh'), timeout: 600, env: ['srcdir=@0@'.format(meson.current_source_dir()), 'builddir=@0@'.format(meson.current_build_dir()), 'EXEEXT=@0@'.format(conf.get('EXEEXT')), 'VERBOSE=1'])
+
+- if pytest.found()
+- test('pytest', pytest, args: ['--tap'],
+- workdir: meson.current_source_dir(),
+- env: ['builddir=@0@'.format(meson.project_build_root())],
+- protocol: 'tap',
+- timeout: 600,
+- depends: fetch_test_fonts)
+- endif
++# if pytest.found()
++# test('pytest', pytest, args: ['--tap'],
++# workdir: meson.current_source_dir(),
++# env: ['builddir=@0@'.format(meson.project_build_root())],
++# protocol: 'tap',
++# timeout: 600,
++# depends: fetch_test_fonts)
++# endif
+ endif
+
+ if jsonc_dep.found()
+diff -pruN fontconfig-2.17.0.orig/test/run-test.sh fontconfig-2.17.0/test/run-test.sh
+--- fontconfig-2.17.0.orig/test/run-test.sh 2025-06-27 12:12:04.000000000 +0900
++++ fontconfig-2.17.0/test/run-test.sh 2025-06-27 14:39:19.098581228 +0900
+@@ -521,18 +521,18 @@ rm -rf "$MYCACHEBASEDIR" "$MYCONFIG" "$B
fi # if [ "x$EXEEXT" = "x" ]
@@ -11,7 +91,7 @@ diff -pruN fontconfig-2.13.93.orig/test/run-test.sh fontconfig-2.13.93/test/run-
- 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"
+- touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR"
- fi
- "$BUILDTESTDIR"/test-crbug1004254
-else
@@ -21,7 +101,7 @@ diff -pruN fontconfig-2.13.93.orig/test/run-test.sh fontconfig-2.13.93/test/run-
+# 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"
++# touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR"
+# fi
+# "$BUILDTESTDIR"/test-crbug1004254
+#else
diff --git a/fontconfig-drop-lang-from-pkgkit-format.patch b/fontconfig-drop-lang-from-pkgkit-format.patch
index 8b77308..abece6d 100644
--- a/fontconfig-drop-lang-from-pkgkit-format.patch
+++ b/fontconfig-drop-lang-from-pkgkit-format.patch
@@ -1,12 +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:-|basename}: \"%{family[0]:-}\" \"%{style[0]:-}\""
- #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}}"
-
+diff -pruN fontconfig-2.16.1.orig/src/fcformat.c fontconfig-2.16.1/src/fcformat.c
+--- fontconfig-2.16.1.orig/src/fcformat.c 2025-03-13 20:16:47.000000000 +0900
++++ fontconfig-2.16.1/src/fcformat.c 2025-03-13 20:42:03.633324643 +0900
+@@ -77,7 +77,7 @@
+ #define FCCAT_FORMAT "\"%{file|basename|cescape}\" %{index} \"%{-file{%{=unparse|cescape}}}\""
+ #define FCMATCH_FORMAT "%{file:-|basename}: \"%{family[0]:-}\" \"%{style[0]:-}\""
+ #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
+ message (const char *fmt, ...)
diff --git a/fontconfig-fix-crash.patch b/fontconfig-fix-crash.patch
new file mode 100644
index 0000000..c52b33d
--- /dev/null
+++ b/fontconfig-fix-crash.patch
@@ -0,0 +1,28 @@
+From b9bec06d73340f1b5727302d13ac3df307b7febc Mon Sep 17 00:00:00 2001
+From: Akira TAGOH
+Date: Mon, 30 Jun 2025 09:05:18 +0900
+Subject: [PATCH] Fix a heap buffer overflow
+
+https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/481
+
+Changelog: fixed
+---
+ src/fcfreetype.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/fcfreetype.c b/src/fcfreetype.c
+index 7a4d9811..0a87d27a 100644
+--- a/src/fcfreetype.c
++++ b/src/fcfreetype.c
+@@ -2661,7 +2661,7 @@ FcFontCapabilities (FT_Face face)
+ goto bail;
+
+ maxsize = (((FT_ULong)gpos_count + (FT_ULong)gsub_count) * OTLAYOUT_LEN +
+- (issilgraphitefont ? strlen(fcSilfCapability) : 0));
++ (issilgraphitefont ? strlen(fcSilfCapability) + 1: 0));
+ complex_ = malloc (sizeof (FcChar8) * maxsize);
+ if (!complex_)
+ goto bail;
+--
+2.50.0
+
diff --git a/fontconfig-fix-remap.patch b/fontconfig-fix-remap.patch
deleted file mode 100644
index 5809a0b..0000000
--- a/fontconfig-fix-remap.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From fc0e9a78d2fe3b26f0b93c2a99b160e75e2a9f89 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH
-Date: Wed, 28 Sep 2022 21:39:09 +0900
-Subject: [PATCH 1/3] Real fix of 91114d18c
-
-The change in 91114d18c broke remapping font paths.
-
-Patch from Mattias Clasen
-
-Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/331
----
- src/fcstr.c | 6 +-----
- 1 file changed, 1 insertion(+), 5 deletions(-)
-
-diff --git a/src/fcstr.c b/src/fcstr.c
-index 3fe518f..5ce65da 100644
---- a/src/fcstr.c
-+++ b/src/fcstr.c
-@@ -1467,7 +1467,6 @@ FcStrSetAddFilenamePairWithSalt (FcStrSet *set, const FcChar8 *a, const FcChar8
- {
- FcChar8 *new_a = NULL;
- FcChar8 *new_b = NULL;
-- FcChar8 *rs = NULL;
- FcBool ret;
-
- if (a)
-@@ -1487,10 +1486,7 @@ FcStrSetAddFilenamePairWithSalt (FcStrSet *set, const FcChar8 *a, const FcChar8
- }
- }
- /* Override maps with new one if exists */
-- if (FcStrSetMemberAB (set, new_a, new_b, &rs))
-- {
-- FcStrSetDel (set, rs);
-- }
-+ FcStrSetDel (set, new_a);
- ret = FcStrSetAddTriple (set, new_a, new_b, salt);
- if (new_a)
- FcStrFree (new_a);
---
-2.37.3
-
-From a10d07682a09ce5effbd121920b119618f4b7775 Mon Sep 17 00:00:00 2001
-From: Akira TAGOH
-Date: Wed, 28 Sep 2022 23:30:06 +0900
-Subject: [PATCH 2/3] Fix test cases for wrong use of remap-dir
-
----
- test/run-test.sh | 12 +++++++++---
- 1 file changed, 9 insertions(+), 3 deletions(-)
-
-diff --git a/test/run-test.sh b/test/run-test.sh
-index 1cedb8d..2b8a412 100644
---- a/test/run-test.sh
-+++ b/test/run-test.sh
-@@ -177,7 +177,10 @@ $FCCACHE "$FONTDIR"
- sleep 1
- ls -l "$CACHEDIR" > out1
- TESTTMPDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX)
--sed "s!@FONTDIR@!$TESTTMPDIR/fonts!
-+# Once font dir is remapped, we could use $FONTDIR as different one in theory.
-+# but we don't use it here and to avoid duplicate entries, set the non-existing
-+# directory here.
-+sed "s!@FONTDIR@!$FONTDIR/a!
- s!@REMAPDIR@!$TESTTMPDIR/fonts!
- s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > bind-fonts.conf
- echo "$BWRAP --bind / / --bind \"$CACHEDIR\" \"$TESTTMPDIR\"/cache.dir --bind \"$FONTDIR\" \"$TESTTMPDIR\"/fonts --bind .. \"$TESTTMPDIR\"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE \"$TESTTMPDIR\"/build/test/bind-fonts.conf \"$TESTTMPDIR\"/build/fc-match/fc-match\"$EXEEXT\" -f \"%{file}\n\" \":foundry=Misc\" > xxx"
-@@ -273,7 +276,10 @@ sleep 1
- (cd "$CACHEDIR"; ls -1 --color=no ./*cache*) > out1
- TESTTMPDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX)
- mkdir -p "$TESTTMPDIR"/cache.dir
--sed "s!@FONTDIR@!$TESTTMPDIR/fonts!
-+# Once font dir is remapped, we could use $FONTDIR as different one in theory.
-+# but we don't use it here and to avoid duplicate entries, set the non-existing
-+# directory here.
-+sed "s!@FONTDIR@!$FONTDIR/a!
- s!@REMAPDIR@!$TESTTMPDIR/fonts!
- s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > bind-fonts.conf
- $BWRAP --bind / / --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind .. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/fc-cache/fc-cache"$EXEEXT" "$TESTTMPDIR"/fonts
---
-2.37.3
-
diff --git a/fontconfig-lower-nonlatin-conf.patch b/fontconfig-lower-nonlatin-conf.patch
new file mode 100644
index 0000000..3ff373a
--- /dev/null
+++ b/fontconfig-lower-nonlatin-conf.patch
@@ -0,0 +1,42 @@
+diff -pruN fontconfig-2.16.0.orig/conf.d/Makefile.am fontconfig-2.16.0/conf.d/Makefile.am
+--- fontconfig-2.16.0.orig/conf.d/Makefile.am 2025-01-18 00:15:05.000000000 +0900
++++ fontconfig-2.16.0/conf.d/Makefile.am 2025-01-18 00:38:32.245398277 +0900
+@@ -47,7 +47,7 @@ CONF_LINKS = \
+ 60-generic.conf \
+ 60-latin.conf \
+ 65-fonts-persian.conf \
+- 65-nonlatin.conf \
++ 69-nonlatin.conf \
+ 69-unifont.conf \
+ 80-delicious.conf \
+ 90-synthetic.conf
+@@ -95,7 +95,7 @@ template_DATA = \
+ 60-latin.conf \
+ 65-fonts-persian.conf \
+ 65-khmer.conf \
+- 65-nonlatin.conf \
++ 69-nonlatin.conf \
+ 69-unifont.conf \
+ 70-no-bitmaps.conf \
+ 70-no-bitmaps-and-emoji.conf \
+diff -pruN fontconfig-2.16.0.orig/conf.d/meson.build fontconfig-2.16.0/conf.d/meson.build
+--- fontconfig-2.16.0.orig/conf.d/meson.build 2025-01-18 00:15:05.000000000 +0900
++++ fontconfig-2.16.0/conf.d/meson.build 2025-01-18 00:38:43.243595743 +0900
+@@ -33,7 +33,7 @@ conf_files = [
+ '60-latin.conf',
+ '65-fonts-persian.conf',
+ '65-khmer.conf',
+- '65-nonlatin.conf',
++ '69-nonlatin.conf',
+ '69-unifont.conf',
+ '70-no-bitmaps.conf',
+ '70-no-bitmaps-and-emoji.conf',
+@@ -64,7 +64,7 @@ conf_links = [
+ '60-generic.conf',
+ '60-latin.conf',
+ '65-fonts-persian.conf',
+- '65-nonlatin.conf',
++ '69-nonlatin.conf',
+ '69-unifont.conf',
+ '80-delicious.conf',
+ '90-synthetic.conf',
diff --git a/fontconfig.spec b/fontconfig.spec
index 008bd62..1bc63c7 100644
--- a/fontconfig.spec
+++ b/fontconfig.spec
@@ -4,32 +4,33 @@
Summary: Font configuration and customization library
Name: fontconfig
-Version: 2.14.1
-Release: 2%{?dist}
+Version: 2.17.0
+Release: 3%{?dist}
# src/ftglue.[ch] is in Public Domain
# src/fccache.c contains Public Domain code
+## https://gitlab.com/fedora/legal/fedora-license-data/-/issues/177
# fc-case/CaseFolding.txt is in the UCD
# otherwise MIT
-License: MIT and Public Domain and UCD
+License: HPND AND LicenseRef-Fedora-Public-Domain AND Unicode-DFS-2016
Source: http://fontconfig.org/release/%{name}-%{version}.tar.xz
URL: http://fontconfig.org
Source1: 25-no-bitmap-fedora.conf
Source2: fc-cache
-Source3: 10-sub-pixel-rgb-for-kde.conf
# https://bugzilla.redhat.com/show_bug.cgi?id=140335
Patch0: %{name}-sleep-less.patch
Patch4: %{name}-drop-lang-from-pkgkit-format.patch
Patch5: %{name}-disable-network-required-test.patch
-Patch6: %{name}-desktop-property.patch
+Patch6: %{name}-lower-nonlatin-conf.patch
+Patch7: %{name}-fix-crash.patch
BuildRequires: libxml2-devel
BuildRequires: freetype-devel >= %{freetype_version}
BuildRequires: fontpackages-devel
-BuildRequires: autoconf automake libtool gettext
+BuildRequires: gettext
BuildRequires: gperf
BuildRequires: docbook-utils docbook-utils-pdf
-BuildRequires: make
+BuildRequires: meson ninja-build gcc
Requires: fonts-filesystem freetype
# Register DTD system-wide to make validation work by default
@@ -71,41 +72,50 @@ which is useful for developing applications that uses fontconfig.
%prep
%autosetup -p1
+# To reduce a maintenance cost of fontconfig-lower-nonlatin-conf.patch
+mv conf.d/65-nonlatin.conf conf.d/69-nonlatin.conf
%build
-# We don't want to rebuild the docs, but we want to install the included ones.
-export HASDOCBOOK=no
-
-for i in doc/*.fncs; do
- touch -r $i ${i//.fncs/.sgml}
-done
-autoreconf
-%configure --with-add-fonts=/usr/share/X11/fonts/Type1,/usr/share/X11/fonts/TTF,/usr/local/share/fonts \
- --enable-libxml2 \
- --disable-static --with-cache-dir=/usr/lib/fontconfig/cache
-
-make %{?_smp_mflags}
+%meson -Ddoc=disabled -Dcache-build=disabled -Dxml-backend=libxml2 \
+ -Dadditional-fonts-dirs=/usr/share/X11/fonts/Type1,/usr/share/X11/fonts/TTF,/usr/local/share/fonts \
+ -Dcache-dir=/usr/lib/fontconfig/cache \
+ --default-library=shared
+%meson_build
%install
-make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
-
-find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
+%meson_install
install -p -m 0644 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d
ln -s %{_fontconfig_templatedir}/25-unhint-nonlatin.conf $RPM_BUILD_ROOT%{_fontconfig_confdir}/
-# Use conditional conf instead
+# Use implied value to allow the use of conditional conf
rm $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d/10-sub-pixel-*.conf
-install -p -m 0644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d
-# move installed doc files back to build directory to package them
-# in the right place
-mv $RPM_BUILD_ROOT%{_docdir}/fontconfig/* .
-rmdir $RPM_BUILD_ROOT%{_docdir}/fontconfig/
+# Do not enable bitmap-related conf
+rm $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d/70-*bitmaps*.conf
+
+# Install docs manually
+install -d $RPM_BUILD_ROOT%{_mandir}/man1
+install -d $RPM_BUILD_ROOT%{_mandir}/man3
+install -d $RPM_BUILD_ROOT%{_mandir}/man5
+for f in doc/*.1; do
+ install -p -m 0644 $f $RPM_BUILD_ROOT%{_mandir}/man1
+done
+for f in doc/*.3; do
+ install -p -m 0644 $f $RPM_BUILD_ROOT%{_mandir}/man3
+done
+for f in doc/*.5; do
+ install -p -m 0644 $f $RPM_BUILD_ROOT%{_mandir}/man5
+done
+for f in doc/*.txt doc/*.pdf doc/*.html; do
+ install -p -m 0644 $f .
+done
# adjust the timestamp to avoid conflicts for multilib
touch -r doc/fontconfig-user.sgml fontconfig-user.txt
touch -r doc/fontconfig-user.sgml fontconfig-user.html
+touch -r doc/fontconfig-devel.sgml fontconfig-devel.txt
+touch -r doc/fontconfig-devel.sgml fontconfig-devel.html
# rename fc-cache binary
mv $RPM_BUILD_ROOT%{_bindir}/fc-cache $RPM_BUILD_ROOT%{_bindir}/fc-cache-%{__isa_bits}
@@ -120,7 +130,7 @@ install -p -m 0755 %{SOURCE2} $RPM_BUILD_ROOT%{_bindir}/fc-cache
cat %{name}-conf.lang >> %{name}.lang
%check
-VERBOSE=1 make check
+%meson_test
%post
umask 0022
@@ -157,7 +167,7 @@ if [ $1 == 0 ] && [ -e %{_sysconfdir}/xml/catalog ]; then
fi
%files -f %{name}.lang
-%doc README AUTHORS
+%doc README.md AUTHORS
%doc fontconfig-user.txt fontconfig-user.html
%doc %{_fontconfig_confdir}/README
%license COPYING
@@ -177,6 +187,7 @@ fi
# If you want to do so, you should use local.conf instead.
%config %{_fontconfig_masterdir}/fonts.conf
%config(noreplace) %{_fontconfig_confdir}/*.conf
+%dir /usr/lib/fontconfig
%dir /usr/lib/fontconfig/cache
%{_mandir}/man1/*
%{_mandir}/man5/*
@@ -190,9 +201,93 @@ fi
%{_datadir}/gettext/its/fontconfig.loc
%files devel-doc
-%doc fontconfig-devel.txt fontconfig-devel
+%doc fontconfig-devel.txt fontconfig-devel.html
%changelog
+* Wed Jul 23 2025 Fedora Release Engineering - 2.17.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
+
+* Mon Jun 30 2025 Akira TAGOH - 2.17.0-2
+- Backport a patch to fix a crash with Graphite fonts
+- Drop 70-*bitmaps*.conf from /etc/fonts/conf.d so far.
+ Resolves: rhbz#2375426
+
+* Fri Jun 27 2025 Akira TAGOH - 2.17.0-1
+- New upstream release.
+ Resolves: rhbz#2375126
+
+* Fri Apr 11 2025 Akira TAGOH - 2.16.2-1
+- New upstream release.
+
+* Thu Mar 13 2025 Akira TAGOH - 2.16.1-1
+- New upstream release.
+
+* Mon Jan 27 2025 Akira TAGOH - 2.16.0-2
+- Fix endian detection.
+ Resolves: rhbz#2341757
+
+* Sat Jan 18 2025 Akira TAGOH - 2.16.0-1
+- New upstream release.
+ Resolves: rhbz#2338618
+- Use meson instead of autotools to build.
+- Disable meson test on s390x temporarily.
+
+* Thu Jan 16 2025 Fedora Release Engineering - 2.15.0-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
+
+* Thu Aug 1 2024 Akira TAGOH - 2.15.0-8
+- Fix a memory leak and potentially uninitialized values.
+
+* Wed Jul 17 2024 Fedora Release Engineering - 2.15.0-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
+
+* Fri Jun 7 2024 Akira TAGOH - 2.15.0-6
+- Own /usr/lib/fontconfig
+ Resolves: rhbz#2284076
+
+* Mon Apr 29 2024 Michael Kuhn - 2.15.0-5
+- Fix emoji fonts being disabled when bitmap fonts were disabled
+
+* Sat Feb 10 2024 Akira TAGOH - 2.15.0-4
+- Delete .uuid with fc-cache -f.
+ Resolves: rhbz#1761885
+
+* Wed Jan 24 2024 Fedora Release Engineering - 2.15.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Fri Jan 19 2024 Fedora Release Engineering - 2.15.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Fri Dec 22 2023 Akira TAGOH - 2.15.0-1
+- New upstream release.
+ Resolves: rhbz#2255623
+
+* Thu Aug 17 2023 Akira TAGOH - 2.14.2-5
+- Update 65-nonlatin.conf to 69-nonlatin.conf
+ This basically provides substitutes for certain languages and is helpful
+ to determine default behavior though, we have per-package config for similar purpose.
+ Since 65 is mostly used for default fonts and this config prevents some behavior for
+ packages named something coming later than "nonlatin" in the alphabetical order.
+ So moving this to the safer priority.
+ This would fixes an issue, particularly Lohit Marathi vs Lohit Devanagari after
+ updating their priorities from 65 to 66.
+
+* Wed Jul 19 2023 Fedora Release Engineering - 2.14.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Fri Jun 16 2023 Akira TAGOH - 2.14.2-3
+- Drop 10-sub-pixel-rgb-for-kde.conf
+ Resolves: rhbz#2212512
+
+* Tue Apr 4 2023 Akira TAGOH - 2.14.2-2
+- Migrated license tag to SPDX.
+
+* Fri Jan 27 2023 Akira TAGOH - 2.14.2-1
+- New upstream release.
+
+* Thu Jan 19 2023 Fedora Release Engineering - 2.14.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
* Sat Nov 26 2022 Akira TAGOH - 2.14.1-2
- Enable RGB stripes layout for sub-pixel rendering on KDE only.
Resolves: rhbz#2137825
diff --git a/plans/basic.fmf b/plans/basic.fmf
new file mode 100644
index 0000000..c1627f9
--- /dev/null
+++ b/plans/basic.fmf
@@ -0,0 +1,5 @@
+summary: Basic smoke test
+discover:
+ how: fmf
+execute:
+ how: tmt
diff --git a/sources b/sources
index 51a9e53..9a3bb99 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (fontconfig-2.14.1.tar.xz) = ba42e6f90ec92914895d2157c872c373adfc17be791b92253bcc40e85674a84e43c08ab2b37c3ae85b53b2e7bd2a7847abb479043f303b732c08eeac3ee733db
+SHA512 (fontconfig-2.17.0.tar.xz) = dd64905c3e0e5c5881df505b8f0bea594bbac5ce145f57aedcd7130978cd285491497198d8f2d6ed26f7b2abb31268dc3ff97aa75ce998b8e57f2d5c75b240b4
diff --git a/tests/basic/main.fmf b/tests/basic/main.fmf
new file mode 100644
index 0000000..d6c06ec
--- /dev/null
+++ b/tests/basic/main.fmf
@@ -0,0 +1,3 @@
+summary: Concise summary describing what the test does
+test: ./test.sh
+framework: beakerlib
diff --git a/tests/basic/test.sh b/tests/basic/test.sh
new file mode 100755
index 0000000..10de1b4
--- /dev/null
+++ b/tests/basic/test.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
+. /usr/share/beakerlib/beakerlib.sh || exit 1
+
+rlJournalStart
+ rlPhaseStartSetup
+ rlRun "tmp=\$(mktemp -d)" 0 "Create tmp directory"
+ rlRun "pushd $tmp"
+ rlRun "set -o pipefail"
+ rlPhaseEnd
+
+ rlPhaseStartTest
+ rlRun "fc-match" 0 "Check fc-match"
+ rlRun "fc-list" 0 "Check fc-list"
+ rlRun "fc-scan /usr/share/fonts" 0 "Check fc-scan"
+ rlPhaseEnd
+
+ rlPhaseStartCleanup
+ rlRun "popd"
+ rlRun "rm -r $tmp" 0 "Remove tmp directory"
+ rlPhaseEnd
+rlJournalEnd
diff --git a/tests/tests.yml b/tests/tests.yml
deleted file mode 100644
index d3fa1ed..0000000
--- a/tests/tests.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-- hosts: localhost
- roles:
- - role: standard-test-basic
- tags:
- - classic
- required_packages:
- - fontconfig
- tests:
- - fcmatch_test:
- dir: .
- run: fc-match
- - fclist_test:
- dir: .
- run: fc-list