Home | History | Annotate | Download | only in harfbuzz_ng
      1 AC_PREREQ([2.64])
      2 AC_INIT([HarfBuzz],
      3         [0.9.33],
      4         [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
      5         [harfbuzz],
      6         [http://harfbuzz.org/])
      7 
      8 AC_CONFIG_MACRO_DIR([m4])
      9 AC_CONFIG_SRCDIR([src/harfbuzz.pc.in])
     10 AC_CONFIG_HEADERS([config.h])
     11 
     12 AM_INIT_AUTOMAKE([1.11.1 gnits tar-pax dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability])
     13 AM_CONDITIONAL(AUTOMAKE_OLDER_THAN_1_13, test $am__api_version = 1.11 -o $am__api_version = 1.12)
     14 AM_SILENT_RULES([yes])
     15 
     16 # Initialize libtool
     17 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
     18 LT_PREREQ([2.2])
     19 LT_INIT([disable-static])
     20 
     21 # Check for programs
     22 AC_PROG_CC
     23 AM_PROG_CC_C_O
     24 AC_PROG_CXX
     25 PKG_PROG_PKG_CONFIG([0.20])
     26 AM_MISSING_PROG([RAGEL], [ragel])
     27 AM_MISSING_PROG([GIT], [git])
     28 
     29 # Version
     30 m4_define(hb_version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]]))
     31 m4_define(hb_version_major,m4_argn(1,hb_version_triplet))
     32 m4_define(hb_version_minor,m4_argn(2,hb_version_triplet))
     33 m4_define(hb_version_micro,m4_argn(3,hb_version_triplet))
     34 HB_VERSION_MAJOR=hb_version_major
     35 HB_VERSION_MINOR=hb_version_minor
     36 HB_VERSION_MICRO=hb_version_micro
     37 HB_VERSION=AC_PACKAGE_VERSION
     38 AC_SUBST(HB_VERSION_MAJOR)
     39 AC_SUBST(HB_VERSION_MINOR)
     40 AC_SUBST(HB_VERSION_MICRO)
     41 AC_SUBST(HB_VERSION)
     42 
     43 # Libtool version
     44 m4_define([hb_version_int],
     45 	  m4_eval(hb_version_major*10000 + hb_version_minor*100 + hb_version_micro))
     46 m4_if(m4_eval(hb_version_minor % 2), [1],
     47       dnl for unstable releases
     48       [m4_define([hb_libtool_revision], 0)],
     49       dnl for stable releases
     50       [m4_define([hb_libtool_revision], hb_version_micro)])
     51 m4_define([hb_libtool_age],
     52 	  m4_eval(hb_version_int - hb_libtool_revision))
     53 m4_define([hb_libtool_current],
     54 	  m4_eval(hb_version_major + hb_libtool_age))
     55 HB_LIBTOOL_VERSION_INFO=hb_libtool_current:hb_libtool_revision:hb_libtool_age
     56 AC_SUBST(HB_LIBTOOL_VERSION_INFO)
     57 
     58 # Documentation
     59 have_gtk_doc=false
     60 m4_ifdef([GTK_DOC_CHECK], [
     61 GTK_DOC_CHECK([1.15],[--flavour no-tmpl])
     62 	if test "x$enable_gtk_doc" = xyes; then
     63 		have_gtk_doc=true
     64 	fi
     65 ], [
     66 	AM_CONDITIONAL([ENABLE_GTK_DOC], false)
     67 ])
     68 
     69 # Functions and headers
     70 AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty)
     71 AC_CHECK_HEADERS(unistd.h sys/mman.h)
     72 
     73 # Compiler flags
     74 AC_CANONICAL_HOST
     75 AC_CHECK_ALIGNOF([struct{char;}])
     76 if test "x$GCC" = "xyes"; then
     77 
     78 	# Make symbols link locally
     79 	LDFLAGS="$LDFLAGS -Bsymbolic-functions"
     80 
     81 	# Make sure we don't link to libstdc++
     82 	CXXFLAGS="$CXXFLAGS -fno-rtti -fno-exceptions"
     83 
     84 	# Assorted warnings
     85 	CXXFLAGS="$CXXFLAGS -Wcast-align"
     86 
     87 	case "$host" in
     88 		*-*-mingw*)
     89 		;;
     90 		*)
     91 			# Hide inline methods
     92 			CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
     93 		;;
     94 	esac
     95 
     96 	case "$host" in
     97 		arm-*-*)
     98 			if test "x$ac_cv_alignof_struct_char__" != x1; then
     99 				# Request byte alignment
    100 				CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
    101 			fi
    102 		;;
    103 	esac
    104 fi
    105 
    106 AM_CONDITIONAL(HAVE_GCC, test "x$GCC" = "xyes")
    107 
    108 hb_os_win32=no
    109 AC_MSG_CHECKING([for native Win32])
    110 case "$host" in
    111   *-*-mingw*)
    112     hb_os_win32=yes
    113     ;;
    114 esac
    115 AC_MSG_RESULT([$hb_os_win32])
    116 AM_CONDITIONAL(OS_WIN32, test "$hb_os_win32" = "yes")
    117 
    118 have_pthread=false
    119 if test "$hb_os_win32" = no; then
    120 	AX_PTHREAD([have_pthread=true])
    121 fi
    122 if $have_pthread; then
    123 	AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
    124 fi
    125 AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
    126 
    127 dnl ==========================================================================
    128 
    129 have_ot=true
    130 if $have_ot; then
    131 	AC_DEFINE(HAVE_OT, 1, [Have native OpenType Layout backend])
    132 fi
    133 AM_CONDITIONAL(HAVE_OT, $have_ot)
    134 
    135 have_fallback=true
    136 if $have_fallback; then
    137 	AC_DEFINE(HAVE_FALLBACK, 1, [Have simple TrueType Layout backend])
    138 fi
    139 AM_CONDITIONAL(HAVE_FALLBACK, $have_fallback)
    140 
    141 dnl ===========================================================================
    142 
    143 AC_ARG_WITH(glib,
    144 	[AS_HELP_STRING([--with-glib=@<:@yes/no/auto@:>@],
    145 			[Use glib @<:@default=auto@:>@])],,
    146 	[with_glib=auto])
    147 have_glib=false
    148 if test "x$with_glib" = "xyes" -o "x$with_glib" = "xauto"; then
    149 	PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, have_glib=true, :)
    150 fi
    151 if test "x$with_glib" = "xyes" -a "x$have_glib" != "xtrue"; then
    152 	AC_MSG_ERROR([glib support requested but glib-2.0 not found])
    153 fi
    154 if $have_glib; then
    155 	AC_DEFINE(HAVE_GLIB, 1, [Have glib2 library])
    156 fi
    157 AM_CONDITIONAL(HAVE_GLIB, $have_glib)
    158 
    159 dnl ===========================================================================
    160 
    161 AC_ARG_WITH(gobject,
    162 	[AS_HELP_STRING([--with-gobject=@<:@yes/no/auto@:>@],
    163 			[Use gobject @<:@default=auto@:>@])],,
    164 	[with_gobject=no])
    165 have_gobject=false
    166 if test "x$with_gobject" = "xyes" -o "x$with_gobject" = "xauto"; then
    167 	PKG_CHECK_MODULES(GOBJECT, gobject-2.0 glib-2.0, have_gobject=true, :)
    168 fi
    169 if test "x$with_gobject" = "xyes" -a "x$have_gobject" != "xtrue"; then
    170 	AC_MSG_ERROR([gobject support requested but gobject-2.0 / glib-2.0 not found])
    171 fi
    172 if $have_gobject; then
    173 	AC_DEFINE(HAVE_GOBJECT, 1, [Have gobject2 library])
    174 	GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
    175 	AC_SUBST(GLIB_MKENUMS)
    176 fi
    177 AM_CONDITIONAL(HAVE_GOBJECT, $have_gobject)
    178 
    179 dnl ===========================================================================
    180 
    181 
    182 dnl ===========================================================================
    183 # Gobject-Introspection
    184 have_introspection=false
    185 m4_ifdef([GOBJECT_INTROSPECTION_CHECK], [
    186 	if $have_gobject; then
    187 		GOBJECT_INTROSPECTION_CHECK([1.34.0])
    188 		if test "x$found_introspection" = xyes; then
    189 			have_introspection=true
    190 		fi
    191 	else
    192 		AM_CONDITIONAL([HAVE_INTROSPECTION], false)
    193 	fi
    194 ], [
    195 	AM_CONDITIONAL([HAVE_INTROSPECTION], false)
    196 ])
    197 
    198 dnl ===========================================================================
    199 
    200 have_ucdn=true
    201 if $have_glib; then
    202 	have_ucdn=false
    203 fi
    204 if $have_ucdn; then
    205 	AC_DEFINE(HAVE_UCDN, 1, [Have UCDN Unicode functions])
    206 fi
    207 AM_CONDITIONAL(HAVE_UCDN, $have_ucdn)
    208 
    209 dnl ==========================================================================
    210 
    211 AC_ARG_WITH(cairo,
    212 	[AS_HELP_STRING([--with-cairo=@<:@yes/no/auto@:>@],
    213 			[Use cairo @<:@default=auto@:>@])],,
    214 	[with_cairo=auto])
    215 have_cairo=false
    216 if test "x$with_cairo" = "xyes" -o "x$with_cairo" = "xauto"; then
    217 	PKG_CHECK_MODULES(CAIRO, cairo >= 1.8.0, have_cairo=true, :)
    218 fi
    219 if test "x$with_cairo" = "xyes" -a "x$have_cairo" != "xtrue"; then
    220 	AC_MSG_ERROR([cairo support requested but not found])
    221 fi
    222 if $have_cairo; then
    223 	AC_DEFINE(HAVE_CAIRO, 1, [Have cairo graphics library])
    224 fi
    225 AM_CONDITIONAL(HAVE_CAIRO, $have_cairo)
    226 
    227 have_cairo_ft=false
    228 if $have_cairo; then
    229 	PKG_CHECK_MODULES(CAIRO_FT, cairo-ft, have_cairo_ft=true, :)
    230 fi
    231 if $have_cairo_ft; then
    232 	AC_DEFINE(HAVE_CAIRO_FT, 1, [Have cairo-ft support in cairo graphics library])
    233 fi
    234 AM_CONDITIONAL(HAVE_CAIRO_FT, $have_cairo_ft)
    235 
    236 dnl ==========================================================================
    237 
    238 AC_ARG_WITH(icu,
    239 	[AS_HELP_STRING([--with-icu=@<:@yes/no/auto@:>@],
    240 			[Use ICU @<:@default=auto@:>@])],,
    241 	[with_icu=auto])
    242 have_icu=false
    243 if test "x$with_icu" = "xyes" -o "x$with_icu" = "xauto"; then
    244 	PKG_CHECK_MODULES(ICU, icu-uc, have_icu=true, :)
    245 
    246 	dnl Fallback to icu-config if ICU pkg-config files could not be found
    247 	if test "$have_icu" != "true"; then
    248 		AC_CHECK_TOOL(ICU_CONFIG, icu-config, no)
    249 		AC_MSG_CHECKING([for ICU by using icu-config fallback])
    250 		if test "$ICU_CONFIG" != "no" && "$ICU_CONFIG" --version >/dev/null; then
    251 			have_icu=true
    252 			# We don't use --cflags as this gives us a lot of things that we don't
    253 			# necessarily want, like debugging and optimization flags
    254 			# See man (1) icu-config for more info.
    255 			ICU_CFLAGS=`$ICU_CONFIG --cppflags`
    256 			ICU_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly`
    257 			AC_SUBST(ICU_CFLAGS)
    258 			AC_SUBST(ICU_LIBS)
    259 			AC_MSG_RESULT([yes])
    260 		else
    261 			AC_MSG_RESULT([no])
    262 		fi
    263 	fi
    264 fi
    265 if test "x$with_icu" = "xyes" -a "x$have_icu" != "xtrue"; then
    266 	AC_MSG_ERROR([icu support requested but icu-uc not found])
    267 fi
    268 if $have_icu; then
    269 	CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`"
    270 	AC_DEFINE(HAVE_ICU, 1, [Have ICU library])
    271 fi
    272 AM_CONDITIONAL(HAVE_ICU, $have_icu)
    273 
    274 dnl ==========================================================================
    275 
    276 AC_ARG_WITH(graphite2,
    277 	[AS_HELP_STRING([--with-graphite2=@<:@yes/no/auto@:>@],
    278 			[Use the graphite2 library @<:@default=no@:>@])],,
    279 	[with_graphite2=no])
    280 have_graphite2=false
    281 if test "x$with_graphite2" = "xyes" -o "x$with_graphite2" = "xauto"; then
    282 	PKG_CHECK_MODULES(GRAPHITE2, graphite2, have_graphite2=true, :)
    283 fi
    284 if test "x$with_graphite2" = "xyes" -a "x$have_graphite2" != "xtrue"; then
    285 	AC_MSG_ERROR([graphite2 support requested but libgraphite2 not found])
    286 fi
    287 if $have_graphite2; then
    288     AC_DEFINE(HAVE_GRAPHITE2, 1, [Have Graphite2 library])
    289 fi
    290 AM_CONDITIONAL(HAVE_GRAPHITE2, $have_graphite2)
    291 
    292 dnl ==========================================================================
    293 
    294 AC_ARG_WITH(freetype,
    295 	[AS_HELP_STRING([--with-freetype=@<:@yes/no/auto@:>@],
    296 			[Use the FreeType library @<:@default=auto@:>@])],,
    297 	[with_freetype=auto])
    298 have_freetype=false
    299 if test "x$with_freetype" = "xyes" -o "x$with_freetype" = "xauto"; then
    300 	PKG_CHECK_MODULES(FREETYPE, freetype2 >= 2.3.8, have_freetype=true, :)
    301 fi
    302 if test "x$with_freetype" = "xyes" -a "x$have_freetype" != "xtrue"; then
    303 	AC_MSG_ERROR([FreeType support requested but libfreetype2 not found])
    304 fi
    305 if $have_freetype; then
    306 	AC_DEFINE(HAVE_FREETYPE, 1, [Have FreeType 2 library])
    307 	_save_libs="$LIBS"
    308 	_save_cflags="$CFLAGS"
    309 	LIBS="$LIBS $FREETYPE_LIBS"
    310 	CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
    311 	AC_CHECK_FUNCS(FT_Face_GetCharVariantIndex)
    312 	LIBS="$_save_libs"
    313 	CFLAGS="$_save_cflags"
    314 fi
    315 AM_CONDITIONAL(HAVE_FREETYPE, $have_freetype)
    316 
    317 dnl ===========================================================================
    318 
    319 AC_ARG_WITH(uniscribe,
    320 	[AS_HELP_STRING([--with-uniscribe=@<:@yes/no/auto@:>@],
    321 			[Use the Uniscribe library @<:@default=no@:>@])],,
    322 	[with_uniscribe=no])
    323 have_uniscribe=false
    324 if test "x$with_uniscribe" = "xyes" -o "x$with_uniscribe" = "xauto"; then
    325 	AC_CHECK_HEADERS(usp10.h windows.h, have_uniscribe=true)
    326 fi
    327 if test "x$with_uniscribe" = "xyes" -a "x$have_uniscribe" != "xtrue"; then
    328 	AC_MSG_ERROR([uniscribe support requested but not found])
    329 fi
    330 if $have_uniscribe; then
    331 	UNISCRIBE_CFLAGS=
    332 	UNISCRIBE_LIBS="-lusp10 -lgdi32 -lrpcrt4"
    333 	AC_SUBST(UNISCRIBE_CFLAGS)
    334 	AC_SUBST(UNISCRIBE_LIBS)
    335 	AC_DEFINE(HAVE_UNISCRIBE, 1, [Have Uniscribe library])
    336 fi
    337 AM_CONDITIONAL(HAVE_UNISCRIBE, $have_uniscribe)
    338 
    339 dnl ===========================================================================
    340 
    341 AC_ARG_WITH(coretext,
    342 	[AS_HELP_STRING([--with-coretext=@<:@yes/no/auto@:>@],
    343 			[Use CoreText @<:@default=no@:>@])],,
    344 	[with_coretext=no])
    345 have_coretext=false
    346 if test "x$with_coretext" = "xyes" -o "x$with_coretext" = "xauto"; then
    347 	AC_CHECK_TYPE(CTFontRef, have_coretext=true,, [#include <ApplicationServices/ApplicationServices.h>])
    348 
    349 	if $have_coretext; then
    350 		CORETEXT_CFLAGS=
    351 		CORETEXT_LIBS="-framework ApplicationServices"
    352 		AC_SUBST(CORETEXT_CFLAGS)
    353 		AC_SUBST(CORETEXT_LIBS)
    354 	else
    355 		# On iOS CoreText and CoreGraphics are stand-alone frameworks
    356 		if test "x$have_coretext" != "xtrue"; then
    357 			AC_CHECK_TYPE(CTFontRef, have_coretext=true,, [#include <CoreText/CoreText.h>])
    358 		fi
    359 
    360 		if $have_coretext; then
    361 			CORETEXT_CFLAGS=
    362 			CORETEXT_LIBS="-framework CoreText -framework CoreGraphics"
    363 			AC_SUBST(CORETEXT_CFLAGS)
    364 			AC_SUBST(CORETEXT_LIBS)
    365 		fi
    366 	fi
    367 fi
    368 if test "x$with_coretext" = "xyes" -a "x$have_coretext" != "xtrue"; then
    369 	AC_MSG_ERROR([CoreText support requested but libcoretext not found])
    370 fi
    371 if $have_coretext; then
    372 	AC_DEFINE(HAVE_CORETEXT, 1, [Have Core Text backend])
    373 fi
    374 AM_CONDITIONAL(HAVE_CORETEXT, $have_coretext)
    375 
    376 dnl ===========================================================================
    377 
    378 AC_CACHE_CHECK([for Intel atomic primitives], hb_cv_have_intel_atomic_primitives, [
    379 	hb_cv_have_intel_atomic_primitives=false
    380 	AC_TRY_LINK([
    381 		void memory_barrier (void) { __sync_synchronize (); }
    382 		int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
    383 		int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
    384 		void mutex_unlock (int *m) { __sync_lock_release (m); }
    385 		], [], hb_cv_have_intel_atomic_primitives=true
    386 	)
    387 ])
    388 if $hb_cv_have_intel_atomic_primitives; then
    389 	AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
    390 fi
    391 
    392 dnl ===========================================================================
    393 
    394 AC_CACHE_CHECK([for Solaris atomic operations], hb_cv_have_solaris_atomic_ops, [
    395 	hb_cv_have_solaris_atomic_ops=false
    396 	AC_TRY_LINK([
    397 		#include <atomic.h>
    398 		/* This requires Solaris Studio 12.2 or newer: */
    399 		#include <mbarrier.h>
    400 		void memory_barrier (void) { __machine_rw_barrier (); }
    401 		int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
    402 		void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
    403 		], [], hb_cv_have_solaris_atomic_ops=true
    404 	)
    405 ])
    406 if $hb_cv_have_solaris_atomic_ops; then
    407 	AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
    408 fi
    409 
    410 if test "$os_win32" = no && ! $have_pthread; then
    411 	AC_CHECK_HEADERS(sched.h)
    412 	AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
    413 fi
    414 
    415 dnl ===========================================================================
    416 
    417 AC_CONFIG_FILES([
    418 Makefile
    419 src/Makefile
    420 src/hb-version.h
    421 src/hb-ucdn/Makefile
    422 util/Makefile
    423 test/Makefile
    424 test/api/Makefile
    425 test/shaping/Makefile
    426 docs/Makefile
    427 docs/reference/Makefile
    428 docs/reference/version.xml
    429 ])
    430 
    431 AC_OUTPUT
    432 
    433 AC_MSG_NOTICE([
    434 
    435 Build configuration:
    436 
    437 Unicode callbacks (you want at least one):
    438 	Glib:			${have_glib}
    439 	ICU:			${have_icu}
    440 	UCDN:			${have_ucdn}
    441 
    442 Font callbacks (the more the better):
    443 	FreeType:		${have_freetype}
    444 
    445 Tools used for command-line utilities:
    446 	Cairo:			${have_cairo}
    447 
    448 Additional shapers (the more the better):
    449 	Graphite2:		${have_graphite2}
    450 
    451 Platform shapers (not normally needed):
    452 	CoreText:		${have_coretext}
    453 	Uniscribe:		${have_uniscribe}
    454 
    455 Other features:
    456 	Documentation:		${have_gtk_doc}
    457 	GObject bindings:	${have_gobject}
    458 	Introspection:		${have_introspection}
    459 ])
    460