blob: 8c10ab413c1460ecbb0d335ba6f50087253945b1 [file] [log] [blame]
David Reissfaebedd2007-09-17 23:20:38 +00001dnl @synopsis AX_LIB_ZLIB([MINIMUM-VERSION])
2dnl
3dnl Test for the libz library of a particular version (or newer).
4dnl
5dnl If no path to the installed zlib is given, the macro will first try
6dnl using no -I or -L flags, then searches under /usr, /usr/local, /opt,
7dnl and /opt/zlib.
8dnl If these all fail, it will try the $ZLIB_ROOT environment variable.
9dnl
10dnl This macro calls:
11dnl AC_SUBST(ZLIB_CPPFLAGS)
12dnl AC_SUBST(ZLIB_LDFLAGS)
13dnl AC_SUBST(ZLIB_LIBS)
14dnl
15dnl And (if zlib is found):
16dnl AC_DEFINE(HAVE_ZLIB)
17dnl
18dnl It also leaves the shell variables "success" and "ax_have_zlib"
19dnl set to "yes" or "no".
20dnl
21dnl NOTE: This macro does not currently work for cross-compiling,
22dnl but it can be easily modified to allow it. (grep "cross").
23dnl
24dnl @category InstalledPackages
25dnl @category C
David Reissfaebedd2007-09-17 23:20:38 +000026dnl @version 2007-09-12
27dnl @license AllPermissive
David Reissf82aee52009-03-30 22:52:29 +000028dnl
29dnl Copyright (C) 2009 David Reiss
30dnl Copying and distribution of this file, with or without modification,
31dnl are permitted in any medium without royalty provided the copyright
32dnl notice and this notice are preserved.
David Reissfaebedd2007-09-17 23:20:38 +000033
34dnl Input: ax_zlib_path, WANT_ZLIB_VERSION
35dnl Output: success=yes/no
36AC_DEFUN([AX_LIB_ZLIB_DO_CHECK],
37 [
38 # Save our flags.
39 CPPFLAGS_SAVED="$CPPFLAGS"
40 LDFLAGS_SAVED="$LDFLAGS"
41 LIBS_SAVED="$LIBS"
42 LD_LIBRARY_PATH_SAVED="$LD_LIBRARY_PATH"
43
44 # Set our flags if we are checking a specific directory.
45 if test -n "$ax_zlib_path" ; then
46 ZLIB_CPPFLAGS="-I$ax_zlib_path/include"
47 ZLIB_LDFLAGS="-L$ax_zlib_path/lib"
48 LD_LIBRARY_PATH="$ax_zlib_path/lib:$LD_LIBRARY_PATH"
49 else
50 ZLIB_CPPFLAGS=""
51 ZLIB_LDFLAGS=""
52 fi
53
54 # Required flag for zlib.
55 ZLIB_LIBS="-lz"
56
57 # Prepare the environment for compilation.
58 CPPFLAGS="$CPPFLAGS $ZLIB_CPPFLAGS"
59 LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
60 LIBS="$LIBS $ZLIB_LIBS"
61 export CPPFLAGS
62 export LDFLAGS
63 export LIBS
64 export LD_LIBRARY_PATH
65
66 success=no
67
68 # Compile, link, and run the program. This checks:
69 # - zlib.h is available for including.
70 # - zlibVersion() is available for linking.
71 # - ZLIB_VERNUM is greater than or equal to the desired version.
72 # - ZLIB_VERSION (defined in zlib.h) matches zlibVersion()
73 # (defined in the library).
74 AC_LANG_PUSH([C])
75 dnl This can be changed to AC_LINK_IFELSE if you are cross-compiling.
76 AC_RUN_IFELSE([AC_LANG_PROGRAM([[
77 #include <zlib.h>
78 #if ZLIB_VERNUM >= 0x$WANT_ZLIB_VERSION
79 #else
80 # error zlib is too old
81 #endif
82 ]], [[
83 const char* lib_version = zlibVersion();
84 const char* hdr_version = ZLIB_VERSION;
85 for (;;) {
86 if (*lib_version != *hdr_version) {
87 /* If this happens, your zlib header doesn't match your zlib */
88 /* library. That is really bad. */
89 return 1;
90 }
91 if (*lib_version == '\0') {
92 break;
93 }
94 lib_version++;
95 hdr_version++;
96 }
97 return 0;
98 ]])], [
99 success=yes
100 ])
101 AC_LANG_POP([C])
102
103 # Restore flags.
104 CPPFLAGS="$CPPFLAGS_SAVED"
105 LDFLAGS="$LDFLAGS_SAVED"
106 LIBS="$LIBS_SAVED"
107 LD_LIBRARY_PATH="$LD_LIBRARY_PATH_SAVED"
108 ])
109
110
111AC_DEFUN([AX_LIB_ZLIB],
112 [
113
114 dnl Allow search path to be overridden on the command line.
115 AC_ARG_WITH([zlib],
116 AS_HELP_STRING([--with-zlib@<:@=DIR@:>@], [use zlib (default is yes) - it is possible to specify an alternate root directory for zlib]),
117 [
David Reiss19d3d0a2009-03-13 21:25:31 +0000118 if test "x$withval" = "xno"; then
David Reissfaebedd2007-09-17 23:20:38 +0000119 want_zlib="no"
David Reiss19d3d0a2009-03-13 21:25:31 +0000120 elif test "x$withval" = "xyes"; then
David Reissfaebedd2007-09-17 23:20:38 +0000121 want_zlib="yes"
122 ax_zlib_path=""
123 else
124 want_zlib="yes"
125 ax_zlib_path="$withval"
126 fi
127 ],
128 [want_zlib="yes" ; ax_zlib_path="" ])
129
130
131 if test "$want_zlib" = "yes"; then
132 # Parse out the version.
133 zlib_version_req=ifelse([$1], ,1.2.3,$1)
134 zlib_version_req_major=`expr $zlib_version_req : '\([[0-9]]*\)'`
135 zlib_version_req_minor=`expr $zlib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
136 zlib_version_req_patch=`expr $zlib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
137 if test -z "$zlib_version_req_patch" ; then
138 zlib_version_req_patch="0"
139 fi
140 WANT_ZLIB_VERSION=`expr $zlib_version_req_major \* 1000 \+ $zlib_version_req_minor \* 100 \+ $zlib_version_req_patch \* 10`
141
142 AC_MSG_CHECKING(for zlib >= $zlib_version_req)
143
144 # Run tests.
145 if test -n "$ax_zlib_path"; then
146 AX_LIB_ZLIB_DO_CHECK
147 else
148 for ax_zlib_path in "" /usr /usr/local /opt /opt/zlib "$ZLIB_ROOT" ; do
149 AX_LIB_ZLIB_DO_CHECK
150 if test "$success" = "yes"; then
151 break;
152 fi
153 done
154 fi
155
156 if test "$success" != "yes" ; then
157 AC_MSG_RESULT(no)
158 ZLIB_CPPFLAGS=""
159 ZLIB_LDFLAGS=""
160 ZLIB_LIBS=""
161 else
162 AC_MSG_RESULT(yes)
163 AC_DEFINE(HAVE_ZLIB,,[define if zlib is available])
164 fi
165
166 ax_have_zlib="$success"
167
168 AC_SUBST(ZLIB_CPPFLAGS)
169 AC_SUBST(ZLIB_LDFLAGS)
170 AC_SUBST(ZLIB_LIBS)
171 fi
172
173 ])