Commit | Line | Data |
---|---|---|
805e021f CE |
1 | |
2 | AC_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 | ||
10 | dnl _OPENAFS_ROKEN_PATHS() | |
11 | dnl Set CPPFLAGS_roken, LDFLAGS_roken, and LIB_roken based on the values | |
12 | dnl of roken_root, roken_libdir, and roken_includedir. | |
13 | AC_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 | ||
25 | dnl _OPENAFS_ROKEN_CHECK($action-if-found, | |
26 | dnl $action-if-not-found) | |
27 | dnl Find a roken library using $roken_root, $roken_libdir, and $roken_includedir | |
28 | dnl | |
29 | dnl If none of the three paths are specified, | |
30 | dnl try to find one in the standard locations on the system. | |
31 | dnl | |
32 | dnl If we fail, and at least one path was given, then error out. Otherwise, | |
33 | dnl fall back to the internal roken implementation. | |
34 | AC_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 | ||
79 | AC_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 | ||
118 | AC_DEFUN([OPENAFS_MORE_ROKEN_CHECKS],[ | |
119 | dnl Functions that Heimdal's libroken provides, but that we | |
120 | dnl haven't found a need for yet, and so haven't imported | |
121 | AC_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 | ||
137 | dnl Functions that are in objects that we always build from libroken | |
138 | AC_CHECK_FUNCS([ \ | |
139 | asprintf \ | |
140 | asnprintf \ | |
141 | vasprintf \ | |
142 | vasnprintf \ | |
143 | vsnprintf \ | |
144 | snprintf \ | |
145 | ]) | |
146 | ||
147 | dnl Functions that we're going to try and get from libroken | |
148 | AC_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 | ||
189 | dnl Headers that we're going to try and get from libroken | |
190 | AC_CHECK_HEADERS([ \ | |
191 | err.h \ | |
192 | search.h \ | |
193 | ]) | |
194 | ]) | |
195 | ||
196 | AC_DEFUN([OPENAFS_ROKEN_HEADERS],[ | |
197 | ROKEN_HEADERS= | |
198 | AS_IF([test "$ac_cv_header_err_h" != "yes" ], | |
199 | [ROKEN_HEADERS="$ROKEN_HEADERS \$(TOP_INCDIR)/err.h"], | |
200 | []) | |
201 | AC_SUBST(ROKEN_HEADERS) | |
202 | ]) |