configure.ac 90.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.54)

# Making releases on the stable branch:
#   gimp_micro_version += 1;
#   gimp_interface_age += 1;
#
# For a description of libtool version variables, see:
# devel-docs/libtool-instructions.txt

m4_define([gimp_major_version], [2])
13 14
m4_define([gimp_minor_version], [99])
m4_define([gimp_micro_version], [1])
15 16 17
m4_define([gimp_real_version],
          [gimp_major_version.gimp_minor_version.gimp_micro_version])
m4_define([gimp_version], [gimp_real_version])
18
m4_define([gimp_interface_age], [0])
19 20 21 22
m4_define([gimp_binary_age],
          [m4_eval(100 * gimp_minor_version + gimp_micro_version)])

# For overriding the version string. Comment out if not needed.
23
# m4_define([gimp_version], [2.99.1])
24 25

# This is the X.Y used in -lgimp-X.Y
26
m4_define([gimp_api_version], [3.0])
27 28 29

# Versions used for apps, plugins, tools, pkg-config files, and data,
# as well as global and user prefs
30 31 32 33 34 35 36
m4_define([gimp_app_version], [2.99])
m4_define([gimp_plugin_version], [2.99])
m4_define([gimp_tool_version], [2.99])
m4_define([gimp_pkgconfig_version], [3.0])
m4_define([gimp_data_version], [2.99])
m4_define([gimp_sysconf_version], [2.99])
m4_define([gimp_user_version], [2.99])
37 38 39 40 41 42 43 44 45

m4_define([gimp_unstable],
          m4_if(m4_eval(gimp_minor_version % 2), [1], [yes], [no]))
m4_define([gimp_stable],
          m4_if(m4_eval(gimp_minor_version % 2), [0], [yes], [no]))

m4_define([gimp_full_name], [GNU Image Manipulation Program])

# required versions of other packages
46 47 48
m4_define([alsa_required_version], [1.0.0])
m4_define([appstream_glib_required_version], [0.7.7])
m4_define([atk_required_version], [2.4.0])
49
m4_define([babl_required_version], [0.1.61])
50 51 52 53 54
m4_define([cairo_required_version], [1.14.0])
m4_define([cairo_pdf_required_version], [1.12.2])
m4_define([fontconfig_required_version], [2.12.4])
m4_define([freetype2_required_version], [2.1.7])
m4_define([gdk_pixbuf_required_version], [2.30.8])
55
m4_define([gegl_major_minor_version], [0.4])
56
m4_define([gegl_micro_version], [13])
57 58
m4_define([gegl_required_version],
          [gegl_major_minor_version.gegl_micro_version])
59
m4_define([gexiv2_required_version], [0.10.6])
60
m4_define([glib_required_version], [2.56.0])
61
m4_define([gtk_mac_integration_required_version], [2.0.0])
62
m4_define([gtk_required_version], [3.22.29])
63
m4_define([gtkdoc_required_version], [1.0])
64 65 66
m4_define([harfbuzz_required_version], [0.9.19])
m4_define([intltool_required_version], [0.40.1])
m4_define([lcms_required_version], [2.8])
67
m4_define([libgudev_required_version], [167])
68 69
m4_define([libheif_required_version], [1.1.0])
m4_define([liblzma_required_version], [5.0.0])
70
m4_define([libmypaint_required_version], [1.3.0])
71
m4_define([libpng_required_version], [1.6.25])
72
m4_define([libunwind_required_version], [1.1.0])
73
m4_define([openexr_required_version], [1.6.1])
74
m4_define([openjpeg_required_version], [2.1.0])
75
m4_define([pangocairo_required_version], [1.42.0])
76
m4_define([perl_required_version], [5.10.0])
77 78
m4_define([poppler_required_version], [0.69.0])
m4_define([poppler_data_required_version], [0.4.9])
79 80
m4_define([pycairo_required_version], [1.0.2])
m4_define([pygtk_required_version], [2.10.4])
81
m4_define([python2_required_version], [2.5.0])
82 83
m4_define([rsvg_required_version], [2.40.6])
m4_define([webkitgtk_required_version], [2.20.3])
84
m4_define([webp_required_version], [0.6.0])
85
m4_define([wmf_required_version], [0.2.8])
86

87 88
# Current test considers only 2 version numbers. If we update the recommended
# version of gettext with more version numbers, please update the tests.
89
m4_define([xgettext_required_version], [0.19])
90

91
AC_INIT([GIMP], [gimp_version],
92
        [https://gitlab.gnome.org/GNOME/gimp/issues/new],
93 94
        [gimp])

95
AC_CONFIG_HEADERS([config.h])
96
AC_CONFIG_SRCDIR([app/core/gimp.c])
97
AC_CONFIG_MACRO_DIR([m4macros])
98

99
AM_INIT_AUTOMAKE(no-define dist-bzip2 dist-xz no-dist-gzip -Wno-portability)
Elliot Lee's avatar
Elliot Lee committed
100

101 102 103 104 105
# Enable silent build rules by default, requires at least
# Automake-1.11. Disable by either passing --disable-silent-rules to
# configure or passing V=1 to make
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
GIMP_MAJOR_VERSION=gimp_major_version
GIMP_MINOR_VERSION=gimp_minor_version
GIMP_MICRO_VERSION=gimp_micro_version
GIMP_INTERFACE_AGE=gimp_interface_age
GIMP_BINARY_AGE=gimp_binary_age
GIMP_VERSION=gimp_version
GIMP_REAL_VERSION=gimp_real_version
GIMP_API_VERSION=gimp_api_version
GIMP_APP_VERSION=gimp_app_version
GIMP_PLUGIN_VERSION=gimp_plugin_version
GIMP_TOOL_VERSION=gimp_tool_version
GIMP_PKGCONFIG_VERSION=gimp_pkgconfig_version
GIMP_DATA_VERSION=gimp_data_version
GIMP_SYSCONF_VERSION=gimp_sysconf_version
GIMP_USER_VERSION=gimp_user_version
121 122
GIMP_UNSTABLE=gimp_unstable
GIMP_FULL_NAME="gimp_full_name"
123 124 125
AC_SUBST(GIMP_MAJOR_VERSION)
AC_SUBST(GIMP_MINOR_VERSION)
AC_SUBST(GIMP_MICRO_VERSION)
126 127
AC_SUBST(GIMP_INTERFACE_AGE)
AC_SUBST(GIMP_BINARY_AGE)
128
AC_SUBST(GIMP_VERSION)
129 130 131 132 133 134 135 136 137
AC_SUBST(GIMP_REAL_VERSION)
AC_SUBST(GIMP_API_VERSION)
AC_SUBST(GIMP_APP_VERSION)
AC_SUBST(GIMP_PLUGIN_VERSION)
AC_SUBST(GIMP_TOOL_VERSION)
AC_SUBST(GIMP_PKGCONFIG_VERSION)
AC_SUBST(GIMP_DATA_VERSION)
AC_SUBST(GIMP_SYSCONF_VERSION)
AC_SUBST(GIMP_USER_VERSION)
138 139
AC_SUBST(GIMP_UNSTABLE)
AC_SUBST(GIMP_FULL_NAME)
140

141 142 143 144 145 146
# Version strings used in some source, though it seems unnecessary to
# declare them in the public API (libgimpbase/gimpversion.h).
AC_DEFINE(GIMP_PKGCONFIG_VERSION, "gimp_pkgconfig_version",
          [libgimp pkg-config version])
AC_DEFINE(GIMP_TOOL_VERSION, "gimp_tool_version",
          [GIMP tools version])
147

148
# These are used for substitution (.pc, INSTALL, etc.).
149
APPSTREAM_GLIB_REQUIRED_VERSION=appstream_glib_required_version
150 151
ATK_REQUIRED_VERSION=atk_required_version
BABL_REQUIRED_VERSION=babl_required_version
152
CAIRO_REQUIRED_VERSION=cairo_required_version
153
CAIRO_PDF_REQUIRED_VERSION=cairo_pdf_required_version
154 155 156
FONTCONFIG_REQUIRED_VERSION=fontconfig_required_version
FREETYPE2_REQUIRED_VERSION=freetype2_required_version
GDK_PIXBUF_REQUIRED_VERSION=gdk_pixbuf_required_version
157
GEGL_MAJOR_MINOR_VERSION=gegl_major_minor_version
158
GEGL_REQUIRED_VERSION=gegl_required_version
159
GEXIV2_REQUIRED_VERSION=gexiv2_required_version
160 161 162 163
GLIB_REQUIRED_VERSION=glib_required_version
GTK_REQUIRED_VERSION=gtk_required_version
HARFBUZZ_REQUIRED_VERSION=harfbuzz_required_version
INTLTOOL_REQUIRED_VERSION=intltool_required_version
164
LCMS_REQUIRED_VERSION=lcms_required_version
165
LIBHEIF_REQUIRED_VERSION=libheif_required_version
166
LIBLZMA_REQUIRED_VERSION=liblzma_required_version
167
LIBMYPAINT_REQUIRED_VERSION=libmypaint_required_version
168
LIBPNG_REQUIRED_VERSION=libpng_required_version
169
OPENEXR_REQUIRED_VERSION=openexr_required_version
170
OPENJPEG_REQUIRED_VERSION=openjpeg_required_version
171
PANGOCAIRO_REQUIRED_VERSION=pangocairo_required_version
172
PERL_REQUIRED_VERSION=perl_required_version
173 174
POPPLER_REQUIRED_VERSION=poppler_required_version
POPPLER_DATA_REQUIRED_VERSION=poppler_data_required_version
175
PYTHON2_REQUIRED_VERSION=python2_required_version
176 177
RSVG_REQUIRED_VERSION=rsvg_required_version
WEBKITGTK_REQUIRED_VERSION=webkitgtk_required_version
178
WEBP_REQUIRED_VERSION=webp_required_version
179
WMF_REQUIRED_VERSION=wmf_required_version
Ell's avatar
Ell committed
180
LIBUNWIND_REQUIRED_VERSION=libunwind_required_version
181
XGETTEXT_REQUIRED_VERSION=xgettext_required_version
182
AC_SUBST(APPSTREAM_GLIB_REQUIRED_VERSION)
183 184
AC_SUBST(ATK_REQUIRED_VERSION)
AC_SUBST(BABL_REQUIRED_VERSION)
185
AC_SUBST(CAIRO_REQUIRED_VERSION)
186
AC_SUBST(CAIRO_PDF_REQUIRED_VERSION)
187 188 189
AC_SUBST(FONTCONFIG_REQUIRED_VERSION)
AC_SUBST(FREETYPE2_REQUIRED_VERSION)
AC_SUBST(GDK_PIXBUF_REQUIRED_VERSION)
190
AC_SUBST(GEGL_MAJOR_MINOR_VERSION)
191
AC_SUBST(GEGL_REQUIRED_VERSION)
192
AC_SUBST(GEXIV2_REQUIRED_VERSION)
193 194 195 196
AC_SUBST(GLIB_REQUIRED_VERSION)
AC_SUBST(GTK_REQUIRED_VERSION)
AC_SUBST(HARFBUZZ_REQUIRED_VERSION)
AC_SUBST(INTLTOOL_REQUIRED_VERSION)
197
AC_SUBST(LCMS_REQUIRED_VERSION)
198
AC_SUBST(LIBHEIF_REQUIRED_VERSION)
199
AC_SUBST(LIBLZMA_REQUIRED_VERSION)
200
AC_SUBST(LIBMYPAINT_REQUIRED_VERSION)
201
AC_SUBST(LIBPNG_REQUIRED_VERSION)
202
AC_SUBST(OPENEXR_REQUIRED_VERSION)
203
AC_SUBST(OPENJPEG_REQUIRED_VERSION)
204
AC_SUBST(PANGOCAIRO_REQUIRED_VERSION)
205
AC_SUBST(PERL_REQUIRED_VERSION)
206 207
AC_SUBST(POPPLER_REQUIRED_VERSION)
AC_SUBST(POPPLER_DATA_REQUIRED_VERSION)
208
AC_SUBST(PYTHON2_REQUIRED_VERSION)
209 210
AC_SUBST(RSVG_REQUIRED_VERSION)
AC_SUBST(WEBKITGTK_REQUIRED_VERSION)
211
AC_SUBST(WEBP_REQUIRED_VERSION)
212
AC_SUBST(WMF_REQUIRED_VERSION)
Ell's avatar
Ell committed
213
AC_SUBST(LIBUNWIND_REQUIRED_VERSION)
214
AC_SUBST(XGETTEXT_REQUIRED_VERSION)
215 216 217 218

# The symbol GIMP_UNSTABLE is defined above for substitution in
# Makefiles and conditionally defined here as a preprocessor symbol
# and automake conditional.
219
if test "x$GIMP_UNSTABLE" = "xyes"; then
220
  AC_DEFINE(GIMP_UNSTABLE, 1,
221
            [Define to 1 if this is an unstable version of GIMP])
222
fi
223 224
AM_CONDITIONAL(GIMP_UNSTABLE, test "x$GIMP_UNSTABLE" = "xyes")

225 226

# libtool versioning
227
m4_define([lt_current], [m4_eval(100 * gimp_minor_version + gimp_micro_version - gimp_interface_age)])
228 229 230 231 232
m4_define([lt_revision], [gimp_interface_age])
m4_define([lt_age], [m4_eval(gimp_binary_age - gimp_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)
233 234
AC_SUBST(LT_CURRENT_MINUS_AGE)

235

236
# gettext i18n support
237
GETTEXT_PACKAGE=gimp30
238 239 240
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
                   [The prefix for our gettext translation domains.])
241

242 243 244 245 246
# work around intltool-update issues during 'make distcheck'
AS_IF([test "x$0" != "x./configure"], [
        AC_SUBST([INTLTOOL_UPDATE], [/bin/true])
])

247 248
# Determine a C compiler to use
AC_PROG_CC
249
AX_PROG_CC_FOR_BUILD
250 251 252 253 254
# Works around a bug in AX_PROG_CC_FOR_BUILD for build with MinGW on
# Windows. See bug 780270, comment 18.
case "$build_os" in
  cygwin*|mingw32*|mingw64*)	BUILD_EXEEXT=.exe ;;
esac
255
AM_PROG_CC_C_O
Manish Singh's avatar
Manish Singh committed
256

257 258
# Determine a C++ compiler to use
AC_PROG_CXX
259
AX_CXX_COMPILE_STDCXX([14], , [mandatory])
260

261
# Initialize libtool
262 263
LT_PREREQ([2.2])
LT_INIT([disable-static win32-dll])
Elliot Lee's avatar
Elliot Lee committed
264

265
AM_PROG_AS
Elliot Lee's avatar
Elliot Lee committed
266

267
# Initialize maintainer mode
268
AM_MAINTAINER_MODE([enable])
269

270 271 272 273
# Check for pkg-config
PKG_PROG_PKG_CONFIG(0.16)


274 275 276 277 278 279 280 281
#########################
# Check host architecture
#########################

AC_CANONICAL_HOST

AC_MSG_CHECKING([for host type])
AC_MSG_RESULT([$host])
282

283 284 285
AC_MSG_CHECKING([for host processor])
case "$host_cpu" in
  i*86)
286 287
    have_x86=yes
    AC_DEFINE(ARCH_X86, 1, [Define to 1 if you are compiling for ix86.])
288
    AC_MSG_RESULT([x86])
289
    ;;
290
  x86_64)
291 292 293
    have_x86=yes
    AC_DEFINE(ARCH_X86, 1, [Define to 1 if you are compiling for ix86.])
    AC_DEFINE(ARCH_X86_64, 1, [Define to 1 if you are compiling for amd64.])
294
    AC_MSG_RESULT([x86-64])
295
    ;;
296
  ppc | powerpc)
297 298
    have_ppc=yes
    AC_DEFINE(ARCH_PPC, 1, [Define to 1 if you are compiling for PowerPC.])
299
    AC_MSG_RESULT([PowerPC])
300
    ;;
301
  ppc64 | powerpc64)
Manish Singh's avatar
Manish Singh committed
302 303 304
    have_ppc=yes
    AC_DEFINE(ARCH_PPC, 1, [Define to 1 if you are compiling for PowerPC.])
    AC_DEFINE(ARCH_PPC64, 1, [Define to 1 if you are compiling for PowerPC64.])
305
    AC_MSG_RESULT([64-bit PowerPC])
Manish Singh's avatar
Manish Singh committed
306
    ;;
307
  *)
308
    AC_MSG_RESULT([unknown])
309 310 311 312
    ;;
esac


Ell's avatar
Ell committed
313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329
#################
# Check for Linux
#################

AC_MSG_CHECKING([if compiling for Linux])
case "$host_os" in
  linux*)
    platform_linux=yes
    ;;
  *)
    platform_linux=no
    ;;
esac
AC_MSG_RESULT([$platform_linux])
AM_CONDITIONAL(PLATFORM_LINUX, test "$platform_linux" = "yes")


330 331 332
#################
# Check for Win32
#################
333

334 335 336
AC_MSG_CHECKING([if compiling for Win32])
case "$host_os" in
  mingw* | cygwin*)
337 338 339 340 341 342 343 344 345
    platform_win32=yes
    ;;
  *)
    platform_win32=no
    ;;
esac
AC_MSG_RESULT([$platform_win32])
AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")

346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366
PATHSEP=':'
os_win32=no
if test "x$platform_win32" != xno; then
  AC_MSG_CHECKING([if this is native Win32])
  case "$host_os" in
    mingw*)
      os_win32=yes
      case "$host_cpu" in
        x86_64)
        ;;
        *)
        WIN32_LARGE_ADDRESS_AWARE='-Wl,--large-address-aware'
        ;;
      esac
      PATHSEP=';'
      ;;
    *)
      ;;
  esac
  AC_MSG_RESULT([$os_win32])
fi
367
AC_SUBST(WIN32_LARGE_ADDRESS_AWARE)
368 369
AC_SUBST(PATHSEP)
AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
370
AM_CONDITIONAL(OS_UNIX, test "$os_win32" != "yes")
371 372 373

if test "$os_win32" = "yes"; then
  AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
Manish Singh's avatar
Manish Singh committed
374
  AC_CHECK_TOOL(WINDRES, windres, :)
375 376
else
  WINDRES=":"
377
fi
Manish Singh's avatar
Manish Singh committed
378

379
AM_CONDITIONAL(MS_LIB_AVAILABLE, test "x$ms_librarian" = xyes)
380
AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:")
Manish Singh's avatar
Manish Singh committed
381 382

AC_SUBST(WINDRES)
383

384

385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403
####################
# Check for Mac OS X
####################

platform_osx=no
AC_MSG_CHECKING([if compiling for Mac OS X])
case "$host_os" in
  darwin*)
     AC_MSG_RESULT(yes)
     AC_DEFINE(PLATFORM_OSX, 1, [define to 1 if compiling for Mac OS X])
     platform_osx=yes
     ;;
  *)
     ;;
esac
AC_MSG_RESULT($platform_osx)
AM_CONDITIONAL(PLATFORM_OSX, test "x$platform_osx" = xyes)


404 405 406 407
###############
# Generic stuff
###############

408
# Checks for programs.
409 410
AC_PROG_INSTALL
AC_PROG_MAKE_SET
411
AC_PROG_LN_S
412

413
# Large file support for the swap file
414
AC_SYS_LARGEFILE
415

416
AC_MSG_CHECKING([whether to turn on debugging])
417
AC_ARG_ENABLE(debug,
418
              [  --enable-debug          turn on debugging (default=no)],
419 420 421
              if eval "test x$enable_debug = xyes"; then
                DEBUGFLAG="-g"
              fi)
422

423
if test -n "$DEBUGFLAG"; then
424
  AC_MSG_RESULT([yes])
425
  CFLAGS="$DEBUGFLAG $CFLAGS"
426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441
else
  AC_MSG_RESULT([no])
fi

AC_MSG_CHECKING([whether to turn on profiling])
AC_ARG_ENABLE(profile,
              [  --enable-profile        turn on profiling (default=no)],
              if eval "test x$enable_profile = xyes"; then
                PROFFLAG="-pg"
              fi)

if test -n "$PROFFLAG"; then
  AC_MSG_RESULT([yes])
  CFLAGS="$PROFFLAG $CFLAGS"
else
  AC_MSG_RESULT([no])
442
fi
443

444
AC_ARG_ENABLE(ansi,
445
              [  --enable-ansi           turn on strict ansi (default=no)],,
446
              enable_ansi=no)
447

448
changequote(,)dnl
449 450 451 452 453
if eval "test x$GCC = xyes"; then
  case " $CFLAGS " in
  *[\ \	]-Wall[\ \	]*) ;;
  *) CFLAGS="$CFLAGS -Wall" ;;
  esac
Elliot Lee's avatar
Elliot Lee committed
454

455 456 457 458 459
  if test "x$enable_ansi" = "xyes"; then
    case " $CFLAGS " in
    *[\ \	]-ansi[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -ansi" ;;
    esac
460

461 462 463 464
    case " $CFLAGS " in
    *[\ \	]-pedantic[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -pedantic" ;;
    esac
Elliot Lee's avatar
Elliot Lee committed
465 466
  fi
fi
467
changequote([,])dnl
Elliot Lee's avatar
Elliot Lee committed
468

469

470
# If possible, warn if C99isms are used
471 472 473
GIMP_DETECT_CFLAGS(extra_warnings, '-Wdeclaration-after-statement')
CFLAGS="$CFLAGS $extra_warnings"

474
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-prototypes')
475 476 477 478 479
CFLAGS="$CFLAGS $extra_warnings"

# We really don't want anyone using code with missing prototypes, which
# can cause random behavior. If compile breaks due to the following,
# come to us and we will point you to a newer version which works.
480
#
481 482
GIMP_DETECT_CFLAGS(extra_warnings, '-Werror=missing-prototypes')
CFLAGS="$CFLAGS $extra_warnings"
483

484 485 486
GIMP_DETECT_CFLAGS(extra_warnings, '-Wstrict-prototypes')
CFLAGS="$CFLAGS $extra_warnings"

487 488 489
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-declarations')
CFLAGS="$CFLAGS $extra_warnings"

490 491 492 493 494
GIMP_DETECT_CFLAGS(extra_warnings, '-Winit-self')
CFLAGS="$CFLAGS $extra_warnings"

GIMP_DETECT_CFLAGS(extra_warnings, '-Wpointer-arith')
CFLAGS="$CFLAGS $extra_warnings"
495 496 497

GIMP_DETECT_CFLAGS(extra_warnings, '-Wold-style-definition')
CFLAGS="$CFLAGS $extra_warnings"
498

499 500 501
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-format-attribute')
CFLAGS="$CFLAGS $extra_warnings"

502 503 504
GIMP_DETECT_CFLAGS(extra_warnings, '-Wformat-security')
CFLAGS="$CFLAGS $extra_warnings"

505 506 507 508 509 510
GIMP_DETECT_CFLAGS(extra_warnings, '-Wlogical-op')
CFLAGS="$CFLAGS $extra_warnings"

GIMP_DETECT_CFLAGS(extra_warnings, '-Wtype-limits')
CFLAGS="$CFLAGS $extra_warnings"

511 512 513
GIMP_DETECT_CFLAGS(extra_warnings, '-fno-common')
CFLAGS="$CFLAGS $extra_warnings"

514 515 516
GIMP_DETECT_CFLAGS(extra_warnings, '-fdiagnostics-show-option')
CFLAGS="$CFLAGS $extra_warnings"

517 518 519 520 521 522
GIMP_DETECT_CFLAGS(extra_warnings, '-Wreturn-type')
CFLAGS="$CFLAGS $extra_warnings"

# -Wreturn-type warns on forgotten return on non-void functions,
# but not of g_return_if_fail() on non-void functions.
# -Wsystem-headers is needed for that.
523 524 525 526
# Unfortunately it pulls tons of warnings on some systems.
# So we comment out for now.
# GIMP_DETECT_CFLAGS(extra_warnings, '-Wsystem-headers')
# CFLAGS="$CFLAGS $extra_warnings"
527

528 529 530 531 532 533 534 535
# Extra optimization flags for super performance
GIMP_DETECT_CFLAGS(extra_warnings, '--omg-optimized')
CFLAGS="$CFLAGS $extra_warnings"

GIMP_DETECT_CFLAGS(extra_warnings, '--disable-instructions')
CFLAGS="$CFLAGS $extra_warnings"


536 537 538 539
# 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".
540 541
if test "x$os_win32" = xyes; then
  if test "x$GCC" = xyes; then
542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560
    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
	;;
    esac
561
    if test "x$msnative_struct" = x ; then
562
      AC_MSG_RESULT([no way])
563
      AC_MSG_WARN([build will be incompatible with GTK+ DLLs])
564 565 566 567 568 569 570
    else
      CFLAGS="$CFLAGS $msnative_struct"
      AC_MSG_RESULT([${msnative_struct}])
    fi
  fi
fi

571 572 573 574 575 576 577 578 579
if test "x$GCC" = xyes; then
  gcc_version=`$CC -v 2>&1|grep 'gcc version'|sed -e 's/.*gcc version \([[0-9.]]\+\)[[^0-9.]].*/\1/'`
  if test "x$gcc_version" = "x7.2.0" ; then
    warning_gcc="
WARNING: GCC 7.2.0 has a serious bug affecting GEGL/GIMP. We advise
         against using this version of the compiler (previous and
         further versions are fine).
         See https://bugzilla.gnome.org/show_bug.cgi?id=787222"
  fi
580
  # For GCC, use -v which has more information than --version.
581
  CC_VERSION="`$CC -v 2>&1`"
582 583 584
else
  # This is the list of common options used by autotools to check
  # versions for various compilers.
585
  CC_VERSION="`$CC --version 2>&1`"
586
  if test $? != 0; then
587
    CC_VERSION="`$CC -v 2>&1`"
588
    if test $? != 0; then
589
      CC_VERSION="`$CC -V 2>&1`"
590
      if test $? != 0; then
591
        CC_VERSION="`$CC -qversion 2>&1`"
592 593 594
      fi
    fi
  fi
595
fi
596 597
# Format and escape CC_VERSION
CC_VERSION="\\t`echo "$CC_VERSION" | sed -e 's/\\\\/\\\\\\\\/g;s/$/\\\\n\\\\t/g' | tr -d '\n'`"
598
AC_SUBST(CC_VERSION)
599

600 601 602 603
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_TIME

604
AC_CHECK_HEADERS(execinfo.h fcntl.h sys/param.h sys/prctl.h sys/thr.h sys/time.h sys/times.h sys/wait.h unistd.h)
605
AC_CHECK_FUNCS(backtrace, , AC_CHECK_LIB(execinfo, backtrace))
606 607 608 609 610 611

AC_TYPE_PID_T
AC_FUNC_VPRINTF

AC_FUNC_ALLOCA

612
# check some more funcs
Sven Neumann's avatar
Sven Neumann committed
613
AC_CHECK_FUNCS(fsync)
614
AC_CHECK_FUNCS(difftime mmap)
615
AC_CHECK_FUNCS(thr_self)
616

Sven Neumann's avatar
Sven Neumann committed
617

618 619
# _NL_MEASUREMENT_MEASUREMENT is an enum and not a define
AC_MSG_CHECKING([for _NL_MEASUREMENT_MEASUREMENT])
620 621
AC_LINK_IFELSE(
  [AC_LANG_PROGRAM(
622 623 624 625
    [[#include <langinfo.h>]],
    [[char c = *((unsigned char *)  nl_langinfo(_NL_MEASUREMENT_MEASUREMENT));]])],
  [nl_ok=yes],
  [nl_ok=no])
626 627 628 629 630 631
AC_MSG_RESULT($nl_ok)
if test "$nl_ok" = "yes"; then
  AC_DEFINE(HAVE__NL_MEASUREMENT_MEASUREMENT, 1,
	    [Define to 1 if _NL_MEASUREMENT_MEASUREMENT is available])
fi

632 633 634 635 636 637 638 639 640 641 642 643 644 645
# Macro to keep track of failed dependencies.

required_deps=''

# To add a required dependency error, call: add_deps_error([dependency]).
# If details about the dependency are needed:
# add_deps_error([dependency], [first line, second line])
m4_define([add_deps_error], [
  AC_MSG_NOTICE([Eeeeeeeeeeeeeeeeeeeeek! Missing dep: $1])
  required_deps="$required_deps
  - Error: missing dependency $1"
  m4_foreach([more], [$2], [
  required_deps="$required_deps
      *** more"])])
646

647 648 649
######################
# Internationalisation
######################
650

651
IT_PROG_INTLTOOL(intltool_required_version)
652
AM_GLIB_GNU_GETTEXT
653

654
# Testing xgettext version since we had some problem with localizing script-fu. See bug 720052.
655 656 657
AC_MSG_CHECKING([for xgettext version (>= xgettext_required_version)])
XGETTEXT_REQUIRED_VERSION_MAJOR=`echo $XGETTEXT_REQUIRED_VERSION | awk -F. '{ print $ 1; }'`
XGETTEXT_REQUIRED_VERSION_MINOR_1=`echo $XGETTEXT_REQUIRED_VERSION | awk -F. '{ print $ 2; }'`
658 659 660 661 662

XGETTEXT_APPLIED_VERSION=`$XGETTEXT --version | head -1 | cut -d" " -f4`
XGETTEXT_APPLIED_VERSION_MAJOR=`echo $XGETTEXT_APPLIED_VERSION | awk -F. '{ print $ 1; }'`
XGETTEXT_APPLIED_VERSION_MINOR_1=`echo $XGETTEXT_APPLIED_VERSION | awk -F. '{ print $ 2; }'`

663
have_required_xgettext="no"
664
if test -n "$XGETTEXT_APPLIED_VERSION_MAJOR"; then
665 666 667
    if test "$XGETTEXT_REQUIRED_VERSION_MAJOR" -lt "$XGETTEXT_APPLIED_VERSION_MAJOR"; then
        have_required_xgettext="yes"
    elif test "$XGETTEXT_REQUIRED_VERSION_MAJOR" -eq "$XGETTEXT_APPLIED_VERSION_MAJOR"; then
668
        if test -n "$XGETTEXT_APPLIED_VERSION_MINOR_1"; then
669 670
            if test "$XGETTEXT_REQUIRED_VERSION_MINOR_1" -le "$XGETTEXT_APPLIED_VERSION_MINOR_1"; then
                have_required_xgettext="yes"
671 672 673 674
            fi
        fi
    fi
fi
675
AC_MSG_RESULT($have_required_xgettext)
676

677 678
if test "x$have_required_xgettext" = "xno"; then
    add_deps_error([xgettext], [xgettext >= xgettext_required_version])
679
fi
680

Sven Neumann's avatar
Sven Neumann committed
681 682 683 684
###########
# iso-codes
###########

685 686 687 688 689
AC_MSG_CHECKING([for iso-codes])
PKG_CHECK_EXISTS(iso-codes,
  have_iso_codes="yes"
  AC_DEFINE(HAVE_ISO_CODES, 1,
  	    [Define to 1 if the iso-codes package is available])
690
  ISO_CODES_PREFIX=`$PKG_CONFIG --variable=prefix iso-codes`
691 692 693 694 695 696 697 698 699
  ISO_CODES_LOCATION="$ISO_CODES_PREFIX/share/xml/iso-codes"
  ISO_CODES_LOCALEDIR="$ISO_CODES_PREFIX/$DATADIRNAME/locale",
  have_iso_codes="no (iso-codes package not found)")
AC_MSG_RESULT($have_iso_codes)

AC_SUBST(ISO_CODES_LOCATION)
AC_SUBST(ISO_CODES_LOCALEDIR)


700 701 702
###############################
# Checks for required libraries
###############################
703

704 705
PKG_CHECK_MODULES(BABL, [babl >= babl_required_version],,
                  [add_deps_error([babl >= babl_required_version])])
706 707
PKG_CHECK_MODULES(GEGL, gegl-gegl_major_minor_version >= gegl_required_version,,
                  [add_deps_error([gegl-gegl_major_minor_version >= gegl_required_version])])
708 709
PKG_CHECK_MODULES(ATK, atk >= atk_required_version,,
                  [add_deps_error([atk >= atk_required_version])])
710

711 712 713 714 715 716 717 718 719
# glib 2.56.0 and 2.56.1 have a bad bug on Win32, breaking the file
# chooser dialogs. This has been fixed, but no release made yet. When
# 2.56.2 is released, the additional test for these broken versions can
# be removed and we can bump the requirement to glib 2.56.2.
AM_PATH_GLIB_2_0(glib_required_version,
                 [if test "x$platform_win32" = "xyes"; then
                   PKG_CHECK_MODULES(GLIB_WIN_BUG, glib-2.0 >= 2.56.0 glib-2.0 < 2.56.2,
                                     [add_deps_error([glib >= glib_required_version except glib 2.56.0 and 2.56.1 (broken on Win32 - bug 795855)])],:)
                 fi],
720 721 722
                 [add_deps_error([glib >= glib_required_version],
                                 [Test for GLIB failed])],
                 gobject)
723

724 725
PKG_CHECK_MODULES(GMODULE_NO_EXPORT, gmodule-no-export-2.0,,
                  [add_deps_error([gmodule-no-export-2.0])])
726

727 728
PKG_CHECK_MODULES(GIO, gio-2.0,,
                  [add_deps_error([gio-2.0])])
729

730
if test "x$os_win32" = "xyes"; then
731 732
  PKG_CHECK_MODULES(GIO_WINDOWS, gio-windows-2.0,,
                    [add_deps_error([gio-windows-2.0])])
733
else
734 735
  PKG_CHECK_MODULES(GIO_UNIX, gio-unix-2.0,,
                    [add_deps_error([gio-unix-2.0])])
736 737
fi

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
AC_MSG_CHECKING([for glib-networking (GIO TLS implementation)])
gimp_save_CFLAGS="$CFLAGS"
gimp_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $GIO_CFLAGS"
LIBS="$LIBS $GIO_LIBS"
AC_RUN_IFELSE([AC_LANG_PROGRAM([#include <gio/gio.h>],
                               [return !g_tls_backend_supports_tls (g_tls_backend_get_default ());])],
              [have_glib_networking="yes"],
              [have_glib_networking="no"],
              [have_glib_networking="unknown (cross-compiling)"])
CFLAGS="$gimp_save_CFLAGS"
LIBS="$gimp_save_LIBS"
AC_MSG_RESULT($have_glib_networking)

if test "x$have_glib_networking" = "xno"; then
  add_deps_error([glib-networking],
      [Test for glib-networking failed. This is required.])
elif test "x$have_glib_networking" != "xyes"; then
  warning_glib_networking="
WARNING: Test for glib-networking cannot be performed while cross-compiling.
         Make sure glib-networking is installed, otherwise GIMP will not be able
         to display the remote help pages through the help browser, nor will it
         be able to open remote HTTPS (or other protocol using SSL/TLS) files.
         HTTPS is becoming the expected standard and should not be considered
         optional anymore."
fi

765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782
# AM_PATH_GLIB_2_0 already fills in the variable GLIB_COMPILE_RESOURCES.
# Unfortunately it looks it up using $PKG_CONFIG, which search in
# target-installed libraries, hence it would return a tool for the
# target architecture in case of cross-compilation (which can't be run
# during build, unless there is some compatibility layer in the OS).
# Therefore we make our own check.
AC_MSG_CHECKING([for native glib-compile-resources])
if test -z "$HOST_GLIB_COMPILE_RESOURCES"; then
  # Do not use $PKG_CONFIG as it will search target files.
  HOST_GLIB_COMPILE_RESOURCES=`pkg-config --variable=glib_compile_resources gio-2.0`
  if test -z "$HOST_GLIB_COMPILE_RESOURCES"; then
    # As fallback, search in path.
    AC_PATH_PROG(HOST_GLIB_COMPILE_RESOURCES, glib-compile-resources, no)
    if test "x$HOST_GLIB_COMPILE_RESOURCES" = xno; then
      add_deps_error([glib-compile-resources],
                     [Could not find glib-compile-resources in your PATH.])
    fi
  fi
783
fi
784 785
AC_MSG_RESULT($HOST_GLIB_COMPILE_RESOURCES)
AC_SUBST(HOST_GLIB_COMPILE_RESOURCES)
786

787 788
AC_PATH_PROG(GDBUS_CODEGEN, gdbus-codegen, no)
if test "x$GDBUS_CODEGEN" = xno; then
789
  add_deps_error([gdbus-codegen], [Could not find gdbus-codegen in your PATH.])
790 791
fi

792 793 794
AC_MSG_CHECKING([if GLib is version 2.57.0 or newer])
if $PKG_CONFIG --atleast-version=2.57.0 glib-2.0; then
  have_glib_2_57=yes
795
else
796
  have_glib_2_57=no
797
fi
798
AC_MSG_RESULT($have_glib_2_57)
799

800 801
AC_PATH_PROG(GEGL, gegl, no)
if test "x$GEGL" = xno; then
802
  add_deps_error([gegl], [Could not find native gegl executable in your PATH.])
803 804
fi

805

806
# Check for bind_textdomain_codeset, including -lintl if GLib brings it in.
807 808
gimp_save_LIBS=$LIBS
LIBS="$LIBS $GLIB_LIBS"
809
AC_CHECK_FUNCS(bind_textdomain_codeset,,
810 811
  add_deps_error([bind_textdomain_codeset()],
                 [Check for bind_textdomain_codeset() failed! This is required.]))
812 813 814 815 816
LIBS=$gimp_save_LIBS


AC_PATH_XTRA

817 818 819
PKG_CHECK_MODULES(GTK, gtk+-3.0 >= gtk_required_version,,
                  [add_deps_error([gtk+-3.0 >= gtk_required_version],
                                  [Test for GTK+ failed.])])
Elliot Lee's avatar
Elliot Lee committed
820

821 822
AC_PATH_PROG(GTK_UPDATE_ICON_CACHE, gtk-update-icon-cache, no)
if test "x$GTK_UPDATE_ICON_CACHE" = xno; then
823 824
  add_deps_error([gtk-update-icon-cache],
                 [Could not find gtk-update-icon-cache in your PATH.])
825 826
fi

827 828
PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-2.0 >= gdk_pixbuf_required_version,,
                  [add_deps_error([gdk-pixbuf-2.0 >= gdk_pixbuf_required_version])])
829

830
AC_PATH_PROG(GDK_PIXBUF_CSOURCE, gdk-pixbuf-csource, no)
831
if test "x$GDK_PIXBUF_CSOURCE" = xno; then
832 833
  add_deps_error([gdk-pixbuf-csource],
                 [Could not find gdk-pixbuf-csource in your PATH.])
834 835
fi

836 837
PKG_CHECK_MODULES(CAIRO, cairo >= cairo_required_version,,
                  [add_deps_error([cairo >= cairo_required_version])])
838

839
PKG_CHECK_MODULES(PANGOCAIRO,
840 841 842
                  [pangocairo >= pangocairo_required_version pangoft2], :,
                  [add_deps_error([pangocairo >= pangocairo_required_version and pangoft2],
                                  [We require Pango with the optional support for Cairo compiled in.])])
843

Martin Nordholts's avatar
Martin Nordholts committed
844
gimp_save_CFLAGS=$CFLAGS
845 846
CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS"

847
# Windows platform had a few bugs fixed in earlier fontconfig.
848 849 850 851 852
# The bugs are serious enough (for instance very slow startups at each
# GIMP start, but also slowness when closing, broken font features,
# etc.) that we should bump the requirement for Win32.
# See bugs 708110 (fontconfig 2.11.0), 703331 (2.11.1) and 782676
# (2.12.4).
853 854
PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= fontconfig_required_version,,
                  [add_deps_error([fontconfig >= fontconfig_required_version])])
855

856 857 858
AC_MSG_CHECKING([if Pango is version 1.43.0 or newer])
if $PKG_CONFIG --atleast-version=1.43.0 pango; then
  have_pango_1_43=yes
859
else
860
  have_pango_1_43=no
861
fi
862
AC_MSG_RESULT($have_pango_1_43)
863

864
CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS"
865 866

AC_MSG_CHECKING([if Pango is built with a recent fontconfig])
867 868 869 870 871 872
AC_COMPILE_IFELSE(
  [AC_LANG_PROGRAM(
    [[#include <fontconfig/fontconfig.h>]],
    [[FcObjectSet *os; os = FcObjectSetBuild (FC_FAMILY, FC_WIDTH);]])],
  [fontconfig_ok=yes],
  [fontconfig_ok=no])
873 874 875 876 877 878 879
AC_MSG_RESULT($fontconfig_ok)

CFLAGS=$gimp_save_CFLAGS

if test "x$fontconfig_ok" = xno; then
  AC_MSG_ERROR([
*** You have a fontconfig >= fontconfig_required_version installed on your system, but your
880
*** Pango library is using an older version. This old version is probably in
881
*** /usr/X11R6. Look at the above output, and note that the result for
882
*** FONTCONFIG_CFLAGS is not in the result for PANGOCAIRO_CFLAGS, and that
883 884 885 886 887 888 889
*** there is likely an extra -I line, other than the ones for GLIB,
*** Freetype, and Pango itself. That's where your old fontconfig files are.
*** Rebuild pango, and make sure that it uses the newer fontconfig. The
*** easiest way be sure of this is to simply get rid of the old fontconfig.
*** When you rebuild pango, make sure the result for FONTCONFIG_CFLAGS is
*** the same as the result here.])
fi
890

891

892
PKG_CHECK_MODULES(FREETYPE, freetype2 >= freetype2_required_version,,
893
                  [add_deps_error([freetype2_required_version >= freetype2_required_version])])
894

895 896
PKG_CHECK_MODULES(HARFBUZZ, harfbuzz >= harfbuzz_required_version,,
                 [add_deps_error([harfbuzz >= harfbuzz_required_version])])
897

898 899
PKG_CHECK_MODULES(GEXIV2, gexiv2 >= gexiv2_required_version,,
                 [add_deps_error([gexiv2 >= gexiv2_required_version])])
900

901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925
#################################
# Check for debug console (Win32)
#################################

AC_ARG_ENABLE(win32-debug-console,
              [  --enable-win32-debug-console
                          open a console when starting the program
                          (default=auto)],,
              enable_win32_debug_console=auto)

AC_MSG_CHECKING([if GIMP should open a debug console at start])
if test "x$platform_win32" != "xyes"; then
   enable_win32_debug_console=no
elif test "x$enable_win32_debug_console" != xno &&
     test "x$enable_win32_debug_console" != xyes; then
  # By default, we enable the debug console only for unstable builds.
   enable_win32_debug_console=gimp_unstable
fi

if test "x$enable_win32_debug_console" = "xyes"; then
  AC_DEFINE(ENABLE_WIN32_DEBUG_CONSOLE, 1,
            [Define to 1 if GIMP should open a debug console at start])
fi
AC_MSG_RESULT([$enable_win32_debug_console])

926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953
######################################
# Check for 32-bit DLLs (Win32 64-bit)
######################################

AC_ARG_WITH(win32-32bit-dll-folder,
            [  --with-win32-32bit-dll-folder[=DIR]
                          alternative folder with 32-bit versions of DLL libraries on Windows (default: 32/bin/)],,
            with_win32_32bit_dll_folder="32/bin")

AC_MSG_CHECKING([the alternative folder containing 32-bit DLLs on Windows])
if test "x$platform_win32" = "xyes"; then
  case "$host_cpu" in
    x86_64)
    ;;
    *)
    with_win32_32bit_dll_folder="no"
    ;;
  esac
else
    with_win32_32bit_dll_folder="no"
fi

if test "x$with_win32_32bit_dll_folder" != "xno"; then
  AC_DEFINE_UNQUOTED(WIN32_32BIT_DLL_FOLDER, "$with_win32_32bit_dll_folder",
                     [Define if 32-bit versions of libraries are packaged in an alternative folder])
fi
AC_MSG_RESULT([$with_win32_32bit_dll_folder])

954 955 956 957
#####################
# Check for Dr. Mingw
#####################

958
enable_drmingw="no"
959 960 961
if test "x$platform_win32" = "xyes"; then
   # Check for Dr. Mingw
   AC_CHECK_LIB(exchndl, ExcHndlSetLogFileNameA,
962 963
                [
                 AC_DEFINE(HAVE_EXCHNDL, 1, [Define to 1 when Dr. MingW is available])
964
                 LIBS="-lexchndl $LIBS"
965 966 967 968
                 enable_drmingw="yes"
                ],
                [enable_drmingw="no (ExcHndl library missing)"]
               )
969 970 971
fi
AM_CONDITIONAL(HAVE_EXCHNDL, test "x$ac_cv_lib_exchndl_ExcHndlSetLogFileNameA" = "xyes")

972 973 974 975 976 977
###########################
# Check for backtrace() API
###########################

AC_CHECK_HEADERS([execinfo.h])

978 979 980 981 982 983 984 985 986 987 988 989
#########################
# Check for Matting Levin
#########################

AC_MSG_CHECKING([for matting engine Levin])
if $GEGL --exists "gegl:matting-levin"; then
  have_matting_levin=yes
else
  have_matting_levin='no (missing GEGL operation "gegl:matting-levin")'
fi
AC_MSG_RESULT($have_matting_levin)

990 991 992
##########################################
# Check for some special functions we need
##########################################
Elliot Lee's avatar
Elliot Lee committed
993

David Neary's avatar
David Neary committed
994 995
AC_CHECK_HEADERS(math.h ieeefp.h)

996
# DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
Manish Singh's avatar
Manish Singh committed
997 998 999
AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
gimp_save_LIBS=$LIBS
LIBS="$LIBS -lm"
1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016
AC_RUN_IFELSE(
  [AC_LANG_SOURCE([[
    #include <math.h>
    int main (void) { return (log(1) != log(1.)); }]])],
  [AC_MSG_RESULT(none needed)],
  [gimp_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=$gimp_save_CFLAGS
      AC_MSG_WARN([No ANSI prototypes found in library. (-std1 didn't work.)])],
     [AC_MSG_RESULT])],
  [AC_MSG_RESULT()])
1017

1018
# Check for finite or isfinite
1019 1020
AC_CHECK_FUNCS(finite, , [
  AC_MSG_CHECKING(for finite in <math.h>)
1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035
  AC_LINK_IFELSE(
    [AC_LANG_PROGRAM(
      [[#include <math.h>]],
      [[double f = 0.0; finite (f)]])],
    [AC_DEFINE(HAVE_FINITE, 1)
     AC_MSG_RESULT(yes)],
    [AC_MSG_RESULT(no)
     AC_MSG_CHECKING(for isfinite in <math.h>)
     AC_LINK_IFELSE(
       [AC_LANG_PROGRAM(
         [[#include <math.h>]],
         [[float f = 0.0; isfinite(f)]])],
       [AC_DEFINE([HAVE_ISFINITE],[1],[Define to 1 if you have the isfinite function.])
        AC_MSG_RESULT(yes)],
       [AC_MSG_RESULT(no)])])])
1036 1037 1038
AC_SUBST(HAVE_FINITE)
AC_SUBST(HAVE_ISFINITE)

1039 1040 1041
LIBS=$gimp_save_LIBS


1042
# check for rint
1043 1044 1045 1046 1047 1048
AC_CHECK_FUNC(rint, AC_DEFINE(HAVE_RINT, 1,
                              [Define to 1 if you have the rint function.]), [
  AC_CHECK_LIB(m, rint, [
    AC_DEFINE(HAVE_RINT)])])


Ell's avatar
Ell committed
1049 1050 1051 1052 1053
# check for vfork
AC_CHECK_FUNCS(vfork, ,)
AC_SUBST(HAVE_VFORK)


1054 1055 1056 1057 1058 1059
##############################
# Check for attributes we need
##############################

AX_GCC_FUNC_ATTRIBUTE(destructor)

1060 1061 1062
#####################################################################
# Check for extra libs needed for getaddrinfo, getnameinfo and socket
#####################################################################
1063 1064 1065 1066

gimp_save_LIBS=$LIBS
LIBS=""

1067
AC_CHECK_FUNCS(getaddrinfo, , AC_CHECK_LIB(nsl, getaddrinfo))
1068
AC_CHECK_FUNCS(getnameinfo, , AC_CHECK_LIB(nsl, getnameinfo))
1069 1070 1071 1072 1073 1074 1075
AC_CHECK_LIB(socket, socket)

SOCKET_LIBS="$LIBS"
LIBS=$gimp_save_LIBS

AC_SUBST(SOCKET_LIBS)

1076 1077 1078 1079
###################################
# Check for Intel vector intrinsics
###################################
intrinsics_save_CFLAGS="$CFLAGS"
1080
#FIXME: Check the CFLAGS separately
1081 1082 1083 1084 1085 1086
GIMP_DETECT_CFLAGS(SSE_MATH_CFLAG, '-mfpmath=sse')
GIMP_DETECT_CFLAGS(SSE2_CFLAG, '-msse2')
SSE2_EXTRA_CFLAGS="$SSE_MATH_CFLAG $SSE2_CFLAG"
CFLAGS="$intrinsics_save_CFLAGS $SSE2_EXTRA_CFLAGS"

AC_MSG_CHECKING(whether we can compile SSE2 intrinsics)
1087
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <emmintrin.h>]],[[__m128i one = _mm_set1_epi32 (1);]])],
1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101
  AC_DEFINE(COMPILE_SSE2_INTRINISICS, 1, [Define to 1 if SSE2 intrinsics are available.])
  AC_SUBST(SSE2_EXTRA_CFLAGS)
  AC_MSG_RESULT(yes)
,
  AC_MSG_RESULT(no)
  AC_MSG_WARN([SSE2 intrinsics not available.])
)


GIMP_DETECT_CFLAGS(SSE4_1_CFLAG, '-msse4.1')
SSE4_1_EXTRA_CFLAGS="$SSE_MATH_CFLAG $SSE4_1_CFLAG"
CFLAGS="$intrinsics_save_CFLAGS $SSE4_1_EXTRA_CFLAGS"

AC_MSG_CHECKING(whether we can compile SSE4.1 intrinsics)
1102
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <smmintrin.h>]],[[__v4sf a, b, c; c = _mm_blend_ps(a, b, 0x08);]])],
1103 1104 1105 1106 1107 1108 1109 1110 1111
  AC_DEFINE(COMPILE_SSE4_1_INTRINISICS, 1, [Define to 1 if SSE4.1 intrinsics are available.])
  AC_SUBST(SSE4_1_EXTRA_CFLAGS)
  AC_MSG_RESULT(yes)
,
  AC_MSG_RESULT(no)
  AC_MSG_WARN([SSE4.1 intrinsics not available.])
)
CFLAGS="$intrinsics_save_CFLAGS"

1112

1113 1114 1115
########################
# Check for MMX assembly
########################
1116

1117 1118 1119 1120 1121 1122
AC_ARG_ENABLE(mmx,
  [  --enable-mmx            enable MMX support (default=auto)],,
  enable_mmx=$have_x86)

AC_ARG_ENABLE(sse,
  [  --enable-sse            enable SSE support (default=auto)],,
1123
  enable_sse=$enable_mmx)
1124 1125

if test "x$enable_mmx" = xyes; then
1126 1127
  GIMP_DETECT_CFLAGS(MMX_EXTRA_CFLAGS, '-mmmx')
  SSE_EXTRA_CFLAGS=
1128

1129
  AC_MSG_CHECKING(whether we can compile MMX code)
1130

1131 1132
  mmx_save_CFLAGS="$CFLAGS"
  CFLAGS="$mmx_save_CFLAGS $MMX_EXTRA_CFLAGS"
1133

1134
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movq 0, %mm0");]])],
1135

1136 1137 1138
    AC_DEFINE(USE_MMX, 1, [Define to 1 if MMX assembly is available.])
    AC_MSG_RESULT(yes)

1139
    if test "x$enable_sse" = xyes; then
1140 1141
      GIMP_DETECT_CFLAGS(sse_flag, '-msse')
      SSE_EXTRA_CFLAGS="$MMX_EXTRA_CFLAGS $sse_flag"
1142 1143 1144

      AC_MSG_CHECKING(whether we can compile SSE code)

1145 1146
      CFLAGS="$CFLAGS $sse_flag"

1147
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movntps %xmm0, 0");]])],
1148 1149
        AC_DEFINE(USE_SSE, 1, [Define to 1 if SSE assembly is available.])
        AC_MSG_RESULT(yes)
1150
      ,
1151 1152 1153
        enable_sse=no
        AC_MSG_RESULT(no)
        AC_MSG_WARN([The assembler does not support the SSE command set.])
1154
      )
1155

1156
    fi
1157
  ,
1158 1159
    enable_mmx=no
    AC_MSG_RESULT(no)
1160
    AC_MSG_WARN([The assembler does not support the MMX command set.])
1161
  )
1162

1163 1164 1165 1166
  CFLAGS="$mmx_save_CFLAGS"

  AC_SUBST(MMX_EXTRA_CFLAGS)
  AC_SUBST(SSE_EXTRA_CFLAGS)
1167
fi
1168

1169 1170

############################
1171
# Check for AltiVec assembly
1172 1173 1174
############################

AC_ARG_ENABLE(altivec,
1175
  [  --enable-altivec        enable AltiVec support (default=auto)],,
1176 1177 1178
  enable_altivec=$have_ppc)

if test "x$enable_altivec" = xyes; then
1179

1180
  GIMP_DETECT_CFLAGS(altivec_flag, '-faltivec' '-maltivec -mabi=altivec')
1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193

  ALTIVEC_EXTRA_CFLAGS=
  case "$altivec_flag" in
    -maltivec*)
      altivec_save_CPPFLAGS="$CPPFLAGS"
      CPPFLAGS="$altivec_save_CPPFLAGS $altivec_flag"
      AC_CHECK_HEADERS(altivec.h, [ALTIVEC_EXTRA_CFLAGS="$altivec_flag"])
      CPPFLAGS="$altivec_save_CPPFLAGS"
      ;;
    *)
      ALTIVEC_EXTRA_CFLAGS="$altivec_flag"
      ;;
  esac
1194
  AC_SUBST(ALTIVEC_EXTRA_CFLAGS)
1195

1196
  AC_MSG_CHECKING(whether we can compile AltiVec code)
1197

1198
  can_use_altivec=no
1199
  if test -z "$ALTIVEC_EXTRA_CFLAGS"; then
1200
    AC_MSG_RESULT(no)
Manish Singh's avatar
Manish Singh committed
1201
    AC_MSG_WARN([The compiler does not support the AltiVec command set.])
1202
  else
1203 1204
    case "$host_os" in
      darwin*)
1205 1206 1207 1208 1209
        can_use_altivec=yes
        AC_DEFINE(HAVE_ALTIVEC_SYSCTL, 1,
         [Define to 1 if the altivec runtime test should use a sysctl.])
        ;;
      *)
1210
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("vand %v0, %v0, %v0");]])],
1211 1212 1213 1214
          can_use_altivec=yes, can_use_altivec=no)
        ;;
    esac
    AC_MSG_RESULT($can_use_altivec)
1215

1216 1217 1218 1219 1220 1221 1222
    if test "x$can_use_altivec" = "xyes"; then
      AC_DEFINE(USE_ALTIVEC, 1, [Define to 1 if AltiVec support is available.])
    else
      enable_altivec=no
      AC_MSG_WARN([The assembler does not support the AltiVec command set.])
    fi
  fi
1223 1224

  enable_altivec="$can_use_altivec"
1225
fi
1226

1227

1228 1229 1230
###################################
# Checks for shared memory handling
###################################
1231

1232
# MacOS X has broken SysV shm
1233 1234
case "$host_os" in
  darwin* | rhapsody* | machten*)
1235
    shmdefault=posix
1236 1237 1238 1239 1240 1241 1242
    ;;
  *)
    shmdefault=sysv
    ;;
esac

shmtype=auto
1243
AC_ARG_WITH(shm, [  --with-shm=none|sysv|posix|auto    shared memory transport type (default=auto)], shmtype=$with_shm)
1244 1245

case $shmtype in
1246
  none|sysv|posix) ;;
1247
  auto) shmtype=$shmdefault ;;
1248
  *) AC_MSG_ERROR([Invalid shared memory transport type: use none, sysv, posix, or auto.]);;
1249 1250
esac

1251 1252 1253 1254

if test "x$platform_win32" = "xyes"; then
  shmtype=win32
elif test "x$shmtype" = "xsysv"; then
1255 1256
  AC_CHECK_HEADER(sys/ipc.h,
    [AC_DEFINE(HAVE_IPC_H, 1,
1257
               [Define to 1 if you have the <sys/ipc.h> header file.])],
1258 1259 1260 1261 1262
    no_sys_ipc=yes)
  AC_CHECK_HEADER(sys/shm.h,
    [AC_DEFINE(HAVE_SHM_H, 1,
               [Define to 1 if you have the <sys/shm.h> header file.])],
    no_sys_shm=yes)
1263

1264 1265
  if test "$ac_cv_header_sys_shm_h" = "yes"; then
    AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches)
1266 1267
    AC_RUN_IFELSE(
      [AC_LANG_SOURCE([[
Elliot Lee's avatar
Elliot Lee committed
1268 1269 1270 1271 1272 1273 1274
	#include <sys/types.h>
	#include <sys/ipc.h>
	#include <sys/shm.h>
	int main()
	{
	  int id;
	  char *shmaddr;
1275
	id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0600);
Elliot Lee's avatar
Elliot Lee committed
1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288
	if (id == -1)
	  exit (2);
	  shmaddr = shmat (id, 0, 0);
	  shmctl (id, IPC_RMID, 0);
	  if ((char*) shmat (id, 0, 0) == (char*) -1)
	  {
	    shmdt (shmaddr);
	    exit (1);
	  }
	  shmdt (shmaddr);
	  shmdt (shmaddr);
	  exit (0);
	}
1289 1290 1291 1292 1293 1294
      ]])],
      [AC_DEFINE([IPC_RMID_DEFERRED_RELEASE],[1],
                 [Define to 1 if shared memory segments are released deferred.])
       AC_MSG_RESULT(yes)],
      [AC_MSG_RESULT(no)],
      [AC_MSG_RESULT(assuming no)])
1295 1296 1297 1298 1299 1300

    AC_DEFINE(USE_SYSV_SHM, 1, [Define to 1 to use SYSV shared memory])
  else
    shmtype=none
  fi
elif test "x$shmtype" = "xposix"; then
1301 1302 1303 1304 1305 1306
  have_shm_open=no

  AC_CHECK_FUNC(shm_open, have_shm_open=yes)

  RT_LIBS=
  if test "$have_shm_open" != "yes"; then
Manish Singh's avatar
Manish Singh committed
1307
    AC_CHECK_LIB(rt, shm_open, RT_LIBS="-lrt" have_shm_open=yes)
1308 1309
  fi
  AC_SUBST(RT_LIBS)
1310 1311 1312

  AC_CHECK_HEADER(sys/mman.h,
    [AC_DEFINE(HAVE_MMAN_H, 1,
1313
               [Define to 1 if you have the <sys/mman.h> header file.])],
1314 1315 1316
    no_sys_mman=yes)

  if test "$ac_cv_func_mmap" = "yes" &&
1317 1318
     test "$ac_cv_header_sys_mman_h" = "yes" &&
     test "$have_shm_open" = "yes"; then
1319 1320 1321
    AC_DEFINE(USE_POSIX_SHM, 1, [Define to 1 to use POSIX shared memory])
  else
    shmtype=none
1322
  fi
Elliot Lee's avatar
Elliot Lee committed
1323 1324
fi

1325 1326
AC_MSG_CHECKING(for shared memory transport type)
AC_MSG_RESULT($shmtype)
1327

1328

1329 1330 1331 1332 1333 1334
########################
# Define a symbol prefix
########################

AC_MSG_CHECKING([whether symbols are prefixed])

1335 1336
case "$host_os" in
  mingw*)
1337 1338 1339 1340
    case "$host_cpu" in 
	  x86_64) SYMPREFIX='' ;;
	  *) SYMPREFIX='_' ;;
	esac
1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357
    ;;
  darwin* | rhapsody* | machten*)
    SYMPREFIX='_'
    ;;
  *)
    ;;
esac

if test -n "$SYMPREFIX"; then
  AC_MSG_RESULT([yes, with a $SYMPREFIX])
else
  AC_MSG_RESULT(no)
fi

AC_SUBST(SYMPREFIX)


1358 1359 1360
############################
# Check for select and fdset
############################
Elliot Lee's avatar
Elliot Lee committed
1361

1362
if test "x$os_win32" != xyes; then
1363
  AC_MSG_CHECKING([fd_set and sys/select])
1364 1365 1366 1367 1368 1369
  AC_COMPILE_IFELSE(
    [AC_LANG_PROGRAM(
      [[#include <sys/types.h>]],
      [[fd_set readMask, writeMask;]])],
    [gimp_ok=yes],
    [gimp_ok=no])
1370
  if test "x$gimp_ok" = xno; then
1371
      AC_EGREP_HEADER(fd_mask, sys/select.h, gimp_ok=yes)
1372
      if test "x$gimp_ok" = xyes; then
1373 1374 1375 1376 1377
	  AC_DEFINE(HAVE_SYS_SELECT_H, 1,
		    [Define to 1 if you have the <sys/select.h> header.])
      fi
  fi
  AC_MSG_RESULT($gimp_ok)
1378
  if test "x$gimp_ok" = xno; then
1379 1380 1381
      AC_DEFINE(NO_FD_SET, 1,
		[Define to 1 if you don't have the fd_set typedef.])
  fi
Elliot Lee's avatar
Elliot Lee committed
1382 1383
fi

1384

1385
#############################
1386
# Threads and multi processor
1387
#############################
1388

1389
AC_ARG_ENABLE(mp, [  --disable-mp            disable support for multiple processors])
1390

1391
if test "x$enable_mp" != "xno"; then
1392 1393
  AC_DEFINE(ENABLE_MP, 1,
	    [Define to 1 to enable support for multiple processors.])
Sven Neumann's avatar
Sven Neumann committed
1394 1395
fi

1396

1397 1398 1399
################################
# Some plug-ins are X11 specific
################################
Sven Neumann's avatar
Sven Neumann committed
1400

1401
# Check if building for GTK+-X11
1402 1403
GTK_CHECK_BACKEND([x11], [gtk_required_version],
                  [have_gtk_x11=yes], [have_gtk_x11=no])
1404

1405
have_libxmu="no (building for `pkg-config --variable=targets gtk+-3.0`)"
1406

1407
if test "x$have_gtk_x11" = "xyes"; then
1408

1409
   # doc-shooter is X11 specific
1410 1411
   DOC_SHOOTER=doc-shooter

1412
   # screenshot plug-in needs to link to X11 explicitly
1413
   SCREENSHOT_LIBS="$X_LIBS -lX11"
1414

1415 1416 1417 1418 1419
   gimp_save_CFLAGS="$CFLAGS"
   gimp_save_LDFLAGS="$LDFLAGS"
   CFLAGS="$CFLAGS $GTK_CFLAGS"
   LDFLAGS="$LDFLAGS $X_LIBS"

1420
   # Test for Xmu
1421
   if test -z "$XMU_LIBS"; then
Sven Neumann's avatar
Sven Neumann committed
1422
      AC_CHECK_LIB(Xmu, XmuClientWindow,
1423
        [AC_CHECK_HEADERS(X11/Xmu/WinUtil.h,
1424
	  have_libxmu=yes
1425 1426
          XMU_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXmu -lXt"
          SCREENSHOT_LIBS="$XMU_LIBS",
1427 1428
	  [have_libxmu="no (XMU header file not found)"],[#include <gdk/gdkx.h>])],
	[have_libxmu="no (XMU library not found)"], -lXt -lX11)
1429
   fi
1430

1431
   # Check for shaped window extension
1432 1433
   AC_CHECK_LIB(Xext, XShapeGetRectangles,
     [AC_CHECK_HEADERS(X11/extensions/shape.h,
1434
        SCREENSHOT_LIBS="$SCREENSHOT_LIBS -lXext",,[#include <gdk/gdkx.h>])],,
1435 1436 1437 1438
     -lX11 -lXext)

   CFLAGS="$gimp_save_CFLAGS"
   LDFLAGS="$gimp_save_LDFLAGS"
1439

1440
   # check for the XFixes extension
1441 1442 1443
   PKG_CHECK_MODULES(XFIXES, xfixes,
      AC_DEFINE(HAVE_XFIXES, 1,
                [Define to 1 to if the XFIXES X extension is available])
1444
      SCREENSHOT_LIBS="$SCREENSHOT_LIBS $XFIXES_LIBS",
1445
      true)
1446
fi
Sven Neumann's avatar
Sven Neumann committed
1447

1448 1449
AC_SUBST(XMU_LIBS)
AC_SUBST(SCREENSHOT_LIBS)
1450

1451
AC_SUBST(DOC_SHOOTER)
1452

1453

1454
GIMP_COMMAND='gimp-gimp_app_version'
1455