1/* This program is free software; you can redistribute it and/or modify
2   it under the terms of the GNU General Public License as published by
3   the Free Software Foundation; either version 2, or (at your option)
4   any later version.
5
6   This program is distributed in the hope that it will be useful,
7   but WITHOUT ANY WARRANTY; without even the implied warranty of
8   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9   GNU General Public License for more details.  */
10
11AC_DEFUN([ACX_WITH_GSSAPI],[
12#
13# Use --with-gssapi[=DIR] to enable GSSAPI support.
14#
15# defaults to enabled with DIR in default list below
16#
17# Search for /SUNHEA/ and read the comments about this default below.
18#
19AC_ARG_WITH(
20  [gssapi],
21  AC_HELP_STRING(
22    [--with-gssapi],
23    [GSSAPI directory (default autoselects)]), ,
24  [with_gssapi=yes])dnl
25
26dnl
27dnl FIXME - cache withval and obliterate later cache values when options change
28dnl
29#
30# Try to locate a GSSAPI installation if no location was specified, assuming
31# GSSAPI was enabled (the default).
32#
33if test -n "$acx_gssapi_cv_gssapi"; then
34  # Granted, this is a slightly ugly way to print this info, but the
35  # AC_CHECK_HEADER used in the search for a GSSAPI installation makes using
36  # AC_CACHE_CHECK worse
37  AC_MSG_CHECKING([for GSSAPI])
38else :; fi
39AC_CACHE_VAL([acx_gssapi_cv_gssapi], [
40if test x$with_gssapi = xyes; then
41  # --with but no location specified
42  # assume a gssapi.h or gssapi/gssapi.h locates our install.
43  #
44  # This isn't always strictly true.  For instance Solaris 7's SUNHEA (header)
45  # package installs gssapi.h whether or not the necessary libraries are
46  # installed.  I'm still not sure whether to consider this a bug.  The long
47  # way around is to not consider GSSPAI installed unless gss_import_name is
48  # found, but that brings up a lot of other hassles, like continuing to let
49  # gcc & ld generate the error messages when the user uses --with-gssapi=dir
50  # as a debugging aid.  The short way around is to disable GSSAPI by default,
51  # but I think Sun users have been faced with this for awhile and I haven't
52  # heard many complaints.
53  acx_gssapi_save_CPPFLAGS=$CPPFLAGS
54  for acx_gssapi_cv_gssapi in yes /usr/kerberos /usr/cygnus/kerbnet no; do
55    if test x$acx_gssapi_cv_gssapi = xno; then
56      break
57    fi
58    if test x$acx_gssapi_cv_gssapi = xyes; then
59      AC_MSG_CHECKING([for GSSAPI])
60      AC_MSG_RESULT([])
61    else
62      CPPFLAGS="$acx_gssapi_save_CPPFLAGS -I$acx_gssapi_cv_gssapi/include"
63      AC_MSG_CHECKING([for GSSAPI in $acx_gssapi_cv_gssapi])
64      AC_MSG_RESULT([])
65    fi
66    unset ac_cv_header_gssapi_h
67    unset ac_cv_header_gssapi_gssapi_h
68    unset ac_cv_header_krb5_h
69    AC_CHECK_HEADERS([gssapi.h gssapi/gssapi.h krb5.h])
70    if (test "$ac_cv_header_gssapi_h" = yes ||
71	  test "$ac_cv_header_gssapi_gssapi_h" = yes) &&
72	test "$ac_cv_header_krb5_h" = yes; then
73      break
74    fi
75  done
76  CPPFLAGS=$acx_gssapi_save_CPPFLAGS
77else
78  acx_gssapi_cv_gssapi=$with_gssapi
79fi
80AC_MSG_CHECKING([for GSSAPI])
81])dnl
82AC_MSG_RESULT([$acx_gssapi_cv_gssapi])
83
84#
85# Set up GSSAPI includes for later use.  We don't bother to check for
86# $acx_gssapi_cv_gssapi=no here since that will be caught later.
87#
88if test x$acx_gssapi_cv_gssapi = xyes; then
89  # no special includes necessary
90  GSSAPI_INCLUDES=""
91else
92  # GSSAPI at $acx_gssapi_cv_gssapi (could be 'no')
93  GSSAPI_INCLUDES=" -I$acx_gssapi_cv_gssapi/include"
94fi
95
96#
97# Get the rest of the information CVS needs to compile with GSSAPI support
98#
99if test x$acx_gssapi_cv_gssapi != xno; then
100  # define HAVE_GSSAPI and set up the includes
101  AC_DEFINE([HAVE_GSSAPI], ,
102[Define if you have GSSAPI with Kerberos version 5 available.])
103  includeopt=$includeopt$GSSAPI_INCLUDES
104
105  # locate any other headers
106  acx_gssapi_save_CPPFLAGS=$CPPFLAGS
107  CPPFLAGS=$CPPFLAGS$GSSAPI_INCLUDES
108  dnl We don't use HAVE_KRB5_H anywhere, but including it here might make it
109  dnl easier to spot errors by reading configure output
110  AC_CHECK_HEADERS([gssapi.h gssapi/gssapi.h gssapi/gssapi_generic.h krb5.h])
111  # And look through them for GSS_C_NT_HOSTBASED_SERVICE or its alternatives
112  AC_CACHE_CHECK(
113    [for GSS_C_NT_HOSTBASED_SERVICE],
114    [acx_gssapi_cv_gss_c_nt_hostbased_service],
115  [
116    acx_gssapi_cv_gss_c_nt_hostbased_service=no
117    if test "$ac_cv_header_gssapi_h" = "yes"; then
118      AC_EGREP_HEADER(
119	[GSS_C_NT_HOSTBASED_SERVICE], [gssapi.h],
120	[acx_gssapi_cv_gss_c_nt_hostbased_service=yes],
121      [
122	AC_EGREP_HEADER(
123	  [gss_nt_service_name], [gssapi.h],
124	  [acx_gssapi_cv_gss_c_nt_hostbased_service=gss_nt_service_name])
125      ])
126    fi
127    if test $acx_gssapi_cv_gss_c_nt_hostbased_service = no &&
128       test "$ac_cv_header_gssapi_gssapi_h" = "yes"; then
129      AC_EGREP_HEADER(
130	[GSS_C_NT_HOSTBASED_SERVICE], [gssapi/gssapi.h],
131	[acx_gssapi_cv_gss_c_nt_hostbased_service=yes],
132      [
133	AC_EGREP_HEADER([gss_nt_service_name], [gssapi/gssapi.h],
134	  [acx_gssapi_cv_gss_c_nt_hostbased_service=gss_nt_service_name])
135      ])
136    else :; fi
137    if test $acx_gssapi_cv_gss_c_nt_hostbased_service = no &&
138       test "$ac_cv_header_gssapi_gssapi_generic_h" = "yes"; then
139      AC_EGREP_HEADER(
140	[GSS_C_NT_HOSTBASED_SERVICE], [gssapi/gssapi_generic.h],
141	[acx_gssapi_cv_gss_c_nt_hostbased_service=yes],
142      [
143	AC_EGREP_HEADER(
144	  [gss_nt_service_name], [gssapi/gssapi_generic.h],
145	  [acx_gssapi_cv_gss_c_nt_hostbased_service=gss_nt_service_name])
146      ])
147    else :; fi
148  ])
149  if test $acx_gssapi_cv_gss_c_nt_hostbased_service != yes &&
150     test $acx_gssapi_cv_gss_c_nt_hostbased_service != no; then
151    # don't define for yes since that means it already means something and
152    # don't define for no since we'd rather the compiler catch the error
153    # It's debatable whether we'd prefer that the compiler catch the error
154    #  - it seems our estranged developer is more likely to be familiar with
155    #	 the intricacies of the compiler than with those of autoconf, but by
156    #	 the same token, maybe we'd rather alert them to the fact that most
157    #	 of the support they need to fix the problem is installed if they can
158    #	 simply locate the appropriate symbol.
159    AC_DEFINE_UNQUOTED(
160      [GSS_C_NT_HOSTBASED_SERVICE],
161      [$acx_gssapi_cv_gss_c_nt_hostbased_service],
162[Define to an alternative value if GSS_C_NT_HOSTBASED_SERVICE isn't defined
163in the gssapi.h header file.  MIT Kerberos 1.2.1 requires this.  Only relevant
164when using GSSAPI.])
165  else :; fi
166
167  CPPFLAGS=$acx_gssapi_save_CPPFLAGS
168
169  # Expect the libs to be installed parallel to the headers
170  #
171  # We could try once with and once without, but I'm not sure it's worth the
172  # trouble.
173  if test x$acx_gssapi_cv_gssapi != xyes; then
174    if test -z "$LIBS"; then
175      LIBS="-L$acx_gssapi_cv_gssapi/lib"
176    else
177      LIBS="-L$acx_gssapi_cv_gssapi/lib $LIBS"
178    fi
179  else :; fi
180
181  dnl What happens if we want to enable, say, krb5 and some other GSSAPI
182  dnl authentication method at the same time?
183  #
184  # Some of the order below is particular due to library dependencies
185  #
186
187  #
188  # des			Heimdal K 0.3d, but Heimdal seems to be set up such
189  #			that it could have been installed from elsewhere.
190  #
191  AC_SEARCH_LIBS([des_set_odd_parity], [des])
192
193  #
194  # com_err		Heimdal K 0.3d
195  #
196  # com_err		MIT K5 v1.2.2-beta1
197  #
198  AC_SEARCH_LIBS([com_err], [com_err])
199
200  #
201  # asn1		Heimdal K 0.3d		-lcom_err
202  #
203  AC_SEARCH_LIBS([initialize_asn1_error_table_r], [asn1])
204
205  #
206  # resolv		required, but not installed by Heimdal K 0.3d
207  #
208  # resolv		MIT K5 1.2.2-beta1
209  # 			Linux 2.2.17
210  #
211  AC_SEARCH_LIBS([__dn_expand], [resolv])
212
213  #
214  # crypto             Need by gssapi under FreeBSD 5.4
215  #
216  AC_SEARCH_LIBS([RC4], [crypto])
217
218  #
219  # crypt              Needed by roken under FreeBSD 4.6.
220  #
221  AC_SEARCH_LIBS([crypt], [crypt])
222
223  #
224  # roken		Heimdal K 0.3d		-lresolv
225  # roken               FreeBSD 4.6             -lcrypt
226  #
227  AC_SEARCH_LIBS([roken_gethostbyaddr], [roken])
228
229  #
230  # k5crypto		MIT K5 v1.2.2-beta1
231  #
232  AC_SEARCH_LIBS([valid_enctype], [k5crypto])
233
234  #
235  # gen			? ? ?			Needed on Irix 5.3 with some
236  #			Irix 5.3		version of Kerberos.  I'm not
237  #						sure which since Irix didn't
238  #						get any testing this time
239  #						around.  Original comment:
240  #
241  # This is necessary on Irix 5.3, in order to link against libkrb5 --
242  # there, an_to_ln.o refers to things defined only in -lgen.
243  #
244  AC_SEARCH_LIBS([compile], [gen])
245
246  #
247  # krb5		? ? ?			-lgen -l???
248  #			Irix 5.3
249  #
250  # krb5		MIT K5 v1.1.1
251  #
252  # krb5		MIT K5 v1.2.2-beta1	-lcrypto -lcom_err
253  # 			Linux 2.2.17
254  #
255  # krb5		MIT K5 v1.2.2-beta1	-lcrypto -lcom_err -lresolv
256  #
257  # krb5		Heimdal K 0.3d		-lasn1 -lroken -ldes
258  #
259  AC_SEARCH_LIBS([krb5_free_context], [krb5])
260
261  #
262  # gss			This may be the only lib needed under HP-UX, so find it
263  #			first.
264  #
265  # gssapi_krb5		Only lib needed with MIT K5 v1.2.1, so find it first in
266  #			order to prefer MIT Kerberos.  If both MIT & Heimdal
267  #			Kerberos are installed and in the path, this will leave
268  #			some of the libraries above in LIBS unnecessarily, but
269  #			noone would ever do that, right?
270  #
271  # gss			HP-UX			???
272  #
273  # gssapi_krb5		MIT K5 v1.2.2-beta1	-lkrb5
274  #
275  # gssapi		Heimdal K 0.3d		-lkrb5
276  #
277  AC_SEARCH_LIBS([gss_import_name], [gss gssapi_krb5 gssapi])
278fi
279])dnl
280
281
282
283# size_max.m4 serial 2
284dnl Copyright (C) 2003 Free Software Foundation, Inc.
285dnl This file is free software, distributed under the terms of the GNU
286dnl General Public License.  As a special exception to the GNU General
287dnl Public License, this file may be distributed as part of a program
288dnl that contains a configuration script generated by Autoconf, under
289dnl the same distribution terms as the rest of that program.
290
291dnl From Bruno Haible.
292
293AC_DEFUN([gl_SIZE_MAX],
294[
295  AC_CHECK_HEADERS(stdint.h)
296  dnl First test whether the system already has SIZE_MAX.
297  AC_MSG_CHECKING([for SIZE_MAX])
298  result=
299  AC_EGREP_CPP([Found it], [
300#include <limits.h>
301#if HAVE_STDINT_H
302#include <stdint.h>
303#endif
304#ifdef SIZE_MAX
305Found it
306#endif
307], result=yes)
308  if test -z "$result"; then
309    dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
310    dnl than the type 'unsigned long'.
311    dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
312    dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
313    _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
314      [#include <stddef.h>], result=?)
315    _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
316      [#include <stddef.h>], result=?)
317    _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
318      [#include <stddef.h>], result=?)
319    if test "$fits_in_uint" = 1; then
320      dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
321      dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
322      AC_TRY_COMPILE([#include <stddef.h>
323        extern size_t foo;
324        extern unsigned long foo;
325        ], [], fits_in_uint=0)
326    fi
327    if test -z "$result"; then
328      if test "$fits_in_uint" = 1; then
329        result="$res_hi$res_lo"U
330      else
331        result="$res_hi$res_lo"UL
332      fi
333    else
334      dnl Shouldn't happen, but who knows...
335      result='~(size_t)0'
336    fi
337  fi
338  AC_MSG_RESULT([$result])
339  if test "$result" != yes; then
340    AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
341      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
342  fi
343])
344
345
346
347# xsize.m4 serial 3
348dnl Copyright (C) 2003-2004 Free Software Foundation, Inc.
349dnl This file is free software, distributed under the terms of the GNU
350dnl General Public License.  As a special exception to the GNU General
351dnl Public License, this file may be distributed as part of a program
352dnl that contains a configuration script generated by Autoconf, under
353dnl the same distribution terms as the rest of that program.
354
355AC_DEFUN([gl_XSIZE],
356[
357  dnl Prerequisites of lib/xsize.h.
358  AC_REQUIRE([gl_SIZE_MAX])
359  AC_REQUIRE([AC_C_INLINE])
360  AC_CHECK_HEADERS(stdint.h)
361])
362