Compare commits

..

No commits in common. "rawhide" and "f36" have entirely different histories.

15 changed files with 498 additions and 330 deletions

View file

@ -1 +0,0 @@
1

6
.gitignore vendored
View file

@ -38,9 +38,3 @@ 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

View file

@ -0,0 +1,18 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<description>Enable sub-pixel rendering with the RGB stripes layout for KDE only</description>
<!-- Enable sub-pixel rendering -->
<match target="font">
<!--
This sort of configuration is available on the major desktop environments
and we don't have to break it with "assign" unconditionally. however, we
want to set something for others. So we use "append" here to get this working
in both cases so that most clients would takes a look at the first place only.
-->
<test name="desktop" compare="contains">
<string>KDE</string>
</test>
<edit name="rgba" mode="append"><const>rgb</const></edit>
</match>
</fontconfig>

View file

@ -0,0 +1,337 @@
From 6715a14f138df01c11110488b7edbf514e4076b4 Mon Sep 17 00:00:00 2001
From: Akira TAGOH <akira@tagoh.org>
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

View file

@ -1,87 +1,7 @@
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
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-
fi # if [ "x$EXEEXT" = "x" ]
@ -91,7 +11,7 @@ diff -pruN fontconfig-2.17.0.orig/test/run-test.sh fontconfig-2.17.0/test/run-te
- 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 "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR"
- touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
- fi
- "$BUILDTESTDIR"/test-crbug1004254
-else
@ -101,7 +21,7 @@ diff -pruN fontconfig-2.17.0.orig/test/run-test.sh fontconfig-2.17.0/test/run-te
+# 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 "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR"
+# touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
+# fi
+# "$BUILDTESTDIR"/test-crbug1004254
+#else

View file

@ -1,12 +1,12 @@
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:-<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}}"
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
message (const char *fmt, ...)

View file

@ -1,28 +0,0 @@
From b9bec06d73340f1b5727302d13ac3df307b7febc Mon Sep 17 00:00:00 2001
From: Akira TAGOH <akira@tagoh.org>
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

View file

@ -0,0 +1,81 @@
From fc0e9a78d2fe3b26f0b93c2a99b160e75e2a9f89 Mon Sep 17 00:00:00 2001
From: Akira TAGOH <akira@tagoh.org>
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 <akira@tagoh.org>
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@!<remap-dir as-path="'"'"$FONTDIR"'"'">$TESTTMPDIR/fonts</remap-dir>!
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@!<remap-dir as-path="'"'"$FONTDIR"'"'">$TESTTMPDIR/fonts</remap-dir>!
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

View file

@ -1,42 +0,0 @@
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',

View file

@ -4,33 +4,32 @@
Summary: Font configuration and customization library
Name: fontconfig
Version: 2.17.0
Release: 3%{?dist}
Version: 2.14.1
Release: 2%{?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: HPND AND LicenseRef-Fedora-Public-Domain AND Unicode-DFS-2016
License: MIT and Public Domain and UCD
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}-lower-nonlatin-conf.patch
Patch7: %{name}-fix-crash.patch
Patch6: %{name}-desktop-property.patch
BuildRequires: libxml2-devel
BuildRequires: freetype-devel >= %{freetype_version}
BuildRequires: fontpackages-devel
BuildRequires: gettext
BuildRequires: autoconf automake libtool gettext
BuildRequires: gperf
BuildRequires: docbook-utils docbook-utils-pdf
BuildRequires: meson ninja-build gcc
BuildRequires: make
Requires: fonts-filesystem freetype
# Register DTD system-wide to make validation work by default
@ -72,50 +71,41 @@ 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
%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
# 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}
%install
%meson_install
make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
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 implied value to allow the use of conditional conf
# Use conditional conf instead
rm $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d/10-sub-pixel-*.conf
install -p -m 0644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d
# 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
# 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/
# 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}
@ -130,7 +120,7 @@ install -p -m 0755 %{SOURCE2} $RPM_BUILD_ROOT%{_bindir}/fc-cache
cat %{name}-conf.lang >> %{name}.lang
%check
%meson_test
VERBOSE=1 make check
%post
umask 0022
@ -167,7 +157,7 @@ if [ $1 == 0 ] && [ -e %{_sysconfdir}/xml/catalog ]; then
fi
%files -f %{name}.lang
%doc README.md AUTHORS
%doc README AUTHORS
%doc fontconfig-user.txt fontconfig-user.html
%doc %{_fontconfig_confdir}/README
%license COPYING
@ -187,7 +177,6 @@ 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/*
@ -201,93 +190,9 @@ fi
%{_datadir}/gettext/its/fontconfig.loc
%files devel-doc
%doc fontconfig-devel.txt fontconfig-devel.html
%doc fontconfig-devel.txt fontconfig-devel
%changelog
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 2.17.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Mon Jun 30 2025 Akira TAGOH <tagoh@redhat.com> - 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 <tagoh@redhat.com> - 2.17.0-1
- New upstream release.
Resolves: rhbz#2375126
* Fri Apr 11 2025 Akira TAGOH <tagoh@redhat.com> - 2.16.2-1
- New upstream release.
* Thu Mar 13 2025 Akira TAGOH <tagoh@redhat.com> - 2.16.1-1
- New upstream release.
* Mon Jan 27 2025 Akira TAGOH <tagoh@redhat.com> - 2.16.0-2
- Fix endian detection.
Resolves: rhbz#2341757
* Sat Jan 18 2025 Akira TAGOH <tagoh@redhat.com> - 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 <releng@fedoraproject.org> - 2.15.0-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Thu Aug 1 2024 Akira TAGOH <tagoh@redhat.com> - 2.15.0-8
- Fix a memory leak and potentially uninitialized values.
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.15.0-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Fri Jun 7 2024 Akira TAGOH <tagoh@redhat.com> - 2.15.0-6
- Own /usr/lib/fontconfig
Resolves: rhbz#2284076
* Mon Apr 29 2024 Michael Kuhn <suraia@fedoraproject.org> - 2.15.0-5
- Fix emoji fonts being disabled when bitmap fonts were disabled
* Sat Feb 10 2024 Akira TAGOH <tagoh@redhat.com> - 2.15.0-4
- Delete .uuid with fc-cache -f.
Resolves: rhbz#1761885
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.15.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.15.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Dec 22 2023 Akira TAGOH <tagoh@redhat.com> - 2.15.0-1
- New upstream release.
Resolves: rhbz#2255623
* Thu Aug 17 2023 Akira TAGOH <tagoh@redhat.com> - 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 <releng@fedoraproject.org> - 2.14.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Fri Jun 16 2023 Akira TAGOH <tagoh@redhat.com> - 2.14.2-3
- Drop 10-sub-pixel-rgb-for-kde.conf
Resolves: rhbz#2212512
* Tue Apr 4 2023 Akira TAGOH <tagoh@redhat.com> - 2.14.2-2
- Migrated license tag to SPDX.
* Fri Jan 27 2023 Akira TAGOH <tagoh@redhat.com> - 2.14.2-1
- New upstream release.
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2.14.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Sat Nov 26 2022 Akira TAGOH <tagoh@redhat.com> - 2.14.1-2
- Enable RGB stripes layout for sub-pixel rendering on KDE only.
Resolves: rhbz#2137825

View file

@ -1,5 +0,0 @@
summary: Basic smoke test
discover:
how: fmf
execute:
how: tmt

View file

@ -1 +1 @@
SHA512 (fontconfig-2.17.0.tar.xz) = dd64905c3e0e5c5881df505b8f0bea594bbac5ce145f57aedcd7130978cd285491497198d8f2d6ed26f7b2abb31268dc3ff97aa75ce998b8e57f2d5c75b240b4
SHA512 (fontconfig-2.14.1.tar.xz) = ba42e6f90ec92914895d2157c872c373adfc17be791b92253bcc40e85674a84e43c08ab2b37c3ae85b53b2e7bd2a7847abb479043f303b732c08eeac3ee733db

View file

@ -1,3 +0,0 @@
summary: Concise summary describing what the test does
test: ./test.sh
framework: beakerlib

View file

@ -1,22 +0,0 @@
#!/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

14
tests/tests.yml Normal file
View file

@ -0,0 +1,14 @@
- 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