# Eina
PKG_CHECK_MODULES([EINA], [eina >= 1.0.0])
+CPPFLAGS_SAVE="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $EINA_CFLAGS"
+AC_CHECK_SIZEOF(Eina_Unicode,, [#include <Eina.h>])
+CPPFLAGS="$CPPFLAGS_SAVE"
# Freetype
PKG_CHECK_MODULES([FREETYPE], [freetype2 >= 9.3.0])
have_fribidi="yes"
AC_DEFINE(HAVE_FRIBIDI, 1, [have fribidi support])
requirement_evas="fribidi ${requirement_evas}"
+ CPPFLAGS_SAVE="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $FRIBIDI_CFLAGS"
+ AC_CHECK_SIZEOF(FriBidiChar,, [#include <fribidi/fribidi.h>])
+ CPPFLAGS="$CPPFLAGS_SAVE"
],
[
if test "x$want_fribidi" = "xyes" -a "x$use_strict" = "xyes" ; then
} \
} while(0)
+#if SIZEOF_FRIBIDICHAR != SIZEOF_EINA_UNICODE
+# define EVAS_FRIBIDI_EINA_UNICODE_UNEQUAL
+#endif
+
+#ifdef EVAS_FRIBIDI_EINA_UNICODE_UNEQUAL
/* Convert bidichar to eina_unicode assume both are valid pointers */
static Eina_Unicode *
_evas_bidi_fribidichar_to_unicode(Eina_Unicode *dest, const FriBidiChar *src)
*dest = 0;
return ret;
}
+#endif
/**
* @internal
return EINA_FALSE;
/* The size of fribidichar is different than eina_unicode, convert */
- /*FIXME: Make this comparison at compile time and compile out
- * unwanted code. - In all of this source file. (including the actual
- * function declerations. */
- if (sizeof(Eina_Unicode) != sizeof(FriBidiChar))
- {
- base_ustr = ustr = calloc(len + 1, sizeof(FriBidiChar));
- ustr = _evas_bidi_unicode_to_fribidichar(ustr, eina_ustr);
- }
- else
- {
- ustr = (FriBidiChar *) eina_ustr;
- }
+#ifdef EVAS_FRIBIDI_EINA_UNICODE_UNEQUAL
+ base_ustr = ustr = calloc(len + 1, sizeof(FriBidiChar));
+ ustr = _evas_bidi_unicode_to_fribidichar(ustr, eina_ustr);
+#else
+ (void) base_ustr;
+ ustr = (FriBidiChar *) eina_ustr;
+#endif
EvasBiDiJoiningType *join_types = NULL;
if (join_types) free(join_types);
/* Convert back */
- if (sizeof(Eina_Unicode) != sizeof(FriBidiChar))
- {
- eina_ustr = _evas_bidi_fribidichar_to_unicode(eina_ustr, ustr);
- if (base_ustr) free(base_ustr);
- }
+#ifdef EVAS_FRIBIDI_EINA_UNICODE_UNEQUAL
+ eina_ustr = _evas_bidi_fribidichar_to_unicode(eina_ustr, ustr);
+ if (base_ustr) free(base_ustr);
+#endif
return EINA_TRUE;
}
len = eina_unicode_strlen(eina_ustr);
/* The size of fribidichar s different than eina_unicode, convert */
- if (sizeof(Eina_Unicode) != sizeof(FriBidiChar))
- {
- base_ustr = calloc(len + 1, sizeof(FriBidiChar));
- base_ustr = _evas_bidi_unicode_to_fribidichar(base_ustr, eina_ustr);
- ustr = base_ustr;
- }
- else
- {
- ustr = (const FriBidiChar *) eina_ustr;
- }
+#ifdef EVAS_FRIBIDI_EINA_UNICODE_UNEQUAL
+ base_ustr = calloc(len + 1, sizeof(FriBidiChar));
+ base_ustr = _evas_bidi_unicode_to_fribidichar(base_ustr, eina_ustr);
+ ustr = base_ustr;
+#else
+ ustr = (const FriBidiChar *) eina_ustr;
+#endif
bidi_props = evas_bidi_paragraph_props_new();
if (eina_ustr)
{
/* The size of fribidichar is different than eina_unicode, convert */
- if (sizeof(Eina_Unicode) != sizeof(FriBidiChar))
- {
- base_ustr = ustr = calloc(len + 1, sizeof(FriBidiChar));
- ustr = _evas_bidi_unicode_to_fribidichar(ustr, eina_ustr);
- }
- else
- {
- ustr = (FriBidiChar *) eina_ustr;
- }
+#ifdef EVAS_FRIBIDI_EINA_UNICODE_UNEQUAL
+ base_ustr = ustr = calloc(len + 1, sizeof(FriBidiChar));
+ ustr = _evas_bidi_unicode_to_fribidichar(ustr, eina_ustr);
+#else
+ ustr = (FriBidiChar *) eina_ustr;
+#endif
}
/* The size of fribidichar is different than eina_unicode, convert */
- if (sizeof(Eina_Unicode) != sizeof(FriBidiChar))
- {
- _evas_bidi_fribidichar_to_unicode(eina_ustr, base_ustr);
- free(base_ustr);
- }
+#ifdef EVAS_FRIBIDI_EINA_UNICODE_UNEQUAL
+ _evas_bidi_fribidichar_to_unicode(eina_ustr, base_ustr);
+ free(base_ustr);
+#endif
return EINA_FALSE;
/* ERROR HANDLING */
error: