Marcus Meissner : windowscodecs: Handle old libpng.so using distros ( as SLE 10).

Alexandre Julliard julliard at winehq.org
Tue Mar 2 10:32:33 CST 2010


Module: wine
Branch: master
Commit: 615e0e64f9fa3a910c58af2a382943546d3230a6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=615e0e64f9fa3a910c58af2a382943546d3230a6

Author: Marcus Meissner <marcus at jet.franken.de>
Date:   Sat Feb 27 23:13:21 2010 +0100

windowscodecs: Handle old libpng.so using distros (as SLE 10).

---

 configure                      |   84 ++++++++++++++++++++++++++++++++++++++++
 configure.ac                   |    5 ++
 dlls/windowscodecs/pngformat.c |   12 ++++++
 include/config.h.in            |    3 +
 4 files changed, 104 insertions(+), 0 deletions(-)

diff --git a/configure b/configure
index 5ecb68f..6d98218 100755
--- a/configure
+++ b/configure
@@ -11060,6 +11060,49 @@ _ACEOF
 
 
 fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_set_expand_gray_1_2_4_to_8 in -lpng" >&5
+$as_echo_n "checking for png_set_expand_gray_1_2_4_to_8 in -lpng... " >&6; }
+if test "${ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpng -lm -lz $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char png_set_expand_gray_1_2_4_to_8 ();
+int
+main ()
+{
+return png_set_expand_gray_1_2_4_to_8 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8=yes
+else
+  ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8" >&5
+$as_echo "$ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8" >&6; }
+if test "x$ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8" = x""yes; then :
+
+$as_echo "#define HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8 1" >>confdefs.h
+
+
+fi
+
 elif test -n "$X_CFLAGS" -a "x$with_png" != "xno"
 then
         ac_save_CPPFLAGS="$CPPFLAGS"
@@ -11132,6 +11175,47 @@ _ACEOF
 
 
 fi
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_set_expand_gray_1_2_4_to_8 in -lpng" >&5
+$as_echo_n "checking for png_set_expand_gray_1_2_4_to_8 in -lpng... " >&6; }
+if test "${ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpng $X_LIBS -lm -lz $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char png_set_expand_gray_1_2_4_to_8 ();
+int
+main ()
+{
+return png_set_expand_gray_1_2_4_to_8 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8=yes
+else
+  ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8" >&5
+$as_echo "$ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8" >&6; }
+if test "x$ac_cv_lib_png_png_set_expand_gray_1_2_4_to_8" = x""yes; then :
+  $as_echo "#define HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8 1" >>confdefs.h
+
+fi
+
     fi
 fi
 if test "x$ac_cv_lib_soname_png" = "x"; then :
diff --git a/configure.ac b/configure.ac
index 0796200..8eb37a2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1420,6 +1420,9 @@ dnl **** Check for libpng ****
 if test "$ac_cv_header_png_h" = "yes"
 then
     WINE_CHECK_SONAME(png,png_create_read_struct,,,-lm -lz,[[libpng[[0-9]]*]])
+    AC_CHECK_LIB(png,png_set_expand_gray_1_2_4_to_8,
+	[AC_DEFINE(HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8,1,[Define to 1 if libpng has the png_set_expand_gray_1_2_4_to_8 function.])]
+	,,-lm -lz)
 elif test -n "$X_CFLAGS" -a "x$with_png" != "xno"
 then
     dnl libpng is in the X directory on Mac OS X
@@ -1432,6 +1435,8 @@ then
     then
         AC_SUBST(PNGINCL,"$X_CFLAGS")
         WINE_CHECK_SONAME(png,png_create_read_struct,,,[$X_LIBS -lm -lz],[[libpng[[0-9]]*]])
+        AC_CHECK_LIB(png,png_set_expand_gray_1_2_4_to_8,
+		[AC_DEFINE(HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8,1)],,[$X_LIBS -lm -lz])
     fi
 fi
 WINE_WARNING_WITH(png,[test "x$ac_cv_lib_soname_png" = "x"],
diff --git a/dlls/windowscodecs/pngformat.c b/dlls/windowscodecs/pngformat.c
index 482ea90..22b37b0 100644
--- a/dlls/windowscodecs/pngformat.c
+++ b/dlls/windowscodecs/pngformat.c
@@ -60,7 +60,11 @@ MAKE_FUNCPTR(png_get_PLTE);
 MAKE_FUNCPTR(png_get_tRNS);
 MAKE_FUNCPTR(png_set_bgr);
 MAKE_FUNCPTR(png_set_error_fn);
+#if HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
 MAKE_FUNCPTR(png_set_expand_gray_1_2_4_to_8);
+#else
+MAKE_FUNCPTR(png_set_gray_1_2_4_to_8);
+#endif
 MAKE_FUNCPTR(png_set_filler);
 MAKE_FUNCPTR(png_set_gray_to_rgb);
 MAKE_FUNCPTR(png_set_IHDR);
@@ -103,7 +107,11 @@ static void *load_libpng(void)
         LOAD_FUNCPTR(png_get_tRNS);
         LOAD_FUNCPTR(png_set_bgr);
         LOAD_FUNCPTR(png_set_error_fn);
+#if HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
         LOAD_FUNCPTR(png_set_expand_gray_1_2_4_to_8);
+#else
+        LOAD_FUNCPTR(png_set_gray_1_2_4_to_8);
+#endif
         LOAD_FUNCPTR(png_set_filler);
         LOAD_FUNCPTR(png_set_gray_to_rgb);
         LOAD_FUNCPTR(png_set_IHDR);
@@ -306,7 +314,11 @@ static HRESULT WINAPI PngDecoder_Initialize(IWICBitmapDecoder *iface, IStream *p
         {
             if (bit_depth < 8)
             {
+#if HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
                 ppng_set_expand_gray_1_2_4_to_8(This->png_ptr);
+#else
+                ppng_set_gray_1_2_4_to_8(This->png_ptr);
+#endif
                 bit_depth = 8;
             }
             ppng_set_gray_to_rgb(This->png_ptr);
diff --git a/include/config.h.in b/include/config.h.in
index 4e8fcd1..7c34980 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -582,6 +582,9 @@
 /* Define to 1 if you have the <png.h> header file. */
 #undef HAVE_PNG_H
 
+/* Define to 1 if libpng has the png_set_expand_gray_1_2_4_to_8 function. */
+#undef HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
+
 /* Define to 1 if you have the `poll' function. */
 #undef HAVE_POLL
 




More information about the wine-cvs mailing list