Patrick Welche <prlw1@cam.ac.uk>
[netbsd-mini2440.git] / external / bsd / am-utils / dist / m4 / macros / check_extern.m4
blobb28dc9e903c879f9428271697f9b8a1be7d89412
1 dnl ######################################################################
2 dnl check for external definition for a function (not external variables)
3 dnl Usage AMU_CHECK_EXTERN(extern)
4 dnl Checks for external definition for "extern" that is delimited on the
5 dnl left and the right by a character that is not a valid symbol character.
6 dnl
7 dnl Note that $pattern below is very carefully crafted to match any system
8 dnl external definition, with __P posix prototypes, with or without an extern
9 dnl word, etc.  Think twice before changing this.
10 AC_DEFUN([AMU_CHECK_EXTERN],
12 # store variable name for external definition
13 ac_upcase_extern_name=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
14 ac_safe=HAVE_EXTERN_$ac_upcase_extern_name
15 # check for cached value and set it if needed
16 AMU_CACHE_CHECK_DYNAMIC(external function definition for $1,
17 ac_cv_extern_$1,
19 # the old pattern assumed that the complete external definition is on one
20 # line but on some systems it is split over several lines, so only match
21 # beginning of the extern definition including the opening parenthesis.
22 #pattern="(extern)?.*[^a-zA-Z0-9_]$1[^a-zA-Z0-9_]?.*\(.*\).*;"
23 pattern="(extern)?.*[[^a-zA-Z0-9_]]$1[[^a-zA-Z0-9_]]?.*\("
24 AC_EGREP_CPP(${pattern},
26 #ifdef HAVE_SYS_TYPES_H
27 # include <sys/types.h>
28 #endif /* HAVE_SYS_TYPES_H */
29 #ifdef HAVE_SYS_WAIT_H
30 # include <sys/wait.h>
31 #endif /* HAVE_SYS_WAIT_H */
32 #if TIME_WITH_SYS_TIME
33 # include <sys/time.h>
34 # include <time.h>
35 #else /* not TIME_WITH_SYS_TIME */
36 # if HAVE_SYS_TIME_H
37 #  include <sys/time.h>
38 # else /* not HAVE_SYS_TIME_H */
39 #  include <time.h>
40 # endif /* not HAVE_SYS_TIME_H */
41 #endif /* not TIME_WITH_SYS_TIME */
43 #if defined(_AIX) && defined(HAVE_SYS_VMOUNT_H)
44 # include <sys/vmount.h>
45 #endif /* defined(_AIX) && defined(HAVE_SYS_VMOUNT_H) */
47 #ifdef HAVE_STDIO_H
48 # include <stdio.h>
49 #endif /* HAVE_STDIO_H */
50 #ifdef HAVE_STDLIB_H
51 # include <stdlib.h>
52 #endif /* HAVE_STDLIB_H */
53 #if HAVE_UNISTD_H
54 # include <unistd.h>
55 #endif /* HAVE_UNISTD_H */
56 #if HAVE_STRING_H
57 # include <string.h>
58 #endif /* HAVE_STRING_H */
59 #ifdef HAVE_STRINGS_H
60 # include <strings.h>
61 #endif /* HAVE_STRINGS_H */
62 #ifdef HAVE_NETDB_H
63 # include <netdb.h>
64 #endif /* HAVE_NETDB_H */
65 #ifdef HAVE_CLUSTER_H
66 # include <cluster.h>
67 #endif /* HAVE_CLUSTER_H */
68 #ifdef HAVE_RPC_RPC_H
70  * Turn on PORTMAP, so that additional header files would get included
71  * and the important definition for UDPMSGSIZE is included too.
72  */
73 # ifndef PORTMAP
74 #  define PORTMAP
75 # endif /* not PORTMAP */
76 # include <rpc/rpc.h>
77 # ifndef XDRPROC_T_TYPE
78 typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...));
79 # endif /* not XDRPROC_T_TYPE */
80 #endif /* HAVE_RPC_RPC_H */
82 #if defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP)
83 # include <tcpd.h>
84 #endif /* defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP) */
86 ], eval "ac_cv_extern_$1=yes", eval "ac_cv_extern_$1=no")
88 # check if need to define variable
89 if test "`eval echo '$''{ac_cv_extern_'$1'}'`" = yes
90 then
91   AC_DEFINE_UNQUOTED($ac_safe)
94 dnl ======================================================================
96 dnl ######################################################################
97 dnl run AMU_CHECK_EXTERN on each argument given
98 dnl Usage: AMU_CHECK_EXTERNS(arg arg arg ...)
99 AC_DEFUN([AMU_CHECK_EXTERNS],
101 for ac_tmp_arg in $1
103 AMU_CHECK_EXTERN($ac_tmp_arg)
104 done
106 dnl ======================================================================