configure.ac 63.5 KB
Newer Older
Elliot Lee's avatar
Elliot Lee committed
1
# Process this file with autoconf to produce a configure script.
2

3 4 5 6 7 8 9 10
# Making releases:
#   GTK_MICRO_VERSION += 1;
#   GTK_INTERFACE_AGE += 1;
#   GTK_BINARY_AGE += 1;
# if any functions have been added, set GTK_INTERFACE_AGE to 0.
# if backwards compatibility has been broken,
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.

11
m4_define([gtk_major_version], [3])
Matthias Clasen's avatar
Matthias Clasen committed
12
m4_define([gtk_minor_version], [22])
Matthias Clasen's avatar
Matthias Clasen committed
13 14
m4_define([gtk_micro_version], [30])
m4_define([gtk_interface_age], [30])
Owen Taylor's avatar
Owen Taylor committed
15 16
m4_define([gtk_binary_age],
          [m4_eval(100 * gtk_minor_version + gtk_micro_version)])
17 18
m4_define([gtk_version],
          [gtk_major_version.gtk_minor_version.gtk_micro_version])
19
# This is the X.Y used in -lgtk-FOO-X.Y
20
m4_define([gtk_api_version], [3.0])
21

22
AC_PREREQ([2.62])
23 24 25 26
AC_INIT([gtk+], [gtk_version],
        [http://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2B],
        [gtk+])

27
AC_CONFIG_HEADERS([config.h])
28 29
AC_CONFIG_SRCDIR([gdk/gdktypes.h])
AC_CONFIG_MACRO_DIR([m4])
30
AC_CONFIG_AUX_DIR([build-aux])
31

32 33
AC_CANONICAL_HOST

34
# Define a string for the earliest version that this release has
35 36 37 38
# backwards binary compatibility with for all interfaces a module
# might. Unless we add module-only API with lower stability
# guarantees, this should be unchanged until we break binary compat
# for GTK+.
39 40
#
#GTK_BINARY_VERSION=$GTK_MAJOR_VERSION.$GTK_MINOR_VERSION.$LT_CURRENT
41
m4_define([gtk_binary_version], [3.0.0])
42 43

# required versions of other packages
44
m4_define([glib_required_major], [2])
45
m4_define([glib_required_minor], [49])
46
m4_define([glib_required_micro], [4])
47 48 49 50 51 52 53 54 55 56
m4_define([glib_required_version],
          [glib_required_major.glib_required_minor.glib_required_micro])
m4_define([glib_min_required_minor],
          [m4_eval(glib_required_minor - (glib_required_minor % 2))])
m4_define([glib_max_allowed_minor],
          [m4_eval(glib_required_minor + (glib_required_minor % 2))])
m4_define([glib_min_required_version], m4_join([_], [GLIB_VERSION], glib_required_major, glib_min_required_minor))
m4_define([glib_max_allowed_version], m4_join([_], [GLIB_VERSION], glib_required_major, glib_max_allowed_minor))
GLIB_VERSION_CFLAGS="-DGLIB_MIN_REQUIRED_VERSION=glib_min_required_version -DGLIB_MAX_ALLOWED_VERSION=glib_max_allowed_version"

57
m4_define([pango_required_version], [1.37.3])
Matthias Clasen's avatar
Matthias Clasen committed
58
m4_define([atk_required_version], [2.15.1])
59
m4_define([cairo_required_version], [1.14.0])
60
m4_define([gdk_pixbuf_required_version], [2.30.0])
61
m4_define([introspection_required_version], [1.39.0])
62
m4_define([wayland_required_version], [1.9.91])
63
m4_define([wayland_protocols_required_version], [1.12])
64
m4_define([mirclient_required_version], [0.22.0])
65
m4_define([mircookie_required_version], [0.17.0])
66
m4_define([epoxy_required_version], [1.0])
67
m4_define([cloudproviders_required_version], [0.2.5])
68 69 70 71 72
GLIB_REQUIRED_VERSION=glib_required_version
PANGO_REQUIRED_VERSION=pango_required_version
ATK_REQUIRED_VERSION=atk_required_version
CAIRO_REQUIRED_VERSION=cairo_required_version
GDK_PIXBUF_REQUIRED_VERSION=gdk_pixbuf_required_version
73 74
INTROSPECTION_REQUIRED_VERSION=introspection_required_version

75 76 77 78 79
AC_SUBST(GLIB_REQUIRED_VERSION)
AC_SUBST(PANGO_REQUIRED_VERSION)
AC_SUBST(ATK_REQUIRED_VERSION)
AC_SUBST(CAIRO_REQUIRED_VERSION)
AC_SUBST(GDK_PIXBUF_REQUIRED_VERSION)
80
AC_SUBST(INTROSPECTION_REQUIRED_VERSION)
81 82 83 84

# Save this value here, since automake will set cflags later
cflags_set=${CFLAGS+set}

85
AM_INIT_AUTOMAKE([1.11 -Wall subdir-objects no-define -Wno-portability tar-ustar no-dist-gzip dist-xz])
86
AM_MAINTAINER_MODE([enable])
Elliot Lee's avatar
Elliot Lee committed
87

88
# Support silent build rules. Disable
Javier Jardón's avatar
Javier Jardón committed
89
# by either passing --disable-silent-rules to configure or passing V=1
90
# to make
91
AM_SILENT_RULES([yes])
92

93
#
94 95 96 97 98 99 100 101
# For each of the libraries we build, we define the following
# substituted variables:
#
# foo_PACKAGES:     pkg-config packages this library requires
# foo_EXTRA_LIBS:   Libraries this module requires not pulled in by pkg-config
# foo_EXTRA_CFLAGS: cflags this module requires not pulled in by pkg-config
# foo_DEP_LIBS:     All libraries this module requires
# foo_DEP_CFLAGS:   All cflags this module requires
102 103


104 105 106 107 108 109 110 111
GTK_MAJOR_VERSION=gtk_major_version
GTK_MINOR_VERSION=gtk_minor_version
GTK_MICRO_VERSION=gtk_micro_version
GTK_INTERFACE_AGE=gtk_interface_age
GTK_BINARY_AGE=gtk_binary_age
GTK_VERSION=gtk_version
GTK_API_VERSION=gtk_api_version
GTK_BINARY_VERSION=gtk_binary_version
112 113 114
AC_SUBST(GTK_MAJOR_VERSION)
AC_SUBST(GTK_MINOR_VERSION)
AC_SUBST(GTK_MICRO_VERSION)
115 116
AC_SUBST(GTK_INTERFACE_AGE)
AC_SUBST(GTK_BINARY_AGE)
Owen Taylor's avatar
Owen Taylor committed
117
AC_SUBST(GTK_API_VERSION)
118
AC_SUBST(GTK_VERSION)
119
AC_SUBST(GTK_BINARY_VERSION)
120 121

# libtool versioning
122 123 124 125 126 127
#LT_RELEASE=$GTK_MAJOR_VERSION.$GTK_MINOR_VERSION
#LT_CURRENT=`expr $GTK_MICRO_VERSION - $GTK_INTERFACE_AGE`
#LT_REVISION=$GTK_INTERFACE_AGE
#LT_AGE=`expr $GTK_BINARY_AGE - $GTK_INTERFACE_AGE`
#LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`

128 129 130 131 132 133
m4_define([lt_current], [m4_eval(100 * gtk_minor_version + gtk_micro_version - gtk_interface_age)])
m4_define([lt_revision], [gtk_interface_age])
m4_define([lt_age], [m4_eval(gtk_binary_age - gtk_interface_age)])
LT_VERSION_INFO="lt_current:lt_revision:lt_age"
LT_CURRENT_MINUS_AGE=m4_eval(lt_current - lt_age)
AC_SUBST(LT_VERSION_INFO)
Tor Lillqvist's avatar
Tor Lillqvist committed
134
AC_SUBST(LT_CURRENT_MINUS_AGE)
135

136 137
m4_define([gail_lt_current],[0])
m4_define([gail_lt_revision],[0])
138 139 140 141 142
m4_define([gail_lt_age],[0])
m4_define([gail_lt_version_info],[gail_lt_current:gail_lt_revision:gail_lt_age])
m4_define([gail_lt_current_minus_age],[m4_eval(gail_lt_current - gail_lt_age)])
AC_SUBST([GAIL_LT_VERSION_INFO],[gail_lt_version_info])
AC_SUBST([GAIL_LT_CURRENT_MINUS_AGE],[gail_lt_current_minus_age])
143

144 145 146 147 148 149 150 151 152 153 154 155 156
# Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=721346 until fixed upstream in autoconf-archive
if test "$cross_compiling" = "no"; then
  if test -n "$CFLAGS"; then
    CFLAGS_FOR_BUILD=$CFLAGS
  fi
  if test -n "$CPPFLAGS"; then
    CPPFLAGS_FOR_BUILD=$CPPFLAGS
  fi
  if test -n "$LDFLAGS"; then
    LDFLAGS_FOR_BUILD=$LDFLAGS
  fi
fi

157 158
# Checks for programs.
AC_PROG_CC
159
AX_PROG_CC_FOR_BUILD
160
AC_PROG_CC_C_O
161
AC_PROG_MKDIR_P
162 163 164
AC_PROG_INSTALL
AC_PROG_MAKE_SET

165 166 167
# Define _GNU_SOURCE etc. where appropriate, e.g. for strptime() on glibc
AC_USE_SYSTEM_EXTENSIONS

Javier Jardón's avatar
Javier Jardón committed
168 169 170 171
# i18n stuff
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.19.7])

172
GETTEXT_PACKAGE=gtk30
173
AC_SUBST(GETTEXT_PACKAGE)
174 175
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
                   [The prefix for our gettext translation domains.])
176

177 178
MATH_LIB=-lm
AC_MSG_CHECKING([for native Win32])
179
LIB_EXE_MACHINE_FLAG=X86
180
EXE_MANIFEST_ARCHITECTURE=X86
181
DISABLE_ON_W32=''
182 183
case "$host" in
  *-*-mingw*)
184 185
    dnl Comment-out certain gtk3.types.in lines
    DISABLE_ON_W32='%'
186
    os_win32=yes
187
    gio_can_sniff=no
188
    MATH_LIB=
189 190 191
    case "$host" in
    x86_64-*-*)
      LIB_EXE_MACHINE_FLAG=X64
192
      EXE_MANIFEST_ARCHITECTURE=AMD64
193 194
      ;;
    esac
195 196 197 198 199 200
    ;;
  *)
    os_win32=no
    ;;
esac
AC_MSG_RESULT([$os_win32])
Elliot Lee's avatar
Elliot Lee committed
201

202
AC_SUBST(DISABLE_ON_W32)
203
AC_SUBST(LIB_EXE_MACHINE_FLAG)
204
AC_SUBST(EXE_MANIFEST_ARCHITECTURE)
205

206 207 208 209
case $host in
  *-*-linux*)
    os_linux=yes
    ;;
210 211 212
  *-*-darwin*)
    os_darwin=yes
    ;;
213
esac
214

215
dnl
216 217
dnl Check for a working C++ compiler, but do not bail out, if none is found.
dnl We use this for an automated test for C++ header correctness.
218
dnl
219
AC_CHECK_TOOLS(CXX, [$CCC c++ g++ gcc CC cxx cc++ cl], gcc)
220
AC_LANG_PUSH([C++])
221

222 223 224
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
                                   [[class a { int b; } c;]])],
                  [],[CXX=])
225
AM_CONDITIONAL(HAVE_CXX, test "$CXX" != "")
226 227 228

gtk_save_cxxflags="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -x objective-c++"
229 230 231
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@interface Foo @end]],
                                   [[]])],
                  [OBJC=yes],[OBJC=no])
232
AM_CONDITIONAL(HAVE_OBJC, test "$OBJC" = "yes")
233
CXXFLAGS="$gtk_save_cxxflags"
234
AC_LANG_POP([C++])
235

Tor Lillqvist's avatar
Tor Lillqvist committed
236
if test "$os_win32" = "yes"; then
237 238 239 240 241 242 243 244 245 246
  if test x$enable_static = xyes -o x$enable_static = x; then
    AC_MSG_WARN([Disabling static library build, must build as DLL on Windows.])
    enable_static=no
  fi
  if test x$enable_shared = xno; then
    AC_MSG_WARN([Enabling shared library build, must build as DLL on Windows.])
  fi
  enable_shared=yes
fi

247 248 249 250 251
dnl Initialize libtool
LT_PREREQ([2.2.6])
LT_INIT([disable-static win32-dll])
# Create libtool early, because it's used in configure
LT_OUTPUT
Elliot Lee's avatar
Elliot Lee committed
252

253 254 255
# Make sure we use 64-bit versions of various file stuff.
AC_SYS_LARGEFILE

256
AM_PROG_AS
257
AC_PATH_TOOL(NM, nm, nm)
258

Tor Lillqvist's avatar
Tor Lillqvist committed
259 260 261 262 263 264 265 266 267 268 269 270 271
AC_MSG_CHECKING([for some Win32 platform])
case "$host" in
  *-*-mingw*|*-*-cygwin*)
    platform_win32=yes
    ;;
  *)
    platform_win32=no
    ;;
esac
AC_MSG_RESULT([$platform_win32])
AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")

AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
272
AM_CONDITIONAL(OS_UNIX, test "$os_win32" != "yes")
273
AM_CONDITIONAL(OS_LINUX, test "$os_linux" = "yes")
274
AM_CONDITIONAL(OS_DARWIN, test "$os_darwin" = "yes")
Tor Lillqvist's avatar
Tor Lillqvist committed
275 276

if test "$os_win32" = "yes"; then
277 278 279 280
  AC_CHECK_TOOL(WINDRES, windres, no)
  if test "$WINDRES" = no; then
    AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
  fi
Tor Lillqvist's avatar
Tor Lillqvist committed
281 282 283 284
  AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
fi
AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)

285 286
m4_define([debug_default],
          m4_if(m4_eval(gtk_minor_version % 2), [1], [yes], [minimum]))
287 288

dnl declare --enable-* args and collect ac_help strings
289
AC_ARG_ENABLE(debug,
290 291 292
              [AS_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
                              [turn on debugging @<:@default=debug_default@:>@])],,
              [enable_debug=debug_default])
293

294 295 296 297 298
AC_ARG_ENABLE(installed_tests,
              AS_HELP_STRING([--enable-installed-tests],
                             [Install test programs (default: no)]),,
              [enable_installed_tests=no])
AM_CONDITIONAL(BUILDOPT_INSTALL_TESTS, test x$enable_installed_tests = xyes)
299

300
AC_ARG_ENABLE(xkb,
301
              [AS_HELP_STRING([--enable-xkb],
302
                              [support XKB extension [default=maybe]])],,
303
              [enable_xkb="maybe"])
304
AC_ARG_ENABLE(xinerama,
305
              [AS_HELP_STRING([--enable-xinerama],
306
	                      [support Xinerama extension [default=maybe]])],,
307
              [enable_xinerama="maybe"])
308
AC_ARG_ENABLE(xrandr,
309
              [AS_HELP_STRING([--enable-xrandr],
310
                              [support XRandR extension [default=maybe]])],,
311 312
              [enable_xrandr="maybe"])
AC_ARG_ENABLE(xfixes,
313
              [AS_HELP_STRING([--enable-xfixes],
314
                              [support XFixes extension [default=maybe]])],,
315 316
              [enable_xfixes="maybe"])
AC_ARG_ENABLE(xcomposite,
317
              [AS_HELP_STRING([--enable-xcomposite],
318
                              [support X Composite extension [default=maybe]])],,
319 320
              [enable_xcomposite="maybe"])
AC_ARG_ENABLE(xdamage,
321
              [AS_HELP_STRING([--enable-xdamage],
322
                              [support X Damage extension [default=maybe]])],,
323
              [enable_xdamage="maybe"])
324

325
AC_ARG_ENABLE(x11-backend,
326
              [AS_HELP_STRING([--enable-x11-backend],
327 328 329
                              [enable the X11 gdk backend])],
			      [backend_set=yes])
AC_ARG_ENABLE(win32-backend,
330
              [AS_HELP_STRING([--enable-win32-backend],
331 332 333
                              [enable the Win32 gdk backend])],
			      [backend_set=yes])
AC_ARG_ENABLE(quartz-backend,
334
              [AS_HELP_STRING([--enable-quartz-backend],
335 336
                              [enable the quartz gdk backend])],
			      [backend_set=yes])
337
AC_ARG_ENABLE(broadway-backend,
338
              [AS_HELP_STRING([--enable-broadway-backend],
339 340
                              [enable the broadway (HTML5) gdk backend])],
			      [backend_set=yes])
Kristian Høgsberg's avatar
Kristian Høgsberg committed
341
AC_ARG_ENABLE(wayland-backend,
342
              [AS_HELP_STRING([--enable-wayland-backend],
Kristian Høgsberg's avatar
Kristian Høgsberg committed
343 344
                              [enable the wayland gdk backend])],
			      [backend_set=yes])
345 346 347 348
AC_ARG_ENABLE(mir-backend,
              [AS_HELP_STRING([--enable-mir-backend],
                              [enable the Mir gdk backend])],
			      [backend_set=yes])
349

350 351 352 353 354
AC_ARG_ENABLE(cloudproviders,
              [AS_HELP_STRING([--enable-cloudproviders],
                              [enable libcloudproviders integration])],
                              [cloudproviders_set=yes])

355 356 357 358 359
if test -z "$backend_set"; then
  if test "$platform_win32" = yes; then
    enable_win32_backend=yes
  else
    enable_x11_backend=yes
360
    enable_wayland_backend=maybe
361
    enable_mir_backend=no
362 363 364
  fi
fi

365 366 367 368 369
AC_ARG_ENABLE(quartz-relocation,
              [AS_HELP_STRING([--enable-quartz-relocation],
                              [enable bundle-based relocation functions])],
                              [quartz_relocation=yes])

370
cairo_backends=
371
backend_immodules=
372
have_gio_unix=no
373
GDK_BACKENDS=
374
GDK_EXTRA_LIBS=
375
GDK_EXTRA_CFLAGS=
376 377
GDK_WINDOWING=
PANGO_PACKAGES="pango pangocairo"
378

379
ENABLE_ON_X11='%'
380
if test "$enable_x11_backend" = "yes"; then
381 382 383 384
  # GDK calls the xlib backend "x11," cairo calls it "xlib." Other
  # backend names are identical.
  cairo_backends="$cairo_backends cairo-xlib"
  GDK_BACKENDS="$GDK_BACKENDS x11"
385 386 387
  backend_immodules="$backend_immodules,xim"
  GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_X11"
388
  ENABLE_ON_X11=''
Tor Lillqvist's avatar
Tor Lillqvist committed
389
fi
390
AC_SUBST(ENABLE_ON_X11)
391

392
if test "$enable_win32_backend" = "yes"; then
393 394
  cairo_backends="$cairo_backends cairo-win32"
  GDK_BACKENDS="$GDK_BACKENDS win32"
395 396 397
  backend_immodules="$backend_immodules,ime"
  GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_WIN32"
LRN's avatar
LRN committed
398
  GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32"
399 400 401 402
  AM_CONDITIONAL(USE_WIN32, true)
  PANGO_PACKAGES="pangowin32 pangocairo"
else
  AM_CONDITIONAL(USE_WIN32, false)
403
fi
404

405
DISABLE_ON_QUARTZ=''
406
if test "x$enable_quartz_backend" = xyes; then
407 408
  cairo_backends="$cairo_backends cairo-quartz"
  GDK_BACKENDS="$GDK_BACKENDS quartz"
409
  backend_immodules="$backend_immodules,quartz"
410 411 412
  GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_QUARTZ"
  GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -framework Cocoa"
413
  DISABLE_ON_QUARTZ='%'
414
  AM_CONDITIONAL(USE_QUARTZ, true)
415 416 417
  if test "x$quartz_relocation" = xyes; then
    AC_DEFINE([QUARTZ_RELOCATION], [1], [Use NSBundle functions to determine load paths for libraries, translations, etc.])
  fi
Tor Lillqvist's avatar
Tor Lillqvist committed
418
else
419
  AM_CONDITIONAL(USE_QUARTZ, false)
Tor Lillqvist's avatar
Tor Lillqvist committed
420
fi
421
AC_SUBST(DISABLE_ON_QUARTZ)
422

423 424 425
AC_CHECK_LIB([rt], [shm_open], [SHM_LIBS="-lrt"], [SHM_LIBS=""])
AC_SUBST(SHM_LIBS)

426
AC_CHECK_FUNCS(posix_fallocate flockfile _lock_file)
427

428
if test "x$enable_broadway_backend" = xyes; then
429
  GDK_BACKENDS="$GDK_BACKENDS broadway"
430
  cairo_backends="$cairo_backends cairo"
431
  backend_immodules="$backend_immodules,broadway"
432 433 434 435 436 437 438
  GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_BROADWAY"
  GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -lz"
  AM_CONDITIONAL(USE_BROADWAY, true)
else
  AM_CONDITIONAL(USE_BROADWAY, false)
fi
439

440 441
PKG_PROG_PKG_CONFIG

442
WAYLAND_DEPENDENCIES="wayland-client >= wayland_required_version wayland-protocols >= wayland_protocols_required_version xkbcommon >= 0.2.0 wayland-cursor >= wayland_required_version wayland-egl"
443 444 445 446 447 448 449 450 451 452 453 454 455
if test "$enable_wayland_backend" = "maybe" ; then
  AC_PATH_PROG([WAYLAND_SCANNER],[wayland-scanner],[no])
  PKG_CHECK_EXISTS($WAYLAND_DEPENDENCIES, [have_wayland_deps=yes], [have_wayland_deps=no])
  AC_MSG_CHECKING([for WAYLAND_DEPENDENCIES])
  if test "$WAYLAND_SCANNER" = "no" -o "$have_wayland_deps" = "no" ; then
    enable_wayland_backend=no
  else
    enable_wayland_backend=yes
  fi
  AC_MSG_RESULT($enable_wayland_backend)
fi

if test "$enable_wayland_backend" = "yes"; then
456 457
  # For the cairo image backend
  cairo_backends="$cairo_backends cairo"
458
  AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, `$PKG_CONFIG --variable=pkgdatadir wayland-protocols`)
Kristian Høgsberg's avatar
Kristian Høgsberg committed
459 460 461
  GDK_BACKENDS="$GDK_BACKENDS wayland"
  GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_WAYLAND"
462
  backend_immodules="$backend_immodules,wayland"
463
  WAYLAND_PACKAGES="$WAYLAND_DEPENDENCIES"
464
  AC_PATH_PROG([WAYLAND_SCANNER],[wayland-scanner],[no])
465
  AS_IF([test "x$WAYLAND_SCANNER" = "xno"],
466
    [AC_MSG_ERROR([Could not find wayland-scanner in your PATH, required for parsing wayland extension protocols])])
467 468
  AC_SUBST([WAYLAND_SCANNER])

Kristian Høgsberg's avatar
Kristian Høgsberg committed
469 470 471 472 473
  AM_CONDITIONAL(USE_WAYLAND, true)
else
  AM_CONDITIONAL(USE_WAYLAND, false)
fi

474
MIR_DEPENDENCIES="mirclient >= mirclient_required_version mircookie >= mircookie_required_version libcontent-hub-glib"
475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497
if test "$enable_mir_backend" = "maybe" ; then
  PKG_CHECK_EXISTS($MIR_DEPENDENCIES, [have_mir_deps=yes], [have_mir_deps=no])
  AC_MSG_CHECKING([for MIR_DEPENDENCIES])
  if test "$have_mir_deps" = "no" ; then
    enable_mir_backend=no
  else
    enable_mir_backend=yes
  fi
  AC_MSG_RESULT($enable_mir_backend)
fi

if test "$enable_mir_backend" = "yes"; then
  cairo_backends="$cairo_backends cairo"
  GDK_BACKENDS="$GDK_BACKENDS mir"
  GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_MIR"
  MIR_PACKAGES="$MIR_DEPENDENCIES"

  AM_CONDITIONAL(USE_MIR, true)
else
  AM_CONDITIONAL(USE_MIR, false)
fi

498
# strip leading space
499
GDK_BACKENDS=${GDK_BACKENDS#* }
500

501
AC_SUBST(GDK_BACKENDS)
Tor Lillqvist's avatar
Tor Lillqvist committed
502

503 504 505
if test -z "$GDK_BACKENDS"; then
  AC_MSG_ERROR([No GDK backends selected.])
fi
Tor Lillqvist's avatar
Tor Lillqvist committed
506

507
if test "x$enable_debug" = "xyes"; then
Tim Janik's avatar
Tim Janik committed
508
  test "$cflags_set" = set || CFLAGS="$CFLAGS -g"
509
  GTK_DEBUG_FLAGS="-DG_ENABLE_DEBUG -DG_ENABLE_CONSISTENCY_CHECKS"
Elliot Lee's avatar
Elliot Lee committed
510
else
511
  if test "x$enable_debug" = "xno"; then
512
    GTK_DEBUG_FLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -DG_DISABLE_CAST_CHECKS"
513
  else
514
    GTK_DEBUG_FLAGS="-DG_ENABLE_DEBUG -DG_DISABLE_CAST_CHECKS"
515
  fi
Elliot Lee's avatar
Elliot Lee committed
516
fi
517
GTK_DEBUG_FLAGS="$GTK_DEBUG_FLAGS $GLIB_VERSION_CFLAGS"
Elliot Lee's avatar
Elliot Lee committed
518 519 520 521

# Build time sanity check...
AM_SANITY_CHECK

Raja R Harinath's avatar
Raja R Harinath committed
522
changequote(,)dnl
523
if test "x$GCC" = "xyes"; then
Raja R Harinath's avatar
Raja R Harinath committed
524 525 526 527
  case " $CFLAGS " in
  *[\ \	]-Wall[\ \	]*) ;;
  *) CFLAGS="$CFLAGS -Wall" ;;
  esac
Elliot Lee's avatar
Elliot Lee committed
528

529
  if test "x$enable_ansi" = "xyes"; then
Raja R Harinath's avatar
Raja R Harinath committed
530 531 532 533 534 535 536 537 538
    case " $CFLAGS " in
    *[\ \	]-ansi[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -ansi" ;;
    esac

    case " $CFLAGS " in
    *[\ \	]-pedantic[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -pedantic" ;;
    esac
Elliot Lee's avatar
Elliot Lee committed
539
  fi
540 541
fi
changequote([,])dnl
Tor Lillqvist's avatar
Tor Lillqvist committed
542

543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566
# Ensure MSVC-compatible struct packing convention is used when
# compiling for Win32 with gcc.
# What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while
# gcc2 uses "-fnative-struct".
if test x"$os_win32" = xyes; then
  if test x"$GCC" = xyes; then
    msnative_struct=''
    AC_MSG_CHECKING([how to get MSVC-compatible struct packing])
    if test -z "$ac_cv_prog_CC"; then
      our_gcc="$CC"
    else
      our_gcc="$ac_cv_prog_CC"
    fi
    case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in
      2.)
	if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then
	  msnative_struct='-fnative-struct'
	fi
	;;
      *)
	if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then
	  msnative_struct='-mms-bitfields'
	fi
	;;
Tor Lillqvist's avatar
Tor Lillqvist committed
567
    esac
568 569 570 571 572 573 574
    if test x"$msnative_struct" = x ; then
      AC_MSG_RESULT([no way])
      AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
    else
      CFLAGS="$CFLAGS $msnative_struct"
      AC_MSG_RESULT([${msnative_struct}])
    fi
Tor Lillqvist's avatar
Tor Lillqvist committed
575
  fi
Elliot Lee's avatar
Elliot Lee committed
576 577
fi

578
## Initial sanity check, done here so that users get told they
579 580
## have the wrong dependencies as early in the process as possible.
## Later on we actually use the cflags/libs from separate pkg-config
581 582
## calls. Oh, also the later pkg-config calls don't include
## the version requirements since those make the module lists
583
## annoying to construct
584 585 586
PKG_CHECK_MODULES(BASE_DEPENDENCIES,
  [glib-2.0 >= glib_required_version dnl
   atk >= atk_required_version dnl
587
   pango >= pango_required_version dnl
588
   cairo >= cairo_required_version dnl
589
   cairo-gobject >= cairo_required_version dnl
590
   gdk-pixbuf-2.0 >= gdk_pixbuf_required_version])
591

592
PKG_CHECK_MODULES(CAIRO_BACKEND, [$cairo_backends])
593

594
# Remove this check once cairo_required_version reaches at least 1.16.0
595 596 597
AS_CASE([$host_os],
  [mingw*],
  [
LRN's avatar
LRN committed
598
    PKG_CHECK_MODULES(CAIRO, [cairo >= cairo_required_version])
599 600
    gtk_save_LIBS="$LIBS"
    LIBS="$CAIRO_LIBS $LIBS"
LRN's avatar
LRN committed
601 602 603 604
    AC_CHECK_LIB([cairo], [cairo_win32_surface_create_with_format],
      [AC_MSG_RESULT([found])],
      [AC_MSG_ERROR(
[cairo_win32_surface_create_with_format is not found in cairo library
605
You need a cairo snapshot 1.15.x or 1.16.x release or newer])])
606 607 608 609
    LIBS="$gtk_save_LIBS"
  ],
  []
)
LRN's avatar
LRN committed
610 611


612 613
PKG_CHECK_MODULES(GMODULE, [gmodule-2.0])

614 615 616 617
dnl ******************************************************
dnl * See whether to include shared library dependencies *
dnl ******************************************************

618
AC_ARG_ENABLE(explicit-deps,
619
              [AS_HELP_STRING([--enable-explicit-deps=@<:@yes/no/auto@:>@],
620 621
                              [use explicit dependencies in .pc files [default=auto]])],,
              [enable_explicit_deps=auto])
622

623
AC_MSG_CHECKING([whether to write dependencies into .pc files])
624 625
case $enable_explicit_deps in
  auto)
626
    export SED
627
    deplibs_check_method=`(./libtool --config; echo 'eval echo \"$deplibs_check_method\"') | sh`
628
    if test "x$deplibs_check_method" != xpass_all || test "x$enable_static" = xyes ; then
629
      enable_explicit_deps=yes
630
    else
631
      enable_explicit_deps=no
632 633
    fi
  ;;
634
  yes|no)
635 636 637 638 639 640 641 642
  ;;
  *) AC_MSG_ERROR([Value given to --enable-explicit-deps must be one of yes, no or auto])
  ;;
esac
AC_MSG_RESULT($enable_explicit_deps)

AM_CONDITIONAL(DISABLE_EXPLICIT_DEPS, test $enable_explicit_deps = no)

643
# define a MAINT-like variable REBUILD which is set if Perl
644 645
# and awk are found, so autogenerated sources can be rebuilt

646
AC_PATH_PROGS(PERL, perl5 perl)
647

648
AC_CHECK_FUNCS(lstat mkstemp)
649
AC_CHECK_FUNCS(localtime_r)
650 651 652

# _NL_TIME_FIRST_WEEKDAY is an enum and not a define
AC_MSG_CHECKING([for _NL_TIME_FIRST_WEEKDAY])
653 654 655 656
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
                                [[char c;
                                  c = *((unsigned char *)  nl_langinfo(_NL_TIME_FIRST_WEEKDAY));]])],
               [gtk_ok=yes], [gtk_ok=no])
657 658 659 660 661
AC_MSG_RESULT($gtk_ok)
if test "$gtk_ok" = "yes"; then
  AC_DEFINE([HAVE__NL_TIME_FIRST_WEEKDAY], [1],
	    [Define if _NL_TIME_FIRST_WEEKDAY is available])
fi
662

663 664
# _NL_MEASUREMENT_MEASUREMENT is an enum and not a define
AC_MSG_CHECKING([for _NL_MEASUREMENT_MEASUREMENT])
665 666 667 668
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
                                [[char c;
                                  c = *((unsigned char *)  nl_langinfo(_NL_MEASUREMENT_MEASUREMENT));]])],
               [gtk_ok=yes], [gtk_ok=no])
669 670 671 672 673 674 675 676
AC_MSG_RESULT($gtk_ok)
if test "$gtk_ok" = "yes"; then
  AC_DEFINE([HAVE__NL_MEASUREMENT_MEASUREMENT], [1],
	    [Define if _NL_MEASUREMENT_MEASUREMENT is available])
fi

# _NL_PAPER_HEIGHT is an enum and not a define
AC_MSG_CHECKING([for _NL_PAPER_HEIGHT])
677 678 679 680
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
                                [[char c;
                                  c = *((unsigned char *)  nl_langinfo(_NL_PAPER_HEIGHT));]])],
               [gtk_ok=yes], [gtk_ok=no])
681 682 683 684 685 686 687 688
AC_MSG_RESULT($gtk_ok)
if test "$gtk_ok" = "yes"; then
  AC_DEFINE([HAVE__NL_PAPER_HEIGHT], [1],
	    [Define if _NL_PAPER_HEIGHT is available])
fi

# _NL_PAPER_WIDTH is an enum and not a define
AC_MSG_CHECKING([for _NL_PAPER_WIDTH])
689 690 691 692
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
                                [[char c;
                                  c = *((unsigned char *)  nl_langinfo(_NL_PAPER_WIDTH));]])],
               [gtk_ok=yes], [gtk_ok=no])
693 694 695 696 697
AC_MSG_RESULT($gtk_ok)
if test "$gtk_ok" = "yes"; then
  AC_DEFINE([HAVE__NL_PAPER_WIDTH], [1],
	    [Define if _NL_PAPER_WIDTH is available])
fi
698

699
LIBS="$LIBS $INTLLIBS"
Owen Taylor's avatar
Owen Taylor committed
700

701
dnl The DU4 header files don't provide library prototypes unless
702
dnl -std1 is given to the native cc.
Manish Singh's avatar
Manish Singh committed
703
AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
704

705
gtk_save_LIBS=$LIBS
706
LIBS="$LIBS -lm"
707 708 709 710 711 712 713 714 715 716 717 718 719 720
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <math.h>
                                int main (void) { return (log(1) != log(1.)); }]])],
              [AC_MSG_RESULT(none needed)],
              [gtk_save_CFLAGS="$CFLAGS"
               CFLAGS="$CFLAGS -std1"
               AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <math.h>
                                               int main (void) { return (log(1) != log(1.)); }]])],
                             [AC_MSG_RESULT(-std1)],
                             [AC_MSG_RESULT()
                              CFLAGS="$gtk_save_CFLAGS"
                              AC_MSG_WARN([No ANSI prototypes found in library. (-std1 did not work.)])],
                             [true])],
              [AC_MSG_RESULT(none needed)])

721 722
LIBS=$gtk_save_LIBS

723 724 725
AC_MSG_CHECKING(for the BeOS)
case $host in
  *-*-beos*)
726
    AC_MSG_RESULT(yes)
727 728
    MATH_LIB=
  ;;
729 730
  *)
    AC_MSG_RESULT(no)
731 732
  ;;
esac
733

LRN's avatar
LRN committed
734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781
AS_CASE([$host_os],
  [mingw*],
  [
    AC_CHECK_SIZEOF(
      [DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY],
      [],
      [
#define _WIN32_WINNT 0x601
#include <windows.h>
      ]
    )
    AS_IF(
      [test x$ac_cv_sizeof_DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY = x4],
      [AC_MSG_RESULT([DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY is OK])],
      [test x$ac_cv_sizeof_DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY = x0],
      [AC_MSG_ERROR([DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY is unavailable])],
      [AC_MSG_RESULT([DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY is not OK])]
    )
    AC_MSG_CHECKING([for SetupDiGetDevicePropertyW])
    gtk_save_LIBS="$LIBS"
    LIBS="-lsetupapi $LIBS"
    AC_TRY_LINK(
      [
#define _WIN32_WINNT 0x0600
#include <windows.h>
#include <devpropdef.h>
#include <setupapi.h>
      ],
      [return SetupDiGetDevicePropertyW(NULL, NULL, NULL, NULL, NULL, 0, NULL, 0);],
      [have_SetupDiGetDevicePropertyW=yes],
      [have_SetupDiGetDevicePropertyW=no]
    )
    AS_IF(
      [test x$have_SetupDiGetDevicePropertyW = xyes],
      [
       AC_DEFINE(
         [HAVE_SETUP_DI_GET_DEVICE_PROPERTY_W],
         [1],
         [Define to 1 if SetupDiGetDevicePropertyW() is available]
       )
      ]
    )
    AC_MSG_RESULT([$have_SetupDiGetDevicePropertyW])
    LIBS="$gtk_save_LIBS"
  ],
  []
)

Benjamin Otte's avatar
Benjamin Otte committed
782
AC_SUBST(MATH_LIB)
783 784 785 786 787 788 789 790 791 792 793 794 795
#
# see bug 162979
#
AC_MSG_CHECKING(for HP-UX)
case $host_os in
  hpux9* | hpux10* | hpux11*)
    AC_MSG_RESULT(yes)
    CFLAGS="$CFLAGS -DHPPEX -DSHMLINK"
  ;;
  *)
    AC_MSG_RESULT(no)
  ;;
esac
796

797
#
Owen Taylor's avatar
Owen Taylor committed
798
# Run AM_PATH_GLIB_2_0 to make sure that GLib is installed and working
799
#
800

801
AM_PATH_GLIB_2_0(glib_required_version, :,
802
  AC_MSG_ERROR([
803
*** GLIB glib_required_version or better is required. The latest version of
804
*** GLIB is always available from ftp://ftp.gtk.org/pub/gtk/.]),
805
  gobject gmodule-no-export)
806

807 808 809 810 811 812
PKG_PROG_PKG_CONFIG_FOR_BUILD
GLIB_CFLAGS_FOR_BUILD=`$PKG_CONFIG_FOR_BUILD --cflags glib-2.0 gobject-2.0 gmodule-no-export-2.0`
GLIB_LIBS_FOR_BUILD=`$PKG_CONFIG_FOR_BUILD --libs glib-2.0 gobject-2.0 gmodule-no-export-2.0`
AC_SUBST(GLIB_CFLAGS_FOR_BUILD)
AC_SUBST(GLIB_LIBS_FOR_BUILD)

Owen Taylor's avatar
Owen Taylor committed
813 814 815 816 817 818 819
dnl Check for bind_textdomain_codeset, including -lintl if GLib brings it in.
dnl
gtk_save_LIBS=$LIBS
LIBS="$LIBS $GLIB_LIBS"
AC_CHECK_FUNCS(bind_textdomain_codeset)
LIBS=$gtk_save_LIBS

820 821 822
AC_CHECK_HEADERS(linux/memfd.h,
                 AC_DEFINE(HAVE_LINUX_MEMFD_H, 1,
                           [Define to 1 if memfd.h is available]))
823 824
AC_CHECK_HEADERS(sys/mman.h,
                 AC_DEFINE(HAVE_SYS_MMAN_H, 1,
Tarnyko's avatar
Tarnyko committed
825
                           [Define to 1 if mman.h is available]))
826 827 828 829 830 831 832 833 834
AC_CHECK_HEADERS(sys/time.h,
                 AC_DEFINE(HAVE_SYS_TIME_H, 1,
                           [Define to 1 if time.h is available]))
AC_CHECK_HEADERS(unistd.h,
                 AC_DEFINE(HAVE_UNISTD_H, 1,
                           [Define to 1 if unistd.h is available]))
AC_CHECK_HEADERS(ftw.h,
                 AC_DEFINE(HAVE_FTW_H, 1,
                           [Define to 1 if ftw.h is available]))
835

836
AC_MSG_CHECKING([for GNU ftw extensions])
837 838 839 840 841
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _XOPEN_SOURCE 500
                                     #define _GNU_SOURCE
                                     #include <ftw.h>]],
                                   [[int flags = FTW_ACTIONRETVAL;]])],
                  [gtk_ok=yes],[gtk_ok=no])
842 843
if test $gtk_ok = yes; then
    AC_MSG_RESULT([yes])
844
    AC_DEFINE(HAVE_GNU_FTW, 1, [Have GNU ftw])
845 846 847 848
else
    AC_MSG_RESULT([no])
fi

849 850 851 852 853 854 855 856 857 858 859 860 861
#
# Disable deprecation checks for all libraries we depend on on stable branches.
# This is so newer versions of those libraries don't cause more warnings with
# a stable GTK version.
# We don't ever want to turn off deprecation warnings for master however, because
# that's where we get rid of deprecated API we use.
#
if test m4_eval(gtk_minor_version % 2) = 0 ; then
  AC_DEFINE_UNQUOTED(GLIB_DISABLE_DEPRECATION_WARNINGS, 1,
                     [Disable deprecation warnings from glib])
fi

dnl
862 863 864
saved_cflags="$CFLAGS"
saved_ldflags="$LDFLAGS"

865

866 867
# Checks for library functions.
AC_FUNC_MMAP
868

Matthias Clasen's avatar
Matthias Clasen committed
869
AC_CHECK_FUNCS(mallinfo)
870 871
AC_CHECK_FUNCS(getresuid)
AC_TYPE_UID_T
872

873 874
# Check for round(), rint(), isnan(), isinf() and nearbyint()
AC_CHECK_LIB(m,round,,)
875
AC_CHECK_FUNCS(round rint nearbyint sincos exp2 log2)
876
AC_CHECK_DECLS([isnan, isinf], [], [], [[#include <math.h>]])
877

Matthias Clasen's avatar
Matthias Clasen committed
878 879 880 881
# Checks for gdkspawn
AC_CHECK_HEADERS(crt_externs.h)
AC_CHECK_FUNCS(_NSGetEnviron)

882 883
AC_MSG_CHECKING(whether to build dynamic modules)

884
AC_ARG_ENABLE(modules,
885
              [AS_HELP_STRING([--disable-modules],
886
                              [disable dynamic module loading])])
887

888
dynworks=false
889
build_dynamic_modules=no
890
deps=
891
if test x$enable_modules = xno; then
892 893 894 895
    AC_MSG_RESULT(no)
else
    AC_MSG_RESULT(yes)
    AC_MSG_CHECKING(whether dynamic modules work)
896
    ## for loop is to strip newline
897
    tmp=`$PKG_CONFIG --variable=gmodule_supported gmodule-no-export-2.0`
898 899 900
    for I in $tmp; do
        dynworks=$I
    done
901

902 903 904
    dnl Now we check to see if our libtool supports shared lib deps
    dnl (in a rather ugly way even)
    if $dynworks; then
905 906
        module_libtool_config="${CONFIG_SHELL-/bin/sh} ./libtool --config"
        module_deplibs_check=`$module_libtool_config | \
907 908
            grep '^[[a-z_]]*check[[a-z_]]*_method=[['\''"]]' | \
            sed 's/.*[['\''"]]\(.*\)[['\''"]]$/\1/'`
909 910 911
        if test "x$module_deplibs_check" = "xnone" || \
           test "x$module_deplibs_check" = "xunknown" || \
           test "x$module_deplibs_check" = "x"; then
912 913 914
            dynworks=false
        fi
    fi
915

916
    if $dynworks; then
917
        build_dynamic_modules=yes
918 919
        AC_DEFINE(USE_GMODULE, 1,
                  [Define to 1 if gmodule works and should be used])
920 921
        AC_MSG_RESULT(yes)
    else
922
        build_dynamic_modules=no
923 924
        AC_MSG_RESULT(no)
    fi
925
fi
Havoc Pennington's avatar
Havoc Pennington committed
926

927
AM_CONDITIONAL(BUILD_DYNAMIC_MODULES, $dynworks)
928

929 930 931 932 933 934
#
# Allow building some or all immodules included
#
AC_MSG_CHECKING(immodules to build)

AC_ARG_WITH(included_immodules,
935 936
            [AS_HELP_STRING([--with-included-immodules=MODULE1,MODULE2,...],
                            [build the specified input methods into gtk])])
937

938
if $dynworks; then
939 940 941 942 943 944 945 946
   :
else
   ## if the option was specified, leave it; otherwise disable included immodules
   if test x$with_included_immodules = xno; then
           with_included_immodules=yes
   fi
fi

947
all_immodules="am-et,cedilla,cyrillic-translit,inuktitut,ipa,multipress,thai,ti-er,ti-et,viqr$backend_immodules"
948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986

included_immodules=""
# If the switch specified without listing any specific ones, include all
if test "x$with_included_immodules" = xyes ; then
  included_immodules="$all_immodules"
else
  included_immodules="$with_included_immodules"
fi

AC_MSG_RESULT($included_immodules)
AM_CONDITIONAL(HAVE_INCLUDED_IMMMODULES, test "x$included_immodules" != x)

INCLUDED_IMMODULE_OBJ=
INCLUDED_IMMODULE_DEFINE=

IFS="${IFS= 	}"; gtk_save_ifs="$IFS"; IFS=","
for immodule in $included_immodules; do
 immodule_underscores=`echo $immodule | sed -e 's/-/_/g'`
 if echo "$all_immodules" | egrep "(^|,)$immodule(\$|,)" > /dev/null; then
   :
 else
   AC_MSG_ERROR([the specified input method $immodule does not exist])
 fi

 INCLUDED_IMMODULE_OBJ="$INCLUDED_IMMODULE_OBJ ../modules/input/libstatic-im-$immodule.la"
 INCLUDED_IMMODULE_DEFINE="$INCLUDED_IMMODULE_DEFINE -DINCLUDE_IM_$immodule_underscores"
 eval INCLUDE_$immodule_underscores=yes
done
IFS="$gtk_save_ifs"
AC_SUBST(INCLUDED_IMMODULE_OBJ)
AC_SUBST(INCLUDED_IMMODULE_DEFINE)

AM_CONDITIONAL(INCLUDE_IM_AM_ET, [test x"$INCLUDE_am_et" = xyes])
AM_CONDITIONAL(INCLUDE_IM_CEDILLA, [test x"$INCLUDE_cedilla" = xyes])
AM_CONDITIONAL(INCLUDE_IM_CYRILLIC_TRANSLIT, [test x"$INCLUDE_cyrillic_translit" = xyes])
AM_CONDITIONAL(INCLUDE_IM_IME, [test x"$INCLUDE_ime" = xyes])
AM_CONDITIONAL(INCLUDE_IM_INUKTITUT, [test x"$INCLUDE_inuktitut" = xyes])
AM_CONDITIONAL(INCLUDE_IM_IPA, [test x"$INCLUDE_ipa" = xyes])
AM_CONDITIONAL(INCLUDE_IM_MULTIPRESS, [test x"$INCLUDE_multipress" = xyes])
987
AM_CONDITIONAL(INCLUDE_IM_QUARTZ, [test x"$INCLUDE_quartz" = xyes])
988
AM_CONDITIONAL(INCLUDE_IM_BROADWAY, [test x"$INCLUDE_broadway" = xyes])
989 990 991 992 993
AM_CONDITIONAL(INCLUDE_IM_THAI, [test x"$INCLUDE_thai" = xyes])
AM_CONDITIONAL(INCLUDE_IM_TI_ER, [test x"$INCLUDE_ti_er" = xyes])
AM_CONDITIONAL(INCLUDE_IM_TI_ET, [test x"$INCLUDE_ti_et" = xyes])
AM_CONDITIONAL(INCLUDE_IM_VIQR, [test x"$INCLUDE_viqr" = xyes])
AM_CONDITIONAL(INCLUDE_IM_XIM, [test x"$INCLUDE_xim" = xyes])
994
AM_CONDITIONAL(INCLUDE_IM_WAYLAND, [test x"$INCLUDE_wayland" = xyes])
995

996 997 998
# Checks to see whether we should include mediaLib
# support.
#
999
AC_CHECK_HEADER(sys/systeminfo.h,
1000
                AC_DEFINE(HAVE_SYS_SYSTEMINFO_H, 1,
1001 1002 1003 1004
                          [Define to 1 if sys/systeminfo.h is available]))
AC_CHECK_HEADER(sys/sysinfo.h,
                AC_DEFINE(HAVE_SYS_SYSINFO_H, 1,
                          [Define to 1 if sys/sysinfo.h is available]))
1005

1006 1007
dnl Look for a host system's gdk-pixbuf-csource if we are cross-compiling

1008
AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
1009

1010 1011 1012
########################################
# Windowing system checks
########################################
1013

1014 1015 1016
# GTK+ uses some X calls, so needs to link against X directly
GTK_DEP_PACKAGES_FOR_X=
GTK_DEP_LIBS_FOR_X=
1017
X_EXTENSIONS=
1018

1019
if test "x$enable_x11_backend" = xyes; then
1020 1021
  X_PACKAGES=fontconfig

1022 1023 1024 1025 1026 1027 1028 1029 1030
  #
  # We use fontconfig very peripherally when decoding the default
  # settings.
  #
  if $PKG_CONFIG --exists fontconfig; then : ; else
    AC_MSG_ERROR([
*** fontconfig (http://www.fontconfig.org) is required by the X11 backend.])
  fi

1031
  #
1032
  # Check for basic X packages; we use pkg-config if available
1033
  #
1034
  if $PKG_CONFIG --exists x11 xext; then
1035
    have_base_x_pc=true
1036 1037
    X_PACKAGES="$X_PACKAGES x11 xext"
    x_libs="`$PKG_CONFIG --libs x11 xext`"
1038
    X_CFLAGS="`$PKG_CONFIG --cflags x11 xext`"
1039

1040 1041 1042 1043
    # Strip out any .la files that pkg-config might give us (this happens
    # with -uninstalled.pc files)
    x_libs_for_checks=
    for I in $x_libs ; do
1044
      case $I in
1045 1046 1047 1048
        *.la) ;;
        *) x_libs_for_checks="$x_libs_for_checks $I" ;;
      esac
    done
1049

1050 1051 1052 1053 1054 1055 1056
    GTK_PACKAGES_FOR_X="x11"
  else
    have_base_x_pc=false
    AC_PATH_XTRA
    if test x$no_x = xyes ; then
      AC_MSG_ERROR([X development libraries not found])
    fi
1057

1058
    x_cflags="$X_CFLAGS"
1059
    x_libs_for_checks="$X_LIBS -lXext -lX11 $X_EXTRA_LIBS"
Elliot Lee's avatar
Elliot Lee committed
1060

1061
    GTK_DEP_LIBS_FOR_X="$X_LIBS -lX11 $X_EXTRA_LIBS"
1062 1063
  fi

1064 1065
  # Extra libraries found during checks (-lXinerama, etc), not from pkg-config.
  x_extra_libs=
Alexander Larsson's avatar
Alexander Larsson committed
1066

1067
  gtk_save_cppflags="$CPPFLAGS"
1068
  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
Alexander Larsson's avatar
Alexander Larsson committed
1069

1070 1071
  gtk_save_LIBS=$LIBS
  LIBS="$x_libs_for_checks $LIBS"
1072

1073 1074 1075 1076
  # Sanity check for the X11 and Xext libraries. While everything we need from
  # Xext is optional, the chances a system has *none* of these things is so
  # small that we just unconditionally require it.
  AC_CHECK_FUNC(XOpenDisplay, :,
1077
                AC_MSG_ERROR([*** libX11 and libXext not found. Check 'config.log' for more details.]))
1078
  AC_CHECK_FUNC(XextFindDisplay, :,
1079
                AC_MSG_ERROR([*** libX11 and libXext not found. Check 'config.log' for more details.]))
1080

1081 1082 1083 1084 1085 1086 1087 1088 1089 1090
  # Check if <X11/extensions/XIproto.h> is needed for xReply.

  AC_CHECK_TYPE([xReply], ,
                [AC_CHECK_TYPE([xReply],
                               [AC_DEFINE([NEED_XIPROTO_H_FOR_XREPLY], 1,
                                          [Define if <X11/extensions/XIproto.h> needed for xReply])],
                               [AC_MSG_ERROR([xReply type unavailable. X11 is too old])],
                               [[#include <X11/extensions/XIproto.h>
                                 #include <X11/Xlibint.h>]])],
                [[#include <X11/Xlibint.h>]])
1091

1092 1093 1094
  # Check for XKB support.

  if test "x$enable_xkb" = "xyes"; then
1095 1096 1097 1098
        AC_CHECK_FUNC(XkbQueryExtension,
                      X_EXTENSIONS="$X_EXTENSIONS XKB"
                      AC_DEFINE(HAVE_XKB, 1, [Define to use XKB extension]),
                      AC_MSG_ERROR([*** XKB extension not found. Check 'config.log' for more details.]))
1099
  elif test "x$enable_xkb" = "xmaybe"; then
1100
        AC_CHECK_FUNC(XkbQueryExtension,
1101
                      X_EXTENSIONS="$X_EXTENSIONS XKB"
1102
                      AC_DEFINE(HAVE_XKB, 1, [Define to use XKB extension]))
1103 1104 1105 1106
  else
        AC_MSG_WARN(XKB support explicitly disabled)
  fi

1107
  # Check for shaped window extension
1108

1109 1110
  AC_CHECK_FUNC(XShapeCombineMask, :,
     [AC_MSG_ERROR([Shape extension not found, check your development headers])])
1111

1112
  # X SYNC check
1113 1114
  gtk_save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS $x_cflags"
1115

1116 1117
  AC_CHECK_FUNC(XSyncQueryExtension,
      [AC_CHECK_HEADER(X11/extensions/sync.h,
1118
	  AC_DEFINE(HAVE_XSYNC, 1, [Have the SYNC extension library]),
1119
	  :, [#include <X11/Xlib.h>])])
1120

1121 1122
  CFLAGS="$gtk_save_CFLAGS"

1123
  if test "x$enable_xinerama" != "xno"; then
1124
    # Check for Xinerama extension (Solaris impl or Xfree impl)
1125 1126 1127
    have_xfree_xinerama=false
    have_solaris_xinerama=false

1128 1129
    gtk_save_cppflags="$CPPFLAGS"
    CPPFLAGS="$CPPFLAGS $x_cflags"
1130

1131
    # Check for XFree
1132
    AC_MSG_CHECKING(for Xinerama packages)
1133

1134
    if $PKG_CONFIG --exists xinerama ; then
1135
       AC_MSG_RESULT(yes)
1136 1137
       have_xfree_xinerama=true
       X_PACKAGES="$X_PACKAGES xinerama"
1138
    else
1139
       AC_MSG_RESULT(no)
1140
       AC_CHECK_LIB(Xinerama, XineramaQueryExtension,
1141
	   [AC_CHECK_HEADER(X11/extensions/Xinerama.h,
1142 1143 1144 1145 1146 1147
	   [GTK_ADD_LIB(x_extra_libs,Xinerama)
	   have_xfree_xinerama=true], :,
           [#include <X11/Xlib.h>])])
    fi

    if $have_xfree_xinerama ; then
1148
      X_EXTENSIONS="$X_EXTENSIONS Xinerama"
1149 1150 1151 1152 1153 1154 1155 1156
      AC_DEFINE(HAVE_XFREE_XINERAMA, 1,
                [Define to 1 if XFree Xinerama is available])
      AC_DEFINE(HAVE_XINERAMA, 1,
                [Define to 1 is Xinerama is available])
    else
      case "$host" in
        *-*-solaris*)
            # Check for solaris
1157

1158 1159 1160
	    have_solaris_xinerama=false
	    AC_CHECK_FUNC(XineramaGetInfo,
	        [AC_CHECK_HEADER(X11/extensions/xinerama.h,
1161
		    [have_solaris_xinerama=true], :,
1162
		    [#include <X11/Xlib.h>])])
1163

1164 1165
	    AC_MSG_CHECKING(for Xinerama support on Solaris)

1166
            if $have_solaris_xinerama ; then
1167
              X_EXTENSIONS="$X_EXTENSIONS Xinerama"
1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180
              AC_DEFINE(HAVE_SOLARIS_XINERAMA, 1,
                        [Define to 1 if solaris xinerama is available])
	      AC_DEFINE(HAVE_XINERAMA, 1,
                        [Define to 1 if xinerama is available])
              AC_MSG_RESULT(yes)
            else
              AC_MSG_RESULT(no)
            fi
            ;;
        *)
            ;;
      esac
    fi
1181
  fi
1182 1183 1184 1185 1186
  if test "x$enable_xinerama" = "xyes" ; then
    if test "x$have_xfree_xinerama" != "xtrue" -a "x$have_solaris_xinerama" != "xtrue" ; then
      AC_MSG_ERROR([*** Xinerama extension not found. Check 'config.log' for more details.])
    fi
  fi
1187

1188 1189 1190 1191
  # Check for XGetEventData for GenericEvents
  AC_CHECK_FUNC(XGetEventData,
                AC_DEFINE(HAVE_XGENERICEVENTS, 1, [Have XGenericEvent]))

1192
  # set up things for XInput
1193
  if $PKG_CONFIG --exists "xi" ; then
1194

1195
    X_PACKAGES="$X_PACKAGES xi"
1196
    GTK_PACKAGES_FOR_X="$GTK_PACKAGES_FOR_X xi"
1197 1198

    AC_CHECK_HEADER(X11/extensions/XInput2.h,
1199
                    have_xinput2=yes
1200
                    AC_DEFINE(XINPUT_2, 1, [Define to 1 if XInput 2.0 is available]))
1201

1202 1203
    gtk_save_LIBS="$LIBS"
    LIBS="$LIBS -lXi"
1204 1205 1206 1207 1208 1209 1210 1211 1212

    # Note that we also check that the XIScrollClassInfo struct is defined,
    # because at least Ubuntu Oneiric seems to have XIAllowTouchEvents(), but not the XIScrollClassInfo struct.
    AC_CHECK_FUNC([XIAllowTouchEvents],
      [AC_CHECK_MEMBER([XIScrollClassInfo.number],
                       have_xinput2_2=yes
                       AC_DEFINE(XINPUT_2_2, 1, [Define to 1 if XInput 2.2 is available]),
                       have_xinput2_2=no,
                       [[#include <X11/extensions/XInput2.h>]])])
1213
    LIBS="$gtk_save_LIBS"
1214 1215 1216 1217 1218 1219

    if test "x$have_xinput2_2" = "xyes"; then
      X_EXTENSIONS="$X_EXTENSIONS XI2.2"
    else
      X_EXTENSIONS="$X_EXTENSIONS XI2"
    fi
1220
  fi
1221

1222 1223
  AS_IF([test "x$have_xinput2" != "xyes"],
        [AC_MSG_ERROR([*** XInput2 extension not found. Check 'config.log' for more details.])])
1224 1225

  # Check for the RANDR extension
1226 1227 1228 1229
  if test x"$enable_xrandr" != xno; then
    if $PKG_CONFIG --exists "xrandr >= 1.2.99" ; then
      AC_DEFINE(HAVE_RANDR, 1, [Have the Xrandr extension library])

1230 1231 1232
      if $PKG_CONFIG --exists "xrandr >= 1.5.0" ; then
        AC_DEFINE(HAVE_RANDR15, 1, [Have the Xrandr 1.5 extension library])
      fi
1233 1234 1235 1236 1237
      X_PACKAGES="$X_PACKAGES xrandr"
      X_EXTENSIONS="$X_EXTENSIONS XRANDR"
    elif test x"$enable_xrandr" = xyes; then
      AC_MSG_ERROR([RANDR support requested but xrandr not found])
    fi
1238
  fi
1239

1240
  # Checks for Xcursor library
1241

1242
  if $PKG_CONFIG --exists xcursor ; then
1243
    AC_DEFINE(HAVE_XCURSOR, 1, [Have the Xcursor library])
1244

1245 1246 1247 1248
    X_PACKAGES="$X_PACKAGES xcursor"
  fi

  # Checks for XFixes extension
1249

1250 1251 1252
  if test x"$enable_xfixes" != xno; then
    if $PKG_CONFIG --exists xfixes ; then
      AC_DEFINE(HAVE_XFIXES, 1, [Have the XFIXES X extension])
1253

1254 1255 1256 1257 1258 1259
      X_PACKAGES="$X_PACKAGES xfixes"
      X_EXTENSIONS="$X_EXTENSIONS XFIXES"
      GTK_PACKAGES_FOR_X="$GTK_PACKAGES_FOR_X xfixes"
    elif test x"$enable_xfixes" = xyes; then
      AC_MSG_ERROR([XFixes support requested but xfixes not found])
    fi
1260 1261
  fi

1262 1263
  # Checks for Xcomposite extension

1264 1265 1266
  if test x"$enable_xcomposite" != xno; then
    if $PKG_CONFIG --exists xcomposite ; then
      AC_DEFINE(HAVE_XCOMPOSITE, 1, [Have the XCOMPOSITE X extension])
1267

1268 1269 1270 1271 1272 1273
      X_PACKAGES="$X_PACKAGES xcomposite"
      X_EXTENSIONS="$X_EXTENSIONS Composite"
      GTK_PACKAGES_FOR_X="$GTK_PACKAGES_FOR_X xcomposite"
    elif test x"$enable_xcomposite" = xyes; then
      AC_MSG_ERROR([Xcomposite support requested but xcomposite not found])
    fi
1274 1275 1276 1277
  fi

  # Checks for Xdamage extension

1278 1279 1280
  if test x"$enable_xdamage" != xno; then
    if $PKG_CONFIG --exists xdamage ; then
      AC_DEFINE(HAVE_XDAMAGE, 1, [Have the XDAMAGE X extension])
1281

1282 1283 1284 1285 1286 1287
      X_PACKAGES="$X_PACKAGES xdamage"
      X_EXTENSIONS="$X_EXTENSIONS DAMAGE"
      GTK_PACKAGES_FOR_X="$GTK_PACKAGES_FOR_X xdamage"
    elif test x"$enable_xdamage" = xyes; then
      AC_MSG_ERROR([Xdamage support requested but xdamage not found])
    fi
1288 1289
  fi

1290
  if $have_base_x_pc ; then
1291 1292
    GDK_EXTRA_LIBS="$x_extra_libs"
  else
1293
    GDK_EXTRA_LIBS="$X_LIBS $x_extra_libs -lXext -lX11 $GDK_EXTRA_LIBS"
1294 1295 1296 1297 1298
  fi

  CPPFLAGS="$gtk_save_cppflags"
  LIBS="$gtk_save_libs"

1299
  AM_CONDITIONAL(USE_X11, true)
1300 1301

  # strip leading space
1302
  X_EXTENSIONS=${X_EXTENSIONS#* }
1303

1304
else
1305 1306
  XPACKAGES=

1307
  AM_CONDITIONAL(USE_X11, false)
1308 1309
fi

1310
# Check for gio-unix
1311 1312 1313 1314 1315
if test "$os_win32" != "yes"; then
  # Pull in gio-unix for gtk-launch usage, see at least
  # gtk-launch.c
  have_gio_unix=yes
fi
1316
if test "$have_gio_unix" = "yes"; then
1317
  GDK_GIO_PACKAGE="gio-unix-2.0 >= glib_required_version"
1318 1319 1320
  AC_DEFINE([HAVE_GIO_UNIX], [1],
            [Define if gio-unix is available])
else
1321
  GDK_GIO_PACKAGE="gio-2.0 >= glib_required_version"
1322 1323
fi

1324
# Check for Pango flags
1325

1326 1327 1328 1329
AC_MSG_CHECKING(Pango flags)
if $PKG_CONFIG --exists $PANGO_PACKAGES ; then
        PANGO_CFLAGS=`$PKG_CONFIG --cflags $PANGO_PACKAGES`
        PANGO_LIBS=`$PKG_CONFIG --libs $PANGO_PACKAGES`
1330

1331 1332 1333
        AC_MSG_RESULT($PANGO_CFLAGS $PANGO_LIBS)
else
        AC_MSG_ERROR([
1334 1335
*** Pango not found. Pango built with Cairo support is required
*** to build GTK+. See http://www.pango.org for Pango information.
1336 1337
])
fi
1338

1339
CFLAGS="$CFLAGS $PANGO_CFLAGS"
1340

1341 1342 1343
if $PKG_CONFIG --uninstalled $PANGO_PACKAGES; then
        :
else
1344 1345 1346
	gtk_save_LIBS="$LIBS"
        LIBS="$PANGO_LIBS $LIBS"
        AC_TRY_LINK_FUNC(pango_context_new, :, AC_MSG_ERROR([
1347
*** Can't link to Pango. Pango is required to build
1348 1349
*** GTK+. For more information see http://www.pango.org]))
        LIBS="$gtk_save_LIBS"
1350
fi
1351

1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366
# Check for libcloudproviders

CLOUDPROVIDER_PACKAGES=""
if test "x$cloudproviders_set" = "xyes"; then
  CLOUDPROVIDER_PACKAGES="cloudproviders >= cloudproviders_required_version"
  if $PKG_CONFIG --exists $CLOUDPROVIDER_PACKAGES ; then
    AC_DEFINE(HAVE_CLOUDPROVIDERS, [1],
              [Define if libcloudproviders is available]
              )
  else
    AC_MSG_ERROR([
*** libcloudproviders not found.])
  fi
fi

1367 1368
CFLAGS="$saved_cflags"
LDFLAGS="$saved_ldflags"
1369

1370
GDK_PACKAGES="$PANGO_PACKAGES gdk-pixbuf-2.0 >= gdk_pixbuf_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version"
1371
GDK_PRIVATE_PACKAGES="$GDK_GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES $MIR_PACKAGES $cairo_backends epoxy >= epoxy_required_version $CLOUDPROVIDER_PACKAGES"
1372

1373 1374 1375
PKG_CHECK_MODULES(GDK_DEP, $GDK_PACKAGES $GDK_PRIVATE_PACKAGES)
GDK_DEP_LIBS="$GDK_EXTRA_LIBS $GDK_DEP_LIBS $MATH_LIB"
GDK_DEP_CFLAGS="$GDK_DEP_CFLAGS $GDK_EXTRA_CFLAGS"
1376 1377 1378 1379 1380 1381 1382 1383
#
# If we aren't writing explicit dependencies, then don't put the extra libraries we need
# into the pkg-config files
#
if test $enable_explicit_deps != yes ; then
  GDK_EXTRA_LIBS=
fi

1384
AC_SUBST(GDK_PACKAGES)
Matthias Clasen's avatar
Matthias Clasen committed
1385
AC_SUBST(GDK_PRIVATE_PACKAGES)