configure.ac 86.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
# 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])
m4_define([gimp_minor_version], [10])
14
m4_define([gimp_micro_version], [5])
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], [5])
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
m4_define([gimp_binary_age],
          [m4_eval(100 * gimp_minor_version + gimp_micro_version)])

# For overriding the version string. Comment out if not needed.
# m4_define([gimp_version], [2.10.0])

# This is the X.Y used in -lgimp-X.Y
m4_define([gimp_api_version], [2.0])

# Versions used for apps, plugins, tools, pkg-config files, and data,
# as well as global and user prefs
m4_define([gimp_app_version], [2.10])
m4_define([gimp_plugin_version], [2.0])
m4_define([gimp_tool_version], [2.0])
m4_define([gimp_pkgconfig_version], [2.0])
m4_define([gimp_data_version], [2.0])
m4_define([gimp_sysconf_version], [2.0])
m4_define([gimp_user_version], [2.10])

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
m4_define([babl_required_version], [0.1.52])
47
m4_define([gegl_major_minor_version], [0.4])
48
m4_define([gegl_micro_version], [5])
49 50
m4_define([gegl_required_version],
          [gegl_major_minor_version.gegl_micro_version])
51
m4_define([glib_required_version], [2.54.2])
52 53
m4_define([atk_required_version], [2.2.0])
m4_define([gtk_required_version], [2.24.10])
54
m4_define([gtk_win32_recommended_version], [2.24.32])
55
m4_define([gdk_pixbuf_required_version], [2.30.8])
56 57
m4_define([cairo_required_version], [1.12.2])
m4_define([cairo_pdf_required_version], [1.12.2])
58
m4_define([pangocairo_required_version], [1.29.4])
59
m4_define([fontconfig_required_version], [2.12.4])
60
m4_define([freetype2_required_version], [2.1.7])
61
m4_define([harfbuzz_required_version], [0.9.19])
62
m4_define([gtkdoc_required_version], [1.0])
63
m4_define([webkit_required_version], [1.6.1])
64
m4_define([alsa_required_version], [1.0.0])
65
m4_define([rsvg_required_version], [2.40.6])
66
m4_define([wmf_required_version], [0.2.8])
67
m4_define([pygtk_required_version], [2.10.4])
68
m4_define([pycairo_required_version], [1.0.2])
69
m4_define([poppler_required_version], [0.44.0])
70
m4_define([poppler_data_required_version], [0.4.7])
71
m4_define([libgudev_required_version], [167])
72
m4_define([gexiv2_required_version], [0.10.6])
73
m4_define([libmypaint_required_version], [1.3.0])
74
m4_define([lcms_required_version], [2.8])
75
m4_define([libpng_required_version], [1.6.25])
76
m4_define([liblzma_required_version], [5.0.0])
77
m4_define([openexr_required_version], [1.6.1])
78
m4_define([openjpeg_required_version], [2.1.0])
79
m4_define([gtk_mac_integration_required_version], [2.0.0])
80
m4_define([intltool_required_version], [0.40.1])
81
m4_define([perl_required_version], [5.10.0])
82
m4_define([python2_required_version], [2.5.0])
83
m4_define([webp_required_version], [0.6.0])
84
m4_define([libheif_required_version], [1.1.0])
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 148
# These are used in the .pc files
GLIB_REQUIRED_VERSION=glib_required_version
149
GDK_PIXBUF_REQUIRED_VERSION=gdk_pixbuf_required_version
150
GTK_REQUIRED_VERSION=gtk_required_version
151
GTK_WIN32_RECOMMENDED_VERSION=gtk_win32_recommended_version
152
CAIRO_REQUIRED_VERSION=cairo_required_version
153
CAIRO_PDF_REQUIRED_VERSION=cairo_pdf_required_version
154
GEGL_MAJOR_MINOR_VERSION=gegl_major_minor_version
155
GEGL_REQUIRED_VERSION=gegl_required_version
156
GEXIV2_REQUIRED_VERSION=gexiv2_required_version
157 158 159
LCMS_REQUIRED_VERSION=lcms_required_version
LIBPNG_REQUIRED_VERSION=libpng_required_version
LIBLZMA_REQUIRED_VERSION=liblzma_required_version
160
LIBMYPAINT_REQUIRED_VERSION=libmypaint_required_version
161 162 163 164
PANGOCAIRO_REQUIRED_VERSION=pangocairo_required_version
BABL_REQUIRED_VERSION=babl_required_version
FONTCONFIG_REQUIRED_VERSION=fontconfig_required_version
FREETYPE2_REQUIRED_VERSION=freetype2_required_version
165
HARFBUZZ_REQUIRED_VERSION=harfbuzz_required_version
166
WEBKIT_REQUIRED_VERSION=webkit_required_version
167
ATK_REQUIRED_VERSION=atk_required_version
168 169 170
RSVG_REQUIRED_VERSION=rsvg_required_version
WMF_REQUIRED_VERSION=wmf_required_version
POPPLER_REQUIRED_VERSION=poppler_required_version
171
POPPLER_DATA_REQUIRED_VERSION=poppler_data_required_version
172
OPENEXR_REQUIRED_VERSION=openexr_required_version
173
INTLTOOL_REQUIRED_VERSION=intltool_required_version
174
PERL_REQUIRED_VERSION=perl_required_version
175
PYTHON2_REQUIRED_VERSION=python2_required_version
176
WEBP_REQUIRED_VERSION=webp_required_version
177
LIBHEIF_REQUIRED_VERSION=libheif_required_version
178
XGETTEXT_REQUIRED_VERSION=xgettext_required_version
179
AC_SUBST(GLIB_REQUIRED_VERSION)
180
AC_SUBST(GDK_PIXBUF_REQUIRED_VERSION)
181
AC_SUBST(GTK_REQUIRED_VERSION)
182
AC_SUBST(GTK_WIN32_RECOMMENDED_VERSION)
183
AC_SUBST(CAIRO_REQUIRED_VERSION)
184
AC_SUBST(CAIRO_PDF_REQUIRED_VERSION)
185
AC_SUBST(GEGL_MAJOR_MINOR_VERSION)
186
AC_SUBST(GEGL_REQUIRED_VERSION)
187
AC_SUBST(GEXIV2_REQUIRED_VERSION)
188 189 190
AC_SUBST(LCMS_REQUIRED_VERSION)
AC_SUBST(LIBPNG_REQUIRED_VERSION)
AC_SUBST(LIBLZMA_REQUIRED_VERSION)
191
AC_SUBST(LIBMYPAINT_REQUIRED_VERSION)
192 193 194 195
AC_SUBST(PANGOCAIRO_REQUIRED_VERSION)
AC_SUBST(BABL_REQUIRED_VERSION)
AC_SUBST(FONTCONFIG_REQUIRED_VERSION)
AC_SUBST(FREETYPE2_REQUIRED_VERSION)
196
AC_SUBST(HARFBUZZ_REQUIRED_VERSION)
197
AC_SUBST(WEBKIT_REQUIRED_VERSION)
198
AC_SUBST(ATK_REQUIRED_VERSION)
199 200 201
AC_SUBST(RSVG_REQUIRED_VERSION)
AC_SUBST(WMF_REQUIRED_VERSION)
AC_SUBST(POPPLER_REQUIRED_VERSION)
202
AC_SUBST(POPPLER_DATA_REQUIRED_VERSION)
203
AC_SUBST(OPENEXR_REQUIRED_VERSION)
204
AC_SUBST(INTLTOOL_REQUIRED_VERSION)
205
AC_SUBST(PERL_REQUIRED_VERSION)
206
AC_SUBST(PYTHON2_REQUIRED_VERSION)
207
AC_SUBST(WEBP_REQUIRED_VERSION)
208
AC_SUBST(LIBHEIF_REQUIRED_VERSION)
209
AC_SUBST(XGETTEXT_REQUIRED_VERSION)
210 211 212 213

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

220 221

# libtool versioning
222
m4_define([lt_current], [m4_eval(100 * gimp_minor_version + gimp_micro_version - gimp_interface_age)])
223 224 225 226 227
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)
228 229
AC_SUBST(LT_CURRENT_MINUS_AGE)

230

231
# gettext i18n support
232 233 234 235
GETTEXT_PACKAGE=gimp20
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
                   [The prefix for our gettext translation domains.])
236

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

242 243
# Determine a C compiler to use
AC_PROG_CC
244
AX_PROG_CC_FOR_BUILD
245 246 247 248 249
# 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
250
AM_PROG_CC_C_O
Manish Singh's avatar
Manish Singh committed
251

252 253
# Determine a C++ compiler to use
AC_PROG_CXX
254
AX_CXX_COMPILE_STDCXX([14], , [mandatory])
255

256
# Initialize libtool
257 258
LT_PREREQ([2.2])
LT_INIT([disable-static win32-dll])
Elliot Lee's avatar
Elliot Lee committed
259

260
AM_PROG_AS
Elliot Lee's avatar
Elliot Lee committed
261

262
# Initialize maintainer mode
263
AM_MAINTAINER_MODE([enable])
264

265 266 267 268
# Check for pkg-config
PKG_PROG_PKG_CONFIG(0.16)


269 270 271 272 273 274 275 276
#########################
# Check host architecture
#########################

AC_CANONICAL_HOST

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

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


308 309 310
#################
# Check for Win32
#################
311

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

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

if test "$os_win32" = "yes"; then
  AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
Manish Singh's avatar
Manish Singh committed
352
  AC_CHECK_TOOL(WINDRES, windres, :)
353 354
else
  WINDRES=":"
355
fi
Manish Singh's avatar
Manish Singh committed
356

357
AM_CONDITIONAL(MS_LIB_AVAILABLE, test "x$ms_librarian" = xyes)
358
AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:")
Manish Singh's avatar
Manish Singh committed
359 360

AC_SUBST(WINDRES)
361

362

363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381
####################
# 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)


382 383 384 385
###############
# Generic stuff
###############

386
# Checks for programs.
387 388
AC_PROG_INSTALL
AC_PROG_MAKE_SET
389
AC_PROG_LN_S
390

391
# Large file support for the swap file
392
AC_SYS_LARGEFILE
393

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

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

422
AC_ARG_ENABLE(ansi,
423
              [  --enable-ansi           turn on strict ansi (default=no)],,
424
              enable_ansi=no)
425

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

433 434 435 436 437
  if test "x$enable_ansi" = "xyes"; then
    case " $CFLAGS " in
    *[\ \	]-ansi[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -ansi" ;;
    esac
438

439 440 441 442
    case " $CFLAGS " in
    *[\ \	]-pedantic[\ \	]*) ;;
    *) CFLAGS="$CFLAGS -pedantic" ;;
    esac
Elliot Lee's avatar
Elliot Lee committed
443 444
  fi
fi
445
changequote([,])dnl
Elliot Lee's avatar
Elliot Lee committed
446

447

448
# If possible, warn if C99isms are used
449 450 451
GIMP_DETECT_CFLAGS(extra_warnings, '-Wdeclaration-after-statement')
CFLAGS="$CFLAGS $extra_warnings"

452
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-prototypes')
453 454 455 456 457
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.
458
#
459 460
GIMP_DETECT_CFLAGS(extra_warnings, '-Werror=missing-prototypes')
CFLAGS="$CFLAGS $extra_warnings"
461

462 463 464
GIMP_DETECT_CFLAGS(extra_warnings, '-Wstrict-prototypes')
CFLAGS="$CFLAGS $extra_warnings"

465 466 467
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-declarations')
CFLAGS="$CFLAGS $extra_warnings"

468 469 470 471 472
GIMP_DETECT_CFLAGS(extra_warnings, '-Winit-self')
CFLAGS="$CFLAGS $extra_warnings"

GIMP_DETECT_CFLAGS(extra_warnings, '-Wpointer-arith')
CFLAGS="$CFLAGS $extra_warnings"
473 474 475

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

477 478 479
GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-format-attribute')
CFLAGS="$CFLAGS $extra_warnings"

480 481 482
GIMP_DETECT_CFLAGS(extra_warnings, '-Wformat-security')
CFLAGS="$CFLAGS $extra_warnings"

483 484 485 486 487 488
GIMP_DETECT_CFLAGS(extra_warnings, '-Wlogical-op')
CFLAGS="$CFLAGS $extra_warnings"

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

489 490 491
GIMP_DETECT_CFLAGS(extra_warnings, '-fno-common')
CFLAGS="$CFLAGS $extra_warnings"

492 493 494
GIMP_DETECT_CFLAGS(extra_warnings, '-fdiagnostics-show-option')
CFLAGS="$CFLAGS $extra_warnings"

495 496 497 498 499 500
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.
501 502 503 504
# 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"
505

506 507 508 509 510 511 512 513
# 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"


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

549 550 551 552 553 554 555 556 557
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
558 559 560 561 562 563 564 565 566 567 568 569 570 571 572
  # 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
573
fi
574
AC_SUBST(CC_VERSION)
575

576 577 578 579
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_TIME

580
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)
581
AC_CHECK_FUNCS(backtrace, , AC_CHECK_LIB(execinfo, backtrace))
582 583 584 585 586 587

AC_TYPE_PID_T
AC_FUNC_VPRINTF

AC_FUNC_ALLOCA

588
# check some more funcs
Sven Neumann's avatar
Sven Neumann committed
589
AC_CHECK_FUNCS(fsync)
590
AC_CHECK_FUNCS(difftime mmap)
591
AC_CHECK_FUNCS(thr_self)
592

Sven Neumann's avatar
Sven Neumann committed
593

594 595
AM_BINRELOC

596

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

611 612 613 614 615 616 617 618 619 620 621 622 623 624
# 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"])])
625

626 627 628
######################
# Internationalisation
######################
629

630
IT_PROG_INTLTOOL(intltool_required_version)
631
AM_GLIB_GNU_GETTEXT
632

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

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

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

656 657
if test "x$have_required_xgettext" = "xno"; then
    add_deps_error([xgettext], [xgettext >= xgettext_required_version])
658
fi
659

Sven Neumann's avatar
Sven Neumann committed
660 661 662 663
###########
# iso-codes
###########

664 665 666 667 668
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])
669
  ISO_CODES_PREFIX=`$PKG_CONFIG --variable=prefix iso-codes`
670 671 672 673 674 675 676 677 678
  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)


679 680 681
###############################
# Checks for required libraries
###############################
682

683 684
PKG_CHECK_MODULES(BABL, [babl >= babl_required_version],,
                  [add_deps_error([babl >= babl_required_version])])
685 686
PKG_CHECK_MODULES(GEGL, gegl-gegl_major_minor_version >= gegl_required_version,,
                  [add_deps_error([gegl-gegl_major_minor_version >= gegl_required_version])])
687 688
PKG_CHECK_MODULES(ATK, atk >= atk_required_version,,
                  [add_deps_error([atk >= atk_required_version])])
689

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

703 704
PKG_CHECK_MODULES(GMODULE_NO_EXPORT, gmodule-no-export-2.0,,
                  [add_deps_error([gmodule-no-export-2.0])])
705

706 707
PKG_CHECK_MODULES(GIO, gio-2.0,,
                  [add_deps_error([gio-2.0])])
708

709
if test "x$os_win32" = "xyes"; then
710 711
  PKG_CHECK_MODULES(GIO_WINDOWS, gio-windows-2.0,,
                    [add_deps_error([gio-windows-2.0])])
712
else
713 714
  PKG_CHECK_MODULES(GIO_UNIX, gio-unix-2.0,,
                    [add_deps_error([gio-unix-2.0])])
715 716
fi

717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743
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

744 745
AC_PATH_PROG(GLIB_COMPILE_RESOURCES, glib-compile-resources, no)
if test "x$GLIB_COMPILE_RESOURCES" = xno; then
746 747
  add_deps_error([glib-compile-resources],
                 [Could not find glib-compile-resources in your PATH.])
748 749
fi

750 751
AC_PATH_PROG(GDBUS_CODEGEN, gdbus-codegen, no)
if test "x$GDBUS_CODEGEN" = xno; then
752
  add_deps_error([gdbus-codegen], [Could not find gdbus-codegen in your PATH.])
753 754
fi

755 756 757
AC_MSG_CHECKING([if GLib is version 2.43.0 or newer])
if $PKG_CONFIG --atleast-version=2.43.0 glib-2.0; then
  have_glib_2_43=yes
758
else
759
  have_glib_2_43=no
760
fi
761
AC_MSG_RESULT($have_glib_2_43)
762

763 764
AC_PATH_PROG(GEGL, gegl, no)
if test "x$GEGL" = xno; then
765
  add_deps_error([gegl], [Could not find native gegl executable in your PATH.])
766 767
fi

768

769
# Check for bind_textdomain_codeset, including -lintl if GLib brings it in.
770 771
gimp_save_LIBS=$LIBS
LIBS="$LIBS $GLIB_LIBS"
772
AC_CHECK_FUNCS(bind_textdomain_codeset,,
773 774
  add_deps_error([bind_textdomain_codeset()],
                 [Check for bind_textdomain_codeset() failed! This is required.]))
775 776 777 778 779
LIBS=$gimp_save_LIBS


AC_PATH_XTRA

780
AM_PATH_GTK_2_0(gtk_required_version, :,
781 782
  add_deps_error([gtk+-2.0 >= gtk_required_version],
                 [Test for GTK+ failed.]))
Elliot Lee's avatar
Elliot Lee committed
783

784 785
AC_PATH_PROG(GTK_UPDATE_ICON_CACHE, gtk-update-icon-cache, no)
if test "x$GTK_UPDATE_ICON_CACHE" = xno; then
786 787
  add_deps_error([gtk-update-icon-cache],
                 [Could not find gtk-update-icon-cache in your PATH.])
788 789
fi

790 791 792 793 794
# GTK+ 2.26.0 will never be released, we keep the check around anyway
# because we will need it again after the switch to GTK+ 3.x
AC_MSG_CHECKING([if GTK+ is version 2.26.0 or newer (bogus placeholder check)])
if $PKG_CONFIG --atleast-version=2.26.0 gtk+-2.0; then
  have_gtk_2_26=yes
795
else
796
  have_gtk_2_26=no
797
fi
798
AC_MSG_RESULT($have_gtk_2_26)
799

800 801 802 803 804
# Windows platform have a few bugs with GTK+ < 2.24.32.
# In particular: broken shortcuts on non-latin locales.
# Also SVG icons will be broken, hence --enable-vector-icons cannot be used.
# Display a warning when necessary.
# See bugs 769550 and 781020.
805 806
have_recommended_gtk=""
if test "x$platform_win32" = "xyes"; then
807
    PKG_CHECK_MODULES(RECOMMENDED_WIN32_GTK, gtk+-2.0 >= gtk_win32_recommended_version,
808 809 810 811 812 813
                      have_recommended_gtk="yes", have_recommended_gtk="no")

    if test "x$have_recommended_gtk" = xno; then
        have_recommended_gtk="
WARNING: Your GTK+ version is `$PKG_CONFIG --modversion gtk+-2.0`.
         The recommended GTK+ version under Windows is $GTK_WIN32_RECOMMENDED_VERSION or over.
814 815
         If you continue without updating GTK+, shortcuts won't work with
         non-latin locales, and vector icons will be disabled."
816 817 818 819 820
    else
        have_recommended_gtk=""
    fi
fi

821 822
PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-2.0 >= gdk_pixbuf_required_version,,
                  [add_deps_error([gdk-pixbuf-2.0 >= gdk_pixbuf_required_version])])
823

824
AC_PATH_PROG(GDK_PIXBUF_CSOURCE, gdk-pixbuf-csource, no)
825
if test "x$GDK_PIXBUF_CSOURCE" = xno; then
826 827
  add_deps_error([gdk-pixbuf-csource],
                 [Could not find gdk-pixbuf-csource in your PATH.])
828 829
fi

830 831
PKG_CHECK_MODULES(CAIRO, cairo >= cairo_required_version,,
                  [add_deps_error([cairo >= cairo_required_version])])
832

833
PKG_CHECK_MODULES(PANGOCAIRO,
834 835 836
                  [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.])])
837

Martin Nordholts's avatar
Martin Nordholts committed
838
gimp_save_CFLAGS=$CFLAGS
839 840
CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS"

841
# Windows platform had a few bugs fixed in earlier fontconfig.
842 843 844 845 846
# 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).
847 848
PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= fontconfig_required_version,,
                  [add_deps_error([fontconfig >= fontconfig_required_version])])
849

850 851 852
AC_MSG_CHECKING([if Pango is version 1.32.0 or newer])
if $PKG_CONFIG --atleast-version=1.32.0 pango; then
  have_pango_1_32=yes
853
else
854
  have_pango_1_32=no
855
fi
856
AC_MSG_RESULT($have_pango_1_32)
857

858
CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS"
859 860

AC_MSG_CHECKING([if Pango is built with a recent fontconfig])
861 862 863 864 865 866
AC_COMPILE_IFELSE(
  [AC_LANG_PROGRAM(
    [[#include <fontconfig/fontconfig.h>]],
    [[FcObjectSet *os; os = FcObjectSetBuild (FC_FAMILY, FC_WIDTH);]])],
  [fontconfig_ok=yes],
  [fontconfig_ok=no])
867 868 869 870 871 872 873
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
874
*** Pango library is using an older version. This old version is probably in
875
*** /usr/X11R6. Look at the above output, and note that the result for
876
*** FONTCONFIG_CFLAGS is not in the result for PANGOCAIRO_CFLAGS, and that
877 878 879 880 881 882 883
*** 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
884

885

886
PKG_CHECK_MODULES(FREETYPE, freetype2 >= freetype2_required_version,,
887
                  [add_deps_error([freetype2_required_version >= freetype2_required_version])])
888

889 890
PKG_CHECK_MODULES(HARFBUZZ, harfbuzz >= harfbuzz_required_version,,
                 [add_deps_error([harfbuzz >= harfbuzz_required_version])])
891

892 893
PKG_CHECK_MODULES(GEXIV2, gexiv2 >= gexiv2_required_version,,
                 [add_deps_error([gexiv2 >= gexiv2_required_version])])
894

895 896 897 898
#####################
# Check for Dr. Mingw
#####################

899
enable_drmingw="no"
900 901 902
if test "x$platform_win32" = "xyes"; then
   # Check for Dr. Mingw
   AC_CHECK_LIB(exchndl, ExcHndlSetLogFileNameA,
903 904
                [
                 AC_DEFINE(HAVE_EXCHNDL, 1, [Define to 1 when Dr. MingW is available])
905
                 LIBS="-lexchndl $LIBS"
906 907 908 909
                 enable_drmingw="yes"
                ],
                [enable_drmingw="no (ExcHndl library missing)"]
               )
910 911 912
fi
AM_CONDITIONAL(HAVE_EXCHNDL, test "x$ac_cv_lib_exchndl_ExcHndlSetLogFileNameA" = "xyes")

913 914 915 916 917 918
###########################
# Check for backtrace() API
###########################

AC_CHECK_HEADERS([execinfo.h])

919 920 921
##########################################
# Check for some special functions we need
##########################################
Elliot Lee's avatar
Elliot Lee committed
922

David Neary's avatar
David Neary committed
923 924
AC_CHECK_HEADERS(math.h ieeefp.h)

925
# DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
Manish Singh's avatar
Manish Singh committed
926 927 928
AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
gimp_save_LIBS=$LIBS
LIBS="$LIBS -lm"
929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945
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()])
946

947
# Check for finite or isfinite
948 949
AC_CHECK_FUNCS(finite, , [
  AC_MSG_CHECKING(for finite in <math.h>)
950 951 952 953 954 955 956 957 958 959 960 961 962 963 964
  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)])])])
965 966 967
AC_SUBST(HAVE_FINITE)
AC_SUBST(HAVE_ISFINITE)

968 969 970
LIBS=$gimp_save_LIBS


971
# check for rint
972 973 974 975 976 977
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
978 979 980 981 982
# check for vfork
AC_CHECK_FUNCS(vfork, ,)
AC_SUBST(HAVE_VFORK)


983 984 985 986 987 988
##############################
# Check for attributes we need
##############################

AX_GCC_FUNC_ATTRIBUTE(destructor)

989 990 991
#####################################################################
# Check for extra libs needed for getaddrinfo, getnameinfo and socket
#####################################################################
992 993 994 995

gimp_save_LIBS=$LIBS
LIBS=""

996
AC_CHECK_FUNCS(getaddrinfo, , AC_CHECK_LIB(nsl, getaddrinfo))
997
AC_CHECK_FUNCS(getnameinfo, , AC_CHECK_LIB(nsl, getnameinfo))
998 999 1000 1001 1002 1003 1004
AC_CHECK_LIB(socket, socket)

SOCKET_LIBS="$LIBS"
LIBS=$gimp_save_LIBS

AC_SUBST(SOCKET_LIBS)

1005 1006 1007 1008
###################################
# Check for Intel vector intrinsics
###################################
intrinsics_save_CFLAGS="$CFLAGS"
1009
#FIXME: Check the CFLAGS separately
1010 1011 1012 1013 1014 1015
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)
1016
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <emmintrin.h>]],[[__m128i one = _mm_set1_epi32 (1);]])],
1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030
  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)
1031
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <smmintrin.h>]],[[__v4sf a, b, c; c = _mm_blend_ps(a, b, 0x08);]])],
1032 1033 1034 1035 1036 1037 1038 1039 1040
  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"

1041

1042 1043 1044
########################
# Check for MMX assembly
########################
1045

1046 1047 1048 1049 1050 1051
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)],,
1052
  enable_sse=$enable_mmx)
1053 1054

if test "x$enable_mmx" = xyes; then
1055 1056
  GIMP_DETECT_CFLAGS(MMX_EXTRA_CFLAGS, '-mmmx')
  SSE_EXTRA_CFLAGS=
1057

1058
  AC_MSG_CHECKING(whether we can compile MMX code)
1059

1060 1061
  mmx_save_CFLAGS="$CFLAGS"
  CFLAGS="$mmx_save_CFLAGS $MMX_EXTRA_CFLAGS"
1062

1063
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movq 0, %mm0");]])],
1064

1065 1066 1067
    AC_DEFINE(USE_MMX, 1, [Define to 1 if MMX assembly is available.])
    AC_MSG_RESULT(yes)

1068
    if test "x$enable_sse" = xyes; then
1069 1070
      GIMP_DETECT_CFLAGS(sse_flag, '-msse')
      SSE_EXTRA_CFLAGS="$MMX_EXTRA_CFLAGS $sse_flag"
1071 1072 1073

      AC_MSG_CHECKING(whether we can compile SSE code)

1074 1075
      CFLAGS="$CFLAGS $sse_flag"

1076
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movntps %xmm0, 0");]])],
1077 1078
        AC_DEFINE(USE_SSE, 1, [Define to 1 if SSE assembly is available.])
        AC_MSG_RESULT(yes)
1079
      ,
1080 1081 1082
        enable_sse=no
        AC_MSG_RESULT(no)
        AC_MSG_WARN([The assembler does not support the SSE command set.])
1083
      )
1084

1085
    fi
1086
  ,
1087 1088
    enable_mmx=no
    AC_MSG_RESULT(no)
1089
    AC_MSG_WARN([The assembler does not support the MMX command set.])
1090
  )
1091

1092 1093 1094 1095
  CFLAGS="$mmx_save_CFLAGS"

  AC_SUBST(MMX_EXTRA_CFLAGS)
  AC_SUBST(SSE_EXTRA_CFLAGS)
1096
fi
1097

1098 1099

############################
1100
# Check for AltiVec assembly
1101 1102 1103
############################

AC_ARG_ENABLE(altivec,
1104
  [  --enable-altivec        enable AltiVec support (default=auto)],,
1105 1106 1107
  enable_altivec=$have_ppc)

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

1109
  GIMP_DETECT_CFLAGS(altivec_flag, '-faltivec' '-maltivec -mabi=altivec')
1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122

  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
1123
  AC_SUBST(ALTIVEC_EXTRA_CFLAGS)
1124

1125
  AC_MSG_CHECKING(whether we can compile AltiVec code)
1126

1127
  can_use_altivec=no
1128
  if test -z "$ALTIVEC_EXTRA_CFLAGS"; then
1129
    AC_MSG_RESULT(no)
Manish Singh's avatar
Manish Singh committed
1130
    AC_MSG_WARN([The compiler does not support the AltiVec command set.])
1131
  else
1132 1133
    case "$host_os" in
      darwin*)
1134 1135 1136 1137 1138
        can_use_altivec=yes
        AC_DEFINE(HAVE_ALTIVEC_SYSCTL, 1,
         [Define to 1 if the altivec runtime test should use a sysctl.])
        ;;
      *)
1139
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("vand %v0, %v0, %v0");]])],
1140 1141 1142 1143
          can_use_altivec=yes, can_use_altivec=no)
        ;;
    esac
    AC_MSG_RESULT($can_use_altivec)
1144

1145 1146 1147 1148 1149 1150 1151
    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
1152 1153

  enable_altivec="$can_use_altivec"
1154
fi
1155

1156

1157 1158 1159
###################################
# Checks for shared memory handling
###################################
1160

1161
# MacOS X has broken SysV shm
1162 1163
case "$host_os" in
  darwin* | rhapsody* | machten*)
1164
    shmdefault=posix
1165 1166 1167 1168 1169 1170 1171
    ;;
  *)
    shmdefault=sysv
    ;;
esac

shmtype=auto
1172
AC_ARG_WITH(shm, [  --with-shm=none|sysv|posix|auto    shared memory transport type (default=auto)], shmtype=$with_shm)
1173 1174

case $shmtype in
1175
  none|sysv|posix) ;;
1176
  auto) shmtype=$shmdefault ;;
1177
  *) AC_MSG_ERROR([Invalid shared memory transport type: use none, sysv, posix, or auto.]);;
1178 1179
esac

1180 1181 1182 1183

if test "x$platform_win32" = "xyes"; then
  shmtype=win32
elif test "x$shmtype" = "xsysv"; then
1184 1185
  AC_CHECK_HEADER(sys/ipc.h,
    [AC_DEFINE(HAVE_IPC_H, 1,
1186
               [Define to 1 if you have the <sys/ipc.h> header file.])],
1187 1188 1189 1190 1191
    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)
1192

1193 1194
  if test "$ac_cv_header_sys_shm_h" = "yes"; then
    AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches)
1195 1196
    AC_RUN_IFELSE(
      [AC_LANG_SOURCE([[
Elliot Lee's avatar
Elliot Lee committed
1197 1198 1199 1200 1201 1202 1203
	#include <sys/types.h>
	#include <sys/ipc.h>
	#include <sys/shm.h>
	int main()
	{
	  int id;
	  char *shmaddr;
1204
	id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0600);
Elliot Lee's avatar
Elliot Lee committed
1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217
	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);
	}
1218 1219 1220 1221 1222 1223
      ]])],
      [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)])
1224 1225 1226 1227 1228 1229

    AC_DEFINE(USE_SYSV_SHM, 1, [Define to 1 to use SYSV shared memory])
  else
    shmtype=none
  fi
elif test "x$shmtype" = "xposix"; then
1230 1231 1232 1233 1234 1235
  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
1236
    AC_CHECK_LIB(rt, shm_open, RT_LIBS="-lrt" have_shm_open=yes)
1237 1238
  fi
  AC_SUBST(RT_LIBS)
1239 1240 1241

  AC_CHECK_HEADER(sys/mman.h,
    [AC_DEFINE(HAVE_MMAN_H, 1,
1242
               [Define to 1 if you have the <sys/mman.h> header file.])],
1243 1244 1245
    no_sys_mman=yes)

  if test "$ac_cv_func_mmap" = "yes" &&
1246 1247
     test "$ac_cv_header_sys_mman_h" = "yes" &&
     test "$have_shm_open" = "yes"; then
1248 1249 1250
    AC_DEFINE(USE_POSIX_SHM, 1, [Define to 1 to use POSIX shared memory])
  else
    shmtype=none
1251
  fi
Elliot Lee's avatar
Elliot Lee committed
1252 1253
fi

1254 1255
AC_MSG_CHECKING(for shared memory transport type)
AC_MSG_RESULT($shmtype)
1256

1257

1258 1259 1260 1261 1262 1263
########################
# Define a symbol prefix
########################

AC_MSG_CHECKING([whether symbols are prefixed])

1264 1265
case "$host_os" in
  mingw*)
1266 1267 1268 1269
    case "$host_cpu" in 
	  x86_64) SYMPREFIX='' ;;
	  *) SYMPREFIX='_' ;;
	esac
1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286
    ;;
  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)


1287 1288 1289
############################
# Check for select and fdset
############################
Elliot Lee's avatar
Elliot Lee committed
1290

1291
if test "x$os_win32" != xyes; then
1292
  AC_MSG_CHECKING([fd_set and sys/select])
1293 1294 1295 1296 1297 1298
  AC_COMPILE_IFELSE(
    [AC_LANG_PROGRAM(
      [[#include <sys/types.h>]],
      [[fd_set readMask, writeMask;]])],
    [gimp_ok=yes],
    [gimp_ok=no])
1299
  if test "x$gimp_ok" = xno; then
1300
      AC_EGREP_HEADER(fd_mask, sys/select.h, gimp_ok=yes)
1301
      if test "x$gimp_ok" = xyes; then
1302 1303 1304 1305 1306
	  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)
1307
  if test "x$gimp_ok" = xno; then
1308 1309 1310
      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
1311 1312
fi

1313

1314
#############################
1315
# Threads and multi processor
1316
#############################
1317

1318
AC_ARG_ENABLE(mp, [  --disable-mp            disable support for multiple processors])
1319

1320
if test "x$enable_mp" != "xno"; then
1321 1322
  AC_DEFINE(ENABLE_MP, 1,
	    [Define to 1 to enable support for multiple processors.])
Sven Neumann's avatar
Sven Neumann committed
1323 1324
fi

1325

1326 1327 1328
################################
# Some plug-ins are X11 specific
################################
Sven Neumann's avatar
Sven Neumann committed
1329

1330
# Check if building for GTK+-X11
Sven Neumann's avatar
Sven Neumann committed
1331
gdk_target=`$PKG_CONFIG --variable=target gtk+-2.0`
1332

1333 1334
have_libxmu="no (building for $gdk_target)"

Sven Neumann's avatar
Sven Neumann committed
1335
if test "$gdk_target" = x11; then
1336

1337
   # doc-shooter is X11 specific
1338 1339
   DOC_SHOOTER=doc-shooter

1340
   # screenshot plug-in needs to link to X11 explicitly
1341
   SCREENSHOT_LIBS="$X_LIBS -lX11"
1342

1343 1344 1345 1346 1347
   gimp_save_CFLAGS="$CFLAGS"
   gimp_save_LDFLAGS="$LDFLAGS"
   CFLAGS="$CFLAGS $GTK_CFLAGS"
   LDFLAGS="$LDFLAGS $X_LIBS"

1348
   # Test for Xmu
1349
   if test -z "$XMU_LIBS"; then
Sven Neumann's avatar
Sven Neumann committed
1350
      AC_CHECK_LIB(Xmu, XmuClientWindow,
1351
        [AC_CHECK_HEADERS(X11/Xmu/WinUtil.h,
1352
	  have_libxmu=yes
1353 1354
          XMU_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXmu -lXt"
          SCREENSHOT_LIBS="$XMU_LIBS",
1355 1356
	  [have_libxmu="no (XMU header file not found)"],[#include <gdk/gdkx.h>])],
	[have_libxmu="no (XMU library not found)"], -lXt -lX11)
1357
   fi
1358

1359
   # Check for shaped window extension
1360 1361
   AC_CHECK_LIB(Xext, XShapeGetRectangles,
     [AC_CHECK_HEADERS(X11/extensions/shape.h,
1362
        SCREENSHOT_LIBS="$SCREENSHOT_LIBS -lXext",,[#include <gdk/gdkx.h>])],,
1363 1364 1365 1366
     -lX11 -lXext)

   CFLAGS="$gimp_save_CFLAGS"
   LDFLAGS="$gimp_save_LDFLAGS"
1367

1368
   # check for the XFixes extension
1369 1370 1371
   PKG_CHECK_MODULES(XFIXES, xfixes,
      AC_DEFINE(HAVE_XFIXES, 1,
                [Define to 1 to if the XFIXES X extension is available])
1372
      SCREENSHOT_LIBS="$SCREENSHOT_LIBS $XFIXES_LIBS",
1373
      true)
1374
fi
Sven Neumann's avatar
Sven Neumann committed
1375

1376 1377
AC_SUBST(XMU_LIBS)
AC_SUBST(SCREENSHOT_LIBS)
1378

1379
AC_SUBST(DOC_SHOOTER)
1380

1381

1382
GIMP_COMMAND='gimp-gimp_app_version'
1383

1384 1385
AC_SUBST(GIMP_COMMAND)

1386

1387 1388 1389 1390 1391 1392
############
# MIME types
############

# The list of MIME types that are supported by plug-ins that are compiled
# unconditionally:
1393
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"
1394

1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423
#################
# 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])
1424

1425 1426 1427 1428
###################
# Check for libtiff
###################