configure.ac 98 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 27 28 29
m4_define([gimp_api_major_version], [3])
m4_define([gimp_api_minor_version], [0])
m4_define([gimp_api_version],
          [gimp_api_major_version.gimp_api_minor_version])
30 31 32

# Versions used for apps, plugins, tools, pkg-config files, and data,
# as well as global and user prefs
33 34 35 36 37 38 39
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])
40 41 42 43 44 45 46 47 48

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
49 50 51
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])
52
m4_define([babl_required_version], [0.1.74])
53 54 55 56 57
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])
58
m4_define([gegl_major_minor_version], [0.4])
59
m4_define([gegl_micro_version], [20])
60 61
m4_define([gegl_required_version],
          [gegl_major_minor_version.gegl_micro_version])
62
m4_define([gexiv2_required_version], [0.10.6])
63
m4_define([glib_required_version], [2.56.0])
64
m4_define([gtk_mac_integration_required_version], [2.0.0])
65
m4_define([gtk_required_version], [3.22.29])
66
m4_define([gtkdoc_required_version], [1.0])
67 68
m4_define([harfbuzz_required_version], [0.9.19])
m4_define([intltool_required_version], [0.40.1])
69
m4_define([introspection_required_version], [1.32.0])
70
m4_define([json_glib_required_version], [1.2.6])
71
m4_define([lcms_required_version], [2.8])
72
m4_define([libgudev_required_version], [167])
73
m4_define([libheif_required_version], [1.3.2])
74
m4_define([liblzma_required_version], [5.0.0])
75
m4_define([libmypaint_required_version], [1.3.0])
76
m4_define([libpng_required_version], [1.6.25])
77
m4_define([libunwind_required_version], [1.1.0])
78
m4_define([openexr_required_version], [1.6.1])
79
m4_define([openjpeg_required_version], [2.1.0])
80
m4_define([pangocairo_required_version], [1.42.0])
Ell's avatar
Ell committed
81
m4_define([perl_required_version], [5.10.0])
82 83
m4_define([poppler_required_version], [0.69.0])
m4_define([poppler_data_required_version], [0.4.9])
84
m4_define([python3_required_version], [3.6.0])
85 86
m4_define([rsvg_required_version], [2.40.6])
m4_define([webkitgtk_required_version], [2.20.3])
87
m4_define([webp_required_version], [0.6.0])
88
m4_define([wmf_required_version], [0.2.8])
89

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

94
AC_INIT([GIMP], [gimp_version],
95
        [https://gitlab.gnome.org/GNOME/gimp/issues/new],
96 97
        [gimp])

98
AC_CONFIG_HEADERS([config.h])
99
AC_CONFIG_SRCDIR([app/core/gimp.c])
100
AC_CONFIG_MACRO_DIR([m4macros])
101

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

104 105 106 107 108
# 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])])

109 110 111 112 113 114 115
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
116 117
GIMP_API_MAJOR_VERSION=gimp_api_major_version
GIMP_API_MINOR_VERSION=gimp_api_minor_version
118 119 120 121 122 123 124 125
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
126 127
GIMP_UNSTABLE=gimp_unstable
GIMP_FULL_NAME="gimp_full_name"
128 129 130
AC_SUBST(GIMP_MAJOR_VERSION)
AC_SUBST(GIMP_MINOR_VERSION)
AC_SUBST(GIMP_MICRO_VERSION)
131 132
AC_SUBST(GIMP_INTERFACE_AGE)
AC_SUBST(GIMP_BINARY_AGE)
133
AC_SUBST(GIMP_VERSION)
134
AC_SUBST(GIMP_REAL_VERSION)
135 136
AC_SUBST(GIMP_API_MAJOR_VERSION)
AC_SUBST(GIMP_API_MINOR_VERSION)
137 138 139 140 141 142 143 144
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)
145 146
AC_SUBST(GIMP_UNSTABLE)
AC_SUBST(GIMP_FULL_NAME)
147

148 149 150 151 152 153
# 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])
154

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

# The symbol GIMP_UNSTABLE is defined above for substitution in
# Makefiles and conditionally defined here as a preprocessor symbol
# and automake conditional.
226
if test "x$GIMP_UNSTABLE" = "xyes"; then
227
  AC_DEFINE(GIMP_UNSTABLE, 1,
228
            [Define to 1 if this is an unstable version of GIMP])
229
fi
230 231
AM_CONDITIONAL(GIMP_UNSTABLE, test "x$GIMP_UNSTABLE" = "xyes")

232 233

# libtool versioning
234
m4_define([lt_current], [m4_eval(100 * gimp_minor_version + gimp_micro_version - gimp_interface_age)])
235 236 237 238 239
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)
240 241
AC_SUBST(LT_CURRENT_MINUS_AGE)

242

243
# gettext i18n support
244
GETTEXT_PACKAGE=gimp30
245 246 247
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
                   [The prefix for our gettext translation domains.])
248

249 250 251 252 253
# work around intltool-update issues during 'make distcheck'
AS_IF([test "x$0" != "x./configure"], [
        AC_SUBST([INTLTOOL_UPDATE], [/bin/true])
])

254 255
# Determine a C compiler to use
AC_PROG_CC
256
AX_PROG_CC_FOR_BUILD
257 258 259 260 261
# 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
262
AM_PROG_CC_C_O
Manish Singh's avatar
Manish Singh committed
263

264 265
# Determine a C++ compiler to use
AC_PROG_CXX
Ell's avatar
Ell committed
266
AX_CXX_COMPILE_STDCXX([14], , [mandatory])
267

268
# Initialize libtool
269 270
LT_PREREQ([2.2])
LT_INIT([disable-static win32-dll])
Elliot Lee's avatar
Elliot Lee committed
271

272
AM_PROG_AS
Elliot Lee's avatar
Elliot Lee committed
273

274
# Initialize maintainer mode
275
AM_MAINTAINER_MODE([enable])
276

277 278 279 280
# Check for pkg-config
PKG_PROG_PKG_CONFIG(0.16)


281 282 283 284 285 286 287 288
#########################
# Check host architecture
#########################

AC_CANONICAL_HOST

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

290 291 292
AC_MSG_CHECKING([for host processor])
case "$host_cpu" in
  i*86)
293 294
    have_x86=yes
    AC_DEFINE(ARCH_X86, 1, [Define to 1 if you are compiling for ix86.])
295
    AC_MSG_RESULT([x86])
296
    ;;
297
  x86_64)
Manish Singh's avatar
Manish Singh committed
298 299 300
    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.])
301
    AC_MSG_RESULT([x86-64])
Manish Singh's avatar
Manish Singh committed
302
    ;;
303
  ppc | powerpc)
304 305
    have_ppc=yes
    AC_DEFINE(ARCH_PPC, 1, [Define to 1 if you are compiling for PowerPC.])
306
    AC_MSG_RESULT([PowerPC])
307
    ;;
308
  ppc64 | powerpc64)
Manish Singh's avatar
Manish Singh committed
309 310 311
    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.])
312
    AC_MSG_RESULT([64-bit PowerPC])
Manish Singh's avatar
Manish Singh committed
313
    ;;
314
  *)
315
    AC_MSG_RESULT([unknown])
316 317 318 319
    ;;
esac


Ell's avatar
Ell committed
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336
#################
# 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")


337 338 339
#################
# Check for Win32
#################
340

341 342 343
AC_MSG_CHECKING([if compiling for Win32])
case "$host_os" in
  mingw* | cygwin*)
344 345 346 347 348 349 350 351 352
    platform_win32=yes
    ;;
  *)
    platform_win32=no
    ;;
esac
AC_MSG_RESULT([$platform_win32])
AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")

353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
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
374
AC_SUBST(WIN32_LARGE_ADDRESS_AWARE)
375 376
AC_SUBST(PATHSEP)
AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
377
AM_CONDITIONAL(OS_UNIX, test "$os_win32" != "yes")
378 379 380

if test "$os_win32" = "yes"; then
  AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
Manish Singh's avatar
Manish Singh committed
381
  AC_CHECK_TOOL(WINDRES, windres, :)
382 383
else
  WINDRES=":"
384
fi
Manish Singh's avatar
Manish Singh committed
385

386
AM_CONDITIONAL(MS_LIB_AVAILABLE, test "x$ms_librarian" = xyes)
387
AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:")
Manish Singh's avatar
Manish Singh committed
388 389

AC_SUBST(WINDRES)
390

391

392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410
####################
# 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)


411 412 413 414
###############
# Generic stuff
###############

415
# Checks for programs.
416 417
AC_PROG_INSTALL
AC_PROG_MAKE_SET
418
AC_PROG_LN_S
419

420
# Large file support for the swap file
421
AC_SYS_LARGEFILE
422

423
AC_MSG_CHECKING([whether to turn on debugging])
424
AC_ARG_ENABLE(debug,
425
              [  --enable-debug          turn on debugging (default=no)],
426 427 428
              if eval "test x$enable_debug = xyes"; then
                DEBUGFLAG="-g"
              fi)
429

430
if test -n "$DEBUGFLAG"; then
431
  AC_MSG_RESULT([yes])
432
  CFLAGS="$DEBUGFLAG $CFLAGS"
433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448
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])
449
fi
450

451
AC_ARG_ENABLE(ansi,
452
              [  --enable-ansi           turn on strict ansi (default=no)],,
453
              enable_ansi=no)
454

455
changequote(,)dnl
456 457 458 459 460
if eval "test x$GCC = xyes"; then
  case " $CFLAGS " in
  *[\ \	]-Wall[\ \	]*) ;;
  *) CFLAGS="$CFLAGS -Wall" ;;
  esac
Elliot Lee's avatar
Elliot Lee committed
461

462 463 464 465 466
  if test "x$enable_ansi" = "xyes"; then
    case " $CFLAGS " in
    *[\ \	]-ansi[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -ansi" ;;
    esac
467

468 469 470 471
    case " $CFLAGS " in
    *[\ \	]-pedantic[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -pedantic" ;;
    esac
Elliot Lee's avatar
Elliot Lee committed
472 473
  fi
fi
474
changequote([,])dnl
Elliot Lee's avatar
Elliot Lee committed
475

476

477
# If possible, warn if C99isms are used
478 479 480
GIMP_DETECT_CFLAGS(extra_warnings, '-Wdeclaration-after-statement')
CFLAGS="$CFLAGS $extra_warnings"

481
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-prototypes')
482 483 484 485 486
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.
487
#
488 489
GIMP_DETECT_CFLAGS(extra_warnings, '-Werror=missing-prototypes')
CFLAGS="$CFLAGS $extra_warnings"
490

491 492 493
GIMP_DETECT_CFLAGS(extra_warnings, '-Wstrict-prototypes')
CFLAGS="$CFLAGS $extra_warnings"

494 495 496
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-declarations')
CFLAGS="$CFLAGS $extra_warnings"

497 498 499 500 501
GIMP_DETECT_CFLAGS(extra_warnings, '-Winit-self')
CFLAGS="$CFLAGS $extra_warnings"

GIMP_DETECT_CFLAGS(extra_warnings, '-Wpointer-arith')
CFLAGS="$CFLAGS $extra_warnings"
502 503 504

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

506 507 508
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-format-attribute')
CFLAGS="$CFLAGS $extra_warnings"

509 510 511
GIMP_DETECT_CFLAGS(extra_warnings, '-Wformat-security')
CFLAGS="$CFLAGS $extra_warnings"

512 513 514 515 516 517
GIMP_DETECT_CFLAGS(extra_warnings, '-Wlogical-op')
CFLAGS="$CFLAGS $extra_warnings"

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

Mukund Sivaraman's avatar
Mukund Sivaraman committed
518 519 520
GIMP_DETECT_CFLAGS(extra_warnings, '-fno-common')
CFLAGS="$CFLAGS $extra_warnings"

521 522 523
GIMP_DETECT_CFLAGS(extra_warnings, '-fdiagnostics-show-option')
CFLAGS="$CFLAGS $extra_warnings"

524 525 526 527 528 529
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.
530 531 532 533
# 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"
534

535 536 537 538 539 540 541 542
# 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"


543 544 545 546
# 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".
547 548
if test "x$os_win32" = xyes; then
  if test "x$GCC" = xyes; then
549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567
    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
568
    if test "x$msnative_struct" = x ; then
569
      AC_MSG_RESULT([no way])
Tor Lillqvist's avatar
Tor Lillqvist committed
570
      AC_MSG_WARN([build will be incompatible with GTK+ DLLs])
571 572 573 574 575 576 577
    else
      CFLAGS="$CFLAGS $msnative_struct"
      AC_MSG_RESULT([${msnative_struct}])
    fi
  fi
fi

578 579 580 581 582 583 584 585 586
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
Jehan's avatar
Jehan committed
587
  # For GCC, use -v which has more information than --version.
588
  CC_VERSION_OPTS="-v"
Jehan's avatar
Jehan committed
589 590 591
else
  # This is the list of common options used by autotools to check
  # versions for various compilers.
592
  CC_VERSION_OPTS="--version -v -V -qversion"
593
fi
594 595 596 597

for CC_VERSION_OPT in $CC_VERSION_OPTS; do
  # We run $CC, and escape and format its output, in a single step,
  # since some shells expand escape sequences in "echo" arguments.
598
  CC_VERSION="`$CC $CC_VERSION_OPT 2>&1 | sed -e 's/\\\\/\\\\\\\\\\\\\\\\/g;s/^/\\\\t/;s/$/\\\\n/' | tr -d '\n'`"
599 600 601 602 603
  if test $? -eq 0; then
    break
  fi
done

Jehan's avatar
Jehan committed
604
AC_SUBST(CC_VERSION)
605

606 607 608 609
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_TIME

610
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)
611
AC_CHECK_FUNCS(backtrace, , AC_CHECK_LIB(execinfo, backtrace))
612 613 614 615 616 617

AC_TYPE_PID_T
AC_FUNC_VPRINTF

AC_FUNC_ALLOCA

618
# check some more funcs
Sven Neumann's avatar
Sven Neumann committed
619
AC_CHECK_FUNCS(fsync)
620
AC_CHECK_FUNCS(difftime mmap)
621
AC_CHECK_FUNCS(thr_self)
622

Sven Neumann's avatar
Sven Neumann committed
623

624 625
# _NL_MEASUREMENT_MEASUREMENT is an enum and not a define
AC_MSG_CHECKING([for _NL_MEASUREMENT_MEASUREMENT])
626 627
AC_LINK_IFELSE(
  [AC_LANG_PROGRAM(
628 629 630 631
    [[#include <langinfo.h>]],
    [[char c = *((unsigned char *)  nl_langinfo(_NL_MEASUREMENT_MEASUREMENT));]])],
  [nl_ok=yes],
  [nl_ok=no])
632 633 634 635 636 637
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

638 639 640 641 642 643 644 645 646 647 648 649 650 651
# 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"])])
652

653 654 655
######################
# Internationalisation
######################
656

657
IT_PROG_INTLTOOL(intltool_required_version)
658
AM_GLIB_GNU_GETTEXT
659

660
# Testing xgettext version since we had some problem with localizing script-fu. See bug 720052.
661 662 663
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; }'`
664 665 666 667 668

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; }'`

669
have_required_xgettext="no"
670
if test -n "$XGETTEXT_APPLIED_VERSION_MAJOR"; then
671 672 673
    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
674
        if test -n "$XGETTEXT_APPLIED_VERSION_MINOR_1"; then
675 676
            if test "$XGETTEXT_REQUIRED_VERSION_MINOR_1" -le "$XGETTEXT_APPLIED_VERSION_MINOR_1"; then
                have_required_xgettext="yes"
677 678 679 680
            fi
        fi
    fi
fi
681
AC_MSG_RESULT($have_required_xgettext)
682

683 684
if test "x$have_required_xgettext" = "xno"; then
    add_deps_error([xgettext], [xgettext >= xgettext_required_version])
685
fi
686

Sven Neumann's avatar
Sven Neumann committed
687 688 689 690
###########
# iso-codes
###########

691 692 693 694 695
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])
Sven Neumann's avatar
Sven Neumann committed
696
  ISO_CODES_PREFIX=`$PKG_CONFIG --variable=prefix iso-codes`
697 698 699 700 701 702 703 704 705
  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)


706 707 708
###############################
# Checks for required libraries
###############################
709

710 711
PKG_CHECK_MODULES(BABL, [babl >= babl_required_version],,
                  [add_deps_error([babl >= babl_required_version])])
712 713
PKG_CHECK_MODULES(GEGL, gegl-gegl_major_minor_version >= gegl_required_version,,
                  [add_deps_error([gegl-gegl_major_minor_version >= gegl_required_version])])
714 715
PKG_CHECK_MODULES(ATK, atk >= atk_required_version,,
                  [add_deps_error([atk >= atk_required_version])])
716

717 718 719 720 721 722 723 724 725
# 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],
726 727 728
                 [add_deps_error([glib >= glib_required_version],
                                 [Test for GLIB failed])],
                 gobject)
Sven Neumann's avatar
Sven Neumann committed
729

730 731
PKG_CHECK_MODULES(GMODULE_NO_EXPORT, gmodule-no-export-2.0,,
                  [add_deps_error([gmodule-no-export-2.0])])
732

733 734
PKG_CHECK_MODULES(GIO, gio-2.0,,
                  [add_deps_error([gio-2.0])])
735

736
if test "x$os_win32" = "xyes"; then
737 738
  PKG_CHECK_MODULES(GIO_WINDOWS, gio-windows-2.0,,
                    [add_deps_error([gio-windows-2.0])])
739
else
740 741
  PKG_CHECK_MODULES(GIO_UNIX, gio-unix-2.0,,
                    [add_deps_error([gio-unix-2.0])])
742 743
fi

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
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

771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788
# 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
789
fi
790 791
AC_MSG_RESULT($HOST_GLIB_COMPILE_RESOURCES)
AC_SUBST(HOST_GLIB_COMPILE_RESOURCES)
792

793 794
AC_PATH_PROG(GDBUS_CODEGEN, gdbus-codegen, no)
if test "x$GDBUS_CODEGEN" = xno; then
795
  add_deps_error([gdbus-codegen], [Could not find gdbus-codegen in your PATH.])
796 797
fi

798 799 800
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
801
else
802
  have_glib_2_57=no
803
fi
804
AC_MSG_RESULT($have_glib_2_57)
805

806 807
AC_PATH_PROG(GEGL, gegl, no)
if test "x$GEGL" = xno; then
808
  add_deps_error([gegl], [Could not find native gegl executable in your PATH.])
809 810
fi

811

812
# Check for bind_textdomain_codeset, including -lintl if GLib brings it in.
813 814
gimp_save_LIBS=$LIBS
LIBS="$LIBS $GLIB_LIBS"
815
AC_CHECK_FUNCS(bind_textdomain_codeset,,
816 817
  add_deps_error([bind_textdomain_codeset()],
                 [Check for bind_textdomain_codeset() failed! This is required.]))
818 819 820 821 822
LIBS=$gimp_save_LIBS


AC_PATH_XTRA

823 824 825
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
826

827
AC_PATH_PROGS(GTK_UPDATE_ICON_CACHE, gtk-update-icon-cache-3.0 gtk-update-icon-cache, no)
828
if test "x$GTK_UPDATE_ICON_CACHE" = xno; then
829 830
  add_deps_error([gtk-update-icon-cache],
                 [Could not find gtk-update-icon-cache in your PATH.])
831 832
fi

833 834
PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-2.0 >= gdk_pixbuf_required_version,,
                  [add_deps_error([gdk-pixbuf-2.0 >= gdk_pixbuf_required_version])])
835

836
AC_PATH_PROG(GDK_PIXBUF_CSOURCE, gdk-pixbuf-csource, no)
837
if test "x$GDK_PIXBUF_CSOURCE" = xno; then
838 839
  add_deps_error([gdk-pixbuf-csource],
                 [Could not find gdk-pixbuf-csource in your PATH.])
840 841
fi

842 843
PKG_CHECK_MODULES(CAIRO, cairo >= cairo_required_version,,
                  [add_deps_error([cairo >= cairo_required_version])])
844

845
PKG_CHECK_MODULES(PANGOCAIRO,
846 847 848
                  [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.])])
849

Martin Nordholts's avatar
Martin Nordholts committed
850
gimp_save_CFLAGS=$CFLAGS
851 852
CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS"

853
# Windows platform had a few bugs fixed in earlier fontconfig.
854 855 856 857 858
# 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).
859 860
PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= fontconfig_required_version,,
                  [add_deps_error([fontconfig >= fontconfig_required_version])])
861

862 863 864
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
865
else
866
  have_pango_1_43=no
867
fi
868
AC_MSG_RESULT($have_pango_1_43)
869

Sven Neumann's avatar
Sven Neumann committed
870
CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS"
871 872

AC_MSG_CHECKING([if Pango is built with a recent fontconfig])
873 874 875 876 877 878
AC_COMPILE_IFELSE(
  [AC_LANG_PROGRAM(
    [[#include <fontconfig/fontconfig.h>]],
    [[FcObjectSet *os; os = FcObjectSetBuild (FC_FAMILY, FC_WIDTH);]])],
  [fontconfig_ok=yes],
  [fontconfig_ok=no])
879 880 881 882 883 884 885
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
Sven Neumann's avatar
Sven Neumann committed
886
*** Pango library is using an older version. This old version is probably in
887
*** /usr/X11R6. Look at the above output, and note that the result for
Sven Neumann's avatar
Sven Neumann committed
888
*** FONTCONFIG_CFLAGS is not in the result for PANGOCAIRO_CFLAGS, and that
889 890 891 892 893 894 895
*** 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
896

897

898
PKG_CHECK_MODULES(FREETYPE, freetype2 >= freetype2_required_version,,
899
                  [add_deps_error([freetype2_required_version >= freetype2_required_version])])
900

901 902
PKG_CHECK_MODULES(HARFBUZZ, harfbuzz >= harfbuzz_required_version,,
                 [add_deps_error([harfbuzz >= harfbuzz_required_version])])
903

904 905
PKG_CHECK_MODULES(GEXIV2, gexiv2 >= gexiv2_required_version,,
                 [add_deps_error([gexiv2 >= gexiv2_required_version])])
906

907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931
#################################
# 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])

932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959
######################################
# 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])

960 961 962 963
#####################
# Check for Dr. Mingw
#####################

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

978 979 980 981 982 983
###########################
# Check for backtrace() API
###########################

AC_CHECK_HEADERS([execinfo.h])

984 985 986 987 988 989 990 991 992 993 994 995
#########################
# 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)

996 997 998
##########################################
# Check for some special functions we need
##########################################
Elliot Lee's avatar
Elliot Lee committed
999

David Neary's avatar
ted  
David Neary committed
1000 1001
AC_CHECK_HEADERS(math.h ieeefp.h)

1002
# DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
Manish Singh's avatar
Manish Singh committed
1003 1004 1005
AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
gimp_save_LIBS=$LIBS
LIBS="$LIBS -lm"
1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022
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()])
1023

1024 1025 1026
LIBS=$gimp_save_LIBS


1027
# check for rint
1028 1029 1030 1031 1032 1033
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
1034 1035 1036 1037 1038
# check for vfork
AC_CHECK_FUNCS(vfork, ,)
AC_SUBST(HAVE_VFORK)


1039 1040 1041 1042 1043 1044
##############################
# Check for attributes we need
##############################

AX_GCC_FUNC_ATTRIBUTE(destructor)

1045 1046 1047
#####################################################################
# Check for extra libs needed for getaddrinfo, getnameinfo and socket
#####################################################################
1048 1049 1050 1051

gimp_save_LIBS=$LIBS
LIBS=""

1052
AC_CHECK_FUNCS(getaddrinfo, , AC_CHECK_LIB(nsl, getaddrinfo))
1053
AC_CHECK_FUNCS(getnameinfo, , AC_CHECK_LIB(nsl, getnameinfo))
1054 1055 1056 1057 1058 1059 1060
AC_CHECK_LIB(socket, socket)

SOCKET_LIBS="$LIBS"
LIBS=$gimp_save_LIBS

AC_SUBST(SOCKET_LIBS)

1061 1062 1063 1064
###################################
# Check for Intel vector intrinsics
###################################
intrinsics_save_CFLAGS="$CFLAGS"
1065
#FIXME: Check the CFLAGS separately
1066 1067 1068 1069 1070 1071
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)
1072
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <emmintrin.h>]],[[__m128i one = _mm_set1_epi32 (1);]])],
1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086
  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)
1087
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <smmintrin.h>]],[[__v4sf a, b, c; c = _mm_blend_ps(a, b, 0x08);]])],
1088 1089 1090 1091 1092 1093 1094 1095 1096
  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"

1097

1098 1099 1100
########################
# Check for MMX assembly
########################
1101

1102 1103 1104 1105 1106 1107
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)],,
1108
  enable_sse=$enable_mmx)
1109 1110

if test "x$enable_mmx" = xyes; then
1111 1112
  GIMP_DETECT_CFLAGS(MMX_EXTRA_CFLAGS, '-mmmx')
  SSE_EXTRA_CFLAGS=
1113

1114
  AC_MSG_CHECKING(whether we can compile MMX code)
1115

1116 1117
  mmx_save_CFLAGS="$CFLAGS"
  CFLAGS="$mmx_save_CFLAGS $MMX_EXTRA_CFLAGS"
1118

1119
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movq 0, %mm0");]])],
1120

1121 1122 1123
    AC_DEFINE(USE_MMX, 1, [Define to 1 if MMX assembly is available.])
    AC_MSG_RESULT(yes)

1124
    if test "x$enable_sse" = xyes; then
1125 1126
      GIMP_DETECT_CFLAGS(sse_flag, '-msse')
      SSE_EXTRA_CFLAGS="$MMX_EXTRA_CFLAGS $sse_flag"
1127 1128 1129

      AC_MSG_CHECKING(whether we can compile SSE code)

1130 1131
      CFLAGS="$CFLAGS $sse_flag"

1132
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movntps %xmm0, 0");]])],
1133 1134
        AC_DEFINE(USE_SSE, 1, [Define to 1 if SSE assembly is available.])
        AC_MSG_RESULT(yes)
1135
      ,
1136 1137 1138
        enable_sse=no
        AC_MSG_RESULT(no)
        AC_MSG_WARN([The assembler does not support the SSE command set.])
1139
      )
1140

1141
    fi
1142
  ,
1143 1144
    enable_mmx=no
    AC_MSG_RESULT(no)
1145
    AC_MSG_WARN([The assembler does not support the MMX command set.])
1146
  )
1147

1148 1149 1150 1151
  CFLAGS="$mmx_save_CFLAGS"

  AC_SUBST(MMX_EXTRA_CFLAGS)
  AC_SUBST(SSE_EXTRA_CFLAGS)
1152
fi
1153

1154 1155

############################
1156
# Check for AltiVec assembly
1157 1158 1159
############################

AC_ARG_ENABLE(altivec,
1160
  [  --enable-altivec        enable AltiVec support (default=auto)],,
1161 1162 1163
  enable_altivec=$have_ppc)

if test "x$enable_altivec" = xyes; then
Manish Singh's avatar
Manish Singh committed
1164

1165
  GIMP_DETECT_CFLAGS(altivec_flag, '-faltivec' '-maltivec -mabi=altivec')
Manish Singh's avatar
Manish Singh committed
1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178

  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
1179
  AC_SUBST(ALTIVEC_EXTRA_CFLAGS)
1180

1181
  AC_MSG_CHECKING(whether we can compile AltiVec code)
1182

Manish Singh's avatar
Manish Singh committed
1183
  can_use_altivec=no
1184
  if test -z "$ALTIVEC_EXTRA_CFLAGS"; then
1185
    AC_MSG_RESULT(no)
Manish Singh's avatar
Manish Singh committed
1186
    AC_MSG_WARN([The compiler does not support the AltiVec command set.])
1187
  else
1188 1189
    case "$host_os" in
      darwin*)
1190 1191 1192 1193 1194
        can_use_altivec=yes
        AC_DEFINE(HAVE_ALTIVEC_SYSCTL, 1,
         [Define to 1 if the altivec runtime test should use a sysctl.])
        ;;
      *)
1195
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("vand %v0, %v0, %v0");]])],
1196 1197 1198 1199
          can_use_altivec=yes, can_use_altivec=no)
        ;;
    esac
    AC_MSG_RESULT($can_use_altivec)
1200

1201 1202 1203 1204 1205 1206 1207
    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
Manish Singh's avatar
Manish Singh committed
1208 1209

  enable_altivec="$can_use_altivec"
1210
fi
1211

1212

1213 1214 1215
###################################
# Checks for shared memory handling
###################################
1216

1217
# MacOS X has broken SysV shm
1218 1219
case "$host_os" in
  darwin* | rhapsody* | machten*)
1220
    shmdefault=posix
1221 1222 1223 1224 1225 1226 1227
    ;;
  *)
    shmdefault=sysv
    ;;
esac

shmtype=auto
1228
AC_ARG_WITH(shm, [  --with-shm=none|sysv|posix|auto    shared memory transport type (default=auto)], shmtype=$with_shm)
1229 1230

case $shmtype in
1231
  none|sysv|posix) ;;
1232
  auto) shmtype=$shmdefault ;;
1233
  *) AC_MSG_ERROR([Invalid shared memory transport type: use none, sysv, posix, or auto.]);;
1234 1235
esac

1236 1237 1238 1239

if test "x$platform_win32" = "xyes"; then
  shmtype=win32
elif test "x$shmtype" = "xsysv"; then
1240 1241
  AC_CHECK_HEADER(sys/ipc.h,
    [AC_DEFINE(HAVE_IPC_H, 1,
1242
               [Define to 1 if you have the <sys/ipc.h> header file.])],
1243 1244 1245 1246 1247
    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)