1# Allow the builder to specify an external ZLIB rather than the version
2# distributed with CVS.
3
4# Copyright (c) 2003
5#		Anthon Pang <apang@telux.net>,
6#               Derek R. Price, Ximbiot <http://ximbiot.com>,
7#               and the Free Software Foundation, Inc.
8
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2, or (at your option)
12# any later version.
13
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17# GNU General Public License for more details.
18
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22# 02111-1307, USA.
23
24# ACX_WITH_EXTERNAL_ZLIB
25# -------------------
26# Determine which ZLIB to use.
27AC_DEFUN([ACX_WITH_EXTERNAL_ZLIB],[
28#
29# Use --with-zlib to build with a zlib other than the version distributed
30# with CVS.
31#
32# defaults to the included snapshot of zlib
33#
34AC_ARG_WITH([external-zlib],
35            AC_HELP_STRING([--with-external-zlib],
36                           [Use the specified ZLIB library (defaults to
37                            the version distributed with the CVS source)]),
38            [with_external_zlib=$withval],
39            [with_external_zlib=no])
40
41#
42# Try to locate a ZLIB installation if no location was specified, assuming
43# external ZLIB was enabled.
44#
45if test -n "$acx_zlib_cv_external_zlib"; then
46  # Granted, this is a slightly ugly way to print this info, but the
47  # AC_CHECK_HEADER used in the search for a ZLIB installation makes using
48  # AC_CACHE_CHECK worse
49  AC_MSG_CHECKING([for external ZLIB])
50else :; fi
51AC_CACHE_VAL([acx_zlib_cv_external_zlib], [
52  #
53  # --with but no location specified
54  # assume zlib.h locates our install.
55  #
56  acx_zlib_save_CPPFLAGS=$CPPFLAGS
57  for acx_zlib_cv_external_zlib in yes /usr/local no; do
58    if test x$acx_zlib_cv_external_zlib = xno; then
59      break
60    fi
61    if test x$acx_zlib_cv_external_zlib = xyes; then
62      AC_MSG_CHECKING([for external ZLIB])
63      AC_MSG_RESULT([])
64    else
65      CPPFLAGS="$acx_zlib_save_CPPFLAGS -I$acx_zlib_cv_external_zlib/include"
66      AC_MSG_CHECKING([for external ZLIB in $acx_zlib_cv_external_zlib])
67      AC_MSG_RESULT([])
68    fi
69    unset ac_cv_header_zlib_h
70    AC_CHECK_HEADERS([zlib.h])
71    if test "$ac_cv_header_zlib_h" = yes; then
72      break
73    fi
74  done
75  CPPFLAGS=$acx_zlib_save_CPPFLAGS
76AC_MSG_CHECKING([for external ZLIB])
77])dnl
78AC_MSG_RESULT([$acx_zlib_cv_external_zlib])
79
80
81#
82# Output a pretty message naming our selected ZLIB "external" or "package"
83# so that any warnings printed by the version check make more sense.
84#
85AC_MSG_CHECKING([selected ZLIB])
86if test "x$with_external_zlib" = xno; then
87  AC_MSG_RESULT([package])
88else
89  AC_MSG_RESULT([external])
90fi
91
92
93#
94# Verify that the ZLIB we aren't using isn't newer than the one we are.
95#
96if test "x$acx_zlib_cv_external_zlib" != xno; then
97  LOCAL_ZLIB_VERSION=`sed -n '/^#define ZLIB_VERSION ".*"$/{
98                              s/^#define ZLIB_VERSION "\(.*\)"$/\1/;
99                              p;}' <$srcdir/zlib/zlib.h 2>&AS_MESSAGE_LOG_FD`
100  ACX_EXTRACT_HEADER_DEFN([ZLIB_VERSION], [zlib.h])
101  ZLIB_VERSION=`echo "$ZLIB_VERSION" |sed 's/"//g'`
102  ASX_VERSION_COMPARE([$LOCAL_ZLIB_VERSION], [$ZLIB_VERSION],
103    [if test "x$with_external_zlib" = xno; then
104       AC_MSG_WARN(
105         [Found external ZLIB with a more recent version than the
106           package version ($ZLIB_VERSION > $LOCAL_ZLIB_VERSION).  configure with the
107           --with-external-zlib option to select the more recent version.])
108     fi],
109    [],
110    [if test "x$with_external_zlib" != xno; then
111       AC_MSG_WARN(
112         [Package ZLIB is more recent than requested external version
113           ($LOCAL_ZLIB_VERSION > $ZLIB_VERSION).  configure with the --without-external-zlib
114           option to select the more recent version.])
115     fi])
116fi
117
118
119# Now set with_external_zlib to our discovered value or the user specified
120# value, as appropriate.
121if test x$with_external_zlib = xyes; then
122  with_external_zlib=$acx_zlib_cv_external_zlib
123fi
124# $with_external_zlib could still be "no"
125
126
127#
128# Set up ZLIB includes for later use.
129#
130if test x$with_external_zlib != xyes \
131   && test x$with_external_zlib != no; then
132  if test -z "$CPPFLAGS"; then
133    CPPFLAGS="-I$with_external_zlib/include"
134  else
135    CPPFLAGS="$CPPFLAGS -I$with_external_zlib/include"
136  fi
137  if test -z "$LDFLAGS"; then
138    LDFLAGS="-L$with_external_zlib/lib"
139  else
140    LDFLAGS="$LDFLAGS -L$with_external_zlib/lib"
141  fi
142fi
143
144ZLIB_CPPFLAGS=
145ZLIB_LIBS=
146ZLIB_SUBDIRS=
147if test x$with_external_zlib = xno; then
148  # We need ZLIB_CPPFLAGS so that later executions of cpp from configure
149  # don't try to interpret $(top_srcdir)
150  ZLIB_CPPFLAGS='-I$(top_srcdir)/zlib'
151  ZLIB_LIBS='$(top_builddir)/zlib/libz.a'
152  # ZLIB_SUBDIRS is only used in the top level Makefiles.
153  ZLIB_SUBDIRS=zlib
154else
155  # We know what to do now, so set up the CPPFLAGS, LDFLAGS, and LIBS for later
156  # use.
157  if test -z "$LIBS"; then
158    LIBS=-lz
159  else
160    LIBS="$LIBS -lz"
161  fi
162
163  #
164  # Verify external installed zlib works
165  #
166  # Ideally, we would also check that the version is newer
167  #
168  AC_MSG_CHECKING([that ZLIB library works])
169  AC_TRY_LINK([#include <zlib.h>],
170              [int i = Z_OK; const char *version = zlibVersion();],
171              [AC_MSG_RESULT([yes])],
172              [AC_MSG_RESULT([no])
173               AC_MSG_ERROR([ZLIB failed to link])])
174fi
175
176dnl Subst for the local case
177AC_SUBST(ZLIB_SUBDIRS)dnl
178AC_SUBST(ZLIB_CPPFLAGS)dnl
179AC_SUBST(ZLIB_LIBS)dnl
180])
181