Upstream tarball 20080304
[amule.git] / m4 / libpng.m4
blob1829cc432ea766726d0c863d2b34dec230a62a9f
1 dnl ---------------------------------------------------------------------------
2 dnl AM_OPTIONS_LIBPNG_CONFIG
3 dnl
4 dnl adds support for --libpng-prefix and --libpng-config
5 dnl command line options
6 dnl ---------------------------------------------------------------------------
8 AC_DEFUN([AM_OPTIONS_LIBPNGCONFIG],
10         AC_ARG_WITH(
11                 [libpng-prefix],
12                 [AS_HELP_STRING(
13                         [--with-libpng-prefix=PREFIX],
14                         [prefix where libpng is installed (optional)])],
15                 [libpng_config_prefix="$withval"],
16                 [libpng_config_prefix=""])
17         AC_ARG_WITH(
18                 [libpng-config],
19                 [AS_HELP_STRING(
20                         [--with-libpng-config=CONFIG],
21                         [libpng-config script to use (optional)])],
22                 [libpng_config_name="$withval"],
23                 [libpng_config_name=""])
26 dnl ---------------------------------------------------------------------------
27 dnl AM_PATH_LIBPNGCONFIG([VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
28 dnl
29 dnl Test for libpng, and define LIBPNG*FLAGS, LIBPNG_LIBS and LIBPNG_CONFIG_NAME
30 dnl environment variable to override the default name of the libpng-config script
31 dnl to use. Set LIBPNG_CONFIG_PATH to specify the full path to libpng-config -
32 dnl in this case the macro won't even waste time on tests for its existence.
33 dnl ---------------------------------------------------------------------------
34 AC_DEFUN([AM_PATH_LIBPNGCONFIG],
35 [AC_REQUIRE([AM_OPTIONS_LIBPNGCONFIG])dnl
36 m4_define([REQUIRED_VERSION], [ifelse([$1],, [1.2.0], [$1])])dnl
37 m4_define([REQUIRED_VERSION_MAJOR], [m4_bregexp(REQUIRED_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\1])])dnl
38 m4_define([REQUIRED_VERSION_MINOR], [m4_bregexp(REQUIRED_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\2])])dnl
39 m4_define([REQUIRED_VERSION_MICRO], [m4_bregexp(REQUIRED_VERSION, [\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)], [\3])])dnl
41   dnl do we have libpng-config name: it can be libpng-config or libpng12-config or ...
42   if test x${LIBPNG_CONFIG_NAME+set} != xset ; then
43      LIBPNG_CONFIG_NAME=libpng-config
44   fi
45   if test "x$libpng_config_name" != x ; then
46      LIBPNG_CONFIG_NAME="$libpng_config_name"
47   fi
49   dnl deal with optional prefix
50   if test x$libpng_config_prefix != x ; then
51      LIBPNG_LOOKUP_PATH="$libpng_config_prefix/bin"
52   fi
53   
54   dnl don't search the PATH if LIBPNG_CONFIG_NAME is absolute filename
55   if test -x "$LIBPNG_CONFIG_NAME" ; then
56      AC_MSG_CHECKING(for libpng-config)
57      LIBPNG_CONFIG_PATH="$LIBPNG_CONFIG_NAME"
58      AC_MSG_RESULT($LIBPNG_CONFIG_PATH)
59   else
60      AC_PATH_PROG(LIBPNG_CONFIG_PATH, $LIBPNG_CONFIG_NAME, no, "$LIBPNG_LOOKUP_PATH:$PATH")
61   fi
63   if test "$LIBPNG_CONFIG_PATH" != "no" ; then
64     LIBPNG_VERSION=""
66     AC_MSG_CHECKING([for libpng version >= REQUIRED_VERSION])
68     LIBPNG_CONFIG_WITH_ARGS="$LIBPNG_CONFIG_PATH $libpng_config_args"
70     LIBPNG_VERSION=`$LIBPNG_CONFIG_WITH_ARGS --version`
71     libpng_config_major_version=`echo $LIBPNG_VERSION | sed ['s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/']`
72     libpng_config_minor_version=`echo $LIBPNG_VERSION | sed ['s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/']`
73     libpng_config_micro_version=`echo $LIBPNG_VERSION | sed ['s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/']`
75     libpng_ver_ok=""
76     if test $libpng_config_major_version -gt REQUIRED_VERSION_MAJOR; then
77       libpng_ver_ok=yes
78     else
79       if test $libpng_config_major_version -eq REQUIRED_VERSION_MAJOR; then
80          if test $libpng_config_minor_version -gt REQUIRED_VERSION_MINOR; then
81             libpng_ver_ok=yes
82          else
83             if test $libpng_config_minor_version -eq REQUIRED_VERSION_MINOR; then
84                if test $libpng_config_micro_version -ge REQUIRED_VERSION_MICRO; then
85                   libpng_ver_ok=yes
86                fi
87             fi
88          fi
89       fi
90     fi
92     if test x$libpng_ver_ok = x ; then
93       if test x$LIBPNG_VERSION = x; then
94         dnl '$LIBPNG_CONFIG_WITH_ARGS --version' didn't produce output
95         AC_MSG_RESULT([no])
96       else
97         AC_MSG_RESULT([no (version $LIBPNG_VERSION is not new enough)])
98       fi
99       LIBPNG_CFLAGS=""
100       LIBPNG_CXXFLAGS=""
101       LIBPNG_LDFLAGS=""
102       LIBPNG_LIBS=""
103       LIBPNG_VERSION=""
104       $3
105     else
106       LIBPNG_LIBS=`$LIBPNG_CONFIG_WITH_ARGS --libs`
107       LIBPNG_LDFLAGS=`$LIBPNG_CONFIG_WITH_ARGS --ldflags | sed -e "s/ *${LIBPNG_LIBS}$//"`
108       LIBPNG_CFLAGS=`$LIBPNG_CONFIG_WITH_ARGS --cflags`
109       LIBPNG_CXXFLAGS=$LIBPNG_CFLAGS
110       AC_MSG_RESULT([yes (version $LIBPNG_VERSION)])
111       $2
112     fi
114   else
115         dnl Some RedHat RPMs miss libpng-config, so test for
116         dnl the usability with default options.
117         AC_MSG_CHECKING([for libpng >= REQUIRED_VERSION])
118         dnl Set up LIBS for the test
119         saved_LIBS="$LIBS"
120         LIBS="$LIBS -lpng -lz -lm"
121         dnl Set default (empty) values.
122         LIBPNG_CFLAGS=""
123         LIBPNG_CXXFLAGS=""
124         LIBPNG_LDFLAGS=""
125         LIBPNG_LIBS=""
126         AC_RUN_IFELSE([
127                 AC_LANG_PROGRAM([[
128                         #include <png.h>
129                         #include <stdio.h>
131                         /* Check linking to png library */
132                         void dummy() {
133                                 png_check_sig(NULL, 0);
134                         }
135                 ]], [dnl Don't use double-quoting here!
136                         /* png.h defines PNG_LIBPNG_VER=xyyzz */
137                         FILE *f=fopen("conftestval", "w");
138                         if (!f) exit(1);
139                         fprintf(f, "%s", (PNG_LIBPNG_VER >= REQUIRED_VERSION_MAJOR * 10000 + REQUIRED_VERSION_MINOR * 100 + REQUIRED_VERSION_MICRO) ? "yes" : "no");
140                         fclose(f);
141                         f=fopen("conftestver", "w");
142                         if (!f) exit(0);
143                         fprintf(f, "%s", PNG_LIBPNG_VER_STRING);
144                         fclose(f);
145                         exit(0);
146                 ])
147         ], [
148                 AS_IF([test -f conftestval], [result=`cat conftestval`], [result=no])
149                 if test x$result = xyes; then
150                         if test -f conftestver; then
151                                 LIBPNG_VERSION=`cat conftestver`
152                                 lib_version=" (version $LIBPNG_VERSION)"
153                         else
154                                 lib_version=""
155                         fi
156                 fi
157                 AC_MSG_RESULT([$result$lib_version])
158                 LIBPNG_LIBS="-lpng -lz -lm"
159         ], [
160                 result=no
161                 AC_MSG_RESULT([$result])
162         ], [
163                 AC_MSG_RESULT([cross-compilation detected, checking only the header])
164                 AC_CHECK_HEADER([png.h], [result=yes], [result=no])
165                 if test x$result = xyes; then
166                         LIBPNG_VERSION="detected"
167                         LIBPNG_LIBS="-lpng -lz -lm"
168                 fi
169         ])
170         AS_IF([test x$result = xyes], [$2], [$3])
171         dnl Restore LIBS
172         LIBS="$saved_LIBS"
173   fi
175 AC_SUBST(LIBPNG_CFLAGS)dnl
176 AC_SUBST(LIBPNG_CXXFLAGS)dnl
177 AC_SUBST(LIBPNG_LDFLAGS)dnl
178 AC_SUBST(LIBPNG_LIBS)dnl
180 m4_undefine([REQUIRED_VERSION])dnl
181 m4_undefine([REQUIRED_VERSION_MAJOR])dnl
182 m4_undefine([REQUIRED_VERSION_MINOR])dnl
183 m4_undefine([REQUIRED_VERSION_MICRO])dnl