* Makefile.am (EXTRA_DIST): add errnos_cnvt.awk, errnos.default,
[bpt/guile.git] / libguile / configure.in
1 AC_INIT(eval.c)
2 AM_CONFIG_HEADER(scmconfig.h)
3 AM_INIT_GUILE_MODULE(libguile)
4
5 #--------------------------------------------------------------------
6 #
7 # User options
8 #
9 #--------------------------------------------------------------------
10
11 AC_ARG_ENABLE(debug,
12 [ --disable-debug Don't include debugging support])
13 if test "$enableval" != n && test "$enableval" != no; then
14 AC_DEFINE(DEBUG_EXTENSIONS)
15 AC_DEFINE(READER_EXTENSIONS)
16 LIBOBJS="backtrace.o stacks.o debug.o srcprop.o $LIBOBJS"
17 fi
18
19 AC_ARG_ENABLE(dynamic-linking,
20 [ --enable-dynamic-linking Include support for dynamic linking])
21 if test "$enableval" != n && test "$enableval" != no && test "$enableval" != ""; then
22 AC_DEFINE(DYNAMIC_LINKING)
23 fi
24
25 #--------------------------------------------------------------------
26
27 AC_PROG_CC
28 AC_PROG_CPP
29 AM_PROG_LIBTOOL
30
31 AC_AIX
32 AC_ISC_POSIX
33 AC_MINIX
34
35 CY_AC_WITH_THREADS
36
37 AC_C_CONST
38
39 AC_HEADER_STDC
40 AC_HEADER_DIRENT
41 AC_HEADER_TIME
42 AC_HEADER_SYS_WAIT
43 AC_CHECK_HEADERS(libc.h limits.h malloc.h memory.h string.h sys/ioctl.h sys/select.h sys/time.h sys/timeb.h sys/times.h sys/types.h sys/utime.h time.h unistd.h utime.h)
44 GUILE_HEADER_LIBC_WITH_UNISTD
45
46 AC_TYPE_GETGROUPS
47 AC_TYPE_SIGNAL
48 AC_TYPE_MODE_T
49
50 AC_CHECK_FUNCS(ctermid ftime getcwd geteuid lstat mkdir mknod nice putenv readlink rename rmdir select setegid seteuid setlocale setpgid setsid strftime strptime symlink sync tcgetpgrp tcsetpgrp times uname waitpid)
51
52 AC_REPLACE_FUNCS(inet_aton strerror)
53
54 AC_STRUCT_ST_RDEV
55 AC_STRUCT_ST_BLKSIZE
56 AC_STRUCT_ST_BLOCKS
57 GUILE_STRUCT_UTIMBUF
58
59 # Checks for dynamic linking
60
61 xtra_PLUGIN_guile_libs=""
62 AC_SUBST(xtra_PLUGIN_guile_libs)
63
64 if test "$enable_dynamic_linking" = "yes"; then
65
66 AC_CHECK_LIB(dl,dlopen)
67 AC_CHECK_LIB(dld,dld_link)
68 AC_CHECK_FUNCS(shl_load)
69
70 if test "$ac_cv_lib_dl_dlopen" = "yes"; then
71 xtra_PLUGIN_guile_libs="-lguile -ldl"
72 else
73 if test "$ac_cv_lib_dld_dld_link" = "yes"; then
74 xtra_PLUGIN_guile_libs="-lguile -ldld"
75 fi fi
76
77 fi
78
79 #--------------------------------------------------------------------
80 #
81 # Which way does the stack grow?
82 #
83 #--------------------------------------------------------------------
84
85 AC_TRY_RUN(aux (l) unsigned long l;
86 { int x; exit (l >= ((unsigned long)&x)); }
87 main () { int q; aux((unsigned long)&q); },
88 AC_DEFINE(SCM_STACK_GROWS_UP),,AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h.in))
89
90
91 AC_TRY_RUN(main () { exit (sizeof(float) != sizeof(long)); },
92 AC_DEFINE(SCM_SINGLES),,AC_DEFINE(SCM_SINGLES)
93 AC_MSG_WARN(Guessing that sizeof(long) == sizeof(float) -- see scmconfig.h.in))
94
95 AC_MSG_CHECKING(for struct linger)
96 AC_CACHE_VAL(scm_cv_struct_linger,
97 AC_TRY_COMPILE([
98 #include <sys/types.h>
99 #include <sys/socket.h>],
100 [struct linger lgr; lgr.l_linger = 100],
101 scm_cv_struct_linger="yes",
102 scm_cv_struct_linger="no"))
103 AC_MSG_RESULT($scm_cv_struct_linger)
104 if test $scm_cv_struct_linger = yes; then
105 AC_DEFINE(HAVE_STRUCT_LINGER)
106 fi
107
108 #--------------------------------------------------------------------
109 #
110 # How can you violate a stdio abstraction by setting a stream's fd?
111 #
112 #--------------------------------------------------------------------
113
114 FD_SETTER=""
115
116 if test "x$FD_SETTER" = x; then
117 AC_TRY_COMPILE(#include <stdio.h>
118 , stdout->_file = 1,
119 FD_SETTER="((F)->_file = (D))")
120 fi
121
122 if test "x$FD_SETTER" = x; then
123 AC_TRY_COMPILE(#include <stdio.h>
124 , stdout->_fileno,
125 FD_SETTER="((F)->_fileno = (D))")
126 fi
127
128 dnl
129 dnl Add FD_SETTER tests for other systems here. Your test should
130 dnl try a particular style of assigning to the descriptor
131 dnl field(s) of a FILE* and define FD_SETTER accordingly.
132 dnl
133 dnl The value of FD_SETTER is used as a macro body, as in:
134 dnl
135 dnl #define SET_FILE_FD_FIELD(F,D) @FD_SETTER@
136 dnl
137 dnl F is a FILE* and D a descriptor (int).
138 dnl
139
140 test "x$FD_SETTER" != x && AC_DEFINE(HAVE_FD_SETTER)
141
142 #--------------------------------------------------------------------
143 # How to find out whether a FILE structure contains buffered data.
144 # From Tk we have the following list:
145 # _cnt: Most UNIX systems
146 # __cnt: HPUX
147 # _r: BSD
148 # readCount: Sprite
149 # Or, in GNU libc there are two fields, _gptr and _egptr, which
150 # have to be compared.
151 # These can also be known as _IO_read_ptr and _IO_read_end.
152 #--------------------------------------------------------------------
153
154 AC_MSG_CHECKING(how to get buffer char count from FILE structure)
155 AC_CACHE_VAL(scm_cv_struct_file_count,
156 AC_TRY_COMPILE([#include <stdio.h>],
157 [FILE *f = stdin; f->_cnt = 0],
158 scm_cv_struct_file_count="_cnt",
159 AC_TRY_COMPILE([#include <stdio.h>],
160 [FILE *f = stdin; f->_r = 0],
161 scm_cv_struct_file_count="_r",
162 AC_TRY_COMPILE([#include <stdio.h>],
163 [FILE *f = stdin; f->readCount = 0],
164 scm_cv_struct_file_count="readCount",
165 scm_cv_struct_file_count=""))))
166 if test "$scm_cv_struct_file_count"; then
167 AC_MSG_RESULT($scm_cv_struct_file_count)
168 AC_DEFINE_UNQUOTED(FILE_CNT_FIELD, $scm_cv_struct_file_count)
169 else
170 AC_CACHE_VAL(scm_cv_struct_file_gptr,
171 AC_TRY_COMPILE([#include <stdio.h>],
172 [FILE *f = stdin; f->_gptr = f->egptr;],
173 scm_cv_struct_file_gptr=1,
174 scm_cv_struct_file_gptr=""))
175 if test "$scm_cv_struct_gptr"; then
176 AC_MSG_RESULT(gptr)
177 AC_DEFINE_UNQUOTED(FILE_CNT_GPTR, $scm_cv_struct_file_gptr)
178 else
179 AC_CACHE_VAL(scm_cv_struct_file_readptr,
180 AC_TRY_COMPILE([#include <stdio.h>],
181 [FILE *f = stdin; f->_IO_read_ptr = f->_IO_read_end;],
182 scm_cv_struct_file_readptr=1))
183 if test "$scm_cv_struct_file_readptr"; then
184 AC_MSG_RESULT(read_ptr)
185 AC_DEFINE_UNQUOTED(FILE_CNT_READPTR, $scm_cv_struct_file_readptr)
186 fi
187 fi
188 fi
189
190 #--------------------------------------------------------------------
191 #
192 # Flags for thread support
193 #
194 #--------------------------------------------------------------------
195
196 dnl
197 dnl Set the appropriate flags!
198 dnl
199 if test "$cy_cv_threads_package" = FSU; then
200 AC_DEFINE(USE_FSU_PTHREADS, 1)
201 else if test "$cy_cv_threads_package" = COOP; then
202 AC_DEFINE(USE_COOP_THREADS, 1)
203 else if test "$cy_cv_threads_package" = MIT; then
204 AC_DEFINE(USE_MIT_PTHREADS, 1)
205 else if test "$cy_cv_threads_package" = PCthreads; then
206 AC_DEFINE(USE_PCTHREADS_PTHREADS, 1)
207 else if test "$cy_cv_threads_package" = unknown; then
208 AC_MSG_ERROR("cannot find threads installation")
209 fi
210 fi
211 fi
212 fi
213 fi
214
215 if test "$cy_cv_threads_package" != ""; then
216 AC_DEFINE(USE_THREADS)
217 fi
218
219 ## If we're using GCC, ask for aggressive warnings.
220 case "$GCC" in
221 yes ) CFLAGS="$CFLAGS -Wall -Wpointer-arith" ;;
222 esac
223
224 AC_PROG_AWK
225 AC_MSG_CHECKING(whether errno codes can be extracted from errno.h)
226 goterrnos=0
227 if test "$GCC" = yes ; then
228 ${CC-cc} -undef -dM -E $srcdir/errnos_get.c | egrep ' E.+' | cut -f2 -d' ' > errnos.list
229 egrep '^E.+' errnos.list > /dev/null 2>&1 && goterrnos=1
230 fi
231 if test $goterrnos = 1 ; then
232 AC_MSG_RESULT(yes)
233 else
234 cp $srcdir/errnos.default errnos.list
235 AC_MSG_RESULT([no, using default])
236 fi
237
238 AC_DEFINE_UNQUOTED(GUILE_MAJOR_VERSION, "$GUILE_MAJOR_VERSION")
239 AC_DEFINE_UNQUOTED(GUILE_MINOR_VERSION, "$GUILE_MINOR_VERSION")
240 AC_DEFINE_UNQUOTED(GUILE_VERSION, "$GUILE_VERSION")
241
242 AC_SUBST(FD_SETTER)
243 AC_OUTPUT([Makefile fd.h guile-snarf PLUGIN/guile.libs], [chmod +x guile-snarf])
244
245 dnl Local Variables:
246 dnl comment-start: "dnl "
247 dnl comment-end: ""
248 dnl comment-start-skip: "\\bdnl\\b\\s *"
249 dnl End: