From 42af66fc909712a7afa9d1f32b3c7f01fa98be94 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Wed, 7 Jul 2021 19:03:50 +0300 Subject: [PATCH] pango: remove fribidi dependency --- extra/pango/build | 2 + extra/pango/checksums | 1 + extra/pango/depends | 1 - extra/pango/patches/no-fribidi.patch | 233 +++++++++++++++++++++++++++ extra/pango/sources | 1 + 5 files changed, 237 insertions(+), 1 deletion(-) create mode 100644 extra/pango/patches/no-fribidi.patch diff --git a/extra/pango/build b/extra/pango/build index 1f9e0d86..ead66962 100755 --- a/extra/pango/build +++ b/extra/pango/build @@ -2,6 +2,8 @@ export DESTDIR="$1" +patch -p1 < no-fribidi.patch + # First substitution disables weird case where build may try to git clone # some repository related to documentation. sed -e "s/'gi-docgen', '/'/" \ diff --git a/extra/pango/checksums b/extra/pango/checksums index 9cd73857..e4138946 100644 --- a/extra/pango/checksums +++ b/extra/pango/checksums @@ -1 +1,2 @@ 8783c82927582437d3a224eb18ea90d195b7451ff2effdffba16039df5346170 +9d071dd6db8446017d1fcdd252cc168fa889e306d3bbb97651dd55a36425e2c6 diff --git a/extra/pango/depends b/extra/pango/depends index a826934d..cd1947b7 100644 --- a/extra/pango/depends +++ b/extra/pango/depends @@ -1,7 +1,6 @@ cairo fontconfig freetype-harfbuzz -fribidi glib libXft libXrender diff --git a/extra/pango/patches/no-fribidi.patch b/extra/pango/patches/no-fribidi.patch new file mode 100644 index 00000000..f04e7b6e --- /dev/null +++ b/extra/pango/patches/no-fribidi.patch @@ -0,0 +1,233 @@ +diff --git a/meson.build b/meson.build +index f542574..d57df3a 100644 +--- a/meson.build ++++ b/meson.build +@@ -191,7 +191,6 @@ endif + pango_deps = [] + + glib_req_version = '>= 2.62' +-fribidi_req_version = '>= 0.19.7' + libthai_req_version = '>= 0.1.9' + harfbuzz_req_version = '>= 2.0.0' + fontconfig_req_version = '>= 2.11.91' +@@ -211,11 +210,6 @@ gio_dep = dependency('gio-2.0', version: glib_req_version, + fallback: ['glib', 'libgio_dep']) + pango_deps += [glib_dep, gobject_dep, gio_dep] + +-fribidi_dep = dependency('fribidi', version: fribidi_req_version, +- fallback: ['fribidi', 'libfribidi_dep'], +- default_options: ['docs=false']) +-pango_deps += fribidi_dep +- + thai_dep = dependency('libthai', version: libthai_req_version, required: get_option('libthai')) + if thai_dep.found() + pango_conf.set('HAVE_LIBTHAI', 1) +diff --git a/pango/pango-bidi-type.c b/pango/pango-bidi-type.c +index a5a13a9..29ddeb8 100644 +--- a/pango/pango-bidi-type.c ++++ b/pango/pango-bidi-type.c +@@ -23,16 +23,18 @@ + + #include + +-#include +- + #undef PANGO_DISABLE_DEPRECATED + + #include "pango-bidi-type.h" + #include "pango-utils.h" + +-#if FRIBIDI_MAJOR_VERSION >= 1 +-#define USE_FRIBIDI_EX_API +-#endif ++typedef uint32_t FriBidiChar; ++typedef uint32_t FriBidiCharType; ++typedef int FriBidiStrIndex; ++typedef int FriBidiParType; ++typedef signed char FriBidiLevel; ++ ++#define FRIBIDI_PAR_LTR (0x00000010L | 0x00000100L) + + /** + * pango_bidi_type_for_unichar: +@@ -52,40 +54,7 @@ + PangoBidiType + pango_bidi_type_for_unichar (gunichar ch) + { +- FriBidiCharType fribidi_ch_type; +- +- G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar)); +- +- fribidi_ch_type = fribidi_get_bidi_type (ch); +- +- switch (fribidi_ch_type) +- { +- case FRIBIDI_TYPE_LTR: return PANGO_BIDI_TYPE_L; +- case FRIBIDI_TYPE_LRE: return PANGO_BIDI_TYPE_LRE; +- case FRIBIDI_TYPE_LRO: return PANGO_BIDI_TYPE_LRO; +- case FRIBIDI_TYPE_RTL: return PANGO_BIDI_TYPE_R; +- case FRIBIDI_TYPE_AL: return PANGO_BIDI_TYPE_AL; +- case FRIBIDI_TYPE_RLE: return PANGO_BIDI_TYPE_RLE; +- case FRIBIDI_TYPE_RLO: return PANGO_BIDI_TYPE_RLO; +- case FRIBIDI_TYPE_PDF: return PANGO_BIDI_TYPE_PDF; +- case FRIBIDI_TYPE_EN: return PANGO_BIDI_TYPE_EN; +- case FRIBIDI_TYPE_ES: return PANGO_BIDI_TYPE_ES; +- case FRIBIDI_TYPE_ET: return PANGO_BIDI_TYPE_ET; +- case FRIBIDI_TYPE_AN: return PANGO_BIDI_TYPE_AN; +- case FRIBIDI_TYPE_CS: return PANGO_BIDI_TYPE_CS; +- case FRIBIDI_TYPE_NSM: return PANGO_BIDI_TYPE_NSM; +- case FRIBIDI_TYPE_BN: return PANGO_BIDI_TYPE_BN; +- case FRIBIDI_TYPE_BS: return PANGO_BIDI_TYPE_B; +- case FRIBIDI_TYPE_SS: return PANGO_BIDI_TYPE_S; +- case FRIBIDI_TYPE_WS: return PANGO_BIDI_TYPE_WS; +- case FRIBIDI_TYPE_ON: return PANGO_BIDI_TYPE_ON; +- case FRIBIDI_TYPE_LRI: return PANGO_BIDI_TYPE_LRI; +- case FRIBIDI_TYPE_RLI: return PANGO_BIDI_TYPE_RLI; +- case FRIBIDI_TYPE_FSI: return PANGO_BIDI_TYPE_FSI; +- case FRIBIDI_TYPE_PDI: return PANGO_BIDI_TYPE_PDI; +- default: +- return PANGO_BIDI_TYPE_ON; +- } ++ return PANGO_BIDI_TYPE_L; + } + + /* Some bidi-related functions */ +@@ -120,38 +89,16 @@ pango_log2vis_get_embedding_levels (const gchar *text, + glong n_chars, i; + guint8 *embedding_levels_list; + const gchar *p; +- FriBidiParType fribidi_base_dir; + FriBidiCharType *bidi_types; + #ifdef USE_FRIBIDI_EX_API + FriBidiBracketType *bracket_types; + #endif + FriBidiLevel max_level; + FriBidiCharType ored_types = 0; +- FriBidiCharType anded_strongs = FRIBIDI_TYPE_RLE; + + G_STATIC_ASSERT (sizeof (FriBidiLevel) == sizeof (guint8)); + G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar)); + +- switch (*pbase_dir) +- { +- case PANGO_DIRECTION_LTR: +- case PANGO_DIRECTION_TTB_RTL: +- fribidi_base_dir = FRIBIDI_PAR_LTR; +- break; +- case PANGO_DIRECTION_RTL: +- case PANGO_DIRECTION_TTB_LTR: +- fribidi_base_dir = FRIBIDI_PAR_RTL; +- break; +- case PANGO_DIRECTION_WEAK_RTL: +- fribidi_base_dir = FRIBIDI_PAR_WRTL; +- break; +- case PANGO_DIRECTION_WEAK_LTR: +- case PANGO_DIRECTION_NEUTRAL: +- default: +- fribidi_base_dir = FRIBIDI_PAR_WLTR; +- break; +- } +- + if (length < 0) + length = strlen (text); + +@@ -165,16 +112,13 @@ pango_log2vis_get_embedding_levels (const gchar *text, + + for (i = 0, p = text; p < text + length; p = g_utf8_next_char(p), i++) + { +- gunichar ch = g_utf8_get_char (p); +- FriBidiCharType char_type = fribidi_get_bidi_type (ch); ++ FriBidiCharType char_type = FRIBIDI_PAR_LTR; + + if (i == n_chars) + break; + + bidi_types[i] = char_type; + ored_types |= char_type; +- if (FRIBIDI_IS_STRONG (char_type)) +- anded_strongs &= char_type; + #ifdef USE_FRIBIDI_EX_API + if (G_UNLIKELY(bidi_types[i] == FRIBIDI_TYPE_ON)) + bracket_types[i] = fribidi_get_bracket (ch); +@@ -200,39 +144,8 @@ pango_log2vis_get_embedding_levels (const gchar *text, + * o base_dir doesn't have an RTL taste. + * o there are letters, and base_dir is weak. + */ +- if (!FRIBIDI_IS_ISOLATE (ored_types) && +- !FRIBIDI_IS_RTL (ored_types) && +- !FRIBIDI_IS_ARABIC (ored_types) && +- (!FRIBIDI_IS_RTL (fribidi_base_dir) || +- (FRIBIDI_IS_WEAK (fribidi_base_dir) && +- FRIBIDI_IS_LETTER (ored_types)) +- )) +- { +- /* all LTR */ +- fribidi_base_dir = FRIBIDI_PAR_LTR; + memset (embedding_levels_list, 0, n_chars); + goto resolved; +- } +- /* The case that all resolved levels will be RTL is much more complex. +- * No isolates, no numbers, all strongs are RTL, and one of +- * the following: +- * +- * o base_dir has an RTL taste (may be weak). +- * o there are letters, and base_dir is weak. +- */ +- else if (!FRIBIDI_IS_ISOLATE (ored_types) && +- !FRIBIDI_IS_NUMBER (ored_types) && +- FRIBIDI_IS_RTL (anded_strongs) && +- (FRIBIDI_IS_RTL (fribidi_base_dir) || +- (FRIBIDI_IS_WEAK (fribidi_base_dir) && +- FRIBIDI_IS_LETTER (ored_types)) +- )) +- { +- /* all RTL */ +- fribidi_base_dir = FRIBIDI_PAR_RTL; +- memset (embedding_levels_list, 1, n_chars); +- goto resolved; +- } + + + #ifdef USE_FRIBIDI_EX_API +@@ -240,12 +153,10 @@ pango_log2vis_get_embedding_levels (const gchar *text, + &fribidi_base_dir, + (FriBidiLevel*)embedding_levels_list); + #else +- max_level = fribidi_get_par_embedding_levels (bidi_types, n_chars, +- &fribidi_base_dir, +- (FriBidiLevel*)embedding_levels_list); ++ max_level = 0; + #endif + +- if (G_UNLIKELY(max_level == 0)) ++ if (max_level == 0) + { + /* fribidi_get_par_embedding_levels() failed. */ + memset (embedding_levels_list, 0, length); +@@ -258,7 +169,7 @@ resolved: + g_free (bracket_types); + #endif + +- *pbase_dir = (fribidi_base_dir == FRIBIDI_PAR_LTR) ? PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL; ++ *pbase_dir = PANGO_DIRECTION_LTR; + + return embedding_levels_list; + } +@@ -282,17 +193,6 @@ resolved: + PangoDirection + pango_unichar_direction (gunichar ch) + { +- FriBidiCharType fribidi_ch_type; +- +- G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar)); +- +- fribidi_ch_type = fribidi_get_bidi_type (ch); +- +- if (!FRIBIDI_IS_STRONG (fribidi_ch_type)) +- return PANGO_DIRECTION_NEUTRAL; +- else if (FRIBIDI_IS_RTL (fribidi_ch_type)) +- return PANGO_DIRECTION_RTL; +- else + return PANGO_DIRECTION_LTR; + } + diff --git a/extra/pango/sources b/extra/pango/sources index 7521cf48..4222e582 100644 --- a/extra/pango/sources +++ b/extra/pango/sources @@ -1 +1,2 @@ https://github.com/GNOME/pango/archive/1.48.7.tar.gz +patches/no-fribidi.patch