]> git.draconx.ca Git - liblbx.git/blobdiff - m4/libpng.m4
build: Split out core logic from libpng detection.
[liblbx.git] / m4 / libpng.m4
index 5adeb0f35ecb1ae3aefa48a4f5841b05f9dd882c..52db43ef22eea544eec69cb0321a520c2095c9db 100644 (file)
-dnl Copyright (C) 2009 Nick Bowler
+dnl Copyright (C) 2009-2010 Nick Bowler
 dnl Copying and distribution of this file, with or without modification,
 dnl are permitted in any medium without royalty provided the copyright
 dnl notice and this notice are preserved.  This file is offered as-is,
 dnl without any warranty.
 
-dnl _LIBPNG_TRY_VERSION(min-version)
-AC_DEFUN([_LIBPNG_TRY_VERSION], [dnl
-sedhead='s/@<:@0-9@:>@@<:@0-9@:>@*/<<<&>>>/'
-sedtail='s/.*<<<\(.*\)>>>.*/\1/;t;s/.*/0/'
-png_min_major=`printf   '%s' '$1' | sed -e "$sedhead"1 -e "$sedtail"`
-png_min_minor=`printf   '%s' '$1' | sed -e "$sedhead"2 -e "$sedtail"`
-png_min_release=`printf '%s' '$1' | sed -e "$sedhead"3 -e "$sedtail"`
-png_min_build=`printf   '%s' '$1' | sed -e "$sedhead"4 -e "$sedtail"`
-png_min_status=`printf  '%s' '$1' | sed '
-       t; s/.*alpha.*/PNG_LIBPNG_BUILD_ALPHA/
-       t; s/.*beta.*/PNG_LIBPNG_BUILD_BETA/
-       t; s/.*rc.*/PNG_LIBPNG_BUILD_RC/
-       t; s/.*/PNG_LIBPNG_BUILD_STABLE/
-'`
-
-AC_CACHE_CHECK([for libpng version at least $1],
-       [libpng_cv_sufficient_ver],
-       [AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
+dnl _DX_LIBPNG_TEST_PROGRAM(major, minor, release)
+AC_DEFUN([_DX_LIBPNG_TEST_PROGRAM], [AC_LANG_PROGRAM([dnl
 #include <png.h>
-#if PNG_LIBPNG_VER_MAJOR < $png_min_major
+ifelse([$1], [], [], [dnl
+#if PNG_LIBPNG_VER_MAJOR < $1
 #  error Invalid libpng major version
-#elif PNG_LIBPNG_VER_MAJOR == $png_min_major
-#  if PNG_LIBPNG_VER_MINOR < $png_min_minor
+ifelse([$2], [], [], [dnl
+#elif PNG_LIBPNG_VER_MAJOR == $1
+#  if PNG_LIBPNG_VER_MINOR < $2
 #    error Invalid libpng minor version
-#  elif PNG_LIBPNG_VER_MINOR == $png_min_minor
-#    if PNG_LIBPNG_VER_RELEASE < $png_min_release
+ifelse([$3], [], [], [dnl
+#  elif PNG_LIBPNG_VER_MINOR == $2
+#    if PNG_LIBPNG_VER_RELEASE < $3
 #      error Invalid libpng release
-#    elif PNG_LIBPNG_VER_RELEASE == $png_min_release
-#      if PNG_LIBPNG_BUILD_BASE_TYPE < $png_min_status
-#        error Invalid libpng release status
-#      elif PNG_LIBPNG_BUILD_BASE_TYPE == $png_min_status
-#        if PNG_LIBPNG_VER_BUILD < $png_min_build
-#          error Invalid libpng build
-#        endif
-#      endif
 #    endif
+])dnl
 #  endif
+])dnl
 #endif
+])dnl
 ], [dnl
 png_structp png  = png_create_read_struct("", 0, 0, 0);
 png_infop   info = png_create_info_struct(png);
-])], [libpng_cv_sufficient_ver=yes], [libpng_cv_sufficient_ver=no])])
-])
-
-dnl CHECK_LIBPNG([min-version], [action-if-ok], [action-if-fail])
-AC_DEFUN([CHECK_LIBPNG],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([LIBPNG_CFLAGS], [C compiler flags for libpng])dnl
-AC_ARG_VAR([LIBPNG_LIBS],   [linker flags for libpng])dnl
-
-if test x"$PKG_CONFIG" != x; then
-       AC_MSG_CHECKING([pkg-config database for libpng])
-       _PKG_CONFIG([libpng_cflags], [cflags], [libpng])
-       _PKG_CONFIG([libpng_libs],   [libs],   [libpng])
-       if test x$pkg_failed = xyes; then
-               errors=`$PKG_CONFIG --errors-to-stdout --print-errors libpng`
-               echo "$errors" >&AS_MESSAGE_LOG_FD
-               AC_MSG_RESULT([no])
-       else
-               if test x"$LIBPNG_CFLAGS" = x; then
-                       LIBPNG_CFLAGS=$pkg_cv_libpng_cflags
-               fi
-               if test x"$LIBPNG_LIBS" = x; then
-                       LIBPNG_LIBS=$pkg_cv_libpng_libs
-               fi
-
-               AC_MSG_RESULT([yes])
-       fi
-fi
-
-if test x"$LIBPNG_LIBS" = x; then
-       LIBPNG_LIBS=-lpng
-fi
-
-AC_LANG_PUSH([C])
-old_cflags=$CFLAGS
-old_libs=$LIBS
-CFLAGS="$LIBPNG_CFLAGS $CFLAGS"
-LIBS="$LIBPNG_LIBS $LIBS"
-
-_LIBPNG_TRY_VERSION(ifelse([$1], [], [1.0], [$1]))
-
-CFLAGS=$old_cflags
-LIBS=$old_libs
-AC_LANG_POP([C])
-
-if test x"$libpng_cv_sufficient_ver" = x"yes"; then
-       AC_SUBST([LIBPNG_CFLAGS])
-       AC_SUBST([LIBPNG_LIBS])
-       ifelse([$2], [], [true], [$2])
+])])
+
+dnl DX_CHECK_LIBPNG([min-version], [action-if-ok], [action-if-fail])
+AC_DEFUN([DX_CHECK_LIBPNG],
+[DX_PKG_CONFIG([libpng], [libpng], [libpng])
+
+DX_CHECK_LIB([libpng],
+       [for libpng[]ifelse([$1], [], [], [ version at least $1])],
+       [m4_apply([_DX_LIBPNG_TEST_PROGRAM], m4_split([$1], [\.]))], [dnl
+               [[$LIBPNG_CFLAGS], [$LIBPNG_LIBS]],
+               [[$pkg_cv_libpng_cflags], [$pkg_cv_libpng_libs],
+                       [test ! x"$pkg_failed" = x"yes"]],
+               [[], [-lpng]],
+               ])
+
+if test x"$dx_cv_libpng_found" = x"yes"; then
+       ifelse([$2], [], [:], [$2])
 else
        ifelse([$3], [], [AC_MSG_FAILURE([dnl
-libpng version >= ifelse([$1], [], [1.0], [$1]) is required.  The latest
+libpng[]ifelse([$1], [], [], [ version at least $1]) is required.  The latest
 version can be obtained from http://libpng.org/pub/png/libpng.html.
 
 If libpng is installed but was not found by this configure script,