# HG changeset patch # User Matti Hamalainen # Date 1544644590 -7200 # Node ID 49bd0d974e88bfbe4264afa751c5bb5360c9d1ca # Parent c79d70e1807640321f96979520fb00388da8294a# Parent c56112a165a4e483af1e1a04b28b2699fc889b79 Merge. diff -r c56112a165a4 -r 49bd0d974e88 configure.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configure.in Wed Dec 12 21:56:30 2018 +0200 @@ -0,0 +1,718 @@ +dnl Process this file with autoconf to produce a configure script. -*- Autoconf + -*- + +dnl This file is a part of Geeqie project (http://www.geeqie.org/). +dnl Copyright (C) 2008 - 2016 The Geeqie Team +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. + +AC_PREREQ(2.57) +AC_INIT([geeqie], m4_esyscmd_s(git rev-parse --quiet --verify --short HEAD), [geeqie-devel@lists.sourceforge.net], [], [http://www.geeqie.org/]) + +# Add -Werror to the default CFLAGS +CFLAGS+=" -Werror -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=return-type" + +# Check for rightly dirs +AC_CONFIG_SRCDIR([src/main.c]) + +AC_CONFIG_AUX_DIR(auxdir) +# Require Automake 1.14 for %reldir% support +AM_INIT_AUTOMAKE([1.14.1 subdir-objects foreign dist-xz no-dist-gzip]) + +AC_CONFIG_HEADER([config.h]) + +# Only for developers +AM_MAINTAINER_MODE + +# Silent build for automake >= 1.11 +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +AC_ARG_ENABLE(developer, [ +Development options: +AC_HELP_STRING([--enable-developer], [turn on developers mode [default=no]])], +[ + __IS_DEVELOPER=yes +], +[ +if test "x${enable_developer}" != "xyes" +then + __IS_DEVELOPER=no +else + __IS_DEVELOPER=yes +fi +]) + +DX_HTML_FEATURE(ON) +DX_CHM_FEATURE(OFF) +DX_CHI_FEATURE(OFF) +DX_MAN_FEATURE(OFF) +DX_RTF_FEATURE(OFF) +DX_XML_FEATURE(OFF) +DX_PDF_FEATURE(OFF) +DX_PS_FEATURE(OFF) + +DX_INIT_DOXYGEN($PACKAGE_NAME, doxygen.conf, doc/doxygen) + +# Debug support +# ---------------------------------------------------------------------- + +dnl Debugging option +dnl FIXME: official release convert default to 'no' +dnl + +AC_ARG_ENABLE([debug-flags], [ +Development options: +AC_HELP_STRING([--enable-debug-flags], [use compiler flags for debugging [default=no]])], [], +[ +if test "x${enable_developer}" != "xyes" +then + enable_debug_flags="no" +else + enable_debug_flags="yes" +fi +]) + +AC_ARG_ENABLE([debug-log], [ +Development options: +AC_HELP_STRING([--enable-debug-log], [enable debugging messages [default=yes]])], [], [enable_debug_log="yes"]) + +if test "x${enable_debug_flags}" != "xno" +then + if test "x${enable_developer}" = "xyes" + then + CXXFLAGS="${CXXFLAGS} -Wall" + CFLAGS="${CFLAGS} -Wstrict-prototypes -Wall" + fi + __COMMONFLAGS="-g -O0 -Wextra -Wunused-value -Wunused-variable -Wunused-function -Wunused-label -Wcomment -Wmissing-braces -Wparentheses -Wreturn-type -Wswitch -Wstrict-aliasing -Wno-unused-parameter -Wformat -Wformat-security -DGQ_DEBUG_PATH_UTF8=1" + CXXFLAGS="${CXXFLAGS} ${__COMMONFLAGS}" + CFLAGS="${CFLAGS} ${__COMMONFLAGS} -Wimplicit-int -Werror-implicit-function-declaration" + __IS_DEBUG_FLAGS=yes +else + __IS_DEBUG_FLAGS=no +fi + +if test "x${enable_debug_log}" != "xno" +then + AC_DEFINE(DEBUG,1,[Defined if Geeqie is compiled with debugging messages support]) + __IS_DEBUG_LOG=yes +else + __IS_DEBUG_LOG=no +fi + +AM_CONDITIONAL(DEBUG, test x$enable_debug_flags = xyes) + +AC_ARG_ENABLE(deprecated, [ +AC_HELP_STRING([--enable-deprecated], [turn off checking of deprecated functions [default=yes]])], [], +[ +if test "x${enable_developer}" != "xyes" +then + enable_deprecated="no" +else + enable_deprecated="yes" +fi +]) + +if test "x${enable_deprecated}" != "xno" +then + CXXFLAGS="${CXXFLAGS} -DGTK_DISABLE_DEPRECATED=1 -DGDK_DISABLE_DEPRECATED=1 -DGDK_PIXBUF_DISABLE_DEPRECATED=1 -DG_DISABLE_DEPRECATED=1" + CFLAGS="${CFLAGS} -DGTK_DISABLE_DEPRECATED=1 -DGDK_DISABLE_DEPRECATED=1 -DGDK_PIXBUF_DISABLE_DEPRECATED=1 -DG_DISABLE_DEPRECATED=1" + __IS_DEPRECATED=yes +else + __IS_DEPRECATED=no +fi + + +AC_ISC_POSIX +AC_PROG_CC +AC_PROG_CC_C99 +AC_PROG_CXX +AC_STDC_HEADERS +AC_ARG_PROGRAM +AC_SYS_LARGEFILE +IT_PROG_INTLTOOL([0.35.0]) + + +dnl checks for functions +AC_CHECK_FUNCS(strverscmp access fsync fflush) + + +# Check target architecture + +# Check for Win32 +AC_MSG_CHECKING([for some Win32 platform]) +case "$target_os" in + mingw* | cygwin*) + platform_win32=yes + AC_DEFINE(PLATFORM_WIN32, 1, [Build on win32 OS]) + ;; + *) + platform_win32=no + ;; +esac +AC_MSG_RESULT([$platform_win32]) +AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes") + +AC_MSG_CHECKING([for native Win32]) +case "$target_os" in + mingw*) + os_win32=yes + AC_DEFINE(OS_WIN32, 1, [Build on native win32 OS]) + os_unix=no + PATHSEP=';' + ;; + *) + os_win32=no + os_unix=yes + PATHSEP=':' + ;; +esac +AC_MSG_RESULT([$os_win32]) +AC_SUBST(PATHSEP) +AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes") +AM_CONDITIONAL(OS_UNIX, test "$os_unix" = "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) + +dnl reasonable guesses for where stuff is installed +if test "x$prefix" = "xNONE"; then + prefix="/usr/local" +else + prefix=$prefix +fi + +AM_PATH_GLIB_2_0(2.24.0,,AC_MSG_ERROR(GLIB >= 2.24.0 not installed.)) +AC_ARG_ENABLE([gtk3], AC_HELP_STRING([--disable-gtk3], [use gtk2 instead of gtk3]),[gtk3="${enableval}"], [gtk3=m4_ifdef([AM_PATH_GTK_3_0], [auto], [no])]) + +if test x$gtk3 == xyes; then + AC_MSG_WARN("Gtk3 enabled") + m4_ifdef([AM_PATH_GTK_3_0], [AM_PATH_GTK_3_0(3.0.0,,AC_MSG_ERROR(GTK+ >= 3.0.0 not installed.))]) +else + if test x$gtk3 != xno; then + AC_MSG_WARN("Gtk3 is preferred...") + m4_ifdef([AM_PATH_GTK_3_0], [AM_PATH_GTK_3_0(3.0.0,,[gtk3=no])]) + fi +fi + +if test x$gtk3 == xno; then + m4_ifdef([AM_PATH_GTK_2_0], [AM_PATH_GTK_2_0(2.20.0,,AC_MSG_ERROR(GTK+ >= 2.20.0 not installed.))]) + true +fi + +threads="auto" +AC_ARG_ENABLE([threads], + AC_HELP_STRING([--disable-threads], [disable thread support]), [threads="${enableval}"]) + +have_gthread="no" +if test "x${threads}" != "xno" ; then + PKG_CHECK_MODULES(GTHREAD, [gthread-2.0], have_gthread="yes", [AC_MSG_WARN("No thread support in glib")]) +fi + +if test "x$have_gthread" != "xno"; then + AC_DEFINE(HAVE_GTHREAD, 1, Define if you have gthread library) + GLIB_CFLAGS="$GTHREAD_CFLAGS" + GLIB_LIBS="$GTHREAD_LIBS" +fi + + +AC_PATH_PROGS(GDK_PIXBUF_CSOURCE, "gdk-pixbuf-csource") +AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal) + +AC_ARG_WITH(readmedir, [ --with-readmedir=DIR install path for readme files], + readmedir=$withval, readmedir="$prefix/share/doc/geeqie-$VERSION") +AC_ARG_WITH(htmldir, [ --with-htmldir=DIR install path for html files], + htmldir=$withval, htmldir="$readmedir/html") + +AC_DEFINE_UNQUOTED(GQ_HELPDIR, "$readmedir", [Location of documentation files]) +AC_DEFINE_UNQUOTED(GQ_HTMLDIR, "$htmldir", [Location of html documentation]) + +AC_PATH_PROG(GNOME_DOC_TOOL, gnome-doc-tool) + +AC_SUBST(readmedir) +AC_SUBST(htmldir) + +eval "eval appdir=${datadir}/${PACKAGE}" +AC_DEFINE_UNQUOTED([GQ_APP_DIR], "$appdir", [Location of application data]) +AC_SUBST(appdir) + +eval "eval gq_bindir=${prefix}/lib/${PACKAGE}" +AC_DEFINE_UNQUOTED([GQ_BIN_DIR], "$gq_bindir", [Location of helper scripts and executables]) +AC_SUBST(gq_bindir) + +# LIRC support +# ---------------------------------------------------------------------- + +dnl Check for LIRC client support +AC_MSG_CHECKING(if LIRC support is enabled) +lirc=no +AC_ARG_ENABLE([lirc], + AC_HELP_STRING([--disable-lirc], [disable lirc support (auto)]), +[ +if test "x${enableval}" = "xyes" -a "x$GCC" = "xyes"; then + AC_MSG_RESULT(yes) + lirc=yes +else + AC_MSG_RESULT(no) + lirc=no +fi], AC_MSG_RESULT(no)) + + +AC_ARG_WITH(lirc-prefix, +[ --with-lirc-prefix=PATH Prefix where LIRC is installed], +[ +for dir in `echo "$withval" | tr : ' '`; do + if test -d $dir/lib; then CXXFLAGS="$CXXFLAGS -L$dir/lib"; fi + if test -d $dir/include; then CXXFLAGS="$CXXFLAGS -I$dir/include"; fi + done +]) + +HAVE_LIRC=no +if test "x${lirc}" != "xno" ; then + AC_CHECK_HEADER(lirc/lirc_client.h, + [AC_CHECK_LIB(lirc_client,lirc_init,[HAVE_LIRC=yes;LIBS=-llirc_client $LIBS;AC_DEFINE([HAVE_LIRC],[],[Define to 1 if LIRC must be used])],,)],) +fi +AM_CONDITIONAL(HAVE_LIRC, [test "x$HAVE_LIRC" = xyes]) + + +# LCMS support +# ---------------------------------------------------------------------- + +AC_ARG_ENABLE([lcms], + AC_HELP_STRING([--disable-lcms], [disable lcms support]), + [liblcms=$enableval], [liblcms=auto]) + +if test "x${liblcms}" != "xno"; then + PKG_CHECK_MODULES(LCMS, [lcms2 >= 2.0], + [ + HAVE_LCMS=yes + AC_DEFINE(HAVE_LCMS, 1, [define to enable use of color profiles with lcms]) + AC_DEFINE(HAVE_LCMS2, 1, [lcms2 is used]) + ], + [ + PKG_CHECK_MODULES(LCMS, [lcms >= 1.14], + [ + HAVE_LCMS=yes + AC_DEFINE(HAVE_LCMS, 1, [define to enable use of color profiles with lcms]) + ], + [ + HAVE_LCMS=no + AC_MSG_WARN([$LCMS_PKG_ERRORS]) + ]) + ]) +else + HAVE_LCMS=disabled +fi + +AM_CONDITIONAL(HAVE_LCMS, [test "x$HAVE_LCMS" = xyes]) +AC_SUBST(LCMS_CFLAGS) +AC_SUBST(LCMS_LIBS) + +# libjpeg support +# ---------------------------------------------------------------------- + +AC_ARG_ENABLE([jpeg], + AC_HELP_STRING([--disable-jpeg], [disable direct jpeg support]), + [libjpeg=$enableval], [libjpeg=auto]) + +if test "x${libjpeg}" != "xno"; then + AC_CHECK_LIB(jpeg, jpeg_destroy_decompress, + HAVE_JPEG=yes + JPEG_LIBS=-ljpeg + AC_DEFINE(HAVE_JPEG, 1, [define to enable use of custom jpeg loader]), + HAVE_JPEG=no) +else + HAVE_JPEG=disabled +fi + +AM_CONDITIONAL(HAVE_JPEG, [test "x$HAVE_JPEG" = xyes]) +AC_SUBST(JPEG_CFLAGS) +AC_SUBST(JPEG_LIBS) + + +# libtiff support +# ---------------------------------------------------------------------- + +AC_ARG_ENABLE([tiff], + AC_HELP_STRING([--disable-tiff], [disable direct tiff support]), + [libtiff=$enableval], [libtiff=auto]) + +if test "x${libtiff}" != "xno"; then + AC_CHECK_LIB(tiff, TIFFClientOpen, + HAVE_TIFF=yes + TIFF_LIBS=-ltiff + AC_DEFINE(HAVE_TIFF, 1, [define to enable use of custom tiff loader]), + HAVE_TIFF=no) +else + HAVE_TIFF=disabled +fi + +AM_CONDITIONAL(HAVE_TIFF, [test "x$HAVE_TIFF" = xyes]) +AC_SUBST(TIFF_CFLAGS) +AC_SUBST(TIFF_LIBS) + +# libffmpegthumbnailer support +# ---------------------------------------------------------------------- + +AC_ARG_ENABLE([ffmpegthumbnailer], + AC_HELP_STRING([--disable-ffmpegthumbnailer], [disable ffmpegthumbnailer support for generating thumbnails of video files]), + [ffmpegthumbnailer=$enableval], [ffmpegthumbnailer=auto]) + +if test "x${ffmpegthumbnailer}" != "xno"; then + PKG_CHECK_MODULES(FFMPEGTHUMBNAILER, [libffmpegthumbnailer >= 2.1.0], + [ + HAVE_FFMPEGTHUMBNAILER=yes + AC_DEFINE(HAVE_FFMPEGTHUMBNAILER, 1, [define to enable ffmpegthumbnailer support]) + AC_CHECK_MEMBER([video_thumbnailer.prefer_embedded_metadata], [AC_DEFINE(HAVE_FFMPEGTHUMBNAILER_METADATA, 1, [define if ffmpegthumbnailer supports embedded metadata])], [], [[#include ]]) + AC_CHECK_MEMBER([image_data.image_data_width], [AC_DEFINE(HAVE_FFMPEGTHUMBNAILER_RGB, 1, [define if ffmpegthumbnailer supports raw RGB output])], [], [[#include ]]) + AC_CHECK_LIB([ffmpegthumbnailer], [video_thumbnailer_set_size], [AC_DEFINE(HAVE_FFMPEGTHUMBNAILER_WH, 1, [define if ffmpegthumbnailer supports specifying size by width/height])]) + ], + [ + HAVE_FFMPEGTHUMBNAILER=no + ]) +else + HAVE_FFMPEGTHUMBNAILER=disabled +fi + +AM_CONDITIONAL(HAVE_FFMPEGTHUMBNAILER, [test "x$HAVE_FFMPEGTHUMBNAILER" = xyes]) +AC_SUBST(FFMPEGTHUMBNAILER_CFLAGS) +AC_SUBST(FFMPEGTHUMBNAILER_LIBS) + +# libbpg support +# ---------------------------------------------------------------------- + +AC_ARG_ENABLE([bpg], + AS_HELP_STRING([--disable-bpg],[disable direct bpg support]), + [libbpg=$enableval], [libbpg=auto]) + +if test "x${libbpg}" = "xyes"; then + HAVE_BPG=yes + BPG_LIBS=/usr/local/lib/libbpg.a + BPG_CFLAGS=-I/usr/local/include/ + AC_DEFINE(HAVE_BPG, 1, [define to enable use of BPG loader]) +elif test "x${libbpg}" != "xno"; then + AC_CHECK_LIB(bpg, bpg_decoder_open, + [ + HAVE_BPG=yes + BPG_LIBS=-lbpg + AC_DEFINE(HAVE_BPG, 1, [define to enable use of BPG loader]) + ], + [ + HAVE_BPG=no + ]) +else + HAVE_BPG=disabled +fi + +AM_CONDITIONAL(HAVE_BPG, [test "x$HAVE_BPG" = xyes]) +AC_SUBST(BPG_CFLAGS) +AC_SUBST(BPG_LIBS) + + +# Exiv2 support +# ---------------------------------------------------------------------- + +AC_ARG_ENABLE([exiv2], + AC_HELP_STRING([--disable-exiv2], [disable exiv2 support]), + [libexiv2=$enableval], [libexiv2=auto]) + +if test "x${libexiv2}" != "xno"; then + PKG_CHECK_MODULES(EXIV2, [exiv2 >= 0.11], + [ + HAVE_EXIV2=yes + AC_DEFINE(HAVE_EXIV2, 1, [define to enable exiv2 support]) + ], + [ + HAVE_EXIV2=no + AC_MSG_WARN([$EXIV2_PKG_ERRORS]) + ]) +else + HAVE_EXIV2=disabled +fi + +AM_CONDITIONAL(HAVE_EXIV2, [test "x$HAVE_EXIV2" = xyes]) +AC_SUBST(EXIV2_CFLAGS) +AC_SUBST(EXIV2_LIBS) + + +# Gettext support +# ---------------------------------------------------------------------- + +dnl Set of available languages +ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`" +AC_SUBST([CONFIG_STATUS_DEPENDENCIES],['$(top_srcdir)/po/LINGUAS']) + +GETTEXT_PACKAGE=$PACKAGE +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["${GETTEXT_PACKAGE}"],[Name of gettext file]) +AM_GLIB_GNU_GETTEXT +AM_GLIB_DEFINE_LOCALEDIR(GQ_LOCALEDIR) + +AC_SUBST(CFLAGS) +AC_SUBST(CXXFLAGS) +AC_SUBST(CPPFLAGS) +AC_SUBST(LDFLAGS) + + +# clutter and champlain support +# ---------------------------------------------------------------------- + +AC_ARG_ENABLE([map], + AC_HELP_STRING([--disable-map], [disable map support]), + [libgps=$enableval], [libgps=auto]) + +AC_ARG_ENABLE([gpu-accel], + AC_HELP_STRING([--disable-gpu-accel], [disable GPU acceleration support - experimental]), + [libclutter=$enableval], [libclutter=auto]) + +if test "x${libclutter}" != "xno" -a "x${gtk3}" != "xno"; then + PKG_CHECK_MODULES(CLUTTER, [clutter-1.0 >= 1.0], + [ + PKG_CHECK_MODULES(CLUTTER_GTK, [clutter-gtk-1.0 >= 1.0], + [ + HAVE_CLUTTER=yes + AC_DEFINE(HAVE_CLUTTER, 1, [define to enable use of clutter library]) + ], + [ + HAVE_CLUTTER=no + AC_MSG_WARN([$CLUTTER_GTK_PKG_ERRORS]) + ]) + ], + [ + HAVE_CLUTTER=no + AC_MSG_WARN([$CLUTTER_PKG_ERRORS]) + ]) +else + HAVE_CLUTTER=disabled +fi + +AC_SUBST(CLUTTER_CFLAGS) +AC_SUBST(CLUTTER_LIBS) +AC_SUBST(CLUTTER_GTK_CFLAGS) +AC_SUBST(CLUTTER_GTK_LIBS) + + +# Libchamplain support - used for map facility +# ---------------------------------------------------------------------- + +if test "x${libgps}" != "xno" -a "x${HAVE_CLUTTER}" == "xyes"; then + if test "x${gtk3}" != "xno"; then + PKG_CHECK_MODULES(LIBCHAMPLAIN, [champlain-0.12 >= 0.12], + [ + HAVE_LIBCHAMPLAIN=yes + AC_DEFINE(HAVE_LIBCHAMPLAIN, 1, [define to enable use of maps]) + ], + [ + HAVE_LIBCHAMPLAIN=no + AC_MSG_WARN([$LIBCHAMPLAIN_PKG_ERRORS]) + ]) + else + HAVE_LIBCHAMPLAIN=disabled + fi +else + HAVE_LIBCHAMPLAIN=disabled +fi + +if test "x${libgps}" != "xno" -a "x${HAVE_LIBCHAMPLAIN}" == "xyes" ; then + PKG_CHECK_MODULES(LIBCHAMPLAIN_GTK, [champlain-gtk-0.12 >= 0.12], + [ + HAVE_LIBCHAMPLAIN_GTK=yes + AC_DEFINE(HAVE_LIBCHAMPLAIN_GTK, 1, [define to enable use of maps]) + ], + [ + HAVE_LIBCHAMPLAIN_GTK=no + AC_MSG_WARN([$LIBCHAMPLAIN_GTK_PKG_ERRORS]) + ]) +else + HAVE_LIBCHAMPLAIN_GTK=disabled +fi + +AM_CONDITIONAL(HAVE_LIBCHAMPLAIN_GTK, [test "x$HAVE_LIBCHAMPLAIN_GTK" = xyes]) +AC_SUBST(LIBCHAMPLAIN_GTK_CFLAGS) +AC_SUBST(LIBCHAMPLAIN_GTK_LIBS) + +# Lua support +# ---------------------------------------------------------------------- + +AC_ARG_ENABLE([lua], + AC_HELP_STRING([--disable-lua], [disable lua support]), + [liblua=$enableval], [liblua=auto]) + +if test "x${liblua}" != "xno"; then + PKG_CHECK_MODULES(LUA, lua5.1 >= 5.1, + [ + HAVE_LUA=yes + AC_DEFINE(HAVE_LUA, 1, [define to enable lua support]) + ], + [ + HAVE_LUA=no + AC_MSG_WARN([$LUA_PKG_ERRORS]) + ]) +else + HAVE_LUA=disabled +fi + +AM_CONDITIONAL(HAVE_LUA, [test "x$HAVE_LUA" = xyes]) +AC_SUBST(LUA_CFLAGS) +AC_SUBST(LUA_LIBS) + +# Pdf support +# ---------------------------------------------------------------------- + +if test "x${gtk3}" != "xno"; then + AC_ARG_ENABLE([pdf], + AC_HELP_STRING([--disable-pdf], [disable pdf support]), + [libpdf=$enableval], [libpdf=auto]) + + if test "x${libpdf}" != "xno"; then + PKG_CHECK_MODULES(PDF, poppler-glib >= 0.62, + [ + HAVE_PDF=yes + AC_DEFINE(HAVE_PDF, 1, [define to enable pdf support]) + ], + [ + HAVE_PDF=no + AC_MSG_WARN([$PDF_PKG_ERRORS]) + ]) + else + HAVE_PDF=disabled + fi +else + HAVE_PDF=disabled +fi + +AM_CONDITIONAL(HAVE_PDF, [test "x$HAVE_PDF" = xyes]) +AC_SUBST(PDF_CFLAGS) +AC_SUBST(PDF_LIBS) + +# Markdown support +# ---------------------------------------------------------------------- + +AM_CONDITIONAL(HAVE_MARKDOWN, [ "$(command -v markdown)" ]) + +# ---------------------------------------------------------------------- + +AH_TOP([ +/** \file + * \short autogenerated definition by autoheader. + * \author Bruclik + */ + +/* + * This file is a part of Geeqie project (http://www.geeqie.org/). + * Copyright (C) 2008 - 2016 The Geeqie Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _INCLUDE_CONFIG_H +#define _INCLUDE_CONFIG_H +]) + +AH_BOTTOM([#endif]) + +dnl Write the output +dnl + +AC_CONFIG_FILES([ + Makefile + src/Makefile + src/icons/Makefile + src/icons/svg/Makefile + po/Makefile.in + doc/Makefile + plugins/Makefile + plugins/symlink/Makefile + plugins/rotate/Makefile + plugins/ufraw/Makefile + plugins/import/Makefile + plugins/geocode-parameters/Makefile + geeqie.spec +]) + +AC_OUTPUT +dnl Print the results +dnl + +cat > config.report << END + + Config results: + -=-=-=-=-=-=-=-=- + +Package: + Name: $PACKAGE_NAME + Version: $PACKAGE_VERSION + +Architecture: + UNIX: $os_unix + Win32: $platform_win32 (native: $os_win32) + +Flags: + Geeqie: $GQ_CFLAGS + DEFS: $DEFS + CPPFLAGS: $__CPPFLAGS + CFLAGS: $CFLAGS + CXXFLAGS: $CXXFLAGS + Gtk: $GTK_CFLAGS + Glib: $GLIB_CFLAGS + Thread: $GTHREAD_LIBS + Others: $JPEG_LIBS $TIFF_LIBS $LCMS_LIBS $EXIV2_LIBS $CLUTTER_LIBS $CLUTTER_GTK_LIBS $LIBCHAMPLAIN_LIBS $LIBCHAMPLAIN_GTK_LIBS $LUA_LIBS + +Localization: + NLS support: $USE_NLS + LINGUAS: $LINGUAS + +Settings: + Developer: $__IS_DEVELOPER + Debug flags: $__IS_DEBUG_FLAGS + Debug log: $__IS_DEBUG_LOG + Deprecated: $__IS_DEPRECATED + +Support: + LCMS: $HAVE_LCMS + Exiv2: $HAVE_EXIV2 + Lirc: $HAVE_LIRC + Clutter: $HAVE_CLUTTER + Libchamplain: $HAVE_LIBCHAMPLAIN + Libchamplain-gtk: $HAVE_LIBCHAMPLAIN_GTK + Lua: $HAVE_LUA + Use libBPG: $HAVE_BPG + FFmpegthumbnailer: $HAVE_FFMPEGTHUMBNAILER + Pdf: $HAVE_PDF + +Documentation: + Doxygen: $DX_DOXYGEN + doc-tool: $GNOME_DOC_TOOL + +END + +cat config.report +cat <bytes_total >= 10 && + (memcmp(il->mapped_file, "BPG\xfb", 4) == 0 || + memcmp(il->mapped_file, "BPG\xfb", 4) == 0)) + { + DEBUG_1("Using custom BPG loader"); + image_loader_backend_set_bpg(&il->backend); + } + else +#endif if (il->bytes_total >= 3 && il->mapped_file[0] == 0x44 && il->mapped_file[1] == 0x44 && il->mapped_file[2] == 0x53) { DEBUG_1("Using dds loader"); diff -r c56112a165a4 -r 49bd0d974e88 src/image_load_bpg.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/image_load_bpg.c Wed Dec 12 21:56:30 2018 +0200 @@ -0,0 +1,207 @@ +/* + * Copyright (C) 2016 The Geeqie Team + * + * Authors: Matti Hämäläinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "main.h" + +#include "image-load.h" +#include "image_load_bpg.h" + +#ifdef HAVE_BPG + +#include + + +typedef struct _ImageLoaderBPG ImageLoaderBPG; + +struct _ImageLoaderBPG +{ + ImageLoaderBackendCbAreaUpdated area_updated_cb; + ImageLoaderBackendCbSize size_cb; + ImageLoaderBackendCbAreaPrepared area_prepared_cb; + + gpointer data; + + GdkPixbuf* pixbuf; + guint requested_width; + guint requested_height; + + gboolean abort; +}; + +static void free_buffer(guchar* pixels, gpointer data) +{ + g_free(pixels); +} + +static gboolean image_loader_bpg_load(gpointer loader, const guchar* buf, gsize count, GError** error) +{ + ImageLoaderBPG* lt = (ImageLoaderBPG*)loader; + BPGDecoderContext *img = bpg_decoder_open(); + BPGImageInfo info_s, *info = &info_s; + guchar *pixels = NULL; + gint rowstride, y, bpp; + gsize bytes; + + if (bpg_decoder_decode(img, buf, count) < 0) + { + DEBUG_1("Failed to open BPG image"); + return FALSE; + } + + bpg_decoder_get_info(img, &info_s); + if (info->width <= 0 || info->height <= 0) + { + DEBUG_1("Width or height of BPG image is zero"); + goto err; + } + + bpp = info->has_alpha ? 4 : 3; + rowstride = info->width * bpp; + if (rowstride / bpp != info->width) + { + DEBUG_1("Dimensions of BPG image too large"); + goto err; + } + + bytes = info->height * rowstride; + if (bytes / rowstride != info->height) + { + DEBUG_1("Dimensions of BPG image too large"); + goto err; + } + + bpg_decoder_start(img, info->has_alpha ? BPG_OUTPUT_FORMAT_RGBA32 : BPG_OUTPUT_FORMAT_RGB24); + + lt->requested_width = info->width; + lt->requested_height = info->height; + lt->size_cb(loader, lt->requested_width, lt->requested_height, lt->data); + + pixels = g_try_malloc(bytes); + if (!pixels) + { + DEBUG_1("Insufficient memory to open BPG file"); + goto err; + } + + lt->pixbuf = gdk_pixbuf_new_from_data(pixels, GDK_COLORSPACE_RGB, info->has_alpha, 8, info->width, info->height, rowstride, free_buffer, NULL); + if (!lt->pixbuf) + { + g_free(pixels); + DEBUG_1("Insufficient memory to open BPG file"); + goto err; + } + + lt->area_prepared_cb(loader, lt->data); + + for (y = 0; y < info->height; y++) + { + if (lt->abort) + break; + + bpg_decoder_get_line(img, pixels + y * info->width * bpp); + + lt->area_updated_cb(loader, 0, y, info->width, 1, lt->data); + } + + bpg_decoder_close(img); + + return TRUE; + +err: + if (img) + bpg_decoder_close(img); + + return FALSE; +} + +static gpointer image_loader_bpg_new(ImageLoaderBackendCbAreaUpdated area_updated_cb, + ImageLoaderBackendCbSize size_cb, + ImageLoaderBackendCbAreaPrepared area_prepared_cb, + gpointer data) +{ + ImageLoaderBPG* loader = g_new0(ImageLoaderBPG, 1); + + loader->area_updated_cb = area_updated_cb; + loader->size_cb = size_cb; + loader->area_prepared_cb = area_prepared_cb; + loader->data = data; + return (gpointer)loader; +} + +static void image_loader_bpg_set_size(gpointer loader, int width, int height) +{ + ImageLoaderBPG* lt = (ImageLoaderBPG*)loader; + lt->requested_width = width; + lt->requested_height = height; +} + +static GdkPixbuf* image_loader_bpg_get_pixbuf(gpointer loader) +{ + ImageLoaderBPG* lt = (ImageLoaderBPG*)loader; + return lt->pixbuf; +} + +static gchar* image_loader_bpg_get_format_name(gpointer loader) +{ + return g_strdup("bpg"); +} + +static gchar** image_loader_bpg_get_format_mime_types(gpointer loader) +{ + static gchar* mime[] = {"image/bpg", NULL}; + return g_strdupv(mime); +} + +static gboolean image_loader_bpg_close(gpointer loader, GError** error) +{ + return TRUE; +} + +static void image_loader_bpg_abort(gpointer loader) +{ + ImageLoaderBPG* lt = (ImageLoaderBPG*)loader; + lt->abort = TRUE; +} + +static void image_loader_bpg_free(gpointer loader) +{ + ImageLoaderBPG* lt = (ImageLoaderBPG*)loader; + if (lt->pixbuf) + g_object_unref(lt->pixbuf); + g_free(lt); +} + +void image_loader_backend_set_bpg(ImageLoaderBackend* funcs) +{ + funcs->loader_new = image_loader_bpg_new; + funcs->set_size = image_loader_bpg_set_size; + funcs->load = image_loader_bpg_load; + funcs->write = NULL; + funcs->get_pixbuf = image_loader_bpg_get_pixbuf; + funcs->close = image_loader_bpg_close; + funcs->abort = image_loader_bpg_abort; + funcs->free = image_loader_bpg_free; + + funcs->get_format_name = image_loader_bpg_get_format_name; + funcs->get_format_mime_types = image_loader_bpg_get_format_mime_types; +} + +#endif +/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ diff -r c56112a165a4 -r 49bd0d974e88 src/image_load_bpg.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/image_load_bpg.h Wed Dec 12 21:56:30 2018 +0200 @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2016 The Geeqie Team + * + * Authors: Matti Hämäläinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef IMAGE_LOAD_BPG_H +#define IMAGE_LOAD_BPG_H + +#ifdef HAVE_BPG +void image_loader_backend_set_bpg(ImageLoaderBackend *funcs); +#endif + +#endif + +/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */