Add configure check for zlib with inflateInit2

and replace old unused and poorly named FIND_ZIP. The new code prefers
pkgconfig and only falls back to manual detection if needed.

This also prioritizes detected zlib flags and includes to be preferred
over the ones that are added by pkgconfig for libpng, tifflib etc. which
would otherwise have caused the system default zlib to be used.
This commit is contained in:
Felix Bünemann 2016-06-27 03:03:45 +02:00
parent 14953c19e7
commit 5ab0001ec6
4 changed files with 153 additions and 132 deletions

View File

@ -626,6 +626,29 @@ if test x"$with_rsvg" != x"no"; then
)
fi
# zlib
# some platforms, like macosx, are missing the .pc files for zlib, so
# we fall back to FIND_ZLIB
AC_ARG_WITH([zlib],
AS_HELP_STRING([--without-zlib], [build without zlib (default: test)]))
if test x"$with_zlib" != "xno"; then
PKG_CHECK_MODULES(ZLIB, zlib >= 0.4,
[AC_DEFINE(HAVE_ZLIB,1,[define if you have zlib installed.])
with_zlib=yes
PACKAGES_USED="$PACKAGES_USED zlib"
],
[FIND_ZLIB(
[with_zlib="yes (found by search)"
],
[AC_MSG_WARN([zlib not found; disabling SVGZ buffer support])
with_zlib=no
]
)
]
)
fi
# OpenSlide
AC_ARG_WITH([openslide],
AS_HELP_STRING([--without-openslide],
@ -786,15 +809,6 @@ fi
AM_CONDITIONAL(ENABLE_PYVIPS8, test x"$enable_pyvips8" = x"yes")
# hmm, these don't have .pc files on ubuntu 5.10, how odd
FIND_ZIP(
[with_zip=yes
],
[AC_MSG_WARN([libz not found; disabling ZIP support])
with_zip=no
]
)
# look for TIFF with pkg-config ... fall back to our tester
# pkgconfig support for libtiff starts with libtiff-4
AC_ARG_WITH([tiff],
@ -943,14 +957,14 @@ fi
# Gather all up for VIPS_CFLAGS, VIPS_INCLUDES, VIPS_LIBS
# sort includes to get longer, more specific dirs first
# helps, for example, selecting graphicsmagick over imagemagick
VIPS_CFLAGS=`for i in $VIPS_CFLAGS $GTHREAD_CFLAGS $REQUIRED_CFLAGS $PANGOFT2_CFLAGS $GSF_CFLAGS $FFTW_CFLAGS $MAGICK_CFLAGS $PNG_CFLAGS $EXIF_CFLAGS $MATIO_CFLAGS $CFITSIO_CFLAGS $LIBWEBP_CFLAGS $GIFLIB_INCLUDES $RSVG_CFLAGS $POPPLER_CFLAGS $OPENEXR_CFLAGS $OPENSLIDE_CFLAGS $ORC_CFLAGS $TIFF_CFLAGS $LCMS_CFLAGS
VIPS_CFLAGS=`for i in $VIPS_CFLAGS $GTHREAD_CFLAGS $REQUIRED_CFLAGS $ZLIB_CFLAGS $PANGOFT2_CFLAGS $GSF_CFLAGS $FFTW_CFLAGS $MAGICK_CFLAGS $PNG_CFLAGS $EXIF_CFLAGS $MATIO_CFLAGS $CFITSIO_CFLAGS $LIBWEBP_CFLAGS $GIFLIB_INCLUDES $RSVG_CFLAGS $POPPLER_CFLAGS $OPENEXR_CFLAGS $OPENSLIDE_CFLAGS $ORC_CFLAGS $TIFF_CFLAGS $LCMS_CFLAGS
do
echo $i
done | sort -ru`
VIPS_CFLAGS=`echo $VIPS_CFLAGS`
VIPS_CFLAGS="$VIPS_DEBUG_FLAGS $VIPS_CFLAGS"
VIPS_INCLUDES="$PNG_INCLUDES $TIFF_INCLUDES $ZIP_INCLUDES $JPEG_INCLUDES"
VIPS_LIBS="$MAGICK_LIBS $PNG_LIBS $TIFF_LIBS $ZIP_LIBS $JPEG_LIBS $GTHREAD_LIBS $REQUIRED_LIBS $PANGOFT2_LIBS $GSF_LIBS $FFTW_LIBS $ORC_LIBS $LCMS_LIBS $GIFLIB_LIBS $RSVG_LIBS $POPPLER_LIBS $OPENEXR_LIBS $OPENSLIDE_LIBS $CFITSIO_LIBS $LIBWEBP_LIBS $MATIO_LIBS $EXIF_LIBS -lm"
VIPS_INCLUDES="$ZLIB_INCLUDES $PNG_INCLUDES $TIFF_INCLUDES $JPEG_INCLUDES"
VIPS_LIBS="$ZLIB_LIBS $MAGICK_LIBS $PNG_LIBS $TIFF_LIBS $JPEG_LIBS $GTHREAD_LIBS $REQUIRED_LIBS $PANGOFT2_LIBS $GSF_LIBS $FFTW_LIBS $ORC_LIBS $LCMS_LIBS $GIFLIB_LIBS $RSVG_LIBS $POPPLER_LIBS $OPENEXR_LIBS $OPENSLIDE_LIBS $CFITSIO_LIBS $LIBWEBP_LIBS $MATIO_LIBS $EXIF_LIBS -lm"
AC_SUBST(VIPS_LIBDIR)

View File

@ -61,7 +61,7 @@
#include <librsvg/librsvg-features.h>
#endif
#if LIBRSVG_CHECK_FEATURE(SVGZ) && defined(HAVE_ZIP)
#if LIBRSVG_CHECK_FEATURE(SVGZ) && defined(HAVE_ZLIB)
#include <zlib.h>
#endif
@ -377,7 +377,7 @@ typedef VipsForeignLoadSvgClass VipsForeignLoadSvgBufferClass;
G_DEFINE_TYPE( VipsForeignLoadSvgBuffer, vips_foreign_load_svg_buffer,
vips_foreign_load_svg_get_type() );
#if LIBRSVG_CHECK_FEATURE(SVGZ) && defined(HAVE_ZIP)
#if LIBRSVG_CHECK_FEATURE(SVGZ) && defined(HAVE_ZLIB)
static void *
vips_zalloc( void *opaque, unsigned items, unsigned size )
{
@ -398,7 +398,7 @@ vips_foreign_load_svg_is_a_buffer( const void *buf, size_t len )
int i;
#if LIBRSVG_CHECK_FEATURE(SVGZ) && defined(HAVE_ZIP)
#if LIBRSVG_CHECK_FEATURE(SVGZ) && defined(HAVE_ZLIB)
/* Check for SVGZ gzip signature and inflate.
* Minimum gzip size is 18 bytes, starting with 1F 8B.
*/

117
m4/zip.m4
View File

@ -1,117 +0,0 @@
dnl From FIND_MOTIF and ACX_PTHREAD, without much understanding
dnl
dnl FIND_ZIP[ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]
dnl ------------------------------------------------
dnl
dnl Find ZIP libraries and headers
dnl
dnl Put includes stuff in ZIP_INCLUDES
dnl Put link stuff in ZIP_LIBS
dnl Define HAVE_ZIP if found
dnl
AC_DEFUN([FIND_ZIP], [
AC_REQUIRE([AC_PATH_XTRA])
ZIP_INCLUDES=""
ZIP_LIBS=""
AC_ARG_WITH(zip,
AS_HELP_STRING([--without-zip], [build without libx (default: test)]))
# Treat --without-zip like --without-zip-includes --without-zip-libraries.
if test "$with_zip" = "no"; then
ZIP_INCLUDES=no
ZIP_LIBS=no
fi
AC_ARG_WITH(zip-includes,
AS_HELP_STRING([--with-zip-includes=DIR], [libz includes are in DIR]),
ZIP_INCLUDES="-I$withval")
AC_ARG_WITH(zip-libraries,
AS_HELP_STRING([--with-zip-libraries=DIR], [libz libraries are in DIR]),
ZIP_LIBS="-L$withval -lz")
AC_MSG_CHECKING(for ZIP)
# Look for zlib.h
if test "$ZIP_INCLUDES" = ""; then
# Check the standard search path
AC_TRY_COMPILE([#include <zlib.h>],[int a;],[
ZIP_INCLUDES=""
], [
# zlib.h is not in the standard search path, try
# $prefix
zip_save_INCLUDES="$INCLUDES"
INCLUDES="-I${prefix}/include $INCLUDES"
AC_TRY_COMPILE([#include <zlib.h>],[int a;],[
ZIP_INCLUDES="-I${prefix}/include"
], [
ZIP_INCLUDES="no"
])
INCLUDES=$zip_save_INCLUDES
])
fi
# Now for the libraries
if test "$ZIP_LIBS" = ""; then
zip_save_LIBS="$LIBS"
zip_save_INCLUDES="$INCLUDES"
LIBS="-lz $LIBS"
INCLUDES="$ZIP_INCLUDES $INCLUDES"
# Try the standard search path first
AC_TRY_LINK([#include <zlib.h>],[zlibVersion()], [
ZIP_LIBS="-lz"
], [
# libz is not in the standard search path, try $prefix
LIBS="-L${prefix}/lib $LIBS"
AC_TRY_LINK([#include <zlib.h>],[zlibVersion()], [
ZIP_LIBS="-L${prefix}/lib -lz"
], [
ZIP_LIBS=no
])
])
LIBS="$zip_save_LIBS"
INCLUDES="$zip_save_INCLUDES"
fi
AC_SUBST(ZIP_LIBS)
AC_SUBST(ZIP_INCLUDES)
# Print a helpful message
zip_libraries_result="$ZIP_LIBS"
zip_includes_result="$ZIP_INCLUDES"
if test x"$zip_libraries_result" = x""; then
zip_libraries_result="in default path"
fi
if test x"$zip_includes_result" = x""; then
zip_includes_result="in default path"
fi
if test "$zip_libraries_result" = "no"; then
zip_libraries_result="(none)"
fi
if test "$zip_includes_result" = "no"; then
zip_includes_result="(none)"
fi
AC_MSG_RESULT([libraries $zip_libraries_result, headers $zip_includes_result])
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
if test "$ZIP_INCLUDES" != "no" && test "$ZIP_LIBS" != "no"; then
AC_DEFINE(HAVE_ZIP,1,[Define if you have libz libraries and header files.])
$1
else
ZIP_LIBS=""
ZIP_INCLUDES=""
$2
fi
])dnl

124
m4/zlib.m4 Normal file
View File

@ -0,0 +1,124 @@
dnl From FIND_MOTIF and ACX_PTHREAD, without much understanding
dnl
dnl FIND_ZLIB[ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]
dnl ------------------------------------------------
dnl
dnl Find zlib libraries and headers ... useful for platforms which are missing
dnl the zlib .pc file
dnl
dnl Put compile stuff in ZLIB_INCLUDES
dnl Put link stuff in ZLIB_LIBS
dnl Define HAVE_ZLIB if found
dnl
AC_DEFUN([FIND_ZLIB], [
AC_REQUIRE([AC_PATH_XTRA])
ZLIB_INCLUDES=""
ZLIB_LIBS=""
AC_ARG_WITH(zlib,
AS_HELP_STRING([--without-zlib], [build without zlib (default: test)]))
# Treat --without-zlib like --without-zlib-includes --without-zlib-libraries.
if test "$with_zlib" = "no"; then
ZLIB_INCLUDES=no
ZLIB_LIBS=no
fi
AC_ARG_WITH(zlib-includes,
AS_HELP_STRING([--with-zlib-includes=DIR], [libz includes are in DIR]),
ZLIB_INCLUDES="-I$withval")
AC_ARG_WITH(zlib-libraries,
AS_HELP_STRING([--with-zlib-libraries=DIR], [libz libraries are in DIR]),
ZLIB_LIBS="-L$withval -lz")
AC_MSG_CHECKING(for ZLIB)
# Look for zlib.h
if test "$ZLIB_INCLUDES" = ""; then
# Check the standard search path
AC_TRY_COMPILE([#include <stdio.h>
#include <zlib.h>],[int a;],[
ZLIB_INCLUDES=""
], [
# zlib.h is not in the standard search path, try
# $prefix
zlib_save_INCLUDES="$INCLUDES"
INCLUDES="-I${prefix}/include $INCLUDES"
AC_TRY_COMPILE([#include <stdio.h>
#include <zlib.h>],[int a;],[
ZLIB_INCLUDES="-I${prefix}/include"
], [
ZLIB_INCLUDES="no"
])
INCLUDES=$zlib_save_INCLUDES
])
fi
# Now for the libraries
if test "$ZLIB_LIBS" = ""; then
zlib_save_LIBS="$LIBS"
zlib_save_INCLUDES="$INCLUDES"
LIBS="-lz $LIBS"
INCLUDES="$ZLIB_INCLUDES $INCLUDES"
# Try the standard search path first
AC_TRY_LINK([#include <stdio.h>
#include <zlib.h>
],[z_stream zs;inflateInit2(&zs, 15 | 32)], [
ZLIB_LIBS="-lz"
], [
# libz is not in the standard search path, try $prefix
LIBS="-L${prefix}/lib $LIBS"
AC_TRY_LINK([#include <stdio.h>
#include <zlib.h>
],[z_stream zs;inflateInit2(&zs, 15 | 32)], [
ZLIB_LIBS="-L${prefix}/lib -lz"
], [
ZLIB_LIBS=no
])
])
LIBS="$zlib_save_LIBS"
INCLUDES="$zlib_save_INCLUDES"
fi
AC_SUBST(ZLIB_LIBS)
AC_SUBST(ZLIB_INCLUDES)
# Print a helpful message
zlib_libraries_result="$ZLIB_LIBS"
zlib_includes_result="$ZLIB_INCLUDES"
if test x"$zlib_libraries_result" = x""; then
zlib_libraries_result="in default path"
fi
if test x"$zlib_includes_result" = x""; then
zlib_includes_result="in default path"
fi
if test "$zlib_libraries_result" = "no"; then
zlib_libraries_result="(none)"
fi
if test "$zlib_includes_result" = "no"; then
zlib_includes_result="(none)"
fi
AC_MSG_RESULT([libraries $zlib_libraries_result, headers $zlib_includes_result])
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
if test "$ZLIB_INCLUDES" != "no" && test "$ZLIB_LIBS" != "no"; then
AC_DEFINE(HAVE_ZLIB,1,[Define if you have zlib libraries and header files.])
$1
else
ZLIB_INCLUDES=""
ZLIB_LIBS=""
$2
fi
])dnl