diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 3243 |
1 files changed, 3243 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..564f0ff --- /dev/null +++ b/configure.ac @@ -0,0 +1,3243 @@ +# 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]) +m4_define([gimp_micro_version], [36]) +m4_define([gimp_real_version], + [gimp_major_version.gimp_minor_version.gimp_micro_version]) +m4_define([gimp_version], [gimp_real_version]) +m4_define([gimp_interface_age], [36]) +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_release], + m4_if(m4_eval(gimp_micro_version % 2), [0], [yes], [no])) + +m4_define([gimp_full_name], [GNU Image Manipulation Program]) + +# required versions of other packages +m4_define([alsa_required_version], [1.0.0]) +m4_define([atk_required_version], [2.2.0]) +m4_define([babl_required_version], [0.1.78]) +m4_define([cairo_pdf_required_version], [1.12.2]) +m4_define([cairo_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]) +m4_define([gegl_major_minor_version], [0.4]) +m4_define([gegl_micro_version], [38]) +m4_define([gegl_required_version], + [gegl_major_minor_version.gegl_micro_version]) +m4_define([gexiv2_required_version], [0.10.6]) +m4_define([glib_required_version], [2.56.2]) +m4_define([gtk_mac_integration_required_version], [2.0.0]) +m4_define([gtk_required_version], [2.24.32]) +m4_define([gtkdoc_required_version], [1.0]) +m4_define([harfbuzz_required_version], [0.9.19]) +m4_define([intltool_required_version], [0.40.1]) +m4_define([json_glib_required_version], [1.2.6]) +m4_define([lcms_required_version], [2.8]) +m4_define([libgudev_required_version], [167]) +m4_define([libheif_required_version], [1.3.2]) +m4_define([libjxl_required_version], [0.7.0]) +m4_define([liblzma_required_version], [5.0.0]) +m4_define([libmypaint_required_version], [1.3.0]) +m4_define([libpng_required_version], [1.6.25]) +m4_define([libunwind_required_version], [1.1.0]) +m4_define([openexr_required_version], [1.6.1]) +m4_define([openjpeg_required_version], [2.1.0]) +m4_define([pangocairo_required_version], [1.29.4]) +m4_define([perl_required_version], [5.10.0]) +m4_define([poppler_data_required_version], [0.4.7]) +m4_define([poppler_required_version], [0.50.0]) +m4_define([pycairo_required_version], [1.0.2]) +m4_define([pygtk_required_version], [2.10.4]) +m4_define([python2_required_version], [2.5.0]) +m4_define([rsvg_required_version], [2.40.6]) +m4_define([webkit_required_version], [1.6.1]) +m4_define([webp_required_version], [0.6.0]) +m4_define([wmf_required_version], [0.2.8]) + +# Current test considers only 2 version numbers. If we update the recommended +# version of gettext with more version numbers, please update the tests. +m4_define([xgettext_required_version], [0.19]) + +AC_INIT([GIMP], [gimp_version], + [https://gitlab.gnome.org/GNOME/gimp/issues/new], + [gimp]) + +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_SRCDIR([app/core/gimp.c]) +AC_CONFIG_MACRO_DIR([m4macros]) + +AM_INIT_AUTOMAKE(no-define dist-bzip2 dist-xz no-dist-gzip -Wno-portability) + +# 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])]) + +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 +GIMP_UNSTABLE=gimp_unstable +GIMP_RELEASE=gimp_release +GIMP_FULL_NAME="gimp_full_name" +AC_SUBST(GIMP_MAJOR_VERSION) +AC_SUBST(GIMP_MINOR_VERSION) +AC_SUBST(GIMP_MICRO_VERSION) +AC_SUBST(GIMP_INTERFACE_AGE) +AC_SUBST(GIMP_BINARY_AGE) +AC_SUBST(GIMP_VERSION) +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) +AC_SUBST(GIMP_UNSTABLE) +AC_SUBST(GIMP_RELEASE) +AC_SUBST(GIMP_FULL_NAME) + +# 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]) + +# These are used in the .pc files +GLIB_REQUIRED_VERSION=glib_required_version +GDK_PIXBUF_REQUIRED_VERSION=gdk_pixbuf_required_version +GTK_REQUIRED_VERSION=gtk_required_version +CAIRO_REQUIRED_VERSION=cairo_required_version +CAIRO_PDF_REQUIRED_VERSION=cairo_pdf_required_version +GEGL_MAJOR_MINOR_VERSION=gegl_major_minor_version +GEGL_REQUIRED_VERSION=gegl_required_version +GEXIV2_REQUIRED_VERSION=gexiv2_required_version +LCMS_REQUIRED_VERSION=lcms_required_version +LIBPNG_REQUIRED_VERSION=libpng_required_version +LIBLZMA_REQUIRED_VERSION=liblzma_required_version +LIBMYPAINT_REQUIRED_VERSION=libmypaint_required_version +PANGOCAIRO_REQUIRED_VERSION=pangocairo_required_version +BABL_REQUIRED_VERSION=babl_required_version +FONTCONFIG_REQUIRED_VERSION=fontconfig_required_version +FREETYPE2_REQUIRED_VERSION=freetype2_required_version +HARFBUZZ_REQUIRED_VERSION=harfbuzz_required_version +WEBKIT_REQUIRED_VERSION=webkit_required_version +ATK_REQUIRED_VERSION=atk_required_version +RSVG_REQUIRED_VERSION=rsvg_required_version +WMF_REQUIRED_VERSION=wmf_required_version +POPPLER_REQUIRED_VERSION=poppler_required_version +POPPLER_DATA_REQUIRED_VERSION=poppler_data_required_version +OPENEXR_REQUIRED_VERSION=openexr_required_version +OPENJPEG_REQUIRED_VERSION=openjpeg_required_version +INTLTOOL_REQUIRED_VERSION=intltool_required_version +PERL_REQUIRED_VERSION=perl_required_version +PYTHON2_REQUIRED_VERSION=python2_required_version +WEBP_REQUIRED_VERSION=webp_required_version +LIBHEIF_REQUIRED_VERSION=libheif_required_version +LIBJXL_REQUIRED_VERSION=libjxl_required_version +LIBUNWIND_REQUIRED_VERSION=libunwind_required_version +XGETTEXT_REQUIRED_VERSION=xgettext_required_version +AC_SUBST(GLIB_REQUIRED_VERSION) +AC_SUBST(GDK_PIXBUF_REQUIRED_VERSION) +AC_SUBST(GTK_REQUIRED_VERSION) +AC_SUBST(CAIRO_REQUIRED_VERSION) +AC_SUBST(CAIRO_PDF_REQUIRED_VERSION) +AC_SUBST(GEGL_MAJOR_MINOR_VERSION) +AC_SUBST(GEGL_REQUIRED_VERSION) +AC_SUBST(GEXIV2_REQUIRED_VERSION) +AC_SUBST(LCMS_REQUIRED_VERSION) +AC_SUBST(LIBPNG_REQUIRED_VERSION) +AC_SUBST(LIBLZMA_REQUIRED_VERSION) +AC_SUBST(LIBMYPAINT_REQUIRED_VERSION) +AC_SUBST(PANGOCAIRO_REQUIRED_VERSION) +AC_SUBST(BABL_REQUIRED_VERSION) +AC_SUBST(FONTCONFIG_REQUIRED_VERSION) +AC_SUBST(FREETYPE2_REQUIRED_VERSION) +AC_SUBST(HARFBUZZ_REQUIRED_VERSION) +AC_SUBST(WEBKIT_REQUIRED_VERSION) +AC_SUBST(ATK_REQUIRED_VERSION) +AC_SUBST(RSVG_REQUIRED_VERSION) +AC_SUBST(WMF_REQUIRED_VERSION) +AC_SUBST(POPPLER_REQUIRED_VERSION) +AC_SUBST(POPPLER_DATA_REQUIRED_VERSION) +AC_SUBST(OPENEXR_REQUIRED_VERSION) +AC_SUBST(OPENJPEG_REQUIRED_VERSION) +AC_SUBST(INTLTOOL_REQUIRED_VERSION) +AC_SUBST(PERL_REQUIRED_VERSION) +AC_SUBST(PYTHON2_REQUIRED_VERSION) +AC_SUBST(WEBP_REQUIRED_VERSION) +AC_SUBST(LIBHEIF_REQUIRED_VERSION) +AC_SUBST(LIBJXL_REQUIRED_VERSION) +AC_SUBST(LIBUNWIND_REQUIRED_VERSION) +AC_SUBST(XGETTEXT_REQUIRED_VERSION) + +# The symbol GIMP_UNSTABLE is defined above for substitution in +# Makefiles and conditionally defined here as a preprocessor symbol +# and automake conditional. +if test "x$GIMP_UNSTABLE" = "xyes"; then + AC_DEFINE(GIMP_UNSTABLE, 1, + [Define to 1 if this is code from the unstable branch of GIMP]) +fi +AM_CONDITIONAL(GIMP_UNSTABLE, test "x$GIMP_UNSTABLE" = "xyes") + +if test "x$GIMP_RELEASE" = "xyes"; then + AC_DEFINE(GIMP_RELEASE, 1, + [Define to 1 if this is a release version of GIMP]) +fi +AM_CONDITIONAL(GIMP_RELEASE, test "x$GIMP_RELEASE" = "xyes") + +# libtool versioning +m4_define([lt_current], [m4_eval(100 * gimp_minor_version + gimp_micro_version - gimp_interface_age)]) +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) +AC_SUBST(LT_CURRENT_MINUS_AGE) + + +# gettext i18n support +GETTEXT_PACKAGE=gimp20 +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", + [The prefix for our gettext translation domains.]) + +# work around intltool-update issues during 'make distcheck' +AS_IF([test "x$0" != "x./configure"], [ + AC_SUBST([INTLTOOL_UPDATE], [/bin/true]) +]) + +# Determine a C compiler to use +AC_PROG_CC +AX_PROG_CC_FOR_BUILD +# 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 +AM_PROG_CC_C_O + +# Determine a C++ compiler to use +AC_PROG_CXX +AX_CXX_COMPILE_STDCXX([14], , [mandatory]) + +# Initialize libtool +LT_PREREQ([2.2]) +LT_INIT([disable-static win32-dll]) + +AM_PROG_AS + +# Initialize maintainer mode +AM_MAINTAINER_MODE([enable]) + +# Check for pkg-config +PKG_PROG_PKG_CONFIG(0.16) + + +######################### +# Check host architecture +######################### + +AC_CANONICAL_HOST + +AC_MSG_CHECKING([for host type]) +AC_MSG_RESULT([$host]) + +AC_MSG_CHECKING([for host processor]) +case "$host_cpu" in + i*86) + have_x86=yes + AC_DEFINE(ARCH_X86, 1, [Define to 1 if you are compiling for ix86.]) + AC_MSG_RESULT([x86]) + ;; + x86_64) + 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.]) + AC_MSG_RESULT([x86-64]) + ;; + ppc | powerpc) + have_ppc=yes + AC_DEFINE(ARCH_PPC, 1, [Define to 1 if you are compiling for PowerPC.]) + AC_MSG_RESULT([PowerPC]) + ;; + ppc64 | powerpc64) + 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.]) + AC_MSG_RESULT([64-bit PowerPC]) + ;; + *) + AC_MSG_RESULT([unknown]) + ;; +esac + + +################# +# Check for Linux +################# + +AC_MSG_CHECKING([if compiling for Linux]) +case "$host_os" in + linux*) + platform_linux=yes + ;; + *) + platform_linux=no + ;; +esac +AC_MSG_RESULT([$platform_linux]) +AM_CONDITIONAL(PLATFORM_LINUX, test "$platform_linux" = "yes") + + +################# +# Check for Win32 +################# + +AC_MSG_CHECKING([if compiling for Win32]) +case "$host_os" in + msys* | mingw* | cygwin*) + platform_win32=yes + ;; + *) + platform_win32=no + ;; +esac +AC_MSG_RESULT([$platform_win32]) +AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes") + +PATHSEP=':' +os_win32=no +if test "x$platform_win32" != xno; then + AC_MSG_CHECKING([if this is native Win32]) + case "$host_os" in + msys* | 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 +AC_SUBST(WIN32_LARGE_ADDRESS_AWARE) +AC_SUBST(PATHSEP) +AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes") +AM_CONDITIONAL(OS_UNIX, test "$os_win32" != "yes") + +if test "$os_win32" = "yes"; then + AC_CHECK_PROG(ms_librarian, lib.exe, yes, no) + AC_CHECK_TOOL(WINDRES, windres, :) +else + WINDRES=":" +fi + +AM_CONDITIONAL(MS_LIB_AVAILABLE, test "x$ms_librarian" = xyes) +AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:") + +AC_SUBST(WINDRES) + + +#################### +# 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) + + +############### +# Generic stuff +############### + +# Checks for programs. +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_PROG_LN_S + +# Large file support for the swap file +AC_SYS_LARGEFILE + +AC_MSG_CHECKING([whether to turn on debugging]) +AC_ARG_ENABLE(debug, + [ --enable-debug turn on debugging (default=no)], + if eval "test x$enable_debug = xyes"; then + DEBUGFLAG="-g" + fi) + +if test -n "$DEBUGFLAG"; then + AC_MSG_RESULT([yes]) + CFLAGS="$DEBUGFLAG $CFLAGS" +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]) +fi + +AC_ARG_ENABLE(ansi, + [ --enable-ansi turn on strict ansi (default=no)],, + enable_ansi=no) + +changequote(,)dnl +if eval "test x$GCC = xyes"; then + case " $CFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wall" ;; + esac + + if test "x$enable_ansi" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-ansi[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -ansi" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-pedantic[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -pedantic" ;; + esac + fi +fi +changequote([,])dnl + + +# If possible, warn if C99isms are used +GIMP_DETECT_CFLAGS(extra_warnings, '-Wdeclaration-after-statement') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-prototypes') +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. +# +GIMP_DETECT_CFLAGS(extra_warnings, '-Werror=missing-prototypes') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Wstrict-prototypes') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-declarations') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Winit-self') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Wpointer-arith') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Wold-style-definition') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Wmissing-format-attribute') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Wformat-security') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Wlogical-op') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-Wtype-limits') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-fno-common') +CFLAGS="$CFLAGS $extra_warnings" + +GIMP_DETECT_CFLAGS(extra_warnings, '-fdiagnostics-show-option') +CFLAGS="$CFLAGS $extra_warnings" + +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. +# 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" + +# 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" + + +# Ensure MSVC-compatible struct packing convention is used when +# compiling for Win32 with gcc. +# What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while +# gcc2 uses "-fnative-struct". +if test "x$os_win32" = xyes; then + if test "x$GCC" = xyes; then + msnative_struct='' + AC_MSG_CHECKING([how to get MSVC-compatible struct packing]) + if test -z "$ac_cv_prog_CC"; then + our_gcc="$CC" + else + our_gcc="$ac_cv_prog_CC" + fi + case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in + 2.) + if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then + msnative_struct='-fnative-struct' + fi + ;; + *) + if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then + msnative_struct='-mms-bitfields' + fi + ;; + esac + if test "x$msnative_struct" = x ; then + AC_MSG_RESULT([no way]) + AC_MSG_WARN([build will be incompatible with GTK+ DLLs]) + else + CFLAGS="$CFLAGS $msnative_struct" + AC_MSG_RESULT([${msnative_struct}]) + fi + fi +fi + +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 + # For GCC, use -v which has more information than --version. + CC_VERSION_OPTS="-v" +else + # This is the list of common options used by autotools to check + # versions for various compilers. + CC_VERSION_OPTS="--version -v -V -qversion" +fi + +for CC_VERSION_OPT in $CC_VERSION_OPTS; do + # We run $CC, and escape and format its output, in a single step, + # since some shells expand escape sequences in "echo" arguments. + CC_VERSION="`$CC $CC_VERSION_OPT 2>&1 | sed -e 's/\\\\/\\\\\\\\\\\\\\\\/g;s/^/\\\\t/;s/$/\\\\n/' | tr -d '\n'`" + if test $? -eq 0; then + break + fi +done + +AC_SUBST(CC_VERSION) + +AC_HEADER_STDC +AC_HEADER_SYS_WAIT +AC_HEADER_TIME + +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) +AC_CHECK_FUNCS(backtrace, , AC_CHECK_LIB(execinfo, backtrace)) + +AC_TYPE_PID_T +AC_FUNC_VPRINTF + +AC_FUNC_ALLOCA + +# check some more funcs +AC_CHECK_FUNCS(fsync) +AC_CHECK_FUNCS(difftime mmap) +AC_CHECK_FUNCS(thr_self) + + +# _NL_MEASUREMENT_MEASUREMENT is an enum and not a define +AC_MSG_CHECKING([for _NL_MEASUREMENT_MEASUREMENT]) +AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <langinfo.h>]], + [[char c = *((unsigned char *) nl_langinfo(_NL_MEASUREMENT_MEASUREMENT));]])], + [nl_ok=yes], + [nl_ok=no]) +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 + +# 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"])]) + +###################### +# Internationalisation +###################### + +IT_PROG_INTLTOOL(intltool_required_version) +AM_GLIB_GNU_GETTEXT + +# Testing xgettext version since we had some problem with localizing script-fu. See bug 720052. +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; }'` + +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; }'` + +have_required_xgettext="no" +if test -n "$XGETTEXT_APPLIED_VERSION_MAJOR"; then + 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 + if test -n "$XGETTEXT_APPLIED_VERSION_MINOR_1"; then + if test "$XGETTEXT_REQUIRED_VERSION_MINOR_1" -le "$XGETTEXT_APPLIED_VERSION_MINOR_1"; then + have_required_xgettext="yes" + fi + fi + fi +fi +AC_MSG_RESULT($have_required_xgettext) + +if test "x$have_required_xgettext" = "xno"; then + add_deps_error([xgettext], [xgettext >= xgettext_required_version]) +fi + +########### +# iso-codes +########### + +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]) + ISO_CODES_PREFIX=`$PKG_CONFIG --variable=prefix iso-codes` + 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) + + +############################### +# Checks for required libraries +############################### + +PKG_CHECK_MODULES(BABL, [babl-0.1 >= babl_required_version],, + [ + PKG_CHECK_MODULES(BABL, [babl >= babl_required_version],, + [add_deps_error([babl-0.1 >= babl_required_version])]) + ]) +PKG_CHECK_MODULES(GEGL, gegl-gegl_major_minor_version >= gegl_required_version,, + [add_deps_error([gegl-gegl_major_minor_version >= gegl_required_version])]) +PKG_CHECK_MODULES(ATK, atk >= atk_required_version,, + [add_deps_error([atk >= atk_required_version])]) + +AM_PATH_GLIB_2_0(glib_required_version,, + [add_deps_error([glib >= glib_required_version], + [Test for GLIB failed])], + gobject) + +PKG_CHECK_MODULES(GMODULE_NO_EXPORT, gmodule-no-export-2.0,, + [add_deps_error([gmodule-no-export-2.0])]) + +PKG_CHECK_MODULES(GIO, gio-2.0,, + [add_deps_error([gio-2.0])]) + +if test "x$os_win32" = "xyes"; then + PKG_CHECK_MODULES(GIO_WINDOWS, gio-windows-2.0,, + [add_deps_error([gio-windows-2.0])]) +else + PKG_CHECK_MODULES(GIO_UNIX, gio-unix-2.0,, + [add_deps_error([gio-unix-2.0])]) +fi + +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 + +# 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 +fi +AC_MSG_RESULT($HOST_GLIB_COMPILE_RESOURCES) +AC_SUBST(HOST_GLIB_COMPILE_RESOURCES) + +AC_PATH_PROG(GDBUS_CODEGEN, gdbus-codegen, no) +if test "x$GDBUS_CODEGEN" = xno; then + add_deps_error([gdbus-codegen], [Could not find gdbus-codegen in your PATH.]) +fi + +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 +else + have_glib_2_57=no +fi +AC_MSG_RESULT($have_glib_2_57) + +AC_PATH_PROG(GEGL, gegl, no) +if test "x$GEGL" = xno; then + add_deps_error([gegl], [Could not find native gegl executable in your PATH.]) +fi + + +# Check for bind_textdomain_codeset, including -lintl if GLib brings it in. +gimp_save_LIBS=$LIBS +LIBS="$LIBS $GLIB_LIBS" +AC_CHECK_FUNCS(bind_textdomain_codeset,, + add_deps_error([bind_textdomain_codeset()], + [Check for bind_textdomain_codeset() failed! This is required.])) +LIBS=$gimp_save_LIBS + + +AC_PATH_XTRA + +AM_PATH_GTK_2_0(gtk_required_version, :, + add_deps_error([gtk+-2.0 >= gtk_required_version], + [Test for GTK+ failed.])) + +AC_PATH_PROG(GTK_UPDATE_ICON_CACHE, gtk-update-icon-cache, no) +if test "x$GTK_UPDATE_ICON_CACHE" = xno; then + add_deps_error([gtk-update-icon-cache], + [Could not find gtk-update-icon-cache in your PATH.]) +fi + +# 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 +else + have_gtk_2_26=no +fi +AC_MSG_RESULT($have_gtk_2_26) + +PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-2.0 >= gdk_pixbuf_required_version,, + [add_deps_error([gdk-pixbuf-2.0 >= gdk_pixbuf_required_version])]) + +AC_PATH_PROG(GDK_PIXBUF_CSOURCE, gdk-pixbuf-csource, no) +if test "x$GDK_PIXBUF_CSOURCE" = xno; then + add_deps_error([gdk-pixbuf-csource], + [Could not find gdk-pixbuf-csource in your PATH.]) +fi + +PKG_CHECK_MODULES(CAIRO, cairo >= cairo_required_version,, + [add_deps_error([cairo >= cairo_required_version])]) + +PKG_CHECK_MODULES(PANGOCAIRO, + [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.])]) + +gimp_save_CFLAGS=$CFLAGS +CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS" + +# Windows platform had a few bugs fixed in earlier fontconfig. +# 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). +PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= fontconfig_required_version,, + [add_deps_error([fontconfig >= fontconfig_required_version])]) + +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 +else + have_pango_1_32=no +fi +AC_MSG_RESULT($have_pango_1_32) + +CFLAGS="$PANGOCAIRO_CFLAGS $CFLAGS" + +AC_MSG_CHECKING([if Pango is built with a recent fontconfig]) +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <fontconfig/fontconfig.h>]], + [[FcObjectSet *os; os = FcObjectSetBuild (FC_FAMILY, FC_WIDTH);]])], + [fontconfig_ok=yes], + [fontconfig_ok=no]) +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 +*** Pango library is using an older version. This old version is probably in +*** /usr/X11R6. Look at the above output, and note that the result for +*** FONTCONFIG_CFLAGS is not in the result for PANGOCAIRO_CFLAGS, and that +*** 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 + + +PKG_CHECK_MODULES(FREETYPE, freetype2 >= freetype2_required_version,, + [add_deps_error([freetype2_required_version >= freetype2_required_version])]) + +PKG_CHECK_MODULES(HARFBUZZ, harfbuzz >= harfbuzz_required_version,, + [add_deps_error([harfbuzz >= harfbuzz_required_version])]) + +PKG_CHECK_MODULES(GEXIV2, gexiv2 >= gexiv2_required_version,, + [add_deps_error([gexiv2 >= gexiv2_required_version])]) + +################################# +# 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]) + +###################################### +# 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]) + +##################### +# Check for Dr. Mingw +##################### + +enable_drmingw="no" +if test "x$platform_win32" = "xyes"; then + # Check for Dr. Mingw + AC_CHECK_LIB(exchndl, ExcHndlSetLogFileNameA, + [ + AC_DEFINE(HAVE_EXCHNDL, 1, [Define to 1 when Dr. MingW is available]) + LIBS="-lexchndl $LIBS" + enable_drmingw="yes" + ], + [enable_drmingw="no (ExcHndl library missing)"] + ) +fi +AM_CONDITIONAL(HAVE_EXCHNDL, test "x$ac_cv_lib_exchndl_ExcHndlSetLogFileNameA" = "xyes") + +########################### +# Check for backtrace() API +########################### + +AC_CHECK_HEADERS([execinfo.h]) + +######################### +# Check for Matting Levin +######################### + +AC_MSG_CHECKING([for matting engine Levin]) +if $GEGL --exists "gegl:matting-levin"; then + have_matting_levin=yes +else + have_matting_levin='no (missing GEGL operation "gegl:matting-levin")' +fi +AC_MSG_RESULT($have_matting_levin) + +########################################## +# Check for some special functions we need +########################################## + +AC_CHECK_HEADERS(math.h ieeefp.h) + +# DU4 native cc currently needs -std1 for ANSI mode (instead of K&R) +AC_MSG_CHECKING([for extra flags to get ANSI library prototypes]) +gimp_save_LIBS=$LIBS +LIBS="$LIBS -lm" +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()]) + +# Check for finite +AC_CHECK_FUNCS(finite, , [ + AC_MSG_CHECKING(for finite in <math.h>) + 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)]) + ] +) + +# Check for isfinite +AC_CHECK_FUNCS(isfinite, , [ + AC_MSG_CHECKING(for isfinite in <math.h>) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h>]], + [[double f = 0.0; isfinite (f)]])], + [AC_DEFINE(HAVE_ISFINITE, 1) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) + ] +) + +AC_SUBST(HAVE_FINITE) +AC_SUBST(HAVE_ISFINITE) + +LIBS=$gimp_save_LIBS + + +# check for rint +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)])]) + + +# check for vfork +AC_CHECK_FUNCS(vfork, ,) +AC_SUBST(HAVE_VFORK) + + +############################## +# Check for attributes we need +############################## + +AX_GCC_FUNC_ATTRIBUTE(destructor) + +##################################################################### +# Check for extra libs needed for getaddrinfo, getnameinfo and socket +##################################################################### + +gimp_save_LIBS=$LIBS +LIBS="" + +AC_CHECK_FUNCS(getaddrinfo, , AC_CHECK_LIB(nsl, getaddrinfo)) +AC_CHECK_FUNCS(getnameinfo, , AC_CHECK_LIB(nsl, getnameinfo)) +AC_CHECK_LIB(socket, socket) + +SOCKET_LIBS="$LIBS" +LIBS=$gimp_save_LIBS + +AC_SUBST(SOCKET_LIBS) + +################################### +# Check for Intel vector intrinsics +################################### +intrinsics_save_CFLAGS="$CFLAGS" +#FIXME: Check the CFLAGS separately +GIMP_DETECT_CFLAGS(SSE_MATH_CFLAG, '-mfpmath=sse') +GIMP_DETECT_CFLAGS(SSE2_CFLAG, '-msse2') +SSE2_EXTRA_CFLAGS="$SSE_MATH_CFLAG $SSE2_CFLAG" +CFLAGS="$SSE2_EXTRA_CFLAGS $intrinsics_save_CFLAGS" + +AC_MSG_CHECKING(whether we can compile SSE2 intrinsics) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <emmintrin.h>]],[[__m128i one = _mm_set1_epi32 (1);]])], + 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="$SSE4_1_EXTRA_CFLAGS $intrinsics_save_CFLAGS" + +AC_MSG_CHECKING(whether we can compile SSE4.1 intrinsics) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <smmintrin.h>]],[[__v4sf a, b, c; c = _mm_blend_ps(a, b, 0x08);]])], + 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" + + +######################## +# Check for MMX assembly +######################## + +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)],, + enable_sse=$enable_mmx) + +if test "x$enable_mmx" = xyes; then + GIMP_DETECT_CFLAGS(MMX_EXTRA_CFLAGS, '-mmmx') + SSE_EXTRA_CFLAGS= + + AC_MSG_CHECKING(whether we can compile MMX code) + + mmx_save_CFLAGS="$CFLAGS" + CFLAGS="$mmx_save_CFLAGS $MMX_EXTRA_CFLAGS" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movq 0, %mm0");]])], + + AC_DEFINE(USE_MMX, 1, [Define to 1 if MMX assembly is available.]) + AC_MSG_RESULT(yes) + + if test "x$enable_sse" = xyes; then + GIMP_DETECT_CFLAGS(sse_flag, '-msse') + SSE_EXTRA_CFLAGS="$MMX_EXTRA_CFLAGS $sse_flag" + + AC_MSG_CHECKING(whether we can compile SSE code) + + CFLAGS="$CFLAGS $sse_flag" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("movntps %xmm0, 0");]])], + AC_DEFINE(USE_SSE, 1, [Define to 1 if SSE assembly is available.]) + AC_MSG_RESULT(yes) + , + enable_sse=no + AC_MSG_RESULT(no) + AC_MSG_WARN([The assembler does not support the SSE command set.]) + ) + + fi + , + enable_mmx=no + AC_MSG_RESULT(no) + AC_MSG_WARN([The assembler does not support the MMX command set.]) + ) + + CFLAGS="$mmx_save_CFLAGS" + + AC_SUBST(MMX_EXTRA_CFLAGS) + AC_SUBST(SSE_EXTRA_CFLAGS) +fi + + +############################ +# Check for AltiVec assembly +############################ + +AC_ARG_ENABLE(altivec, + [ --enable-altivec enable AltiVec support (default=auto)],, + enable_altivec=$have_ppc) + +if test "x$enable_altivec" = xyes; then + + GIMP_DETECT_CFLAGS(altivec_flag, '-faltivec' '-maltivec -mabi=altivec') + + 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 + AC_SUBST(ALTIVEC_EXTRA_CFLAGS) + + AC_MSG_CHECKING(whether we can compile AltiVec code) + + can_use_altivec=no + if test -z "$ALTIVEC_EXTRA_CFLAGS"; then + AC_MSG_RESULT(no) + AC_MSG_WARN([The compiler does not support the AltiVec command set.]) + else + case "$host_os" in + darwin*) + can_use_altivec=yes + AC_DEFINE(HAVE_ALTIVEC_SYSCTL, 1, + [Define to 1 if the altivec runtime test should use a sysctl.]) + ;; + *) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[asm ("vand %v0, %v0, %v0");]])], + can_use_altivec=yes, can_use_altivec=no) + ;; + esac + AC_MSG_RESULT($can_use_altivec) + + 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 + + enable_altivec="$can_use_altivec" +fi + + +################################### +# Checks for shared memory handling +################################### + +# MacOS X has broken SysV shm +case "$host_os" in + darwin* | rhapsody* | machten*) + shmdefault=posix + ;; + *) + shmdefault=sysv + ;; +esac + +shmtype=auto +AC_ARG_WITH(shm, [ --with-shm=none|sysv|posix|auto shared memory transport type (default=auto)], shmtype=$with_shm) + +case $shmtype in + none|sysv|posix) ;; + auto) shmtype=$shmdefault ;; + *) AC_MSG_ERROR([Invalid shared memory transport type: use none, sysv, posix, or auto.]);; +esac + + +if test "x$platform_win32" = "xyes"; then + shmtype=win32 +elif test "x$shmtype" = "xsysv"; then + AC_CHECK_HEADER(sys/ipc.h, + [AC_DEFINE(HAVE_IPC_H, 1, + [Define to 1 if you have the <sys/ipc.h> header file.])], + 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) + + if test "$ac_cv_header_sys_shm_h" = "yes"; then + AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ + #include <sys/types.h> + #include <sys/ipc.h> + #include <sys/shm.h> + int main() + { + int id; + char *shmaddr; + id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0600); + 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); + } + ]])], + [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)]) + + AC_DEFINE(USE_SYSV_SHM, 1, [Define to 1 to use SYSV shared memory]) + else + shmtype=none + fi +elif test "x$shmtype" = "xposix"; then + have_shm_open=no + + AC_CHECK_FUNC(shm_open, have_shm_open=yes) + + RT_LIBS= + if test "$have_shm_open" != "yes"; then + AC_CHECK_LIB(rt, shm_open, RT_LIBS="-lrt" have_shm_open=yes) + fi + AC_SUBST(RT_LIBS) + + AC_CHECK_HEADER(sys/mman.h, + [AC_DEFINE(HAVE_MMAN_H, 1, + [Define to 1 if you have the <sys/mman.h> header file.])], + no_sys_mman=yes) + + if test "$ac_cv_func_mmap" = "yes" && + test "$ac_cv_header_sys_mman_h" = "yes" && + test "$have_shm_open" = "yes"; then + AC_DEFINE(USE_POSIX_SHM, 1, [Define to 1 to use POSIX shared memory]) + else + shmtype=none + fi +fi + +AC_MSG_CHECKING(for shared memory transport type) +AC_MSG_RESULT($shmtype) + + +######################## +# Define a symbol prefix +######################## + +AC_MSG_CHECKING([whether symbols are prefixed]) + +case "$host_os" in + mingw*) + case "$host_cpu" in + x86_64) SYMPREFIX='' ;; + *) SYMPREFIX='_' ;; + esac + ;; + 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) + + +############################ +# Check for select and fdset +############################ + +if test "x$os_win32" != xyes; then + AC_MSG_CHECKING([fd_set and sys/select]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h>]], + [[fd_set readMask, writeMask;]])], + [gimp_ok=yes], + [gimp_ok=no]) + if test "x$gimp_ok" = xno; then + AC_EGREP_HEADER(fd_mask, sys/select.h, gimp_ok=yes) + if test "x$gimp_ok" = xyes; then + 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) + if test "x$gimp_ok" = xno; then + AC_DEFINE(NO_FD_SET, 1, + [Define to 1 if you don't have the fd_set typedef.]) + fi +fi + + +############################# +# Threads and multi processor +############################# + +AC_ARG_ENABLE(mp, [ --disable-mp disable support for multiple processors]) + +if test "x$enable_mp" != "xno"; then + AC_DEFINE(ENABLE_MP, 1, + [Define to 1 to enable support for multiple processors.]) +fi + + +################################ +# Some plug-ins are X11 specific +################################ + +# Check if building for GTK+-X11 +gdk_target=`$PKG_CONFIG --variable=target gtk+-2.0` + +have_libxmu="no (building for $gdk_target)" + +if test "$gdk_target" = x11; then + + # doc-shooter is X11 specific + DOC_SHOOTER=doc-shooter + + # screenshot plug-in needs to link to X11 explicitly + SCREENSHOT_LIBS="$X_LIBS -lX11" + + gimp_save_CFLAGS="$CFLAGS" + gimp_save_LDFLAGS="$LDFLAGS" + CFLAGS="$CFLAGS $GTK_CFLAGS" + LDFLAGS="$LDFLAGS $X_LIBS" + + # Test for Xmu + if test -z "$XMU_LIBS"; then + AC_CHECK_LIB(Xmu, XmuClientWindow, + [AC_CHECK_HEADERS(X11/Xmu/WinUtil.h, + have_libxmu=yes + XMU_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXmu -lXt" + SCREENSHOT_LIBS="$XMU_LIBS", + [have_libxmu="no (XMU header file not found)"],[#include <gdk/gdkx.h>])], + [have_libxmu="no (XMU library not found)"], -lXt -lX11) + fi + + # Check for shaped window extension + AC_CHECK_LIB(Xext, XShapeGetRectangles, + [AC_CHECK_HEADERS(X11/extensions/shape.h, + SCREENSHOT_LIBS="$SCREENSHOT_LIBS -lXext",,[#include <gdk/gdkx.h>])],, + -lX11 -lXext) + + CFLAGS="$gimp_save_CFLAGS" + LDFLAGS="$gimp_save_LDFLAGS" + + # check for the XFixes extension + PKG_CHECK_MODULES(XFIXES, xfixes, + AC_DEFINE(HAVE_XFIXES, 1, + [Define to 1 to if the XFIXES X extension is available]) + SCREENSHOT_LIBS="$SCREENSHOT_LIBS $XFIXES_LIBS", + true) +fi + +AC_SUBST(XMU_LIBS) +AC_SUBST(SCREENSHOT_LIBS) + +AC_SUBST(DOC_SHOOTER) + + +GIMP_COMMAND='gimp-gimp_app_version' + +AC_SUBST(GIMP_COMMAND) + + +############ +# MIME types +############ + +# The list of MIME types that are supported by plug-ins that are compiled +# unconditionally: +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;image/x-sun-raster" + +################# +# 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 +AM_CONDITIONAL(ENABLE_RELOCATABLE_RESOURCES, test x$enable_relocatable_bundle = xyes) + +AC_MSG_RESULT([$enable_relocatable_bundle]) + +################### +# Check for libtiff +################### + +libtiff_error= +if test -z "$TIFF_LIBS"; then + AC_CHECK_LIB(tiff, TIFFReadScanline, + [AC_CHECK_HEADER(tiffio.h, + FILE_TIFF_LOAD='file-tiff-load$(EXEEXT)'; FILE_TIFF_SAVE='file-tiff-save$(EXEEXT)'; TIFF_LIBS='-ltiff', + [libtiff_error="TIFF header files not found"])], + [AC_CHECK_LIB(tiff, TIFFWriteScanline, + [AC_CHECK_HEADER(tiffio.h, + FILE_TIFF_LOAD='file-tiff-load$(EXEEXT)'; FILE_TIFF_SAVE='file-tiff-save$(EXEEXT)'; TIFF_LIBS='-ltiff -ljpeg -lz', + [libtiff_error="TIFF header files not found"])], + [AC_CHECK_LIB(tiff34, TIFFFlushData, + [AC_CHECK_HEADER(tiffio.h, + FILE_TIFF_LOAD='file-tiff-load$(EXEEXT)'; FILE_TIFF_SAVE='file-tiff-save$(EXEEXT)'; TIFF_LIBS='-ltiff34 -ljpeg -lz', + [libtiff_error="TIFF header files not found"])], + [libtiff_error="TIFF library not found"], -ljpeg -lz -lm)], -ljpeg -lz -lm)], -lm) +fi + +if test -z "$TIFF_LIBS"; then + add_deps_error([libtiff], [Checks for TIFF library failed: $libtiff_error]) +fi + +MIME_TYPES="$MIME_TYPES;image/tiff" + +AC_SUBST(TIFF_LIBS) + + +################### +# Check for libjpeg +################### + +if test -z "$JPEG_LIBS"; then + AC_CHECK_LIB(jpeg, jpeg_destroy_decompress, , + add_deps_error([libjpeg], [JPEG library not found])) + AC_MSG_CHECKING([for jpeglib.h]) + AC_PREPROC_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#undef HAVE_STDDEF_H +#undef HAVE_STDLIB_H +#undef PACKAGE +#undef VERSION +#include <jpeglib.h>]])], + AC_MSG_RESULT([yes]), + add_deps_error([libjpeg], [JPEG header file not found])) + AC_CHECK_LIB(jpeg, jpeg_save_markers, + JPEG_LIBS='-ljpeg', + add_deps_error([libjpeg], [JPEG library is too old])) +fi + +MIME_TYPES="$MIME_TYPES;image/jpeg" + +AC_SUBST(JPEG_LIBS) + + +################ +# Check for libz +################ + +if test -z "$Z_LIBS"; then + AC_CHECK_LIB(z, gzsetparams, + [AC_CHECK_HEADER(zlib.h, + Z_LIBS='-lz', + add_deps_error([zlib], [ZLIB header files not found]))], + add_deps_error([zlib], [ZLIB library not found])) +fi + +MIME_TYPES="$MIME_TYPES;image/x-psp" + +AC_SUBST(Z_LIBS) + + +#################### +# Check for libbzip2 +#################### + +gimp_save_LIBS=$LIBS +LIBS="$LIBS -lbz2" + +if test -z "$BZIP2_LIBS"; then + # We used to use AC_CHECK_LIB, but bz2 uses the WINAPI calling convention on + # windows, so the test needs to #include <bzlib.h> to be able to link properly + AC_CHECK_HEADER(bzlib.h, + [AC_MSG_CHECKING([for BZ2_bzCompress in -lbz2]); + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <bzlib.h>]], + [[BZ2_bzCompress (NULL, 0);]])], + [AC_MSG_RESULT([yes]); BZIP2_LIBS='-lbz2'], + add_deps_error([libbzip2], [libbzip2 library not found]))], + add_deps_error([libbzip2], [libbzip2 header files not found])) +fi + +LIBS=$gimp_save_LIBS + +AC_SUBST(BZIP2_LIBS) + + +################### +# Check for liblzma +################### + +PKG_CHECK_MODULES(LZMA, liblzma >= liblzma_required_version,, + [add_deps_error([liblzma >= liblzma_required_version])]) + + +############################### +# Check for Ghostscript library +############################### + +AC_ARG_WITH(gs, [ --without-gs build without Ghostscript support]) + +have_gs=no +if test "x$with_gs" != xno; then + have_gs=yes + AC_CHECK_LIB(gs, gsapi_new_instance, + [AC_CHECK_HEADER(ghostscript/iapi.h, + FILE_PS='file-ps$(EXEEXT)'; GS_LIBS='-lgs', + [have_gs="no (Ghostscript header files not found)"])], + [have_gs="no (Ghostscript library not found)"]) + if test "x$have_gs" != xyes -a "x$with_gs" = xyes; then + AC_MSG_ERROR([ +*** Checks for Ghostscript library failed. You can build without it by passing +*** --without-gs to configure but you won't be able to use PostScript files then.]) + fi +fi + +if test "x$have_gs" = xyes; then + MIME_TYPES="$MIME_TYPES;application/postscript" +fi + +AC_SUBST(FILE_PS) +AM_CONDITIONAL(HAVE_GS, test "x$have_gs" = xyes) +AC_SUBST(GS_LIBS) + + +################## +# Check for libpng +################## + +PKG_CHECK_MODULES(PNG, libpng >= libpng_required_version,, + [add_deps_error([libpng >= libpng_required_version])]) + +MIME_TYPES="$MIME_TYPES;image/png;image/x-icon" +PNG_CFLAGS="$PNG_CFLAGS -DPNG_PEDANTIC_WARNINGS" + + +################## +# Check for libmng +################## + +AC_ARG_WITH(libmng, [ --without-libmng build without MNG support]) + +have_libmng=no +if test "x$with_libmng" != xno && test -z "$MNG_LIBS" && + test -n "$PNG_LIBS" && test -n "$JPEG_LIBS" && test -n "$Z_LIBS"; then + AC_CHECK_LIB(mng, mng_create, + [AC_CHECK_HEADER(libmng.h, mng_ok=yes)], + [have_libmng="no (MNG library not found)"], -lz -lm) + if test "$mng_ok" = yes; then + have_libmng=yes + FILE_MNG='file-mng$(EXEEXT)'; MNG_LIBS="-lmng $JPEG_LIBS $PNG_LIBS"; MNG_CFLAGS="$PNG_CFLAGS" + if test "x$platform_win32" = "xyes"; then + MNG_CFLAGS="$MNG_CFLAGS -DMNG_USE_DLL" + fi + else + have_libmng="no (MNG header file not found)" + fi +fi + +AC_SUBST(FILE_MNG) +AC_SUBST(MNG_LIBS) +AC_SUBST(MNG_CFLAGS) + + +################# +# Check for libaa +################# + +AC_ARG_WITH(aa, [ --without-aa do not build the AA plug-in]) + +have_libaa=no +if test "x$with_aa" != xno && test -z "$AA_LIBS"; then + have_libaa=yes + AC_CHECK_LIB(aa, aa_printf, + [AC_CHECK_HEADER(aalib.h, + FILE_AA='file-aa$(EXEEXT)'; AA_LIBS='-laa', + [have_libaa="no (AA header file not found)"])], + [have_libaa="no (AA library not found)"]) +fi + +AC_SUBST(FILE_AA) +AC_SUBST(AA_LIBS) + + +################## +# Check for libxpm +################## + +AC_ARG_WITH(libxpm, [ --without-libxpm build without XPM support]) + +gimp_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $X_CFLAGS" +gimp_save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $X_LIBS" +if test "$gdk_target" = x11; then + lib_X11=-lX11 +fi +have_libxpm=no +if test "x$with_libxpm" != xno && test -z "$XPM_LIBS"; then + have_libxpm=yes + AC_CHECK_LIB(Xpm, XpmReadFileToXpmImage, + [AC_CHECK_HEADER(X11/xpm.h, + FILE_XPM='file-xpm$(EXEEXT)'; XPM_LIBS="$X_LIBS $X_PRE_LIBS $lib_X11 -lXpm", + [have_libxpm="no (XPM header file not found)"])], + [have_libxpm="no (XPM library not found)"], $X_PRE_LIBS $lib_X11) +fi +CFLAGS="$gimp_save_CFLAGS" +LDFLAGS="$gimp_save_LDFLAGS" + +if test "x$have_libxpm" = xyes; then + MIME_TYPES="$MIME_TYPES;image/x-xpixmap" +fi + +AC_SUBST(FILE_XPM) +AC_SUBST(XPM_LIBS) + + +################### +# Check for OpenEXR +################### + +AC_ARG_WITH(openexr, [ --without-openexr build without OpenEXR support]) + +have_openexr=no +if test "x$with_openexr" != xno; then + have_openexr=yes + PKG_CHECK_MODULES(OPENEXR, OpenEXR >= openexr_required_version, + FILE_EXR='file-exr$(EXEEXT)', + [have_openexr="no (OpenEXR not found)"]) +fi + +if test "x$have_openexr" = xyes; then + MIME_TYPES="$MIME_TYPES;image/x-exr" +fi + +AC_SUBST(OPENEXR_CFLAGS) +AC_SUBST(OPENEXR_LIBS) +AC_SUBST(FILE_EXR) + +AM_CONDITIONAL(HAVE_OPENEXR, test "x$have_openexr" = xyes) + + +################ +# Check for WebP +################ + +AC_ARG_WITH(webp, [ --without-webp build without WebP support]) + +have_webp=no +if test "x$with_webp" != xno; then + have_webp=yes + PKG_CHECK_MODULES(WEBP, libwebp >= webp_required_version, + [ + PKG_CHECK_MODULES(WEBPMUX, libwebpmux >= webp_required_version, + [ + PKG_CHECK_MODULES(WEBPDEMUX, libwebpdemux >= webp_required_version,, + [have_webp="no (WebP not built with libwebpdemux)"]) + ], + [have_webp="no (WebP not built with libwebpmux)"]) + ], + [have_webp="no (WebP not found)"]) +fi + +if test "x$have_webp" = xyes; then + MIME_TYPES="$MIME_TYPES;image/webp;image/x-webp" +fi + +AM_CONDITIONAL(HAVE_WEBP, test "x$have_webp" = xyes) + + +################### +# Check for libheif +################### + +AC_ARG_WITH(libheif, [ --without-libheif build without libheif support]) + +# Overcomplex tests, but basically: +# - Profiles supported only for libheif >= 1.4.0. +# - libheif 1.5.0 and 1.5.1 are very broken and easily crash. +# As a consequence we prioritize any libheif other than these 2 versions +# (even when under 1.4.0 thus we lose profile support), and only use +# these as last resort, outputting a warning. +have_libheif=no +have_libheif_1_4_0=no +if test "x$with_libheif" != xno; then + have_libheif_1_4_0=yes + have_libheif=yes + PKG_CHECK_MODULES(LIBHEIF, libheif > 1.5.1,, + [ + PKG_CHECK_MODULES(LIBHEIF, libheif = 1.4.0,, + [ + have_libheif_1_4_0="no (libheif >= 1.4.0 not found)" + PKG_CHECK_MODULES(LIBHEIF, libheif = libheif_required_version,, + [ + PKG_CHECK_MODULES(LIBHEIF, libheif >= 1.5.0, + [ + have_libheif_1_4_0=yes + warning_libheif=" +WARNING: libheif version 1.5.0 and 1.5.1 are known to crash when + exporting (bug #4185). Please update." + ], + [ have_libheif="no (libheif not found)" ]) + ]) + ]) + ]) +fi + +can_import_heic=no +can_export_heic=no +can_import_avif=no +can_export_avif=no +if test "x$have_libheif" = xyes; then + can_import_heic=`$PKG_CONFIG --variable=builtin_h265_decoder libheif` + can_export_heic=`$PKG_CONFIG --variable=builtin_h265_encoder libheif` + if test "x$can_import_heic" = xyes; then + MIME_TYPES="$MIME_TYPES;image/heif;image/heic" + fi + can_import_avif=`$PKG_CONFIG --variable=builtin_avif_decoder libheif` + can_export_avif=`$PKG_CONFIG --variable=builtin_avif_encoder libheif` + if test "x$can_import_avif" = xyes; then + MIME_TYPES="$MIME_TYPES;image/avif" + fi + + if test "x$can_import_heic" != xyes && test "x$can_import_avif" != xyes; then + have_libheif=no + have_libheif_1_4_0=no + warning_libheif="" + else + FILE_HEIF='file-heif$(EXEEXT)' + fi +fi + +AC_SUBST(FILE_HEIF) +AM_CONDITIONAL(HAVE_LIBHEIF, test "x$have_libheif" = xyes) + +have_heif_profile_support=no +if test "x$have_libheif_1_4_0" = xyes; then + AC_DEFINE(HAVE_LIBHEIF_1_4_0, 1, + [Define to 1 if libheif >= 1.4.0 is available]) + + if test "x$can_import_heic" = xyes || test "x$can_export_heic" = xyes; then + if test "x$warning_libheif" != "x"; then + have_heif_profile_support="yes (see warning below)" + else + have_heif_profile_support=yes + fi + fi +fi + + +################### +# Check for JPEG XL +################### + +AC_ARG_WITH(jpegxl, [ --without-jpegxl build without JPEG XL support]) + +have_jpegxl=no +if test "x$with_jpegxl" != xno; then + PKG_CHECK_MODULES(JXL, libjxl >= libjxl_required_version, + [ + PKG_CHECK_MODULES(JXL_THREADS, libjxl_threads >= libjxl_required_version, + [have_jpegxl=yes], + [have_jpegxl="no (libjxl_threads not found)"]) + ], + [have_jpegxl="no (libjxl not found)"]) +fi + +if test "x$have_jpegxl" = xyes; then + MIME_TYPES="$MIME_TYPES;image/jxl" + FILE_JPEGXL='file-jpegxl$(EXEEXT)' +fi + +AM_CONDITIONAL(HAVE_JPEGXL, test "x$have_jpegxl" = xyes) +AC_SUBST(FILE_JPEGXL) + + +######################## +# Check for libbacktrace +######################## + +AC_ARG_WITH(libbacktrace, [ --without-libbacktrace build without libbacktrace support]) + +have_libbacktrace=no +if test "x$with_libbacktrace" != xno; then + have_libbacktrace=yes + + gimp_save_LIBS=$LIBS + LIBS="$LIBS -lbacktrace" + + AC_MSG_CHECKING([for LIBBACKTRACE]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stddef.h> + #include <backtrace.h> + #include <backtrace-supported.h> + + #if ! BACKTRACE_SUPPORTED + #error ! BACKTRACE_SUPPORTED + #endif + ]], + [[(void) backtrace_create_state (NULL, 0, NULL, NULL);]])], + [AC_MSG_RESULT([yes]); LIBBACKTRACE_LIBS='-lbacktrace'], + [AC_MSG_RESULT([no]); have_libbacktrace='no (libbacktrace is not found or not supported)']) + + LIBS=$gimp_save_LIBS + + AC_SUBST(LIBBACKTRACE_LIBS) +fi + +if test "x$have_libbacktrace" = xyes; then + AC_DEFINE(HAVE_LIBBACKTRACE, 1, + [Define to 1 if libbacktrace is available]) +fi + + +##################### +# Check for libunwind +##################### + +AC_ARG_WITH(libunwind, [ --without-libunwind build without libunwind support]) + +have_libunwind=no +if test "x$with_libunwind" != xno; then + have_libunwind=yes + PKG_CHECK_MODULES(LIBUNWIND, libunwind >= libunwind_required_version, + [], + [have_libunwind="no (libunwind not found)"]) +fi + +if test "x$have_libunwind" = xyes; then + AC_DEFINE(HAVE_LIBUNWIND, 1, + [Define to 1 if libunwind is available]) +fi + + +####################################### +# Check for detailed backtraces support +####################################### + +detailed_backtraces=no +if test "x$platform_linux" = xyes; then + if test "x$have_libbacktrace" = xyes -o "x$have_libunwind" = xyes; then + detailed_backtraces=yes + else + detailed_backtraces='no (libbacktrace and libunwind are not found or not supported)' + fi +elif test "x$platform_win32" = xyes; then + detailed_backtraces=$enable_drmingw +fi + + +###################### +# Check for libmypaint +###################### + +PKG_CHECK_MODULES(LIBMYPAINT, libmypaint >= 1.4.0,, + [ + PKG_CHECK_MODULES(LIBMYPAINT, libmypaint >= libmypaint_required_version,, + [add_deps_error([libmypaint >= libmypaint_required_version])]) + warning_libmypaint=" +WARNING: libmypaint lower than version 1.4.0 is known to crash when + parsing MyPaint 2 brushes. Please update." + ]) + +PKG_CHECK_MODULES(MYPAINT_BRUSHES, mypaint-brushes-1.0,, + [add_deps_error([mypaint-brushes-1.0])]) + +if test "x$enable_relocatable_bundle" != xno; then + mypaint_brushes_dir='${gimp_installation_dir}/share/mypaint-data/1.0/brushes' +else + mypaint_brushes_dir=`$PKG_CONFIG --variable=brushesdir mypaint-brushes-1.0` +fi +AC_SUBST(mypaint_brushes_dir) + + +################## +# Check for webkit +################## + +AC_ARG_WITH(webkit, [ --without-webkit don't build the help-browser and web-page plug-ins]) + +have_webkit=no +if test "x$with_webkit" != xno; then + PKG_CHECK_MODULES(WEBKIT, webkit-1.0 >= webkit_required_version, + WEB_PAGE='web-page$(EXEEXT)' + have_webkit=yes, + have_webkit="no (WebKit not found)") +else + have_webkit="no (WebKit support disabled)" +fi + +AC_SUBST(WEB_PAGE) +if test "x$have_webkit" = "xyes"; then + AC_DEFINE(HAVE_WEBKIT, 1, [Define to 1 if webkit is available]) +fi +AM_CONDITIONAL(HAVE_WEBKIT, test "x$have_webkit" = xyes) + + +################### +# Check for librsvg +################### + +PKG_CHECK_MODULES(SVG, librsvg-2.0 >= rsvg_required_version,, + [add_deps_error([rsvg >= rsvg_required_version])]) + +MIME_TYPES="$MIME_TYPES;image/svg+xml" + + +#################################### +# Allow to disable the print plug-in +#################################### + +AC_ARG_WITH(print,[ --without-print build without print support]) + +enable_print="no (disabled)" +if test "x$with_print" != xno; then + enable_print="yes" +fi + +AM_CONDITIONAL(BUILD_PRINT, test "x$enable_print" = xyes) + + +###################### +# Check for libpoppler +###################### + +# PDF import support is a granted feature. +PKG_CHECK_MODULES(POPPLER, [poppler-glib >= poppler_required_version],, + [add_deps_error([poppler-glib >= poppler_required_version])]) +# All modern distributions have at least this version and CJK/Cyrillic +# support should not be considered as "second-zone citizen". +PKG_CHECK_MODULES(POPPLER_DATA, [poppler-data >= poppler_data_required_version],, + [add_deps_error([poppler-data >= poppler_data_required_version])]) + +# MIME_TYPES is for the formats we can open as used for instance in the +# desktop file. Even if cairo-pdf (used for PDF export) is not +# installed, the mime-type list should contain application/pdf. +MIME_TYPES="$MIME_TYPES;application/pdf" + +##################### +# Check for cairo-pdf +##################### + +AC_ARG_WITH(cairo_pdf,[ --without-cairo-pdf build without cairo-pdf support]) +have_cairo_pdf=no +if test "x$with_cairo_pdf" != xno; then + have_cairo_pdf=yes + PKG_CHECK_MODULES(CAIRO_PDF, cairo-pdf >= cairo_pdf_required_version, + FILE_PDF_SAVE='file-pdf-save$(EXEEXT)', + have_cairo_pdf="no (cairo-pdf not found)") +else + have_cairo_pdf="no (cairo-pdf support disabled)" +fi + +AC_SUBST(FILE_PDF_SAVE) + + +################### +# Check for libwmf2 +################### + +AC_ARG_WITH(wmf, [ --without-wmf build without WMF support]) + +have_libwmf=no +AS_IF([test "x$with_wmf" != xno], [ + PKG_CHECK_MODULES([WMF], libwmf >= wmf_required_version, + [have_libwmf=yes], [have_libwmf="no (libwmf not found)"]) + + AS_IF([test "x$have_libwmf" != xyes], [ + # No pkg-config; try falling back to the traditional -config script + AC_PATH_PROG([WMF_CONFIG], [libwmf-config], [no]) + AS_IF([test "x$WMF_CONFIG" != xno], [ + AC_MSG_CHECKING(for libwmf >= wmf_required_version using $WMF_CONFIG) + wmf_version=`$WMF_CONFIG --version` + AS_IF(expr $wmf_version \>= wmf_required_version >/dev/null, [ + AC_MSG_RESULT([yes (version $wmf_version)]) + have_libwmf=yes + WMF_LIBS=`$WMF_CONFIG --libs` + WMF_CFLAGS=`$WMF_CONFIG --cflags` + ]) + ]) + ]) +]) + +if test "x$have_libwmf" = xyes; then + FILE_WMF='file-wmf$(EXEEXT)' + MIME_TYPES="$MIME_TYPES;image/x-wmf" +fi + +AC_SUBST(FILE_WMF) +AC_SUBST(WMF_LIBS) +AC_SUBST(WMF_CFLAGS) + + +#################### +# Check for OpenJPEG +#################### + +AC_ARG_WITH(jpeg2000, [ --without-jpeg2000 build without JPEG 2000 support]) + +have_openjpeg=no +if test "x$with_jpeg2000" != xno; then + have_openjpeg=yes + PKG_CHECK_MODULES(OPENJPEG, libopenjp2 >= openjpeg_required_version, + FILE_JP2_LOAD='file-jp2-load$(EXEEXT)' + have_openjpeg=yes, + have_openjpeg="no (OpenJPEG not found)") +fi + +if test "x$have_openjpeg" = xyes; then + MIME_TYPES="$MIME_TYPES;image/jp2" +fi + +AM_CONDITIONAL(HAVE_OPENJPEG, test "x$have_openjpeg" = xyes) +AC_SUBST(FILE_JP2_LOAD) + + +################ +# Check for lcms +################ + +PKG_CHECK_MODULES(LCMS, lcms2 >= lcms_required_version,, + [add_deps_error([lcms2 >= lcms_required_version])]) + + +###################### +# Check for libXcursor +###################### + +AC_ARG_WITH(xmc,[ --without-xmc build without Xcursor support]) + +have_xmc=no +if test "x$with_xmc" != xno; then + have_xmc=yes + PKG_CHECK_MODULES(XMC, xcursor, + FILE_XMC='file-xmc$(EXEEXT)', + have_xmc="no (libXcursor not found)") +else + have_xmc="no (libXcursor support disabled)" +fi + +if test "x$have_xmc" = xyes; then + MIME_TYPES="$MIME_TYPES;image/x-xcursor" +fi + +AC_SUBST(FILE_XMC) + + +################ +# Check for alsa +################ + +AC_ARG_WITH(alsa, [ --without-alsa disable alsa support in midi input controller]) + +have_alsa="no (alsa support disabled)" +if test "x$with_alsa" != xno; then + have_alsa=yes + AM_PATH_ALSA(alsa_required_version, + AC_DEFINE(HAVE_ALSA, 1, [Define to 1 if alsa is available]), + have_alsa="no (libasound not found or unusable)") +fi + + +####################### +# Check for Linux Input +####################### + +AC_ARG_WITH(linux-input, [ --without-linux-input don't build linux input event controller module]) + +have_linux_input="no (linux input support disabled)" +AS_IF([test "x$with_linux_input" != "xno"], + [AC_CHECK_HEADER([linux/input.h], + [AC_CHECK_DECL([KEY_OK], + [have_linux_input=yes], + [have_linux_input="no (needs Linux 2.6)"], + [#include <linux/input.h>])])]) + +AM_CONDITIONAL([HAVE_LINUX_INPUT], [test "x$have_linux_input" = xyes]) + + +############################### +# Check for DirectX DirectInput +############################### + +AC_ARG_WITH(directx-sdk, [ --with-directx-sdk=PFX prefix where the DirectX SDK is installed(optional)]) + +have_dx_dinput=no +if test "x$os_win32" = xyes; then + case "$with_directx_sdk" in + *" "*) AC_MSG_WARN([The DirectX SDK should be accessible through a path without spaces. Use MSYS mounts. Ignoring your --with-directx-sdk switch.]) + with_directx_sdk=;; + *\\*) AC_MSG_WARN([Use plain (forward) slashes only in your --with-directx-sdk switch. Ignoring your --with-directx-sdk switch.]) + with_directx_sdk=;; + esac + + dinput_save_CPPFLAGS="$CPPFLAGS" + dinput_save_LDFLAGS="$LDFLAGS" + if test "x$with_directx_sdk" != x; then + CPPFLAGS="-I $with_directx_sdk/Include $CPPFLAGS" + LDFLAGS="-L$with_directx_sdk/Lib/x86 $LDFLAGS" + AC_CHECK_HEADER(dinput.h, + [AC_CHECK_LIB(dxguid, GUID_XAxis, have_dx_dinput=yes)]) + fi + + if test "x$have_dx_dinput" = xyes; then + AC_DEFINE(HAVE_DX_DINPUT, 1, [Define to 1 if you have DirectX DirectInput headers and libraries]) + else + CPPFLAGS="$dinput_save_CPPFLAGS" + LDFLAGS="$dinput_save_LDFLAGS" + fi +fi + +AM_CONDITIONAL(HAVE_DX_DINPUT, test "x$have_dx_dinput" = xyes) + + +#################### +# Check for libgudev +#################### + +AC_ARG_WITH(gudev, [ --without-gudev build without GUdev support]) + +have_libgudev=no + +if test "x$with_gudev" = xno; then + have_libgudev="no (disabled)" +fi + +if test "x$have_linux_input" = xyes && test "x$with_gudev" != xno; then + PKG_CHECK_MODULES(GUDEV, gudev-1.0 >= libgudev_required_version, + have_libgudev=yes, + have_libgudev="no (libgudev not found)") +fi + +if test "x$have_libgudev" = xyes; then + AC_DEFINE(HAVE_LIBGUDEV, 1, [Define to 1 if libgudev is available]) +fi + + +########################## +# Check for Email Settings +########################## + +# The default behavior is that xdg-email is searched in the user PATH, +# and email plugin is enabled if found. +# Sendmail can be used instead of xdg-email, but must be explicitly +# enabled with --with-sendmail. + +have_email="no (xdg-email not found)" + +AC_ARG_WITH(sendmail,[ --with-sendmail[=DIR] use sendmail instead of xdg-email]) + +have_sendmail=no +# Sendmail must be explicitly enabled to replace xdg-email implementation. +if test "x$with_sendmail" != "x" && test "x$with_sendmail" != "xno"; then + if test "x$with_sendmail" = "xyes"; then + sendmail_path=$PATH:/usr/sbin:/usr/lib + AC_DEFINE_UNQUOTED(SENDMAIL, "", + [The MTA used by the mail plug-in.]) + else + sendmail_path=$with_sendmail + AC_DEFINE_UNQUOTED(SENDMAIL, "$with_sendmail", + [The MTA used by the mail plug-in.]) + fi + + AC_PATH_PROG(SENDMAIL, sendmail, , $sendmail_path) + if test "x$SENDMAIL" != "x"; then + have_email="yes (sendmail)" + else + # Not having sendmail at runtime is not a blocker. + have_email="needs runtime dependency: sendmail" + fi + have_sendmail=yes +fi + +if test "x$have_sendmail" = xno; then + AC_PATH_PROG(XDG_EMAIL, xdg-email) + if test "x$XDG_EMAIL" != "x"; then + have_email="yes (xdg-email)" + else + # Not having xdg-email at runtime is not a blocker. + # But let's inform the builder that for the feature to be available, + # xdg-email is a runtime dependency. + have_email="needs runtime dependency: xdg-email" + fi +fi + +################ +# Check for perl +################ + +AC_PATH_PROGS(PERL,perl5 perl,perl) +AX_PROG_PERL_VERSION([perl_required_version],, + [add_deps_error([perl >= perl_required_version])]) + + +AC_ARG_WITH(pdbgen, + [ --with-pdbgen use 'pdbgen' code generation tool],, + with_pdbgen=$USE_MAINTAINER_MODE) + +AM_CONDITIONAL(WITH_PDBGEN, test "x$with_pdbgen" = xyes) + + +##################### +# Check for json-glib +##################### + +PKG_CHECK_MODULES(JSON_GLIB, json-glib-1.0 >= json_glib_required_version,, + [add_deps_error([json-glib-1.0 >= json_glib_required_version])]) + +################## +# Check for python +################## + +# Pygimp configure stuff ... +AC_ARG_ENABLE(python, + AS_HELP_STRING([--disable-python], + [do not build the python extension])) + +m4_define([pycheck_error], [ + required_deps="$required_deps + - $1 + *** Please install $2, or skip building the python scripting extension by + *** passing --disable-python to configure (but then you will not be able + *** to use scripts for GIMP that are written in Python)."]) + +# pygtk-codegen-2.0 and the defsdir are used for the `dist` target, +# regardless of whether Python is enabled or not. Their absence don't +# break simple builds but we still check them. +AC_PATH_PROG(PYGTK_CODEGEN, pygtk-codegen-2.0, no) + +AC_MSG_CHECKING(for pygtk defs) +PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0` +AC_SUBST(PYGTK_DEFSDIR) +AC_MSG_RESULT($PYGTK_DEFSDIR) + +if test "x$enable_python" != xno; then + enable_python="yes" + # check for Python + AM_PATH_PYTHON2(python2_required_version,, + [pycheck_error([Python 2 (python2_required_version or newer)], [it])]) + AM_CHECK_PYTHON_HEADERS(, [pycheck_error([Python 2 headers], [them])]) + + # Win32 needs all symbols resolved for linking, even for DLLs + # Assume the link library is in $exec_prefix/libs + # This might be able to be figured out from distutils, but it's + # not documented so we won't rely on internal implementation + PYLINK_LIBS= + if test "x$platform_win32" = "xyes"; then + PYBIN_PATH="$py_exec_prefix\pythonw.exe" + PYTHON_INCLUDES=`echo "$PYTHON_INCLUDES" | sed -e 's/\\\\/\\//g'` + py_exec_prefix=`echo "$py_exec_prefix" | sed -e 's/\\\\/\\//g'` + pylibversion=`echo $PYTHON_VERSION | sed -e 's/\\.//'` + PYLINK_LIBS="-L${py_exec_prefix}/libs -lpython${pylibversion}" + else + PYBIN_PATH="$PYTHON" + fi + AC_SUBST(PYLINK_LIBS) + AC_SUBST(PYBIN_PATH) + + # check for PyGTK + PKG_CHECK_MODULES(PYGTK, pygtk-2.0 >= pygtk_required_version,, + [pycheck_error([PyGTK pygtk_required_version or newer], [it])]) + + if test "x$PYGTK_CODEGEN" = xno; then + pycheck_error([pygtk-codegen-2.0 script], [it]) + fi + + PKG_CHECK_MODULES(PYCAIRO, pycairo >= pycairo_required_version,, + [pycheck_error([PyCairo pycairo_required_version or newer], [it])]) + + GIMP_DETECT_CFLAGS(PYGIMP_EXTRA_CFLAGS, '-fno-strict-aliasing') + AC_SUBST(PYGIMP_EXTRA_CFLAGS) + + MIME_TYPES="$MIME_TYPES;image/openraster" +fi +AM_CONDITIONAL(BUILD_PYTHON, test "x$enable_python" != xno) + + +########################################################### +# Some plug-ins don't build on Win32, others are Win32-only +########################################################### + +if test "x$os_win32" = xno; then + MAIL='mail$(EXEEXT)' +fi + +AC_SUBST(MAIL) + + +############################### +# Check for GTK Mac Integration +############################### + +gtk_mac_integration_ok=no +if test "x$platform_osx" != xno && + test "x`$PKG_CONFIG --variable=target gtk+-2.0`" == "xquartz"; then + + PKG_CHECK_MODULES(GTK_MAC_INTEGRATION, gtk-mac-integration-gtk2 >= gtk_mac_integration_required_version, + gtk_mac_integration_ok=yes, + gtk_mac_integration_ok=no) + + if test "x$gtk_mac_integration_ok" != "xyes"; then + PKG_CHECK_MODULES(GTK_MAC_INTEGRATION, gtk-mac-integration >= gtk_mac_integration_required_version, + gtk_mac_integration_ok=yes, + gtk_mac_integration_ok=no) + fi +fi + +AM_CONDITIONAL(PLATFORM_OSX_QUARTZ, test "x$gtk_mac_integration_ok" = xyes) + + +########################################################## +# Determine where to install the desktop & mime info files +########################################################## + +AC_ARG_WITH(desktop-dir, [ --with-desktop-dir=PATH where to install desktop files (default=PREFIX/share)]) + +if test "x$with_desktop_dir" != x; then + DESKTOP_DATADIR=$with_desktop_dir +else + DESKTOP_DATADIR="$datadir" +fi + +AM_CONDITIONAL(DESKTOP_DATADIR, test "x$with_desktop_dir" != xno) +AC_SUBST(DESKTOP_DATADIR) + + +##################### +# Check for XML tools +##################### + +AC_PATH_PROG(XMLLINT, xmllint, no) +AM_CONDITIONAL(HAVE_XMLLINT, test "x$XMLLINT" != "xno") + +AC_PATH_PROG(XSLTPROC, xsltproc, no) +AM_CONDITIONAL(HAVE_XSLTPROC, test "x$XSLTPROC" != "xno") + + +######################## +# Check for vector icons +######################## + +# If not cross-compiling, default build's link and compile flags to the +# target's flags. +if test "$cross_compiling" != "yes"; then + if test "x$LDFLAGS_FOR_BUILD" = "x"; then + LDFLAGS_FOR_BUILD="$LDFLAGS" + fi + if test "x$CFLAGS_FOR_BUILD" = "x"; then + CFLAGS_FOR_BUILD="$CFLAGS" + fi + if test "x$CPPFLAGS_FOR_BUILD" = "x"; then + CPPFLAGS_FOR_BUILD="$CPPFLAGS" + fi +fi + +AC_ARG_ENABLE(vector-icons, [ --disable-vector-icons use raster icons rather than vector ones (default=auto)], , + enable_vector_icons=auto) + +if test "x$enable_vector_icons" != "xno"; then + have_shared_mime_info="" + # shared-mime-info is needed to correctly detect SVG files (except on + # Windows, apparently). + PKG_CHECK_MODULES(MIME_INFO, [shared-mime-info], + have_shared_mime_info="yes", have_shared_mime_info="no") + if test "x$have_shared_mime_info" = "xyes" || + test "x$platform_win32" = "xyes"; then + # Check if librsvg was built with --disable-pixbuf-loader. + gdk_pixbuf_moduledir=`$PKG_CONFIG --variable=gdk_pixbuf_moduledir gdk-pixbuf-2.0` + # AC_CHECK_FILE macro does not work when cross-compiling and exits with: + # error: cannot check for file existence when cross compiling + # So let's test files the shell way. + if (test "x$platform_win32" = "xyes" && + test -f "$gdk_pixbuf_moduledir/libpixbufloader-svg.dll") || + test -f "$gdk_pixbuf_moduledir/libpixbufloader-svg.so"; then + # We must not use $PKG_CONFIG nor PKG_CHECK_* macros because we need + # to make sure we use the native pkg-config (in case we cross-compile). + if pkg-config --atleast-version=glib_required_version glib-2.0 && + pkg-config gio-2.0; then + NATIVE_GLIB_LIBS=`pkg-config --libs gio-2.0 glib-2.0` + NATIVE_GLIB_CFLAGS=`pkg-config --cflags gio-2.0 glib-2.0` + enable_vector_icons="yes" + + if test "x$platform_win32" = "xyes"; then + warning_vector_icons_windows=" +WARNING: You enabled vector icons on Win32. Make sure to run: + $ gdk-pixbuf-query-loaders.exe --update-cache + on the target machine (this command generates loaders.cache) + so that GdkPixbuf knows where to find the SVG loader." + fi + else + enable_vector_icons="no (missing native glib-2.0 > glib_required_version or gio-2.0)" + fi + else + enable_vector_icons="no (librsvg GdkPixbuf loader missing)" + fi + else + enable_vector_icons="no (missing shared-mime-info)" + fi +fi + +AC_SUBST(NATIVE_GLIB_LIBS) +AC_SUBST(NATIVE_GLIB_CFLAGS) +AM_CONDITIONAL(ENABLE_VECTOR_ICONS, test "x$enable_vector_icons" = "xyes") + +#################### +# Check for xvfb-run +#################### + +AC_ARG_WITH(xvfb-run, [ --without-xvfb-run do not use xvfb-run for UI-dependent automatic tests]) + +have_xvfb_run="no (disabled)" +if test "x$with_xvfb_run" != "xno"; then + AC_PATH_PROG(XVFB_RUN, xvfb-run, no) + if test "x$XVFB_RUN" != "xno"; then + have_xvfb_run="yes" + AC_DEFINE(HAVE_XVFB_RUN, 1, [Define to 1 if xvfb-run is available]) + else + have_xvfb_run="no (not found)" + fi +fi +AM_CONDITIONAL(HAVE_XVFB_RUN, test "x$have_xvfb_run" = "xyes") + +########################## +# Check for appstream-util +########################## + +AC_ARG_WITH(appdata-test, [ --without-appdata-test do not validate the appdata file]) + +have_appstream_util="no (disabled)" +if test "x$with_appdata_test" != "xno"; then + AC_PATH_PROG(APPSTREAM_UTIL, appstream-util, no) + if test "x$APPSTREAM_UTIL" != "xno"; then + have_appstream_util="yes" + else + have_appstream_util="no (appstream-util not found)" + fi +fi +AM_CONDITIONAL(HAVE_APPSTREAM_UTIL, test "x$have_appstream_util" = "xyes") +if test "x$have_appstream_util" = "xyes"; then + have_appstream_util="yes (this test requires network access; --without-appdata-test to disable)" +fi + + +################################# +# Check for desktop-file-validate +################################# + +AC_PATH_PROG(DESKTOP_FILE_VALIDATE, desktop-file-validate, no) +if test "x$DESKTOP_FILE_VALIDATE" != "xno"; then + have_desktop_file_validate="yes" +else + have_desktop_file_validate="no (desktop-file-validate not found)" +fi +AM_CONDITIONAL(HAVE_DESKTOP_FILE_VALIDATE, test "x$DESKTOP_FILE_VALIDATE" != "xno") + +#################### +# Set bug report URL +#################### + +# Allowing third-party packagers to set their own bugtracker URL, in +# order to filter first packaging bugs from core bugs. + +AC_ARG_WITH(bug-report-url, + [ --with-bug-report-url URL used by the debug dialog to report bugs],, + [with_bug_report_url="$PACKAGE_BUGREPORT"]) + +if test "x$with_bug_report_url" = "x"; then + with_bug_report_url="$PACKAGE_BUGREPORT" +fi + +BUG_REPORT_URL="$with_bug_report_url" +AC_DEFINE_UNQUOTED(BUG_REPORT_URL, "$with_bug_report_url", + [The URL to open in order to report bugs]) +AC_SUBST(BUG_REPORT_URL) + +override_bug_report_url= +if test "x$with_bug_report_url" = "x$PACKAGE_BUGREPORT"; then +override_bug_report_url=" +NOTE: if you plan on packaging GIMP for distribution, it is recommended + to override the bug report URL with option: + --with-bug-report-url=https://example.com/ + so that you can filter packaging bugs from core bugs before + reporting upstream. +" +fi + +##################### +# Build identifiers # +##################### + +AC_ARG_WITH(build-id, + [ --with-build-id A unique string used to define your build],, + [with_build_id="unknown"]) +AC_DEFINE_UNQUOTED(GIMP_BUILD_ID, "$with_build_id", + [The string defining the build]) + +AC_ARG_WITH(revision, + [ --with-revision Revision increment for a package],, + [with_revision="0"]) +GIMP_PACKAGE_REVISION=$with_revision +AC_SUBST(GIMP_PACKAGE_REVISION) + +AC_ARG_ENABLE(check-update, + [ --enable-check-update + GIMP will not look up new version availability on startup (default=auto)],, + enable_check_update=auto) +if test "x$enable_check_update" != xno && + test "x$enable_check_update" != xyes; then + if test "x$platform_osx" = "xyes" || + test "x$platform_win32" = "xyes"; then + enable_check_update=yes + else + enable_check_update=no + fi +fi +if test "x$enable_check_update" = xyes; then + AC_DEFINE(CHECK_UPDATE, 1, + [Define to 1 if automatic update check is enabled]) +fi + +AC_DEFINE_UNQUOTED(GIMP_BUILD_PLATFORM, "$host_os", + [The OS this was built for]) +if test "x$platform_linux" = xyes; then + platform_family="linux" +elif test "x$platform_win32" = xyes; then + platform_family="windows" +elif test "x$platform_osx" = xyes; then + platform_family="macos" +else + platform_family="other" +fi +AC_DEFINE_UNQUOTED(GIMP_BUILD_PLATFORM_FAMILY, "$platform_family", + [The OS family this was built for]) + +######################### +# Default ICC directory # +######################### + +# This is necessary because some Unix systems may have a different +# standard path for color profiles. And in particular, sandbox builds +# might mount the host system at a different root. This is for +# instance the case of flatpak which mount the host root at /run/host/. +if test "x$platform_osx" = "xno" && + test "x$platform_win32" = "xno"; then + AC_MSG_CHECKING([default directory for color profiles]) + AC_ARG_WITH(icc-directory, + [ --with-icc-directory Path to default color profiles for this system],, + [with_icc_directory="/usr/share/color/icc"]) + + if test "x$with_icc_directory" = "x"; then + with_icc_directory="/usr/share/color/icc" + fi + + AC_DEFINE_UNQUOTED(COLOR_PROFILE_DIRECTORY, + "$with_icc_directory", + [The path to default color profiles for this system]) + AC_MSG_RESULT([$with_icc_directory]) +fi + +###################################### +# Checks for gtk-doc and docbook-tools +###################################### + +# Check for GTK_DOC_CHECK availability. The GTK_DOC_CHECK invocation +# must be on its own line, gtkdocize relies on it +m4_ifdef([GTK_DOC_CHECK], [ +GTK_DOC_CHECK([1.0]) +]) + +# NOTE: We need to use a separate automake conditional for this +# to make this work with the tarballs. +AM_CONDITIONAL(ENABLE_GTK_DOC, test "x$enable_gtk_doc" = xyes) + +AC_ARG_ENABLE(gtk-doc-app, [ --enable-gtk-doc-app build developer documentation for app (default=no)], , enable_gtk_doc_app=no) +AM_CONDITIONAL(ENABLE_GTK_DOC_APP, test "x$enable_gtk_doc_app" = xyes) + + +############################# +# Check for Windows installer +############################# + +AC_MSG_CHECKING([if building the Windows installer]) +AC_ARG_ENABLE(windows-installer, + [ --enable-windows-installer + generate files needed for the Windows installer + (default=no)],, + enable_windows_installer=no) + +if test "x$enable_windows_installer" != xno; then + if test ! -e "$srcdir/build/windows/installer/lang/setup.isl.in"; then + AC_MSG_RESULT([no (not building from git)]) + AC_MSG_ERROR([Building the Windows installer is only supported when building from git.]) + fi +fi + +AC_MSG_RESULT([$enable_windows_installer]) +AM_CONDITIONAL(BUILD_WINDOWS_INSTALLER, test "x$enable_windows_installer" != xno) + + +######################################### +# Allow to configure the GIMP environment +######################################### + +AC_ARG_ENABLE(default-binary, [ --enable-default-binary install this as the default gimp binary (default=gimp_stable)], , enable_default_binary=gimp_stable) + +AM_CONDITIONAL(DEFAULT_BINARY, test "x$enable_default_binary" = xyes) + + +AC_ARG_ENABLE(gimp-console, [ --enable-gimp-console build a console-only binary which does not link GTK+], , enable_gimp_console=yes) + +AM_CONDITIONAL(ENABLE_GIMP_CONSOLE, test "x$enable_gimp_console" != xno) + + +# Possibly change default gimpdir from $XDG_CONFIG_HOME/GIMP/gimp_user_version +gimpdir=GIMP +AC_ARG_WITH(gimpdir, [ --with-gimpdir=DIR change default gimpdir from $XDG_CONFIG_HOME/GIMP/gimp_user_version to $XDG_CONFIG_HOME/DIR/gimp_user_version, or to DIR if DIR is an absolute path], +if eval "test x$with_gimpdir != x"; then + if eval "test x$with_gimpdir != xyes"; then + gimpdir=$with_gimpdir + fi +fi) + +# Build the gimpdir to be used in manpages here, because the manpage +# source is unreadable enough already +case "$gimpdir" in + /*) + manpage_gimpdir="$gimpdir" + ;; + *) + manpage_gimpdir="\\fB\$XDG_CONFIG_HOME\\fP/$gimpdir/gimp_user_version" + ;; +esac + +gimpdatadir="$datadir/$PACKAGE/gimp_data_version" +gimpplugindir="$libdir/$PACKAGE/gimp_plugin_version" +gimpsysconfdir="$sysconfdir/$PACKAGE/gimp_sysconf_version" + +AC_SUBST(gimpdir) +AC_SUBST(manpage_gimpdir) +AC_SUBST(gimpdatadir) +AC_SUBST(gimpplugindir) +AC_SUBST(gimpsysconfdir) + + +# GNU format message catalogs go into $datadir/locale, +# standard location is $libdir/locale. DATADIRNAME set accordingly. + +gimplocaledir="$datadir/locale" +if test "$DATADIRNAME" = "lib"; then + gimplocaledir="$libdir/locale" +fi + +AC_SUBST(gimplocaledir) + + +############################ +# Some defines for the build +############################ + +AM_CONDITIONAL(STATICLIBS, test "x$enable_static" = xyes) + +# a tuned version of glib-mkenums +GIMP_MKENUMS="\$(PERL) \$(top_srcdir)/tools/gimp-mkenums" +AC_SUBST(GIMP_MKENUMS) + +#Add required trailing ; to list +MIME_TYPES="$MIME_TYPES;" + +AC_SUBST(MIME_TYPES) + + +######################### +# Disable deprecated APIs +######################### + +CPPFLAGS="${CPPFLAGS} -DGIMP_DISABLE_DEPRECATED -DBABL_DISABLE_DEPRECATED -DGSEAL_ENABLE" + +# Make sure not to disable deprecated APIs for unreleased versions. +# We must build without problems with future releases of libraries +# and disabling deprecated API risks breaking the build + +if test "x$have_glib_2_57" != "xyes"; then + CPPFLAGS="${CPPFLAGS} -DG_DISABLE_DEPRECATED" +fi + +if test "x$have_gtk_2_26" != "xyes"; then + CPPFLAGS="${CPPFLAGS} -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED" +fi + +if test "x$have_pango_1_32" != "xyes"; then + CPPFLAGS="${CPPFLAGS} -DPANGO_DISABLE_DEPRECATED" +fi + + +############################ +# Require multihead safe API +############################ + +CPPFLAGS="${CPPFLAGS} -DGDK_MULTIHEAD_SAFE -DGTK_MULTIHEAD_SAFE" + + +################## +# configure output +################## + +# easy way to skip the plug-in build +GIMP_PLUGINS=plug-ins +GIMP_MODULES=modules +AC_SUBST(GIMP_PLUGINS) +AC_SUBST(GIMP_MODULES) + +AC_CONFIG_COMMANDS([libgimpbase/gimpversion.h], [ + outfile=gimpversion.h-tmp + cat > $outfile <<\_______EOF +/* gimpversion.h + * + * This is a generated file. Please modify 'configure.ac' + */ + +#if !defined (__GIMP_BASE_H_INSIDE__) && !defined (GIMP_BASE_COMPILATION) +#error "Only <libgimpbase/gimpbase.h> can be included directly." +#endif + +#ifndef __GIMP_VERSION_H__ +#define __GIMP_VERSION_H__ + +G_BEGIN_DECLS + + +/** + * SECTION: gimpversion + * @title: gimpversion + * @short_description: Macros and constants useful for determining + * GIMP's version number and capabilities. + * + * Macros and constants useful for determining GIMP's version number and + * capabilities. + **/ + +_______EOF + + cat >>$outfile <<_______EOF +/** + * GIMP_MAJOR_VERSION: + * + * The major GIMP version number. + **/ +#define GIMP_MAJOR_VERSION ($gimp_major_ver) + +/** + * GIMP_MINOR_VERSION: + * + * The minor GIMP version number. + **/ +#define GIMP_MINOR_VERSION ($gimp_minor_ver) + +/** + * GIMP_MICRO_VERSION: + * + * The micro GIMP version number. + **/ +#define GIMP_MICRO_VERSION ($gimp_micro_ver) + +/** + * GIMP_VERSION: + * + * The GIMP version as a string. + **/ +#define GIMP_VERSION "$gimp_ver" + +/** + * GIMP_API_VERSION: + * + * Since: 2.2 + **/ +#define GIMP_API_VERSION "$gimp_api_ver" + +_______EOF + + cat >>$outfile <<\_______EOF +#define GIMP_CHECK_VERSION(major, minor, micro) \ + (GIMP_MAJOR_VERSION > (major) || \ + (GIMP_MAJOR_VERSION == (major) && GIMP_MINOR_VERSION > (minor)) || \ + (GIMP_MAJOR_VERSION == (major) && GIMP_MINOR_VERSION == (minor) && \ + GIMP_MICRO_VERSION >= (micro))) + + +G_END_DECLS + +#endif /* __GIMP_VERSION_H__ */ +_______EOF + + if cmp -s $outfile libgimpbase/gimpversion.h; then + AC_MSG_NOTICE([libgimpbase/gimpversion.h is unchanged]) + rm -f $outfile + else + mv $outfile libgimpbase/gimpversion.h + fi +],[ + gimp_major_ver=gimp_major_version + gimp_minor_ver=gimp_minor_version + gimp_micro_ver=gimp_micro_version + gimp_ver=gimp_version + gimp_api_ver=gimp_api_version +]) + +AC_CONFIG_FILES([ +INSTALL +tools/Makefile +pdb/Makefile +libgimp/Makefile +libgimpbase/Makefile +libgimpconfig/Makefile +libgimpcolor/Makefile +libgimpmath/Makefile +libgimpmodule/Makefile +libgimpthumb/Makefile +libgimpwidgets/Makefile +app/Makefile +app/actions/Makefile +app/config/Makefile +app/core/Makefile +app/operations/Makefile +app/operations/layer-modes/Makefile +app/operations/layer-modes-legacy/Makefile +app/operations/tests/Makefile +app/gegl/Makefile +app/dialogs/Makefile +app/display/Makefile +app/file/Makefile +app/file-data/Makefile +app/gui/Makefile +app/menus/Makefile +app/paint/Makefile +app/pdb/Makefile +app/plug-in/Makefile +app/propgui/Makefile +app/text/Makefile +app/tools/Makefile +app/vectors/Makefile +app/widgets/Makefile +app/xcf/Makefile +app/tests/Makefile +app/tests/files/Makefile +app/tests/gimpdir-empty/Makefile +app/tests/gimpdir-empty/brushes/Makefile +app/tests/gimpdir-empty/gradients/Makefile +app/tests/gimpdir-empty/patterns/Makefile +app/tests/gimpdir/Makefile +app/tests/gimpdir/brushes/Makefile +app/tests/gimpdir/gradients/Makefile +app/tests/gimpdir/patterns/Makefile +app-tools/Makefile +build/Makefile +build/windows/Makefile +build/windows/gimp.rc +build/windows/gimp-plug-ins.rc +build/windows/installer/Makefile +build/windows/installer/lang/Makefile +plug-ins/Makefile +plug-ins/file-bmp/Makefile +plug-ins/file-dds/Makefile +plug-ins/file-exr/Makefile +plug-ins/file-faxg3/Makefile +plug-ins/file-fits/Makefile +plug-ins/file-fli/Makefile +plug-ins/file-ico/Makefile +plug-ins/file-jpeg/Makefile +plug-ins/file-psd/Makefile +plug-ins/file-raw/Makefile +plug-ins/file-sgi/Makefile +plug-ins/file-tiff/Makefile +plug-ins/file-webp/Makefile +plug-ins/flame/Makefile +plug-ins/fractal-explorer/Makefile +plug-ins/fractal-explorer/examples/Makefile +plug-ins/gfig/Makefile +plug-ins/gfig/gfig-examples/Makefile +plug-ins/gfig/images/Makefile +plug-ins/ui/Makefile +plug-ins/gimpressionist/Brushes/Makefile +plug-ins/gimpressionist/Makefile +plug-ins/gimpressionist/Paper/Makefile +plug-ins/gimpressionist/Presets/Makefile +plug-ins/gradient-flare/Makefile +plug-ins/gradient-flare/flares/Makefile +plug-ins/help-browser/Makefile +plug-ins/help/Makefile +plug-ins/ifs-compose/Makefile +plug-ins/imagemap/Makefile +plug-ins/imagemap/images/Makefile +plug-ins/lighting/Makefile +plug-ins/lighting/images/Makefile +plug-ins/map-object/Makefile +plug-ins/metadata/Makefile +plug-ins/pagecurl/Makefile +plug-ins/print/Makefile +plug-ins/pygimp/Makefile +plug-ins/pygimp/plug-ins/Makefile +plug-ins/screenshot/Makefile +plug-ins/script-fu/Makefile +plug-ins/script-fu/ftx/Makefile +plug-ins/script-fu/scripts/Makefile +plug-ins/script-fu/scripts/images/Makefile +plug-ins/script-fu/tinyscheme/Makefile +plug-ins/selection-to-path/Makefile +plug-ins/twain/Makefile +plug-ins/common/Makefile +modules/Makefile +devel-docs/Makefile +devel-docs/app/Makefile +devel-docs/app/version +devel-docs/libgimp/Makefile +devel-docs/libgimp/version +devel-docs/libgimpbase/Makefile +devel-docs/libgimpbase/version +devel-docs/libgimpconfig/Makefile +devel-docs/libgimpconfig/version +devel-docs/libgimpcolor/Makefile +devel-docs/libgimpcolor/version +devel-docs/libgimpmath/Makefile +devel-docs/libgimpmath/version +devel-docs/libgimpmodule/Makefile +devel-docs/libgimpmodule/version +devel-docs/libgimpthumb/Makefile +devel-docs/libgimpthumb/version +devel-docs/libgimpwidgets/Makefile +devel-docs/libgimpwidgets/version +devel-docs/performance-logs/Makefile +devel-docs/tools/Makefile +docs/Makefile +menus/Makefile +cursors/Makefile +icons/Makefile +icons/hicolor/Makefile +icons/Color/Makefile +icons/Legacy/Makefile +icons/Symbolic/Makefile +icons/Symbolic-High-Contrast/Makefile +icons/Symbolic-Inverted/Makefile +icons/Symbolic-Inverted-High-Contrast/Makefile +themes/Makefile +themes/System/Makefile +themes/Dark/Makefile +themes/Gray/Makefile +themes/Light/Makefile +data/Makefile +data/brushes/Makefile +data/brushes/Basic/Makefile +data/brushes/Fun/Makefile +data/brushes/gimp-obsolete-files/Makefile +data/brushes/Media/Makefile +data/brushes/Legacy/Makefile +data/brushes/Sketch/Makefile +data/brushes/Splatters/Makefile +data/brushes/Texture/Makefile +data/dynamics/Makefile +data/dynamics/Basic/Makefile +data/dynamics/FX/Makefile +data/environ/Makefile +data/gradients/Makefile +data/images/Makefile +data/interpreters/Makefile +data/palettes/Makefile +data/patterns/Makefile +data/patterns/Animal/Makefile +data/patterns/Fabric/Makefile +data/patterns/Food/Makefile +data/patterns/Legacy/Makefile +data/patterns/Paper/Makefile +data/patterns/Plant/Makefile +data/patterns/Sky/Makefile +data/patterns/Stone/Makefile +data/patterns/Water/Makefile +data/patterns/Wood/Makefile +data/tags/Makefile +data/tips/Makefile +data/tool-presets/Makefile +data/tool-presets/Crop/Makefile +data/tool-presets/FX/Makefile +data/tool-presets/Paint/Makefile +data/tool-presets/Selection/Makefile +data/tool-presets/Sketch/Makefile +desktop/Makefile +desktop/gimp-data-extras.metainfo.xml.in +desktop/gimp.desktop.in +desktop/org.gimp.GIMP.appdata.xml.in +desktop/test-appdata.sh +etc/Makefile +etc/gimprc +m4macros/Makefile +po/Makefile.in +po-libgimp/Makefile.in +po-plug-ins/Makefile.in +po-python/Makefile.in +po-script-fu/Makefile.in +po-tips/Makefile.in +po-windows-installer/Makefile.in +gimp-zip +Makefile +]) + +# Files with versions in their names +AC_CONFIG_FILES( +docs/gimp-gimp_app_version.1:docs/gimp.1.in +docs/gimprc-gimp_app_version.5:docs/gimprc.5.in +docs/gimptool-gimp_tool_version.1:docs/gimptool.1.in +gimp-gimp_pkgconfig_version.pc:gimp.pc.in +gimpthumb-gimp_pkgconfig_version.pc:gimpthumb.pc.in +gimpui-gimp_pkgconfig_version.pc:gimpui.pc.in +) + +# By default, autoconf will create only po/Makefile. +# This code is used to create the POTFILES and Makefile for all +# additional gettext catalogs. +m4_define([generate_po_makefile], [ + AC_MSG_NOTICE([Generating POTFILES and Makefile for $1]) + + AC_CONFIG_COMMANDS([$1/stamp-it], + [[ + if ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ; then + as_fn_error $? "$1/Makefile.in.in was not created by intltoolize." "$LINENO" 5 + fi + rm -f "$1/stamp-it" "$1/POTFILES" + sed -e '/^#/d' -e 's/^[[].*] *//' \ + -e '/^[ ]*$/d' \ + -e "s|^| $ac_top_srcdir/|" \ + "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" && \ + sed -e "/^# This comment gets stripped out/ {" \ + -e 'r $1/POTFILES' \ + -e "d" -e "}" \ + "$1/Makefile.in" >"$1/Makefile" && \ + touch "$1/stamp-it" + ]]) +]) + +generate_po_makefile([po-libgimp]) +generate_po_makefile([po-python]) +generate_po_makefile([po-plug-ins]) +generate_po_makefile([po-script-fu]) +generate_po_makefile([po-tips]) +generate_po_makefile([po-windows-installer]) + +# Print a summary of features enabled/disabled: +optional_deps=" +Extra Binaries: + gimp-console: $enable_gimp_console + +Optional Features: + Check updates at startup: $enable_check_update + Levin matting engine: $have_matting_levin + Language selection: $have_iso_codes + Vector icons: $enable_vector_icons + Dr. Mingw (Win32): $enable_drmingw + Relocatable bundle: $enable_relocatable_bundle + Default ICC directory: $with_icc_directory + Debug console (Win32): $enable_win32_debug_console + 32-bit DLL folder (Win32): $with_win32_32bit_dll_folder + Detailed backtraces: $detailed_backtraces + +Optional Plug-Ins: + Ascii Art: $have_libaa + Ghostscript: $have_gs + Help Browser: $have_webkit + JPEG 2000: $have_openjpeg + JPEG XL: $have_jpegxl + MNG: $have_libmng + OpenEXR: $have_openexr + WebP: $have_webp + HEIC: import: $can_import_heic - export: $can_export_heic [[profile support: $have_heif_profile_support]] + AVIF: import: $can_import_avif - export: $can_export_avif + PDF (export): $have_cairo_pdf + Print: $enable_print + Python 2: $enable_python + TWAIN (Win32): $os_win32 + Webpage: $have_webkit + WMF: $have_libwmf + X11 Mouse Cursor: $have_xmc + XPM: $have_libxpm + Email: $have_email + +Optional Modules: + ALSA (MIDI Input): $have_alsa + Linux Input: $have_linux_input (GUdev support: $have_libgudev) + DirectInput (Win32): $have_dx_dinput + +Tests: + Use xvfb-run $have_xvfb_run + Test appdata $have_appstream_util + Test desktop file $have_desktop_file_validate + +Bug report URL: $with_bug_report_url +$override_bug_report_url$warning_vector_icons_windows$warning_glib_networking$warning_gcc$warning_libheif$warning_libmypaint" + +if test "x$required_deps" = "x"; then + AC_OUTPUT + AC_MSG_RESULT([ +Building GIMP with prefix=$prefix, datarootdir=$datarootdir +Desktop files install into $DESKTOP_DATADIR +$optional_deps]); +else + AC_MSG_ERROR([ +$optional_deps + +Error: GIMP configuration failed. +$required_deps + +See the file 'INSTALL' for more help.]); +fi |