Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / cf / roken.m4
CommitLineData
805e021f
CE
1
2AC_DEFUN([_OPENAFS_ROKEN_INTERNAL], [
3 DIR_roken=roken
4 CPPFLAGS_roken=
5 LDFLAGS_roken="-L\$(TOP_LIBDIR)"
6 LIB_roken=-lrokenafs
7 buildtool_roken="\$(TOP_OBJDIR)/src/roken/librokenafs.a"
8])
9
10dnl _OPENAFS_ROKEN_PATHS()
11dnl Set CPPFLAGS_roken, LDFLAGS_roken, and LIB_roken based on the values
12dnl of roken_root, roken_libdir, and roken_includedir.
13AC_DEFUN([_OPENAFS_ROKEN_PATHS], [
14 AS_IF([test x"$roken_libdir" != x],
15 [LDFLAGS_roken="-L$roken_libdir"],
16 [AS_IF([test x"$roken_root" != x],
17 [LDFLAGS_roken="-L$roken_root/lib"])])
18 AS_IF([test x"$roken_includedir" != x],
19 [CPPFLAGS_roken="-I$roken_includedir"],
20 [AS_IF([test x"$roken_root" != x],
21 [CPPFLAGS_roken="-I$roken_root/include"])])
22 LIB_roken="-lroken"
23 buildtool_roken="\$(LDFLAGS_roken) \$(LIB_roken)"])
24
25dnl _OPENAFS_ROKEN_CHECK($action-if-found,
26dnl $action-if-not-found)
27dnl Find a roken library using $roken_root, $roken_libdir, and $roken_includedir
28dnl
29dnl If none of the three paths are specified,
30dnl try to find one in the standard locations on the system.
31dnl
32dnl If we fail, and at least one path was given, then error out. Otherwise,
33dnl fall back to the internal roken implementation.
34AC_DEFUN([_OPENAFS_ROKEN_CHECK], [
35
36 _OPENAFS_ROKEN_PATHS
37 save_CPPFLAGS=$CPPFLAGS
38 save_LDFLAGS=$LDFLAGS
39 save_LIBS=$LIBS
40 AS_IF([test x"$CPPFLAGS_roken" != x],
41 [CPPFLAGS="$CPPFLAGS_roken $CPPFLAGS"])
42 AS_IF([test x"$LDFLAGS_roken" != x],
43 [LDFLAGS="$LDFLAGS_roken $LDFLAGS"])
44 AS_IF([test x"$roken_libdir" != x || test x"$roken_includedir" != x],
45 [checkstr=" with specified include and lib paths"],
46 [AS_IF([test x"$roken_root" != x],
47 [checkstr=" in $roken_root"])])
48
49 AC_MSG_CHECKING([for usable system libroken$checkstr])
50
51 LIBS="$LIBS $LIB_roken"
52 dnl Need to be careful what we check for here, as libroken contains
53 dnl different symbols on different platforms. We cannot simply check
54 dnl if e.g. rk_rename is a symbol or not, since on most platforms it
55 dnl will be a preprocessor define, but on others it will be a symbol.
56 dnl
57 dnl Also note that we need to check for the specific functionality in
58 dnl roken that we use, not just the existence of the library itself,
59 dnl since older versions of roken do not contain all of the functions
60 dnl we need. It may not be practical to check everything we use, so
61 dnl just add functions to check here as we find installations where
62 dnl this breaks.
63 AC_LINK_IFELSE(
64 [AC_LANG_PROGRAM(
65 [[#include <roken.h>]],
66 [[ct_memcmp(NULL, NULL, 0); rk_rename(NULL, NULL);]])],
67 [roken_found=true
68 AC_MSG_RESULT([yes])],
69 [AC_MSG_RESULT([no])])
70
71 CPPFLAGS=$save_CPPFLAGS
72 LDFLAGS=$save_LDFLAGS
73 LIBS=$save_LIBS
74
75 AS_IF([test x"$roken_found" = xtrue],
76 [$1], [$2])
77])
78
79AC_DEFUN([OPENAFS_ROKEN], [
80 roken_root=
81 AC_SUBST(LIB_roken)
82 AC_SUBST(CPPFLAGS_roken)
83 AC_SUBST(LDFLAGS_roken)
84 AC_SUBST(DIR_roken)
85 AC_SUBST(buildtool_roken)
86
87 AC_ARG_WITH([roken],
88 [AS_HELP_STRING([--with-roken=DIR],
89 [Location of the roken library, or 'internal'])],
90 [AS_IF([test x"$withval" = xno],
91 [AC_MSG_ERROR("OpenAFS requires roken to build")],
92 [AS_IF([test x"$withval" != xyes],
93 [roken_root="$withval"])
94 ])
95 ])
96 AC_ARG_WITH([roken-include],
97 [AS_HELP_STRING([--with-roken-include=DIR],
98 [Location of roken headers])],
99 [AS_IF([test x"$withval" != xyes && test x"$withval" != xno],
100 [roken_includedir="$withval"])])
101 AC_ARG_WITH([roken-lib],
102 [AS_HELP_STRING([--with-roken-lib=DIR],
103 [Location of roken libraries])],
104 [AS_IF([test x"$withval" != xyes && test x"$withval" != xno],
105 [roken_libdir="$withval"])])
106
107 AS_IF([test x"$roken_root" = xinternal],
108 [_OPENAFS_ROKEN_INTERNAL()],
109 [AS_IF([test x"$roken_root" = x && test x"$roken_libdir" = x &&
110 test x"$roken_includedir" = x],
111 [_OPENAFS_ROKEN_CHECK([], [_OPENAFS_ROKEN_INTERNAL()])],
112 [_OPENAFS_ROKEN_CHECK([],
113 [AC_MSG_ERROR([Cannot find roken at that location])])
114 ])
115 ])
116])
117
118AC_DEFUN([OPENAFS_MORE_ROKEN_CHECKS],[
119dnl Functions that Heimdal's libroken provides, but that we
120dnl haven't found a need for yet, and so haven't imported
121AC_CHECK_FUNCS([ \
122 chown \
123 fchown \
124 gethostname \
125 lstat \
126 inet_aton \
127 putenv \
128 readv \
129 setenv \
130 strdup \
131 strftime \
132 strndup \
133 strsep \
134 unsetenv \
135])
136
137dnl Functions that are in objects that we always build from libroken
138AC_CHECK_FUNCS([ \
139 asprintf \
140 asnprintf \
141 vasprintf \
142 vasnprintf \
143 vsnprintf \
144 snprintf \
145])
146
147dnl Functions that we're going to try and get from libroken
148AC_REPLACE_FUNCS([ \
149 daemon \
150 ecalloc \
151 emalloc \
152 erealloc \
153 err \
154 errx \
155 flock \
156 freeaddrinfo \
157 gai_strerror \
158 getaddrinfo \
159 getdtablesize \
160 getnameinfo \
161 getopt \
162 getprogname \
163 gettimeofday \
164 inet_ntop \
165 inet_pton \
166 localtime_r \
167 mkstemp \
168 setenv \
169 setprogname \
170 strcasecmp \
171 strlcat \
172 strnlen \
173 strlcpy \
174 strsep \
175 tdelete \
176 tfind \
177 tsearch \
178 twalk \
179 unsetenv \
180 verr \
181 verrx \
182 vsyslog \
183 vwarn \
184 vwarnx \
185 warn \
186 warnx \
187])
188
189dnl Headers that we're going to try and get from libroken
190AC_CHECK_HEADERS([ \
191 err.h \
192 search.h \
193])
194])
195
196AC_DEFUN([OPENAFS_ROKEN_HEADERS],[
197ROKEN_HEADERS=
198AS_IF([test "$ac_cv_header_err_h" != "yes" ],
199 [ROKEN_HEADERS="$ROKEN_HEADERS \$(TOP_INCDIR)/err.h"],
200 [])
201AC_SUBST(ROKEN_HEADERS)
202])