1dnl $Id: check-compile-et.m4 19252 2006-12-06 13:32:55Z lha $
2dnl
3dnl CHECK_COMPILE_ET
4AC_DEFUN([CHECK_COMPILE_ET], [
5
6AC_CHECK_PROG(COMPILE_ET, compile_et, [compile_et])
7
8krb_cv_compile_et="no"
9krb_cv_com_err_need_r=""
10krb_cv_compile_et_cross=no
11if test "${COMPILE_ET}" = "compile_et"; then
12
13dnl We have compile_et.  Now let's see if it supports `prefix' and `index'.
14AC_MSG_CHECKING(whether compile_et has the features we need)
15cat > conftest_et.et <<'EOF'
16error_table test conf
17prefix CONFTEST
18index 1
19error_code CODE1, "CODE1"
20index 128
21error_code CODE2, "CODE2"
22end
23EOF
24if ${COMPILE_ET} conftest_et.et >/dev/null 2>&1; then
25  dnl XXX Some systems have <et/com_err.h>.
26  save_CPPFLAGS="${CPPFLAGS}"
27  if test -d "/usr/include/et"; then
28    CPPFLAGS="-I/usr/include/et ${CPPFLAGS}"
29  fi
30  dnl Check that the `prefix' and `index' directives were honored.
31  AC_RUN_IFELSE([
32#include <com_err.h>
33#include <string.h>
34#include "conftest_et.h"
35int main(int argc, char **argv){
36#ifndef ERROR_TABLE_BASE_conf
37#error compile_et does not handle error_table N M
38#endif
39return (CONFTEST_CODE2 - CONFTEST_CODE1) != 127;}
40  ], [krb_cv_compile_et="yes"],[CPPFLAGS="${save_CPPFLAGS}"],
41  [krb_cv_compile_et="yes" krb_cv_compile_et_cross=yes] )
42fi
43AC_MSG_RESULT(${krb_cv_compile_et})
44if test "${krb_cv_compile_et}" = "yes" -a "${krb_cv_compile_et_cross}" = no; then
45  AC_MSG_CHECKING([for if com_err generates a initialize_conf_error_table_r])
46  AC_EGREP_CPP([initialize_conf_error_table_r.*struct et_list],
47     [#include "conftest_et.h"],
48     [krb_cv_com_err_need_r="ok"])
49  if test X"$krb_cv_com_err_need_r" = X ; then
50    AC_MSG_RESULT(no)
51    krb_cv_compile_et=no
52  else
53    AC_MSG_RESULT(yes)
54  fi
55fi
56rm -fr conftest*
57fi
58
59if test "${krb_cv_compile_et_cross}" = yes ; then
60  krb_cv_com_err="cross"
61elif test "${krb_cv_compile_et}" = "yes"; then
62  dnl Since compile_et seems to work, let's check libcom_err
63  krb_cv_save_LIBS="${LIBS}"
64  LIBS="${LIBS} -lcom_err"
65  AC_MSG_CHECKING(for com_err)
66  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <com_err.h>]],[[
67    const char *p;
68    p = error_message(0);
69    initialize_error_table_r(0,0,0,0);
70  ]])],[krb_cv_com_err="yes"],[krb_cv_com_err="no"; CPPFLAGS="${save_CPPFLAGS}"])
71  AC_MSG_RESULT(${krb_cv_com_err})
72  LIBS="${krb_cv_save_LIBS}"
73else
74  dnl Since compile_et doesn't work, forget about libcom_err
75  krb_cv_com_err="no"
76fi
77
78dnl Only use the system's com_err if we found compile_et, libcom_err, and
79dnl com_err.h.
80if test "${krb_cv_com_err}" = "yes"; then
81    DIR_com_err=""
82    LIB_com_err="-lcom_err"
83    LIB_com_err_a=""
84    LIB_com_err_so=""
85    AC_MSG_NOTICE(Using the already-installed com_err)
86    localcomerr=no
87elif test "${krb_cv_com_err}" = "cross"; then
88    DIR_com_err="com_err"
89    LIB_com_err="\$(top_builddir)/lib/com_err/libcom_err.la"
90    LIB_com_err_a="\$(top_builddir)/lib/com_err/.libs/libcom_err.a"
91    LIB_com_err_so="\$(top_builddir)/lib/com_err/.libs/libcom_err.so"
92    AC_MSG_NOTICE(Using our own com_err with toolchain compile_et)
93    localcomerr=yes
94else
95    COMPILE_ET="\$(top_builddir)/lib/com_err/compile_et"
96    DIR_com_err="com_err"
97    LIB_com_err="\$(top_builddir)/lib/com_err/libcom_err.la"
98    LIB_com_err_a="\$(top_builddir)/lib/com_err/.libs/libcom_err.a"
99    LIB_com_err_so="\$(top_builddir)/lib/com_err/.libs/libcom_err.so"
100    AC_MSG_NOTICE(Using our own com_err)
101    localcomerr=yes
102fi
103AM_CONDITIONAL(COM_ERR, test "$localcomerr" = yes)dnl
104AC_SUBST(DIR_com_err)
105AC_SUBST(LIB_com_err)
106AC_SUBST(LIB_com_err_a)
107AC_SUBST(LIB_com_err_so)
108
109])
110