added roken,sl,editline
[abartlet/lorikeet-heimdal.git/.git] / acinclude.m4
1 dnl
2 dnl $Id$
3 dnl
4
5 dnl
6 dnl General tests
7 dnl
8
9 dnl
10 dnl Look for function in any of the specified libraries
11 dnl
12
13 dnl AC_FIND_FUNC_NO_LIBS(func, libraries, includes, arguments)
14 AC_DEFUN(AC_FIND_FUNC_NO_LIBS, [
15
16 AC_MSG_CHECKING([for $1])
17 AC_CACHE_VAL(ac_cv_funclib_$1,
18 [
19 if eval "test \"\$ac_cv_func_$1\" != yes" ; then
20         ac_save_LIBS="$LIBS"
21         for ac_lib in "" $2; do
22                 if test -n "$ac_lib"; then 
23                         ac_lib="-l$ac_lib"
24                         LIBS="$ac_lib $ac_save_LIBS"
25                 fi
26                 AC_TRY_LINK([$3],[$1($4)],eval "if test -n \"$ac_lib\";then ac_cv_funclib_$1=$ac_lib; else ac_cv_funclib_$1=yes; fi";break)
27         done
28         eval "ac_cv_funclib_$1=\${ac_cv_funclib_$1-no}"
29         LIBS="$ac_save_LIBS"
30 fi
31 ])
32
33 eval "ac_res=\$ac_cv_funclib_$1"
34
35 # autoheader tricks *sigh*
36 : << END
37 @@@funcs="$funcs $1"@@@
38 @@@libs="$libs $2"@@@
39 END
40
41 changequote(, )dnl
42 eval "ac_tr_func=HAVE_`echo $1 | tr '[a-z]' '[A-Z]'`"
43 eval "ac_tr_lib=HAVE_LIB`echo $ac_res | sed -e 's/-l//' | tr '[a-z]' '[A-Z]'`"
44 eval "LIB_$1=$ac_res"
45 changequote([, ])dnl
46
47 case "$ac_res" in
48         yes)
49         eval "ac_cv_func_$1=yes"
50         eval "LIB_$1="
51         AC_DEFINE_UNQUOTED($ac_tr_func)
52         AC_MSG_RESULT([yes])
53         ;;
54         no)
55         eval "ac_cv_func_$1=no"
56         eval "LIB_$1="
57         AC_MSG_RESULT([no])
58         ;;
59         *)
60         eval "ac_cv_func_$1=yes"
61         eval "ac_cv_lib_`echo "$ac_res" | sed 's/-l//'`=yes"
62         AC_DEFINE_UNQUOTED($ac_tr_func)
63         AC_DEFINE_UNQUOTED($ac_tr_lib)
64         AC_MSG_RESULT([yes, in $ac_res])
65         ;;
66 esac
67 AC_SUBST(LIB_$1)
68 ])
69
70 dnl AC_FIND_FUNC(func, libraries, includes, arguments)
71 AC_DEFUN(AC_FIND_FUNC, [
72 AC_FIND_FUNC_NO_LIBS([$1], [$2], [$3], [$4])
73 if test -n "$LIB_$1"; then
74         LIBS="$LIB_$1 $LIBS"
75 fi
76 ])
77
78 dnl
79 dnl Warning!
80 dnl
81
82 dnl undefine(AC_REPLACE_FUNCS)
83 dnl define(AC_BROKEN,AC_REPLACE_FUNCS)
84
85 dnl
86 dnl Same as AC _REPLACE_FUNCS, just define HAVE_func if found in normal
87 dnl libraries 
88
89 AC_DEFUN(AC_BROKEN,
90 [for ac_func in $1
91 do
92 AC_CHECK_FUNC($ac_func, [
93 changequote(, )dnl
94 ac_tr_func=HAVE_`echo $ac_func | tr '[a-z]' '[A-Z]'`
95 changequote([, ])dnl
96 AC_DEFINE_UNQUOTED($ac_tr_func)],[LIBOBJS[]="$LIBOBJS ${ac_func}.o"])
97 # autoheader tricks *sigh*
98 : << END
99 @@@funcs="$funcs $1"@@@
100 END
101 done
102 AC_SUBST(LIBOBJS)dnl
103 ])
104
105 dnl
106 dnl Mix between AC_FIND_FUNC and AC_BROKEN
107 dnl
108
109 AC_DEFUN(AC_FIND_IF_NOT_BROKEN,
110 [AC_FIND_FUNC([$1], [$2], [$3], [$4])
111 if eval "test \"$ac_cv_func_$1\" != yes"; then
112 LIBOBJS[]="$LIBOBJS $1.o"
113 fi
114 AC_SUBST(LIBOBJS)dnl
115 ])
116
117 dnl
118 dnl
119 dnl
120
121 dnl AC_TEST_PACKAGE(package,header,lib,linkline)
122 AC_DEFUN(AC_TEST_PACKAGE,
123 [
124 AC_MSG_CHECKING(for $1)
125 AC_ARG_WITH($1,
126 [  --with-$1=dir                use $1 in dir],
127 [if test "$with_$1" = "no"; then
128   with_$1=
129 fi]
130 )
131 AC_ARG_WITH($1-lib,
132 [  --with-$1-lib=dir            use $1-lib in dir],
133 [if test "$withval" = "yes" -o "$withval" = "no"; then
134   AC_MSG_ERROR([No argument for --with-$1-lib])
135 elif test "X$with_$1" = "X"; then
136   with_$1=yes
137 fi]
138 )
139 AC_ARG_WITH($1-include,
140 [  --with-$1-include=dir        use $1-include in dir],
141 [if test "$withval" = "yes" -o "$withval" = "no"; then
142   AC_MSG_ERROR([No argument for --with-$1-include])
143 elif test "X$with_$1" = "X"; then
144   with_$1=yes
145 fi]
146 )
147
148 define([foo], translit($1, [a-z], [A-Z]))
149 : << END
150 @@@syms="$syms foo"@@@
151 END
152
153 if test -n "$with_$1"; then
154   AC_DEFINE([foo])
155   if test "$with_$1" != "yes"; then
156     $1_dir=$with_$1
157   fi
158 dnl Try to find include
159   if test -n "$with_$1_include"; then
160     trydir=$with_$1_include
161   elif test "$with_$1" != "yes"; then
162     trydir="$with_$1 $with_$1/include"
163   else
164     trydir=
165   fi
166   found=
167   for i in $trydir ""; do
168     if test -n "$i"; then
169       if test -f $i/$2; then
170         found=yes; res=$i; break
171       fi
172     else
173       AC_TRY_CPP([#include <$2>], [found=yes; res=$i; break])
174     fi
175   done
176   if test -n "$found"; then
177     $1_include=$res
178   else
179     AC_MSG_ERROR(Cannot find $2)
180   fi
181 dnl Try to find lib
182   if test -n "$with_$1_lib"; then
183     trydir=$with_$1_lib
184   elif test "$with_$1" != "yes"; then
185     trydir="$with_$1 $with_$1/lib"
186   else
187     trydir=
188   fi
189   found=
190   for i in $trydir ""; do
191     if test -n "$i"; then
192       if test -f $i/$3; then
193         found=yes; res=$i; break
194       fi
195     else
196       old_LIBS=$LIBS
197       LIBS="$4 $LIBS"
198       AC_TRY_LINK([], [], [found=yes; res=$i; LIBS=$old_LIBS; break])
199       LIBS=$old_LIBS
200     fi
201   done
202   if test -n "$found"; then
203     $1_lib=$res
204   else
205     AC_MSG_ERROR(Cannot find $3)
206   fi
207   AC_MSG_RESULT([headers $$1_include, libraries $$1_lib])
208   AC_DEFINE_UNQUOTED(foo)
209   if test -n "$$1_include"; then
210     foo[INCLUDE]="-I$$1_include"
211   fi
212   AC_SUBST(foo[INCLUDE])
213   if test -n "$$1_lib"; then
214     foo[LIB]="-L$$1_lib"
215   fi
216   foo[LIB]="$foo[LIB] $4"
217   AC_SUBST(foo[LIB])
218 else
219   AC_MSG_RESULT(no)
220 fi
221 undefine([foo])
222 ])
223
224 dnl
225 dnl Check if we need the declaration of a variable
226 dnl
227
228 AC_DEFUN(AC_NEED_DECLARATION, [
229 AC_MSG_CHECKING([if $3 needs a declaration])
230 AC_CACHE_VAL(ac_cv_var_$3_declaration, [
231 AC_TRY_COMPILE([$1],
232 [$2 foo = ($2)$3; ],
233 eval "ac_cv_var_$3_declaration=no",
234 eval "ac_cv_var_$3_declaration=yes")
235 ])
236
237 changequote(, )dnl
238 eval "ac_tr_var=NEED_`echo $3 | tr '[a-z]' '[A-Z]'`_DECLARATION"
239 changequote([, ])dnl
240
241 define([foo], [NEED_]translit($3, [a-z], [A-Z])[_DECLARATION])
242 : << END
243 @@@syms="$syms foo"@@@
244 END
245 undefine([foo])
246
247 AC_MSG_RESULT($ac_cv_var_$3_declaration)
248 if eval "test \"\$ac_cv_var_$3_declaration\" = yes"; then
249         AC_DEFINE_UNQUOTED($ac_tr_var)
250 fi
251 ])
252
253 dnl
254 dnl
255 dnl
256
257 dnl AC_CHECK_VAR(includes, variable)
258 AC_DEFUN(AC_CHECK_VAR, [
259 AC_MSG_CHECKING(for $2)
260 AC_CACHE_VAL(ac_cv_var_$2, [
261 AC_TRY_LINK([extern int $2;
262 int foo() { return $2; }],
263             [foo()],
264             ac_cv_var_$2=yes, ac_cv_var_$2=no)
265 ])
266 eval "ac_tr_var=[HAVE_]translit($2,[a-z],[A-Z])"
267
268 define([foo], [HAVE_]translit($2, [a-z], [A-Z]))
269 : << END
270 @@@syms="$syms foo"@@@
271 END
272 undefine([foo])
273
274 AC_MSG_RESULT(`eval echo \\$ac_cv_var_$2`)
275 if test `eval echo \\$ac_cv_var_$2` = yes; then
276         AC_DEFINE_UNQUOTED($ac_tr_var)
277         AC_CHECK_DECLARATION([$1],[$2])
278 fi
279 ])
280
281 dnl
282 dnl Check if we need the prototype for a function
283 dnl
284
285 dnl AC_NEED_PROTO(includes, function)
286
287 AC_DEFUN(AC_NEED_PROTO, [
288 AC_CACHE_CHECK([if $2 needs a prototype], ac_cv_func_$2_noproto,
289 AC_TRY_COMPILE([$1],
290 [struct foo { int foo; } xx;
291 extern int $2 (struct foo*);
292 $2(&xx);
293 ],
294 eval "ac_cv_func_$2_noproto=yes",
295 eval "ac_cv_func_$2_noproto=no"))
296 define([foo], [NEED_]translit($2, [a-z], [A-Z])[_PROTO])
297 if test "$ac_cv_func_$2_noproto" = yes; then
298         AC_DEFINE(foo)
299 fi
300 : << END
301 @@@syms="$syms foo"@@@
302 END
303 undefine([foo])
304 ])
305
306 dnl AC_HAVE_STRUCT_FIELD(includes, struct, type, field)
307 AC_DEFUN(AC_HAVE_STRUCT_FIELD, [
308 AC_MSG_CHECKING([if $2 has a field $4])
309 AC_CACHE_VAL(ac_cv_struct_$2_$4, [
310 AC_TRY_COMPILE([$1],
311 [struct $2 foo; $3 bar = foo.$4; ],
312 eval "ac_cv_struct_$2_$4=yes",
313 eval "ac_cv_struct_$2_$4=no")
314 ])
315 changequote(, )dnl
316 eval "ac_tr_var=HAVE_STRUCT_`echo $2 | tr '[a-z]' '[A-Z]'`_`echo $4 | tr '[a-z]' '[A-Z]'`"
317 changequote([, ])dnl
318
319 define([foo], [[HAVE_STRUCT_]translit($2, [a-z], [A-Z])[_]translit($4, [a-z], [A-Z])])
320 : << END
321 @@@syms="$syms foo"@@@
322 END
323 undefine([foo])
324
325 AC_MSG_RESULT($ac_cv_struct_$2_$4)
326 if eval "test \"\$ac_cv_struct_$2_$4\" = yes"; then
327         AC_DEFINE_UNQUOTED($ac_tr_var)
328 fi
329 ])
330
331 dnl
332 dnl Check if we need the declaration of a variable
333 dnl
334
335 dnl AC_HAVE_DECLARATION(includes, variable)
336 AC_DEFUN(AC_CHECK_DECLARATION, [
337 AC_MSG_CHECKING([if $2 is properly declared])
338 AC_CACHE_VAL(ac_cv_var_$2_declaration, [
339 AC_TRY_COMPILE([$1
340 extern struct { int foo; } $2;],
341 [$2.foo = 1;],
342 eval "ac_cv_var_$2_declaration=no",
343 eval "ac_cv_var_$2_declaration=yes")
344 ])
345
346 ac_tr_var=[HAVE_]translit($2, [a-z], [A-Z])[_DECLARATION]
347
348 define([foo], [HAVE_]translit($2, [a-z], [A-Z])[_DECLARATION])
349 : << END
350 @@@syms="$syms foo"@@@
351 END
352 undefine([foo])
353
354 AC_MSG_RESULT($ac_cv_var_$2_declaration)
355 if eval "test \"\$ac_cv_var_$2_declaration\" = yes"; then
356         AC_DEFINE_UNQUOTED($ac_tr_var)
357 fi
358 ])
359
360 dnl
361 dnl Specific tests
362 dnl
363
364 dnl
365 dnl We prefer byacc or yacc because they do not use `alloca'
366 dnl
367
368 AC_DEFUN(AC_KRB_PROG_YACC,
369 [AC_CHECK_PROGS(YACC, byacc yacc 'bison -y')])
370
371 dnl
372 dnl NEXTSTEP is not posix compliant by default,
373 dnl you need a switch -posix to the compiler
374 dnl
375
376 AC_DEFUN(AC_KRB_SYS_NEXTSTEP, [
377 AC_MSG_CHECKING(for NEXTSTEP)
378 AC_CACHE_VAL(krb_cv_sys_nextstep,
379 AC_EGREP_CPP(yes, 
380 [#ifdef NeXT
381         yes
382 #endif 
383 ], krb_cv_sys_nextstep=yes, krb_cv_sys_nextstep=no) )
384 if test "$krb_cv_sys_nextstep" = "yes"; then
385   CFLAGS="$CFLAGS -posix"
386   LIBS="$LIBS -posix"
387 fi
388 AC_MSG_RESULT($krb_cv_sys_nextstep)
389 ])
390
391 dnl
392 dnl AIX have a very different syscall convention
393 dnl
394 AC_DEFUN(AC_KRB_SYS_AIX, [
395 AC_MSG_CHECKING(for AIX)
396 AC_CACHE_VAL(krb_cv_sys_aix,
397 AC_EGREP_CPP(yes, 
398 [#ifdef _AIX
399         yes
400 #endif 
401 ], krb_cv_sys_aix=yes, krb_cv_sys_aix=no) )
402 AC_MSG_RESULT($krb_cv_sys_aix)
403 ])
404
405 dnl
406 dnl test for broken getcwd in (SunOS braindamage)
407 dnl
408
409 AC_DEFUN(AC_KRB_FUNC_GETCWD_BROKEN, [
410 if test "$ac_cv_func_getcwd" = yes; then
411 AC_MSG_CHECKING(if getcwd is broken)
412 AC_CACHE_VAL(ac_cv_func_getcwd_broken, [
413 ac_cv_func_getcwd_broken=no
414
415 AC_TRY_RUN([
416 #include <errno.h>
417 char *getcwd(char*, int);
418
419 void *popen(char *cmd, char *mode)
420 {
421         errno = ENOTTY;
422         return 0;
423 }
424
425 int main()
426 {
427         char *ret;
428         ret = getcwd(0, 1024);
429         if(ret == 0 && errno == ENOTTY)
430                 return 0;
431         return 1;
432 }
433 ], ac_cv_func_getcwd_broken=yes,:,:)
434 ])
435 if test "$ac_cv_func_getcwd_broken" = yes; then
436         AC_DEFINE(BROKEN_GETCWD, 1)dnl
437         LIBOBJS="$LIBOBJS getcwd.o"
438         AC_SUBST(LIBOBJS)dnl
439         AC_MSG_RESULT($ac_cv_func_getcwd_broken)
440 else
441         AC_MSG_RESULT([seems ok])
442 fi
443 fi
444 ])
445
446
447 AC_DEFUN(AC_HAVE_PRAGMA_WEAK, [
448 if test "${with_shared}" = "yes"; then
449 AC_MSG_CHECKING(for pragma weak)
450 AC_CACHE_VAL(ac_have_pragma_weak, [
451 ac_have_pragma_weak=no
452 cat > conftest_foo.$ac_ext <<'EOF'
453 [#]line __oline__ "configure"
454 #include "confdefs.h"
455 #pragma weak foo = _foo
456 int _foo = 17;
457 EOF
458 cat > conftest_bar.$ac_ext <<'EOF'
459 [#]line __oline__ "configure"
460 #include "confdefs.h"
461 extern int foo;
462
463 int t() {
464   return foo;
465 }
466
467 int main() {
468   return t();
469 }
470 EOF
471 if AC_TRY_EVAL('CC $CFLAGS $CPPFLAGS $LDFLAGS conftest_foo.$ac_ext conftest_bar.$ac_ext -o conftest'); then
472 ac_have_pragma_weak=yes
473 fi
474 rm -rf conftest*
475 if test "$ac_have_pragma_weak" = "yes"; then
476         AC_DEFINE(HAVE_PRAGMA_WEAK, 1)dnl
477 fi
478 AC_MSG_RESULT($ac_have_pragma_weak)
479 fi
480 ])
481 ])
482
483 AC_DEFUN(AC_GROK_TYPE, [
484 AC_CACHE_VAL(ac_cv_type_$1, 
485 AC_TRY_COMPILE([
486 #include "confdefs.h"
487 #ifdef HAVE_SYS_TYPES_H
488 #include <sys/types.h>
489 #endif
490 #ifdef HAVE_SYS_BITYPES_H
491 #include <sys/bitypes.h>
492 #endif
493 ],
494 $i x;
495 ,
496 eval ac_cv_type_$1=yes,
497 eval ac_cv_type_$1=no))])
498
499
500 AC_DEFUN(AC_GROK_TYPES, [
501 for i in $1; do
502         AC_MSG_CHECKING(for $i)
503         AC_GROK_TYPE($i)
504         eval ac_res=\$ac_cv_type_$i
505         if test "$ac_res" = yes; then
506                 type=HAVE_`echo $i | tr '[a-z]' '[A-Z]'`
507                 AC_DEFINE_UNQUOTED($type)
508         fi
509         AC_MSG_RESULT($ac_res)
510 done
511 ])
512
513 dnl
514 dnl Search for struct winsize
515 dnl
516
517 AC_DEFUN(AC_KRB_STRUCT_WINSIZE, [
518 AC_MSG_CHECKING(for struct winsize)
519 AC_CACHE_VAL(ac_cv_struct_winsize, [
520 ac_cv_struct_winsize=no
521 for i in sys/termios.h sys/ioctl.h; do
522 AC_EGREP_HEADER(
523 changequote(, )dnl
524 struct[         ]*winsize,dnl
525 changequote([,])dnl
526 $i, ac_cv_struct_winsize=yes; break)dnl
527 done
528 ])
529 if test "$ac_cv_struct_winsize" = "yes"; then
530   AC_DEFINE(HAVE_STRUCT_WINSIZE, 1)dnl
531 fi
532 AC_MSG_RESULT($ac_cv_struct_winsize)
533 AC_EGREP_HEADER(ws_xpixel, termios.h, AC_DEFINE(HAVE_WS_XPIXEL))
534 AC_EGREP_HEADER(ws_ypixel, termios.h, AC_DEFINE(HAVE_WS_YPIXEL))
535 ])