configure.ac 87.9 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.56])
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], [9])
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([openexr_required_version], [1.6.1])
73
m4_define([openjpeg_required_version], [2.1.0])
74
m4_define([pangocairo_required_version], [1.42.0])
75
m4_define([perl_required_version], [5.10.0])
76 77 78 79
m4_define([poppler_required_version], [0.44.0])
m4_define([poppler_data_required_version], [0.4.7])
m4_define([pycairo_required_version], [1.0.2])
m4_define([pygtk_required_version], [2.10.4])
80
m4_define([python2_required_version], [2.5.0])
81 82
m4_define([rsvg_required_version], [2.40.6])
m4_define([webkitgtk_required_version], [2.20.3])
83
m4_define([webp_required_version], [0.6.0])
84
m4_define([wmf_required_version], [0.2.8])
85

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

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

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

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

100 101 102 103 104
# 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])])

105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
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
120 121
GIMP_UNSTABLE=gimp_unstable
GIMP_FULL_NAME="gimp_full_name"
122 123 124
AC_SUBST(GIMP_MAJOR_VERSION)
AC_SUBST(GIMP_MINOR_VERSION)
AC_SUBST(GIMP_MICRO_VERSION)
125 126
AC_SUBST(GIMP_INTERFACE_AGE)
AC_SUBST(GIMP_BINARY_AGE)
127
AC_SUBST(GIMP_VERSION)
128 129 130 131 132 133 134 135 136
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)
137 138
AC_SUBST(GIMP_UNSTABLE)
AC_SUBST(GIMP_FULL_NAME)
139

140 141 142 143 144 145
# 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])
146

147
# These are used for substitution (.pc, INSTALL, etc.).
148
APPSTREAM_GLIB_REQUIRED_VERSION=appstream_glib_required_version
149 150
ATK_REQUIRED_VERSION=atk_required_version
BABL_REQUIRED_VERSION=babl_required_version
151
CAIRO_REQUIRED_VERSION=cairo_required_version
152
CAIRO_PDF_REQUIRED_VERSION=cairo_pdf_required_version
153 154 155
FONTCONFIG_REQUIRED_VERSION=fontconfig_required_version
FREETYPE2_REQUIRED_VERSION=freetype2_required_version
GDK_PIXBUF_REQUIRED_VERSION=gdk_pixbuf_required_version
156
GEGL_MAJOR_MINOR_VERSION=gegl_major_minor_version
157
GEGL_REQUIRED_VERSION=gegl_required_version
158
GEXIV2_REQUIRED_VERSION=gexiv2_required_version
159 160 161 162 163
GLIB_REQUIRED_VERSION=glib_required_version
GTK_REQUIRED_VERSION=gtk_required_version
GTK_WIN32_RECOMMENDED_VERSION=gtk_win32_recommended_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
180
XGETTEXT_REQUIRED_VERSION=xgettext_required_version
181
AC_SUBST(APPSTREAM_GLIB_REQUIRED_VERSION)
182 183
AC_SUBST(ATK_REQUIRED_VERSION)
AC_SUBST(BABL_REQUIRED_VERSION)
184
AC_SUBST(CAIRO_REQUIRED_VERSION)
185
AC_SUBST(CAIRO_PDF_REQUIRED_VERSION)
186 187 188
AC_SUBST(FONTCONFIG_REQUIRED_VERSION)
AC_SUBST(FREETYPE2_REQUIRED_VERSION)
AC_SUBST(GDK_PIXBUF_REQUIRED_VERSION)
189
AC_SUBST(GEGL_MAJOR_MINOR_VERSION)
190
AC_SUBST(GEGL_REQUIRED_VERSION)
191
AC_SUBST(GEXIV2_REQUIRED_VERSION)
192 193 194 195 196
AC_SUBST(GLIB_REQUIRED_VERSION)
AC_SUBST(GTK_REQUIRED_VERSION)
AC_SUBST(GTK_WIN32_RECOMMENDED_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)
213
AC_SUBST(XGETTEXT_REQUIRED_VERSION)
214 215 216 217

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

224 225

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

234

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

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

246 247
# Determine a C compiler to use
AC_PROG_CC
248
AX_PROG_CC_FOR_BUILD
249 250 251 252 253
# 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
254
AM_PROG_CC_C_O
Manish Singh's avatar
Manish Singh committed
255

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

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

264
AM_PROG_AS
Elliot Lee's avatar
Elliot Lee committed
265

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

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


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

AC_CANONICAL_HOST

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

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


312 313 314
#################
# Check for Win32
#################
315

316 317 318
AC_MSG_CHECKING([if compiling for Win32])
case "$host_os" in
  mingw* | cygwin*)
319 320 321 322 323 324 325 326 327
    platform_win32=yes
    ;;
  *)
    platform_win32=no
    ;;
esac
AC_MSG_RESULT([$platform_win32])
AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")

328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348
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
349
AC_SUBST(WIN32_LARGE_ADDRESS_AWARE)
350 351
AC_SUBST(PATHSEP)
AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
352
AM_CONDITIONAL(OS_UNIX, test "$os_win32" != "yes")
353 354 355

if test "$os_win32" = "yes"; then
  AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
Manish Singh's avatar
Manish Singh committed
356
  AC_CHECK_TOOL(WINDRES, windres, :)
357 358
else
  WINDRES=":"
359
fi
Manish Singh's avatar
Manish Singh committed
360

361
AM_CONDITIONAL(MS_LIB_AVAILABLE, test "x$ms_librarian" = xyes)
362
AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:")
Manish Singh's avatar
Manish Singh committed
363 364

AC_SUBST(WINDRES)
365

366

367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385
####################
# 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)


386 387 388 389
###############
# Generic stuff
###############

390
# Checks for programs.
391 392
AC_PROG_INSTALL
AC_PROG_MAKE_SET
393
AC_PROG_LN_S
394

395
# Large file support for the swap file
396
AC_SYS_LARGEFILE
397

398
AC_MSG_CHECKING([whether to turn on debugging])
399
AC_ARG_ENABLE(debug,
400
              [  --enable-debug          turn on debugging (default=no)],
401 402 403
              if eval "test x$enable_debug = xyes"; then
                DEBUGFLAG="-g"
              fi)
404

405
if test -n "$DEBUGFLAG"; then
406
  AC_MSG_RESULT([yes])
407
  CFLAGS="$DEBUGFLAG $CFLAGS"
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423
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])
424
fi
425

426
AC_ARG_ENABLE(ansi,
427
              [  --enable-ansi           turn on strict ansi (default=no)],,
428
              enable_ansi=no)
429

430
changequote(,)dnl
431 432 433 434 435
if eval "test x$GCC = xyes"; then
  case " $CFLAGS " in
  *[\ \	]-Wall[\ \	]*) ;;
  *) CFLAGS="$CFLAGS -Wall" ;;
  esac
Elliot Lee's avatar
Elliot Lee committed
436

437 438 439 440 441
  if test "x$enable_ansi" = "xyes"; then
    case " $CFLAGS " in
    *[\ \	]-ansi[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -ansi" ;;
    esac
442

443 444 445 446
    case " $CFLAGS " in
    *[\ \	]-pedantic[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -pedantic" ;;
    esac
Elliot Lee's avatar
Elliot Lee committed
447 448
  fi
fi
449
changequote([,])dnl
Elliot Lee's avatar
Elliot Lee committed
450

451

452
# If possible, warn if C99isms are used
453 454 455
GIMP_DETECT_CFLAGS(extra_warnings, '-Wdeclaration-after-statement')
CFLAGS="$CFLAGS $extra_warnings"

456
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-prototypes')
457 458 459 460 461
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.
462
#
463 464
GIMP_DETECT_CFLAGS(extra_warnings, '-Werror=missing-prototypes')
CFLAGS="$CFLAGS $extra_warnings"
465

466 467 468
GIMP_DETECT_CFLAGS(extra_warnings, '-Wstrict-prototypes')
CFLAGS="$CFLAGS $extra_warnings"

469 470 471
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-declarations')
CFLAGS="$CFLAGS $extra_warnings"

472 473 474 475 476
GIMP_DETECT_CFLAGS(extra_warnings, '-Winit-self')
CFLAGS="$CFLAGS $extra_warnings"

GIMP_DETECT_CFLAGS(extra_warnings, '-Wpointer-arith')
CFLAGS="$CFLAGS $extra_warnings"
477 478 479

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

481 482 483
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-format-attribute')
CFLAGS="$CFLAGS $extra_warnings"

484 485 486
GIMP_DETECT_CFLAGS(extra_warnings, '-Wformat-security')
CFLAGS="$CFLAGS $extra_warnings"

487 488 489 490 491 492
GIMP_DETECT_CFLAGS(extra_warnings, '-Wlogical-op')
CFLAGS="$CFLAGS $extra_warnings"

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

493 494 495
GIMP_DETECT_CFLAGS(extra_warnings, '-fno-common')
CFLAGS="$CFLAGS $extra_warnings"

496 497 498
GIMP_DETECT_CFLAGS(extra_warnings, '-fdiagnostics-show-option')
CFLAGS="$CFLAGS $extra_warnings"

499 500 501 502 503 504
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.
505 506 507 508
# 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"
509

510 511 512 513 514 515 516 517
# 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"


518 519 520 521
# 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".
522 523
if test "x$os_win32" = xyes; then
  if test "x$GCC" = xyes; then
524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542
    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
543
    if test "x$msnative_struct" = x ; then
544
      AC_MSG_RESULT([no way])
545
      AC_MSG_WARN([build will be incompatible with GTK+ DLLs])
546 547 548 549 550 551 552
    else
      CFLAGS="$CFLAGS $msnative_struct"
      AC_MSG_RESULT([${msnative_struct}])
    fi
  fi
fi

553 554 555 556 557 558 559 560 561
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
562 563 564 565 566 567 568 569 570 571 572 573 574 575 576
  # For GCC, use -v which has more information than --version.
  CC_VERSION="\\\\t`$CC -v 2>&1 | sed -e 's/$/\\\\n\\\\t/g' | tr -d '\n'`"
else
  # This is the list of common options used by autotools to check
  # versions for various compilers.
  CC_VERSION="\\\\t`$CC --version 2>&1 | sed -e 's/$/\\\\n\\\\t/g' | tr -d '\n'`"
  if test $? != 0; then
    CC_VERSION="\\\\t`$CC -v 2>&1` | sed -e 's/$/\\\\n\\\\t/g' | tr -d '\n'"
    if test $? != 0; then
      CC_VERSION="\\\\t`$CC -V 2>&1` | sed -e 's/$/\\\\n\\\\t/g' | tr -d '\n'"
      if test $? != 0; then
        CC_VERSION="\\\\t`$CC -qversion 2>&1` | sed -e 's/$/\\\\n\\\\t/g' | tr -d '\n'"
      fi
    fi
  fi
577
fi
578
AC_SUBST(CC_VERSION)
579

580 581 582 583
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_TIME

584
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)
585
AC_CHECK_FUNCS(backtrace, , AC_CHECK_LIB(execinfo, backtrace))
586 587 588 589 590 591

AC_TYPE_PID_T
AC_FUNC_VPRINTF

AC_FUNC_ALLOCA

592
# check some more funcs
Sven Neumann's avatar
Sven Neumann committed
593
AC_CHECK_FUNCS(fsync)
594
AC_CHECK_FUNCS(difftime mmap)
595
AC_CHECK_FUNCS(thr_self)
596

Sven Neumann's avatar
Sven Neumann committed
597

598 599
AM_BINRELOC

600

601 602
# _NL_MEASUREMENT_MEASUREMENT is an enum and not a define
AC_MSG_CHECKING([for _NL_MEASUREMENT_MEASUREMENT])
603 604
AC_LINK_IFELSE(
  [AC_LANG_PROGRAM(
605 606 607 608
    [[#include <langinfo.h>]],
    [[char c = *((unsigned char *)  nl_langinfo(_NL_MEASUREMENT_MEASUREMENT));]])],
  [nl_ok=yes],
  [nl_ok=no])
609 610 611 612 613 614
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

615 616 617 618 619 620 621 622 623 624 625 626 627 628
# 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"])])
629

630 631 632
######################
# Internationalisation
######################
633

634
IT_PROG_INTLTOOL(intltool_required_version)
635
AM_GLIB_GNU_GETTEXT
636

637
# Testing xgettext version since we had some problem with localizing script-fu. See bug 720052.
638 639 640
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; }'`
641 642 643 644 645

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

646
have_required_xgettext="no"
647
if test -n "$XGETTEXT_APPLIED_VERSION_MAJOR"; then
648 649 650
    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
651
        if test -n "$XGETTEXT_APPLIED_VERSION_MINOR_1"; then
652 653
            if test "$XGETTEXT_REQUIRED_VERSION_MINOR_1" -le "$XGETTEXT_APPLIED_VERSION_MINOR_1"; then
                have_required_xgettext="yes"
654 655 656 657
            fi
        fi
    fi
fi
658
AC_MSG_RESULT($have_required_xgettext)
659

660 661
if test "x$have_required_xgettext" = "xno"; then
    add_deps_error([xgettext], [xgettext >= xgettext_required_version])
662
fi
663

Sven Neumann's avatar
Sven Neumann committed
664 665 666 667
###########
# iso-codes
###########

668 669 670 671 672
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])
673
  ISO_CODES_PREFIX=`$PKG_CONFIG --variable=prefix iso-codes`
674 675 676 677 678 679 680 681 682
  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)


683 684 685
###############################
# Checks for required libraries
###############################
686

687 688
PKG_CHECK_MODULES(BABL, [babl >= babl_required_version],,
                  [add_deps_error([babl >= babl_required_version])])
689 690
PKG_CHECK_MODULES(GEGL, gegl-gegl_major_minor_version >= gegl_required_version,,
                  [add_deps_error([gegl-gegl_major_minor_version >= gegl_required_version])])
691 692
PKG_CHECK_MODULES(ATK, atk >= atk_required_version,,
                  [add_deps_error([atk >= atk_required_version])])
693

694 695 696 697 698 699 700 701 702
# 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],
703 704 705
                 [add_deps_error([glib >= glib_required_version],
                                 [Test for GLIB failed])],
                 gobject)
706

707 708
PKG_CHECK_MODULES(GMODULE_NO_EXPORT, gmodule-no-export-2.0,,
                  [add_deps_error([gmodule-no-export-2.0])])
709

710 711
PKG_CHECK_MODULES(GIO, gio-2.0,,
                  [add_deps_error([gio-2.0])])
712

713
if test "x$os_win32" = "xyes"; then
714 715
  PKG_CHECK_MODULES(GIO_WINDOWS, gio-windows-2.0,,
                    [add_deps_error([gio-windows-2.0])])
716
else
717 718
  PKG_CHECK_MODULES(GIO_UNIX, gio-unix-2.0,,
                    [add_deps_error([gio-unix-2.0])])
719 720
fi

721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747
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

748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765
# 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
766
fi
767 768
AC_MSG_RESULT($HOST_GLIB_COMPILE_RESOURCES)
AC_SUBST(HOST_GLIB_COMPILE_RESOURCES)
769

770 771
AC_PATH_PROG(GDBUS_CODEGEN, gdbus-codegen, no)
if test "x$GDBUS_CODEGEN" = xno; then
772
  add_deps_error([gdbus-codegen], [Could not find gdbus-codegen in your PATH.])
773 774
fi

775 776 777
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
778
else
779
  have_glib_2_57=no
780
fi
781
AC_MSG_RESULT($have_glib_2_57)
782

783 784
AC_PATH_PROG(GEGL, gegl, no)
if test "x$GEGL" = xno; then
785
  add_deps_error([gegl], [Could not find native gegl executable in your PATH.])
786 787
fi

788

789
# Check for bind_textdomain_codeset, including -lintl if GLib brings it in.
790 791
gimp_save_LIBS=$LIBS
LIBS="$LIBS $GLIB_LIBS"
792
AC_CHECK_FUNCS(bind_textdomain_codeset,,
793 794
  add_deps_error([bind_textdomain_codeset()],
                 [Check for bind_textdomain_codeset() failed! This is required.]))
795 796 797 798 799
LIBS=$gimp_save_LIBS


AC_PATH_XTRA

800 801
AM_PATH_GTK_3_0(gtk_required_version, :,
  add_deps_error([gtk+-3.0 >= gtk_required_version],
802
                 [Test for GTK+ failed.]))
Elliot Lee's avatar
Elliot Lee committed
803

804 805
AC_PATH_PROG(GTK_UPDATE_ICON_CACHE, gtk-update-icon-cache, no)
if test "x$GTK_UPDATE_ICON_CACHE" = xno; then
806 807
  add_deps_error([gtk-update-icon-cache],
                 [Could not find gtk-update-icon-cache in your PATH.])
808 809
fi

810 811
PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-2.0 >= gdk_pixbuf_required_version,,
                  [add_deps_error([gdk-pixbuf-2.0 >= gdk_pixbuf_required_version])])
812

813
AC_PATH_PROG(GDK_PIXBUF_CSOURCE, gdk-pixbuf-csource, no)
814
if test "x$GDK_PIXBUF_CSOURCE" = xno; then
815 816
  add_deps_error([gdk-pixbuf-csource],
                 [Could not find gdk-pixbuf-csource in your PATH.])
817 818
fi

819 820
PKG_CHECK_MODULES(CAIRO, cairo >= cairo_required_version,,
                  [add_deps_error([cairo >= cairo_required_version])])
821

822
PKG_CHECK_MODULES(PANGOCAIRO,
823 824 825
                  [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.])])
826

Martin Nordholts's avatar
Martin Nordholts committed
827
gimp_save_CFLAGS=$CFLAGS
828 829
CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS"

830
# Windows platform had a few bugs fixed in earlier fontconfig.
831 832 833 834 835
# 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).
836 837
PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= fontconfig_required_version,,
                  [add_deps_error([fontconfig >= fontconfig_required_version])])
838

839 840 841
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
842
else
843
  have_pango_1_43=no
844
fi
845
AC_MSG_RESULT($have_pango_1_43)
846

847
CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS"
848 849

AC_MSG_CHECKING([if Pango is built with a recent fontconfig])
850 851 852 853 854 855
AC_COMPILE_IFELSE(
  [AC_LANG_PROGRAM(
    [[#include <fontconfig/fontconfig.h>]],
    [[FcObjectSet *os; os = FcObjectSetBuild (FC_FAMILY, FC_WIDTH);]])],
  [fontconfig_ok=yes],
  [fontconfig_ok=no])
856 857 858 859 860 861 862
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
863
*** Pango library is using an older version. This old version is probably in
864
*** /usr/X11R6. Look at the above output, and note that the result for
865
*** FONTCONFIG_CFLAGS is not in the result for PANGOCAIRO_CFLAGS, and that
866 867 868 869 870 871 872
*** 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
873

874

875
PKG_CHECK_MODULES(FREETYPE, freetype2 >= freetype2_required_version,,
876
                  [add_deps_error([freetype2_required_version >= freetype2_required_version])])
877

878 879
PKG_CHECK_MODULES(HARFBUZZ, harfbuzz >= harfbuzz_required_version,,
                 [add_deps_error([harfbuzz >= harfbuzz_required_version])])
880

881 882
PKG_CHECK_MODULES(GEXIV2, gexiv2 >= gexiv2_required_version,,
                 [add_deps_error([gexiv2 >= gexiv2_required_version])])
883

884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908
#################################
# 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])

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

937 938 939 940
#####################
# Check for Dr. Mingw
#####################

941
enable_drmingw="no"
942 943 944
if test "x$platform_win32" = "xyes"; then
   # Check for Dr. Mingw
   AC_CHECK_LIB(exchndl, ExcHndlSetLogFileNameA,
945 946
                [
                 AC_DEFINE(HAVE_EXCHNDL, 1, [Define to 1 when Dr. MingW is available])
947
                 LIBS="-lexchndl $LIBS"
948 949 950 951
                 enable_drmingw="yes"
                ],
                [enable_drmingw="no (ExcHndl library missing)"]
               )
952 953 954
fi
AM_CONDITIONAL(HAVE_EXCHNDL, test "x$ac_cv_lib_exchndl_ExcHndlSetLogFileNameA" = "xyes")

955 956 957 958 959 960
###########################
# Check for backtrace() API
###########################

AC_CHECK_HEADERS([execinfo.h])

961 962 963
##########################################
# Check for some special functions we need
##########################################
Elliot Lee's avatar
Elliot Lee committed
964

David Neary's avatar
David Neary committed
965 966
AC_CHECK_HEADERS(math.h ieeefp.h)

967
# DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
Manish Singh's avatar
Manish Singh committed
968 969 970
AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
gimp_save_LIBS=$LIBS
LIBS="$LIBS -lm"
971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987
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()])
988

989
# Check for finite or isfinite
990 991
AC_CHECK_FUNCS(finite, , [
  AC_MSG_CHECKING(for finite in <math.h>)
992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006
  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)])])])
1007 1008 1009
AC_SUBST(HAVE_FINITE)
AC_SUBST(HAVE_ISFINITE)

1010 1011 1012
LIBS=$gimp_save_LIBS


1013
# check for rint
1014 1015 1016 1017 1018 1019
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
1020 1021 1022 1023 1024
# check for vfork
AC_CHECK_FUNCS(vfork, ,)
AC_SUBST(HAVE_VFORK)


1025 1026 1027 1028 1029 1030
##############################
# Check for attributes we need
##############################

AX_GCC_FUNC_ATTRIBUTE(destructor)

1031 1032 1033
#####################################################################
# Check for extra libs needed for getaddrinfo, getnameinfo and socket
#####################################################################
1034 1035 1036 1037

gimp_save_LIBS=$LIBS
LIBS=""

1038
AC_CHECK_FUNCS(getaddrinfo, , AC_CHECK_LIB(nsl, getaddrinfo))
1039
AC_CHECK_FUNCS(getnameinfo, , AC_CHECK_LIB(nsl, getnameinfo))
1040 1041 1042 1043 1044 1045 1046
AC_CHECK_LIB(socket, socket)

SOCKET_LIBS="$LIBS"
LIBS=$gimp_save_LIBS

AC_SUBST(SOCKET_LIBS)

1047 1048 1049 1050
###################################
# Check for Intel vector intrinsics
###################################
intrinsics_save_CFLAGS="$CFLAGS"
1051
#FIXME: Check the CFLAGS separately
1052 1053 1054 1055 1056 1057
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)
1058
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <emmintrin.h>]],[[__m128i one = _mm_set1_epi32 (1);]])],
1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072
  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)
1073
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <smmintrin.h>]],[[__v4sf a, b, c; c = _mm_blend_ps(a, b, 0x08);]])],
1074 1075 1076 1077 1078 1079 1080 1081 1082
  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"

1083

1084 1085 1086
########################
# Check for MMX assembly
########################
1087

1088 1089 1090 1091 1092 1093
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)],,
1094
  enable_sse=$enable_mmx)
1095 1096

if test "x$enable_mmx" = xyes; then
1097 1098
  GIMP_DETECT_CFLAGS(MMX_EXTRA_CFLAGS, '-mmmx')
  SSE_EXTRA_CFLAGS=
1099

1100
  AC_MSG_CHECKING(whether we can compile MMX code)
1101

1102 1103
  mmx_save_CFLAGS="$CFLAGS"
  CFLAGS="$mmx_save_CFLAGS $MMX_EXTRA_CFLAGS"
1104

1105
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movq 0, %mm0");]])],
1106

1107 1108 1109
    AC_DEFINE(USE_MMX, 1, [Define to 1 if MMX assembly is available.])
    AC_MSG_RESULT(yes)

1110
    if test "x$enable_sse" = xyes; then
1111 1112
      GIMP_DETECT_CFLAGS(sse_flag, '-msse')
      SSE_EXTRA_CFLAGS="$MMX_EXTRA_CFLAGS $sse_flag"
1113 1114 1115

      AC_MSG_CHECKING(whether we can compile SSE code)

1116 1117
      CFLAGS="$CFLAGS $sse_flag"

1118
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movntps %xmm0, 0");]])],
1119 1120
        AC_DEFINE(USE_SSE, 1, [Define to 1 if SSE assembly is available.])
        AC_MSG_RESULT(yes)
1121
      ,
1122 1123 1124
        enable_sse=no
        AC_MSG_RESULT(no)
        AC_MSG_WARN([The assembler does not support the SSE command set.])
1125
      )
1126

1127
    fi
1128
  ,
1129 1130
    enable_mmx=no
    AC_MSG_RESULT(no)
1131
    AC_MSG_WARN([The assembler does not support the MMX command set.])
1132
  )
1133

1134 1135 1136 1137
  CFLAGS="$mmx_save_CFLAGS"

  AC_SUBST(MMX_EXTRA_CFLAGS)
  AC_SUBST(SSE_EXTRA_CFLAGS)
1138
fi
1139

1140 1141

############################
1142
# Check for AltiVec assembly
1143 1144 1145
############################

AC_ARG_ENABLE(altivec,
1146
  [  --enable-altivec        enable AltiVec support (default=auto)],,
1147 1148 1149
  enable_altivec=$have_ppc)

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

1151
  GIMP_DETECT_CFLAGS(altivec_flag, '-faltivec' '-maltivec -mabi=altivec')
1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164

  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
1165
  AC_SUBST(ALTIVEC_EXTRA_CFLAGS)
1166

1167
  AC_MSG_CHECKING(whether we can compile AltiVec code)
1168

1169
  can_use_altivec=no
1170
  if test -z "$ALTIVEC_EXTRA_CFLAGS"; then
1171
    AC_MSG_RESULT(no)
Manish Singh's avatar
Manish Singh committed
1172
    AC_MSG_WARN([The compiler does not support the AltiVec command set.])
1173
  else
1174 1175
    case "$host_os" in
      darwin*)
1176 1177 1178 1179 1180
        can_use_altivec=yes
        AC_DEFINE(HAVE_ALTIVEC_SYSCTL, 1,
         [Define to 1 if the altivec runtime test should use a sysctl.])
        ;;
      *)
1181
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("vand %v0, %v0, %v0");]])],
1182 1183 1184 1185
          can_use_altivec=yes, can_use_altivec=no)
        ;;
    esac
    AC_MSG_RESULT($can_use_altivec)
1186

1187 1188 1189 1190 1191 1192 1193
    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
1194 1195

  enable_altivec="$can_use_altivec"
1196
fi
1197

1198

1199 1200 1201
###################################
# Checks for shared memory handling
###################################
1202

1203
# MacOS X has broken SysV shm
1204 1205
case "$host_os" in
  darwin* | rhapsody* | machten*)
1206
    shmdefault=posix
1207 1208 1209 1210 1211 1212 1213
    ;;
  *)
    shmdefault=sysv
    ;;
esac

shmtype=auto
1214
AC_ARG_WITH(shm, [  --with-shm=none|sysv|posix|auto    shared memory transport type (default=auto)], shmtype=$with_shm)
1215 1216

case $shmtype in
1217
  none|sysv|posix) ;;
1218
  auto) shmtype=$shmdefault ;;
1219
  *) AC_MSG_ERROR([Invalid shared memory transport type: use none, sysv, posix, or auto.]);;
1220 1221
esac

1222 1223 1224 1225

if test "x$platform_win32" = "xyes"; then
  shmtype=win32
elif test "x$shmtype" = "xsysv"; then
1226 1227
  AC_CHECK_HEADER(sys/ipc.h,
    [AC_DEFINE(HAVE_IPC_H, 1,
1228
               [Define to 1 if you have the <sys/ipc.h> header file.])],
1229 1230 1231 1232 1233
    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)
1234

1235 1236
  if test "$ac_cv_header_sys_shm_h" = "yes"; then
    AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches)
1237 1238
    AC_RUN_IFELSE(
      [AC_LANG_SOURCE([[
Elliot Lee's avatar
Elliot Lee committed
1239 1240 1241 1242 1243 1244 1245
	#include <sys/types.h>
	#include <sys/ipc.h>
	#include <sys/shm.h>
	int main()
	{
	  int id;
	  char *shmaddr;
1246
	id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0600);
Elliot Lee's avatar
Elliot Lee committed
1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259
	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);
	}
1260 1261 1262 1263 1264 1265
      ]])],
      [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)])
1266 1267 1268 1269 1270 1271

    AC_DEFINE(USE_SYSV_SHM, 1, [Define to 1 to use SYSV shared memory])
  else
    shmtype=none
  fi
elif test "x$shmtype" = "xposix"; then
1272 1273 1274 1275 1276 1277
  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
1278
    AC_CHECK_LIB(rt, shm_open, RT_LIBS="-lrt" have_shm_open=yes)
1279 1280
  fi
  AC_SUBST(RT_LIBS)
1281 1282 1283

  AC_CHECK_HEADER(sys/mman.h,
    [AC_DEFINE(HAVE_MMAN_H, 1,
1284
               [Define to 1 if you have the <sys/mman.h> header file.])],
1285 1286 1287
    no_sys_mman=yes)

  if test "$ac_cv_func_mmap" = "yes" &&
1288 1289
     test "$ac_cv_header_sys_mman_h" = "yes" &&
     test "$have_shm_open" = "yes"; then
1290 1291 1292
    AC_DEFINE(USE_POSIX_SHM, 1, [Define to 1 to use POSIX shared memory])
  else
    shmtype=none
1293
  fi
Elliot Lee's avatar
Elliot Lee committed
1294 1295
fi

1296 1297
AC_MSG_CHECKING(for shared memory transport type)
AC_MSG_RESULT($shmtype)
1298

1299

1300 1301 1302 1303 1304 1305
########################
# Define a symbol prefix
########################

AC_MSG_CHECKING([whether symbols are prefixed])

1306 1307
case "$host_os" in
  mingw*)
1308 1309 1310 1311
    case "$host_cpu" in 
	  x86_64) SYMPREFIX='' ;;
	  *) SYMPREFIX='_' ;;
	esac
1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328
    ;;
  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)


1329 1330 1331
############################
# Check for select and fdset
############################
Elliot Lee's avatar
Elliot Lee committed
1332

1333
if test "x$os_win32" != xyes; then
1334
  AC_MSG_CHECKING([fd_set and sys/select])
1335 1336 1337 1338 1339 1340
  AC_COMPILE_IFELSE(
    [AC_LANG_PROGRAM(
      [[#include <sys/types.h>]],
      [[fd_set readMask, writeMask;]])],
    [gimp_ok=yes],
    [gimp_ok=no])
1341
  if test "x$gimp_ok" = xno; then
1342
      AC_EGREP_HEADER(fd_mask, sys/select.h, gimp_ok=yes)
1343
      if test "x$gimp_ok" = xyes; then
1344 1345 1346 1347 1348
	  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)
1349
  if test "x$gimp_ok" = xno; then
1350 1351 1352
      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
1353 1354
fi

1355

1356
#############################
1357
# Threads and multi processor
1358
#############################
1359

1360
AC_ARG_ENABLE(mp, [  --disable-mp            disable support for multiple processors])
1361

1362
if test "x$enable_mp" != "xno"; then
1363 1364
  AC_DEFINE(ENABLE_MP, 1,
	    [Define to 1 to enable support for multiple processors.])
Sven Neumann's avatar
Sven Neumann committed
1365 1366
fi

1367

1368 1369 1370
################################
# Some plug-ins are X11 specific
################################
Sven Neumann's avatar
Sven Neumann committed
1371

1372
# Check if building for GTK+-X11
1373 1374
GTK_CHECK_BACKEND([x11], [gtk_required_version],
                  [have_gtk_x11=yes], [have_gtk_x11=no])
1375

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

1378
if test "x$have_gtk_x11" = "xyes"; then
1379

1380
   # doc-shooter is X11 specific
1381 1382
   DOC_SHOOTER=doc-shooter

1383
   # screenshot plug-in needs to link to X11 explicitly
1384
   SCREENSHOT_LIBS="$X_LIBS -lX11"
1385

1386 1387 1388 1389 1390
   gimp_save_CFLAGS="$CFLAGS"
   gimp_save_LDFLAGS="$LDFLAGS"
   CFLAGS="$CFLAGS $GTK_CFLAGS"
   LDFLAGS="$LDFLAGS $X_LIBS"

1391
   # Test for Xmu
1392
   if test -z "$XMU_LIBS"; then
Sven Neumann's avatar
Sven Neumann committed
1393
      AC_CHECK_LIB(Xmu, XmuClientWindow,
1394
        [AC_CHECK_HEADERS(X11/Xmu/WinUtil.h,
1395
	  have_libxmu=yes
1396 1397
          XMU_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXmu -lXt"
          SCREENSHOT_LIBS="$XMU_LIBS",
1398 1399
	  [have_libxmu="no (XMU header file not found)"],[#include <gdk/gdkx.h>])],
	[have_libxmu="no (XMU library not found)"], -lXt -lX11)
1400
   fi
1401

1402
   # Check for shaped window extension
1403 1404
   AC_CHECK_LIB(Xext, XShapeGetRectangles,
     [AC_CHECK_HEADERS(X11/extensions/shape.h,
1405
        SCREENSHOT_LIBS="$SCREENSHOT_LIBS -lXext",,[#include <gdk/gdkx.h>])],,
1406 1407 1408 1409
     -lX11 -lXext)

   CFLAGS="$gimp_save_CFLAGS"
   LDFLAGS="$gimp_save_LDFLAGS"
1410

1411
   # check for the XFixes extension
1412 1413 1414
   PKG_CHECK_MODULES(XFIXES, xfixes,
      AC_DEFINE(HAVE_XFIXES, 1,
                [Define to 1 to if the XFIXES X extension is available])
1415
      SCREENSHOT_LIBS="$SCREENSHOT_LIBS $XFIXES_LIBS",
1416
      true)
1417
fi
Sven Neumann's avatar
Sven Neumann committed
1418

1419 1420
AC_SUBST(XMU_LIBS)
AC_SUBST(SCREENSHOT_LIBS)
1421

1422
AC_SUBST(DOC_SHOOTER)
1423

1424

1425
GIMP_COMMAND='gimp-gimp_app_version'
1426

1427 1428
AC_SUBST(GIMP_COMMAND)

1429

1430 1431 1432 1433 1434 1435
############
# MIME types
############

# The list of MIME types that are supported by plug-ins that are compiled
# unconditionally:
1436
MIME_TYPES="image/bmp;image/g3fax;image/gif;image/x-fits;image/x-pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/x-gimp-gbr;image/x-gimp-pat;image/x-gimp-gih"
1437

1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466
#################
# Bundle packages
#################

AC_MSG_CHECKING([whether we build a relocatable package])
AC_ARG_ENABLE(relocatable-bundle,
              [  --enable-relocatable-bundle
                          build with resources considered bundled under the same prefix
                          (default=auto)],,
              enable_relocatable_bundle=auto)

if test "x$enable_relocatable_bundle" != xno &&
   test "x$enable_relocatable_bundle" != xyes; then
  # By default, assume building for Windows or macOS everything to be on
  # the same prefix and can be relocated.
  # On other platforms, build-time paths are meaningful.
  if test "x$platform_osx" = "xyes" ||
     test "x$platform_win32" = "xyes"; then
     enable_relocatable_bundle=yes
  else
     enable_relocatable_bundle=no
  fi
fi
if test "x$enable_relocatable_bundle" = xyes; then
  AC_DEFINE(ENABLE_RELOCATABLE_RESOURCES, 1,
            [Define to 1 if resources are considered bundled under the same prefix])
fi

AC_MSG_RESULT([$enable_relocatable_bundle])
1467

1468 1469 1470