2011-01-10 03:18:53 +00:00
|
|
|
AC_PREREQ([2.64])
|
2012-06-17 18:58:59 +00:00
|
|
|
AC_INIT([HarfBuzz],
|
2018-07-11 13:27:13 +00:00
|
|
|
[1.8.3],
|
2017-11-20 19:49:22 +00:00
|
|
|
[https://github.com/harfbuzz/harfbuzz/issues/new],
|
2011-01-10 03:18:53 +00:00
|
|
|
[harfbuzz],
|
2011-05-25 18:49:35 +00:00
|
|
|
[http://harfbuzz.org/])
|
2011-01-10 03:18:53 +00:00
|
|
|
|
2012-10-02 18:44:47 +00:00
|
|
|
AC_CONFIG_MACRO_DIR([m4])
|
2013-05-28 21:18:30 +00:00
|
|
|
AC_CONFIG_SRCDIR([src/harfbuzz.pc.in])
|
2009-11-02 21:28:39 +00:00
|
|
|
AC_CONFIG_HEADERS([config.h])
|
2011-01-10 03:18:53 +00:00
|
|
|
|
2018-01-09 22:15:54 +00:00
|
|
|
AM_INIT_AUTOMAKE([1.13.0 gnits tar-ustar dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability])
|
2011-01-10 03:18:53 +00:00
|
|
|
AM_SILENT_RULES([yes])
|
2018-03-03 19:25:09 +00:00
|
|
|
AX_CODE_COVERAGE
|
2009-11-02 21:28:39 +00:00
|
|
|
|
2012-01-27 07:20:58 +00:00
|
|
|
# Initialize libtool
|
2013-04-29 17:40:52 +00:00
|
|
|
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
2012-01-27 07:20:58 +00:00
|
|
|
LT_PREREQ([2.2])
|
|
|
|
LT_INIT([disable-static])
|
|
|
|
|
2011-01-10 03:18:53 +00:00
|
|
|
# Check for programs
|
2016-10-26 14:04:30 +00:00
|
|
|
AC_USE_SYSTEM_EXTENSIONS
|
2009-11-02 21:28:39 +00:00
|
|
|
AC_PROG_CC
|
2018-02-16 23:36:20 +00:00
|
|
|
AC_PROG_CC_C99
|
2010-10-05 22:36:45 +00:00
|
|
|
AM_PROG_CC_C_O
|
2009-11-02 21:28:39 +00:00
|
|
|
AC_PROG_CXX
|
2018-01-12 08:46:38 +00:00
|
|
|
dnl AX_CXX_COMPILE_STDCXX(11, noext, optional)
|
2016-10-04 21:53:17 +00:00
|
|
|
AC_SYS_LARGEFILE
|
2012-10-02 18:44:47 +00:00
|
|
|
PKG_PROG_PKG_CONFIG([0.20])
|
2014-03-04 21:03:51 +00:00
|
|
|
AM_MISSING_PROG([RAGEL], [ragel])
|
|
|
|
AM_MISSING_PROG([GIT], [git])
|
2009-11-02 21:28:39 +00:00
|
|
|
|
2011-05-06 01:31:04 +00:00
|
|
|
# Version
|
2011-05-25 20:07:07 +00:00
|
|
|
m4_define(hb_version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]]))
|
|
|
|
m4_define(hb_version_major,m4_argn(1,hb_version_triplet))
|
|
|
|
m4_define(hb_version_minor,m4_argn(2,hb_version_triplet))
|
|
|
|
m4_define(hb_version_micro,m4_argn(3,hb_version_triplet))
|
|
|
|
HB_VERSION_MAJOR=hb_version_major
|
|
|
|
HB_VERSION_MINOR=hb_version_minor
|
|
|
|
HB_VERSION_MICRO=hb_version_micro
|
2011-05-06 01:31:04 +00:00
|
|
|
HB_VERSION=AC_PACKAGE_VERSION
|
|
|
|
AC_SUBST(HB_VERSION_MAJOR)
|
|
|
|
AC_SUBST(HB_VERSION_MINOR)
|
|
|
|
AC_SUBST(HB_VERSION_MICRO)
|
|
|
|
AC_SUBST(HB_VERSION)
|
|
|
|
|
2011-05-25 20:07:07 +00:00
|
|
|
# Libtool version
|
|
|
|
m4_define([hb_version_int],
|
|
|
|
m4_eval(hb_version_major*10000 + hb_version_minor*100 + hb_version_micro))
|
|
|
|
m4_if(m4_eval(hb_version_minor % 2), [1],
|
|
|
|
dnl for unstable releases
|
|
|
|
[m4_define([hb_libtool_revision], 0)],
|
|
|
|
dnl for stable releases
|
|
|
|
[m4_define([hb_libtool_revision], hb_version_micro)])
|
|
|
|
m4_define([hb_libtool_age],
|
|
|
|
m4_eval(hb_version_int - hb_libtool_revision))
|
|
|
|
m4_define([hb_libtool_current],
|
2015-07-26 21:39:10 +00:00
|
|
|
m4_eval(hb_libtool_age))
|
2011-05-25 20:07:07 +00:00
|
|
|
HB_LIBTOOL_VERSION_INFO=hb_libtool_current:hb_libtool_revision:hb_libtool_age
|
|
|
|
AC_SUBST(HB_LIBTOOL_VERSION_INFO)
|
2011-05-06 01:31:04 +00:00
|
|
|
|
2018-02-12 14:45:36 +00:00
|
|
|
AC_ARG_WITH([libstdc++],
|
|
|
|
[AS_HELP_STRING([--with-libstdc++=@<:@yes/no@:>@],
|
|
|
|
[Allow linking with libstdc++ @<:@default=no@:>@])],
|
|
|
|
[with_libstdcxx=$withval],
|
|
|
|
[with_libstdcxx=no])
|
|
|
|
AM_CONDITIONAL(WITH_LIBSTDCXX, [test "x$with_libstdcxx" = "xyes"])
|
2018-02-12 08:30:07 +00:00
|
|
|
|
2013-08-28 16:52:55 +00:00
|
|
|
# Documentation
|
|
|
|
have_gtk_doc=false
|
|
|
|
m4_ifdef([GTK_DOC_CHECK], [
|
2013-08-28 17:43:35 +00:00
|
|
|
GTK_DOC_CHECK([1.15],[--flavour no-tmpl])
|
2013-08-28 16:52:55 +00:00
|
|
|
if test "x$enable_gtk_doc" = xyes; then
|
|
|
|
have_gtk_doc=true
|
|
|
|
fi
|
|
|
|
], [
|
|
|
|
AM_CONDITIONAL([ENABLE_GTK_DOC], false)
|
|
|
|
])
|
2011-09-13 17:30:39 +00:00
|
|
|
|
2018-03-31 10:15:50 +00:00
|
|
|
# Functions and headers
|
2018-07-10 11:17:27 +00:00
|
|
|
AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty newlocale strtod_l posix_memalign)
|
2018-03-12 05:27:38 +00:00
|
|
|
|
|
|
|
save_libs="$LIBS"
|
|
|
|
LIBS="$LIBS -lm"
|
|
|
|
AC_CHECK_FUNCS([round], ,[AC_CHECK_DECLS([round], , ,[#include <math.h>])])
|
|
|
|
LIBS="$save_libs"
|
|
|
|
|
|
|
|
AC_CHECK_HEADERS(unistd.h sys/mman.h xlocale.h stdbool.h)
|
2009-11-02 21:28:39 +00:00
|
|
|
|
2011-05-05 23:37:53 +00:00
|
|
|
# Compiler flags
|
2011-05-06 01:31:04 +00:00
|
|
|
AC_CANONICAL_HOST
|
2014-06-09 18:17:33 +00:00
|
|
|
AC_CHECK_ALIGNOF([struct{char;}])
|
2009-11-02 21:28:39 +00:00
|
|
|
if test "x$GCC" = "xyes"; then
|
2011-04-27 19:10:12 +00:00
|
|
|
|
2011-05-06 23:30:59 +00:00
|
|
|
# Make symbols link locally
|
2018-03-16 19:15:09 +00:00
|
|
|
AX_CHECK_LINK_FLAG([[-Bsymbolic-functions]], [LDFLAGS="$LDFLAGS -Bsymbolic-functions"])
|
2011-05-06 23:30:59 +00:00
|
|
|
|
2018-03-31 10:15:50 +00:00
|
|
|
# Make it possible to not link to libstdc++
|
|
|
|
# No threadsafe statics in C++ as we do it ourselves.
|
|
|
|
# We don't use these features, so it's safe to disable them
|
|
|
|
# even in the cases where we DO link to libstdc++.
|
|
|
|
# Put -fno-rtti before $CXXFLAGS such that users can re-enable it
|
|
|
|
# by overriding CXXFLAGS.
|
|
|
|
CXXFLAGS="-fno-rtti $CXXFLAGS -fno-exceptions -fno-threadsafe-statics"
|
|
|
|
|
2012-07-13 15:29:31 +00:00
|
|
|
# Assorted warnings
|
|
|
|
CXXFLAGS="$CXXFLAGS -Wcast-align"
|
|
|
|
|
2012-08-06 18:44:10 +00:00
|
|
|
case "$host" in
|
2012-08-08 21:16:01 +00:00
|
|
|
*-*-mingw*)
|
2012-08-06 18:44:10 +00:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
# Hide inline methods
|
|
|
|
CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2011-04-27 19:10:12 +00:00
|
|
|
case "$host" in
|
|
|
|
arm-*-*)
|
2014-06-09 18:17:33 +00:00
|
|
|
if test "x$ac_cv_alignof_struct_char__" != x1; then
|
2014-06-06 20:03:40 +00:00
|
|
|
# Request byte alignment
|
|
|
|
CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
|
|
|
|
fi
|
2011-04-27 19:10:12 +00:00
|
|
|
;;
|
|
|
|
esac
|
2009-11-02 21:28:39 +00:00
|
|
|
fi
|
|
|
|
|
2013-01-14 06:27:21 +00:00
|
|
|
AM_CONDITIONAL(HAVE_GCC, test "x$GCC" = "xyes")
|
|
|
|
|
2012-10-02 18:59:00 +00:00
|
|
|
hb_os_win32=no
|
2012-08-08 21:16:01 +00:00
|
|
|
AC_MSG_CHECKING([for native Win32])
|
|
|
|
case "$host" in
|
|
|
|
*-*-mingw*)
|
|
|
|
hb_os_win32=yes
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
AC_MSG_RESULT([$hb_os_win32])
|
|
|
|
AM_CONDITIONAL(OS_WIN32, test "$hb_os_win32" = "yes")
|
|
|
|
|
2012-10-02 18:55:32 +00:00
|
|
|
have_pthread=false
|
2012-10-02 18:59:00 +00:00
|
|
|
if test "$hb_os_win32" = no; then
|
|
|
|
AX_PTHREAD([have_pthread=true])
|
|
|
|
fi
|
2012-10-02 18:55:32 +00:00
|
|
|
if $have_pthread; then
|
|
|
|
AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
|
|
|
|
|
2009-11-02 21:28:39 +00:00
|
|
|
dnl ==========================================================================
|
|
|
|
|
2012-06-05 23:55:46 +00:00
|
|
|
have_ot=true
|
|
|
|
if $have_ot; then
|
|
|
|
AC_DEFINE(HAVE_OT, 1, [Have native OpenType Layout backend])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_OT, $have_ot)
|
|
|
|
|
2014-01-22 19:07:13 +00:00
|
|
|
have_fallback=true
|
|
|
|
if $have_fallback; then
|
|
|
|
AC_DEFINE(HAVE_FALLBACK, 1, [Have simple TrueType Layout backend])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_FALLBACK, $have_fallback)
|
|
|
|
|
2012-06-05 23:55:46 +00:00
|
|
|
dnl ===========================================================================
|
|
|
|
|
2013-05-27 23:27:43 +00:00
|
|
|
AC_ARG_WITH(glib,
|
|
|
|
[AS_HELP_STRING([--with-glib=@<:@yes/no/auto@:>@],
|
2013-05-27 23:30:48 +00:00
|
|
|
[Use glib @<:@default=auto@:>@])],,
|
|
|
|
[with_glib=auto])
|
2013-05-27 23:27:43 +00:00
|
|
|
have_glib=false
|
Support building with older glib versions
It is desirable to be able to build against older versions of glib.
fd7a245 changed the configure check to require glib > 2.38 for
G_TEST_DIST. Before that, version 2.16 was required, but in fact,
since aafe395, G_PASTE is being used, which was introduced in 2.19.1.
And since 0ef179e2, hb-glib uses GBytes, which were introduced in
2.31.10.
2.19.1 is rather old, but 2.38 is rather new. For Firefox, building
against 2.22 is still supported, although we could probably get away
with bumping that to 2.28. Either way, GBytes is not available.
Arguably, if you build against a glib that doesn't support GBytes,
you're not going to use the hb_glib_blob_create function, so we hide
the function when building against such a glib.
As for G_TEST_DIST, when building against versions of glib that don't
support it, we can fallback to the previous behavior, which, AIUI, was
just making the test not work when building in a separate directory.
2016-09-30 09:15:37 +00:00
|
|
|
GLIB_DEPS="glib-2.0 >= 2.19.1"
|
2015-08-11 10:58:49 +00:00
|
|
|
AC_SUBST(GLIB_DEPS)
|
2013-05-27 23:27:43 +00:00
|
|
|
if test "x$with_glib" = "xyes" -o "x$with_glib" = "xauto"; then
|
2015-08-11 10:58:49 +00:00
|
|
|
PKG_CHECK_MODULES(GLIB, $GLIB_DEPS, have_glib=true, :)
|
2013-05-27 23:27:43 +00:00
|
|
|
fi
|
|
|
|
if test "x$with_glib" = "xyes" -a "x$have_glib" != "xtrue"; then
|
|
|
|
AC_MSG_ERROR([glib support requested but glib-2.0 not found])
|
|
|
|
fi
|
2009-11-02 23:55:19 +00:00
|
|
|
if $have_glib; then
|
2009-11-03 21:35:10 +00:00
|
|
|
AC_DEFINE(HAVE_GLIB, 1, [Have glib2 library])
|
2009-11-02 23:55:19 +00:00
|
|
|
fi
|
2009-11-02 21:28:39 +00:00
|
|
|
AM_CONDITIONAL(HAVE_GLIB, $have_glib)
|
|
|
|
|
2013-08-28 16:52:55 +00:00
|
|
|
dnl ===========================================================================
|
|
|
|
|
2013-08-27 00:56:58 +00:00
|
|
|
AC_ARG_WITH(gobject,
|
|
|
|
[AS_HELP_STRING([--with-gobject=@<:@yes/no/auto@:>@],
|
2017-11-04 00:34:11 +00:00
|
|
|
[Use gobject @<:@default=no@:>@])],,
|
2013-08-28 16:52:55 +00:00
|
|
|
[with_gobject=no])
|
2013-05-27 23:27:43 +00:00
|
|
|
have_gobject=false
|
2013-08-27 00:56:58 +00:00
|
|
|
if test "x$with_gobject" = "xyes" -o "x$with_gobject" = "xauto"; then
|
|
|
|
PKG_CHECK_MODULES(GOBJECT, gobject-2.0 glib-2.0, have_gobject=true, :)
|
|
|
|
fi
|
|
|
|
if test "x$with_gobject" = "xyes" -a "x$have_gobject" != "xtrue"; then
|
|
|
|
AC_MSG_ERROR([gobject support requested but gobject-2.0 / glib-2.0 not found])
|
2013-05-27 23:27:43 +00:00
|
|
|
fi
|
2011-08-14 13:17:16 +00:00
|
|
|
if $have_gobject; then
|
|
|
|
AC_DEFINE(HAVE_GOBJECT, 1, [Have gobject2 library])
|
2011-08-19 17:59:24 +00:00
|
|
|
GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
|
|
|
|
AC_SUBST(GLIB_MKENUMS)
|
2011-08-14 13:17:16 +00:00
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_GOBJECT, $have_gobject)
|
2018-02-23 21:55:53 +00:00
|
|
|
AC_SUBST(have_gobject)
|
2011-08-14 13:17:16 +00:00
|
|
|
|
2013-05-27 23:09:50 +00:00
|
|
|
dnl ===========================================================================
|
|
|
|
|
2013-08-28 16:52:55 +00:00
|
|
|
|
|
|
|
dnl ===========================================================================
|
|
|
|
# Gobject-Introspection
|
|
|
|
have_introspection=false
|
|
|
|
m4_ifdef([GOBJECT_INTROSPECTION_CHECK], [
|
|
|
|
if $have_gobject; then
|
2014-04-10 23:03:29 +00:00
|
|
|
GOBJECT_INTROSPECTION_CHECK([1.34.0])
|
2013-08-28 16:52:55 +00:00
|
|
|
if test "x$found_introspection" = xyes; then
|
|
|
|
have_introspection=true
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
AM_CONDITIONAL([HAVE_INTROSPECTION], false)
|
|
|
|
fi
|
|
|
|
], [
|
|
|
|
AM_CONDITIONAL([HAVE_INTROSPECTION], false)
|
|
|
|
])
|
|
|
|
|
2011-05-05 23:37:53 +00:00
|
|
|
dnl ==========================================================================
|
|
|
|
|
2013-05-27 23:43:48 +00:00
|
|
|
AC_ARG_WITH(cairo,
|
|
|
|
[AS_HELP_STRING([--with-cairo=@<:@yes/no/auto@:>@],
|
|
|
|
[Use cairo @<:@default=auto@:>@])],,
|
|
|
|
[with_cairo=auto])
|
|
|
|
have_cairo=false
|
|
|
|
if test "x$with_cairo" = "xyes" -o "x$with_cairo" = "xauto"; then
|
2013-06-06 22:57:15 +00:00
|
|
|
PKG_CHECK_MODULES(CAIRO, cairo >= 1.8.0, have_cairo=true, :)
|
2013-05-27 23:43:48 +00:00
|
|
|
fi
|
|
|
|
if test "x$with_cairo" = "xyes" -a "x$have_cairo" != "xtrue"; then
|
|
|
|
AC_MSG_ERROR([cairo support requested but not found])
|
|
|
|
fi
|
2011-02-22 23:06:19 +00:00
|
|
|
if $have_cairo; then
|
|
|
|
AC_DEFINE(HAVE_CAIRO, 1, [Have cairo graphics library])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_CAIRO, $have_cairo)
|
|
|
|
|
2013-05-27 23:43:48 +00:00
|
|
|
have_cairo_ft=false
|
|
|
|
if $have_cairo; then
|
2013-06-06 22:57:15 +00:00
|
|
|
PKG_CHECK_MODULES(CAIRO_FT, cairo-ft, have_cairo_ft=true, :)
|
2013-05-27 23:43:48 +00:00
|
|
|
fi
|
2011-02-22 23:06:19 +00:00
|
|
|
if $have_cairo_ft; then
|
|
|
|
AC_DEFINE(HAVE_CAIRO_FT, 1, [Have cairo-ft support in cairo graphics library])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_CAIRO_FT, $have_cairo_ft)
|
|
|
|
|
2011-05-05 23:37:53 +00:00
|
|
|
dnl ==========================================================================
|
|
|
|
|
2014-08-06 20:49:51 +00:00
|
|
|
AC_ARG_WITH(fontconfig,
|
|
|
|
[AS_HELP_STRING([--with-fontconfig=@<:@yes/no/auto@:>@],
|
|
|
|
[Use fontconfig @<:@default=auto@:>@])],,
|
|
|
|
[with_fontconfig=auto])
|
|
|
|
have_fontconfig=false
|
|
|
|
if test "x$with_fontconfig" = "xyes" -o "x$with_fontconfig" = "xauto"; then
|
|
|
|
PKG_CHECK_MODULES(FONTCONFIG, fontconfig, have_fontconfig=true, :)
|
|
|
|
fi
|
|
|
|
if test "x$with_fontconfig" = "xyes" -a "x$have_fontconfig" != "xtrue"; then
|
|
|
|
AC_MSG_ERROR([fontconfig support requested but not found])
|
|
|
|
fi
|
|
|
|
if $have_fontconfig; then
|
|
|
|
AC_DEFINE(HAVE_FONTCONFIG, 1, [Have fontconfig library])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_FONTCONFIG, $have_fontconfig)
|
|
|
|
|
|
|
|
dnl ==========================================================================
|
|
|
|
|
2013-05-27 23:04:40 +00:00
|
|
|
AC_ARG_WITH(icu,
|
2016-02-25 23:35:15 +00:00
|
|
|
[AS_HELP_STRING([--with-icu=@<:@yes/no/builtin/auto@:>@],
|
2013-05-27 23:04:40 +00:00
|
|
|
[Use ICU @<:@default=auto@:>@])],,
|
|
|
|
[with_icu=auto])
|
|
|
|
have_icu=false
|
2016-02-25 23:35:15 +00:00
|
|
|
if test "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" -o "x$with_icu" = "xauto"; then
|
2013-06-10 17:56:51 +00:00
|
|
|
PKG_CHECK_MODULES(ICU, icu-uc, have_icu=true, :)
|
2013-05-27 23:04:40 +00:00
|
|
|
|
|
|
|
dnl Fallback to icu-config if ICU pkg-config files could not be found
|
|
|
|
if test "$have_icu" != "true"; then
|
|
|
|
AC_CHECK_TOOL(ICU_CONFIG, icu-config, no)
|
|
|
|
AC_MSG_CHECKING([for ICU by using icu-config fallback])
|
|
|
|
if test "$ICU_CONFIG" != "no" && "$ICU_CONFIG" --version >/dev/null; then
|
|
|
|
have_icu=true
|
|
|
|
# We don't use --cflags as this gives us a lot of things that we don't
|
|
|
|
# necessarily want, like debugging and optimization flags
|
|
|
|
# See man (1) icu-config for more info.
|
|
|
|
ICU_CFLAGS=`$ICU_CONFIG --cppflags`
|
|
|
|
ICU_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly`
|
|
|
|
AC_SUBST(ICU_CFLAGS)
|
|
|
|
AC_SUBST(ICU_LIBS)
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
else
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
fi
|
2013-03-11 23:53:44 +00:00
|
|
|
fi
|
|
|
|
fi
|
2016-02-25 23:35:15 +00:00
|
|
|
if test \( "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" \) -a "x$have_icu" != "xtrue"; then
|
2013-05-27 23:04:40 +00:00
|
|
|
AC_MSG_ERROR([icu support requested but icu-uc not found])
|
|
|
|
fi
|
2016-02-25 23:35:15 +00:00
|
|
|
|
2009-11-03 21:35:10 +00:00
|
|
|
if $have_icu; then
|
2013-01-07 23:34:24 +00:00
|
|
|
CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`"
|
2009-11-03 21:35:10 +00:00
|
|
|
AC_DEFINE(HAVE_ICU, 1, [Have ICU library])
|
2016-02-25 23:35:15 +00:00
|
|
|
if test "x$with_icu" = "xbuiltin"; then
|
|
|
|
AC_DEFINE(HAVE_ICU_BUILTIN, 1, [Use hb-icu Unicode callbacks])
|
|
|
|
fi
|
2009-11-03 21:35:10 +00:00
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_ICU, $have_icu)
|
2016-02-25 23:35:15 +00:00
|
|
|
AM_CONDITIONAL(HAVE_ICU_BUILTIN, $have_icu && test "x$with_icu" = "xbuiltin")
|
|
|
|
|
|
|
|
dnl ===========================================================================
|
|
|
|
|
2017-01-06 04:12:32 +00:00
|
|
|
AC_ARG_WITH(ucdn,
|
|
|
|
[AS_HELP_STRING([--with-ucdn=@<:@yes/no@:>@],
|
|
|
|
[Use builtin UCDN library @<:@default=yes@:>@])],,
|
|
|
|
[with_ucdn=yes])
|
|
|
|
have_ucdn=false
|
|
|
|
if test "x$with_ucdn" = "xyes"; then
|
|
|
|
have_ucdn=true
|
2016-02-25 23:35:15 +00:00
|
|
|
fi
|
|
|
|
if $have_ucdn; then
|
|
|
|
AC_DEFINE(HAVE_UCDN, 1, [Have UCDN Unicode functions])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_UCDN, $have_ucdn)
|
2009-11-03 21:35:10 +00:00
|
|
|
|
2011-08-24 00:12:05 +00:00
|
|
|
dnl ==========================================================================
|
2011-08-23 23:29:25 +00:00
|
|
|
|
2013-05-27 22:47:58 +00:00
|
|
|
AC_ARG_WITH(graphite2,
|
|
|
|
[AS_HELP_STRING([--with-graphite2=@<:@yes/no/auto@:>@],
|
|
|
|
[Use the graphite2 library @<:@default=no@:>@])],,
|
|
|
|
[with_graphite2=no])
|
|
|
|
have_graphite2=false
|
2015-08-11 10:58:49 +00:00
|
|
|
GRAPHITE2_DEPS="graphite2"
|
|
|
|
AC_SUBST(GRAPHITE2_DEPS)
|
2013-05-27 22:47:58 +00:00
|
|
|
if test "x$with_graphite2" = "xyes" -o "x$with_graphite2" = "xauto"; then
|
2015-08-11 10:58:49 +00:00
|
|
|
PKG_CHECK_MODULES(GRAPHITE2, $GRAPHITE2_DEPS, have_graphite2=true, :)
|
2016-09-27 10:38:49 +00:00
|
|
|
if test "x$have_graphite2" != "xtrue"; then
|
|
|
|
# If pkg-config is not available, graphite2 can still be there
|
|
|
|
ac_save_CFLAGS="$CFLAGS"
|
|
|
|
ac_save_CPPFLAGS="$CPPFLAGS"
|
|
|
|
CFLAGS="$CFLAGS $GRAPHITE2_CFLAGS"
|
|
|
|
CPPFLAGS="$CPPFLAGS $GRAPHITE2_CFLAGS"
|
|
|
|
AC_CHECK_HEADER(graphite2/Segment.h, have_graphite2=true, :)
|
|
|
|
CPPFLAGS="$ac_save_CPPFLAGS"
|
|
|
|
CFLAGS="$ac_save_CFLAGS"
|
|
|
|
fi
|
2011-08-23 23:29:25 +00:00
|
|
|
fi
|
2013-05-27 22:47:58 +00:00
|
|
|
if test "x$with_graphite2" = "xyes" -a "x$have_graphite2" != "xtrue"; then
|
|
|
|
AC_MSG_ERROR([graphite2 support requested but libgraphite2 not found])
|
|
|
|
fi
|
|
|
|
if $have_graphite2; then
|
2014-12-29 01:27:39 +00:00
|
|
|
AC_DEFINE(HAVE_GRAPHITE2, 1, [Have Graphite2 library])
|
2013-05-27 22:47:58 +00:00
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_GRAPHITE2, $have_graphite2)
|
2011-08-24 00:12:05 +00:00
|
|
|
|
|
|
|
dnl ==========================================================================
|
2011-05-05 23:37:53 +00:00
|
|
|
|
2013-05-27 23:33:36 +00:00
|
|
|
AC_ARG_WITH(freetype,
|
|
|
|
[AS_HELP_STRING([--with-freetype=@<:@yes/no/auto@:>@],
|
|
|
|
[Use the FreeType library @<:@default=auto@:>@])],,
|
|
|
|
[with_freetype=auto])
|
|
|
|
have_freetype=false
|
2015-08-11 10:58:49 +00:00
|
|
|
FREETYPE_DEPS="freetype2 >= 12.0.6"
|
|
|
|
AC_SUBST(FREETYPE_DEPS)
|
2013-05-27 23:33:36 +00:00
|
|
|
if test "x$with_freetype" = "xyes" -o "x$with_freetype" = "xauto"; then
|
[ft] Add hb_ft_face_create_referenced() and hb_ft_font_create_referenced()
When I originally wrote hb-ft, FreeType objects did not support reference
counting. As such, hb_ft_face_create() and hb_ft_font_create() had a
"destroy" callback and client was responsible for making sure FT_Face is
kept around as long as the hb-font/face are alive.
However, since this was not clearly documented, some clienets didn't
correctly did that. In particular, some clients assumed that it's safe
to destroy FT_Face and then hb_face_t. This, indeed, used to work, until
45fd9424c723f115ca98995b8f8a25185a6fc71d, which make face destroy access
font tables.
Now, I fixed that issue in 395b35903e052aecc97d0807e4f813c64c0d2b0b since
the access was not needed, but the problem remains that not all clients
handle this correctly. See:
https://bugs.freedesktop.org/show_bug.cgi?id=86300
Fortunately, FT_Reference_Face() was added to FreeType in 2010, and so we
can use it now. Originally I wanted to change hb_ft_face_create() and
hb_ft_font_create() to reference the face if destroy==NULL was passed in.
That would improve pretty much all clients, with little undesired effects.
Except that FreeType itself, when compiled with HarfBuzz support, calls
hb_ft_font_create() with destroy==NULL and saves the resulting hb-font on
the ft-face (why does it not free it immediately?). Making hb-face
reference ft-face causes a cycling reference there. At least, that's my
current understanding.
At any rate, a cleaner approach, even if it means all clients will need a
change, is to introduce brand new API. Which this commit does.
Some comments added to hb-ft.h, hoping to make future clients make better
choices.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=75299
2014-12-29 01:44:26 +00:00
|
|
|
# See freetype/docs/VERSION.DLL; 12.0.6 means freetype-2.4.2
|
2015-08-11 10:58:49 +00:00
|
|
|
PKG_CHECK_MODULES(FREETYPE, $FREETYPE_DEPS, have_freetype=true, :)
|
2013-05-27 23:33:36 +00:00
|
|
|
fi
|
|
|
|
if test "x$with_freetype" = "xyes" -a "x$have_freetype" != "xtrue"; then
|
|
|
|
AC_MSG_ERROR([FreeType support requested but libfreetype2 not found])
|
|
|
|
fi
|
2009-11-02 23:55:19 +00:00
|
|
|
if $have_freetype; then
|
|
|
|
AC_DEFINE(HAVE_FREETYPE, 1, [Have FreeType 2 library])
|
2016-09-13 21:49:46 +00:00
|
|
|
save_libs=$LIBS
|
|
|
|
LIBS="$LIBS $FREETYPE_LIBS"
|
2018-02-10 18:45:28 +00:00
|
|
|
AC_CHECK_FUNCS(FT_Get_Var_Blend_Coordinates FT_Set_Var_Blend_Coordinates FT_Done_MM_Var)
|
2016-09-13 21:49:46 +00:00
|
|
|
LIBS=$save_libs
|
2009-11-02 23:55:19 +00:00
|
|
|
fi
|
2009-11-02 21:28:39 +00:00
|
|
|
AM_CONDITIONAL(HAVE_FREETYPE, $have_freetype)
|
|
|
|
|
2011-05-06 01:31:04 +00:00
|
|
|
dnl ===========================================================================
|
2009-11-02 21:28:39 +00:00
|
|
|
|
2013-05-27 23:27:43 +00:00
|
|
|
AC_ARG_WITH(uniscribe,
|
|
|
|
[AS_HELP_STRING([--with-uniscribe=@<:@yes/no/auto@:>@],
|
|
|
|
[Use the Uniscribe library @<:@default=no@:>@])],,
|
|
|
|
[with_uniscribe=no])
|
|
|
|
have_uniscribe=false
|
|
|
|
if test "x$with_uniscribe" = "xyes" -o "x$with_uniscribe" = "xauto"; then
|
2013-05-28 17:10:51 +00:00
|
|
|
AC_CHECK_HEADERS(usp10.h windows.h, have_uniscribe=true)
|
2013-05-27 23:27:43 +00:00
|
|
|
fi
|
|
|
|
if test "x$with_uniscribe" = "xyes" -a "x$have_uniscribe" != "xtrue"; then
|
|
|
|
AC_MSG_ERROR([uniscribe support requested but not found])
|
|
|
|
fi
|
2011-08-03 23:55:04 +00:00
|
|
|
if $have_uniscribe; then
|
|
|
|
UNISCRIBE_CFLAGS=
|
2013-07-21 20:06:49 +00:00
|
|
|
UNISCRIBE_LIBS="-lusp10 -lgdi32 -lrpcrt4"
|
2011-08-03 23:55:04 +00:00
|
|
|
AC_SUBST(UNISCRIBE_CFLAGS)
|
|
|
|
AC_SUBST(UNISCRIBE_LIBS)
|
2013-05-27 23:27:43 +00:00
|
|
|
AC_DEFINE(HAVE_UNISCRIBE, 1, [Have Uniscribe library])
|
2011-08-03 23:55:04 +00:00
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_UNISCRIBE, $have_uniscribe)
|
|
|
|
|
2012-06-06 00:16:56 +00:00
|
|
|
dnl ===========================================================================
|
|
|
|
|
2016-02-03 10:31:23 +00:00
|
|
|
AC_ARG_WITH(directwrite,
|
|
|
|
[AS_HELP_STRING([--with-directwrite=@<:@yes/no/auto@:>@],
|
|
|
|
[Use the DirectWrite library (experimental) @<:@default=no@:>@])],,
|
|
|
|
[with_directwrite=no])
|
|
|
|
have_directwrite=false
|
|
|
|
AC_LANG_PUSH([C++])
|
|
|
|
if test "x$with_directwrite" = "xyes" -o "x$with_directwrite" = "xauto"; then
|
|
|
|
AC_CHECK_HEADERS(dwrite.h, have_directwrite=true)
|
|
|
|
fi
|
|
|
|
AC_LANG_POP([C++])
|
|
|
|
if test "x$with_directwrite" = "xyes" -a "x$have_directwrite" != "xtrue"; then
|
|
|
|
AC_MSG_ERROR([directwrite support requested but not found])
|
|
|
|
fi
|
|
|
|
if $have_directwrite; then
|
|
|
|
DIRECTWRITE_CXXFLAGS=
|
|
|
|
DIRECTWRITE_LIBS="-ldwrite"
|
|
|
|
AC_SUBST(DIRECTWRITE_CXXFLAGS)
|
|
|
|
AC_SUBST(DIRECTWRITE_LIBS)
|
|
|
|
AC_DEFINE(HAVE_DIRECTWRITE, 1, [Have DirectWrite library])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_DIRECTWRITE, $have_directwrite)
|
|
|
|
|
|
|
|
dnl ===========================================================================
|
|
|
|
|
2013-05-27 23:29:09 +00:00
|
|
|
AC_ARG_WITH(coretext,
|
|
|
|
[AS_HELP_STRING([--with-coretext=@<:@yes/no/auto@:>@],
|
|
|
|
[Use CoreText @<:@default=no@:>@])],,
|
|
|
|
[with_coretext=no])
|
|
|
|
have_coretext=false
|
|
|
|
if test "x$with_coretext" = "xyes" -o "x$with_coretext" = "xauto"; then
|
|
|
|
AC_CHECK_TYPE(CTFontRef, have_coretext=true,, [#include <ApplicationServices/ApplicationServices.h>])
|
2014-03-20 14:01:30 +00:00
|
|
|
|
|
|
|
if $have_coretext; then
|
|
|
|
CORETEXT_CFLAGS=
|
|
|
|
CORETEXT_LIBS="-framework ApplicationServices"
|
|
|
|
AC_SUBST(CORETEXT_CFLAGS)
|
|
|
|
AC_SUBST(CORETEXT_LIBS)
|
|
|
|
else
|
|
|
|
# On iOS CoreText and CoreGraphics are stand-alone frameworks
|
|
|
|
if test "x$have_coretext" != "xtrue"; then
|
2016-10-11 20:45:22 +00:00
|
|
|
# Check for a different symbol to avoid getting cached result.
|
|
|
|
AC_CHECK_TYPE(CTRunRef, have_coretext=true,, [#include <CoreText/CoreText.h>])
|
2014-03-20 14:01:30 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
if $have_coretext; then
|
|
|
|
CORETEXT_CFLAGS=
|
2017-12-21 13:39:34 +00:00
|
|
|
CORETEXT_LIBS="-framework CoreText -framework CoreGraphics -framework CoreFoundation"
|
2014-03-20 14:01:30 +00:00
|
|
|
AC_SUBST(CORETEXT_CFLAGS)
|
|
|
|
AC_SUBST(CORETEXT_LIBS)
|
|
|
|
fi
|
|
|
|
fi
|
2013-05-27 23:29:09 +00:00
|
|
|
fi
|
|
|
|
if test "x$with_coretext" = "xyes" -a "x$have_coretext" != "xtrue"; then
|
|
|
|
AC_MSG_ERROR([CoreText support requested but libcoretext not found])
|
|
|
|
fi
|
2012-07-24 19:52:32 +00:00
|
|
|
if $have_coretext; then
|
|
|
|
AC_DEFINE(HAVE_CORETEXT, 1, [Have Core Text backend])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_CORETEXT, $have_coretext)
|
|
|
|
|
|
|
|
dnl ===========================================================================
|
|
|
|
|
2012-06-06 00:16:56 +00:00
|
|
|
AC_CACHE_CHECK([for Intel atomic primitives], hb_cv_have_intel_atomic_primitives, [
|
|
|
|
hb_cv_have_intel_atomic_primitives=false
|
2012-06-26 15:16:13 +00:00
|
|
|
AC_TRY_LINK([
|
2012-06-06 00:16:56 +00:00
|
|
|
void memory_barrier (void) { __sync_synchronize (); }
|
2012-06-26 15:16:13 +00:00
|
|
|
int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
|
|
|
|
int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
|
|
|
|
void mutex_unlock (int *m) { __sync_lock_release (m); }
|
|
|
|
], [], hb_cv_have_intel_atomic_primitives=true
|
2012-06-06 00:16:56 +00:00
|
|
|
)
|
|
|
|
])
|
|
|
|
if $hb_cv_have_intel_atomic_primitives; then
|
|
|
|
AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
|
|
|
|
fi
|
|
|
|
|
|
|
|
dnl ===========================================================================
|
|
|
|
|
2013-01-10 07:17:59 +00:00
|
|
|
AC_CACHE_CHECK([for Solaris atomic operations], hb_cv_have_solaris_atomic_ops, [
|
|
|
|
hb_cv_have_solaris_atomic_ops=false
|
|
|
|
AC_TRY_LINK([
|
|
|
|
#include <atomic.h>
|
|
|
|
/* This requires Solaris Studio 12.2 or newer: */
|
|
|
|
#include <mbarrier.h>
|
|
|
|
void memory_barrier (void) { __machine_rw_barrier (); }
|
|
|
|
int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
|
|
|
|
void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
|
|
|
|
], [], hb_cv_have_solaris_atomic_ops=true
|
|
|
|
)
|
|
|
|
])
|
|
|
|
if $hb_cv_have_solaris_atomic_ops; then
|
|
|
|
AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$os_win32" = no && ! $have_pthread; then
|
|
|
|
AC_CHECK_HEADERS(sched.h)
|
|
|
|
AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
|
|
|
|
fi
|
|
|
|
|
|
|
|
dnl ===========================================================================
|
|
|
|
|
2009-11-02 21:28:39 +00:00
|
|
|
AC_CONFIG_FILES([
|
|
|
|
Makefile
|
|
|
|
src/Makefile
|
2018-02-23 21:55:53 +00:00
|
|
|
src/harfbuzz-config.cmake
|
2012-10-02 20:03:18 +00:00
|
|
|
src/hb-ucdn/Makefile
|
2011-08-09 13:03:00 +00:00
|
|
|
util/Makefile
|
2011-04-07 20:05:07 +00:00
|
|
|
test/Makefile
|
2012-01-19 19:52:02 +00:00
|
|
|
test/api/Makefile
|
2015-11-06 07:08:50 +00:00
|
|
|
test/fuzzing/Makefile
|
2012-01-19 20:21:04 +00:00
|
|
|
test/shaping/Makefile
|
2018-01-10 04:40:43 +00:00
|
|
|
test/shaping/data/Makefile
|
|
|
|
test/shaping/data/in-house/Makefile
|
|
|
|
test/shaping/data/text-rendering-tests/Makefile
|
2018-01-29 21:30:02 +00:00
|
|
|
test/subset/Makefile
|
|
|
|
test/subset/data/Makefile
|
2013-02-24 18:00:33 +00:00
|
|
|
docs/Makefile
|
2015-08-31 18:18:10 +00:00
|
|
|
docs/version.xml
|
2009-11-02 21:28:39 +00:00
|
|
|
])
|
|
|
|
|
|
|
|
AC_OUTPUT
|
2012-12-20 06:02:36 +00:00
|
|
|
|
|
|
|
AC_MSG_NOTICE([
|
|
|
|
|
|
|
|
Build configuration:
|
|
|
|
|
|
|
|
Unicode callbacks (you want at least one):
|
2017-01-06 04:12:32 +00:00
|
|
|
Builtin (UCDN): ${have_ucdn}
|
2012-12-20 06:02:36 +00:00
|
|
|
Glib: ${have_glib}
|
|
|
|
ICU: ${have_icu}
|
|
|
|
|
2018-02-04 17:38:18 +00:00
|
|
|
Font callbacks (the more the merrier):
|
2012-12-20 06:02:36 +00:00
|
|
|
FreeType: ${have_freetype}
|
|
|
|
|
|
|
|
Tools used for command-line utilities:
|
|
|
|
Cairo: ${have_cairo}
|
2014-08-06 20:49:51 +00:00
|
|
|
Fontconfig: ${have_fontconfig}
|
2012-12-20 06:02:36 +00:00
|
|
|
|
2018-02-04 17:38:18 +00:00
|
|
|
Additional shapers (the more the merrier):
|
2013-05-27 22:47:58 +00:00
|
|
|
Graphite2: ${have_graphite2}
|
2012-12-20 06:02:36 +00:00
|
|
|
|
2013-08-30 23:32:10 +00:00
|
|
|
Platform shapers (not normally needed):
|
2012-12-20 06:02:36 +00:00
|
|
|
CoreText: ${have_coretext}
|
2016-02-03 10:31:23 +00:00
|
|
|
DirectWrite: ${have_directwrite}
|
2018-03-30 17:55:35 +00:00
|
|
|
Uniscribe: ${have_uniscribe}
|
2013-02-24 18:00:33 +00:00
|
|
|
|
2013-08-22 23:03:21 +00:00
|
|
|
Other features:
|
2018-02-04 10:05:12 +00:00
|
|
|
Documentation: ${enable_gtk_doc}
|
2013-08-27 00:56:58 +00:00
|
|
|
GObject bindings: ${have_gobject}
|
2013-08-28 16:52:55 +00:00
|
|
|
Introspection: ${have_introspection}
|
2012-12-20 06:02:36 +00:00
|
|
|
])
|