* expect.scm (expect-regexec): define 'eof-next?'. I don't
[bpt/guile.git] / configure.in
1 dnl configuration script for Guile
2 dnl Process this file with autoconf to produce configure.
3 dnl
4 dnl Copyright (C) 1998 Free Software Foundation, Inc.
5 dnl
6 dnl This file is part of GUILE
7 dnl
8 dnl GUILE is free software; you can redistribute it and/or modify it
9 dnl under the terms of the GNU General Public License as published by
10 dnl the Free Software Foundation; either version 2, or (at your
11 dnl option) any later version.
12 dnl
13 dnl GUILE is distributed in the hope that it will be useful, but
14 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
15 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 dnl General Public License for more details.
17 dnl
18 dnl You should have received a copy of the GNU General Public License
19 dnl along with GUILE; see the file COPYING. If not, write to the
20 dnl Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 dnl Boston, MA 02111-1307, USA.
22
23 AC_INIT(Makefile.in)
24 . $srcdir/GUILE-VERSION
25 AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
26 AM_MAINTAINER_MODE
27 AM_CONFIG_HEADER(libguile/scmconfig.h)
28
29 #--------------------------------------------------------------------
30 #
31 # User options
32 #
33 #--------------------------------------------------------------------
34
35 AC_ARG_ENABLE(dynamic-linking,
36 [ --enable-dynamic-linking Include support for dynamic linking],,
37 enable_dynamic_linking=yes)
38
39 AC_ARG_ENABLE(guile-debug,
40 [ --enable-guile-debug Include internal debugging functions])
41 if test "$enableval" = y || test "$enableval" = yes; then
42 AC_DEFINE(GUILE_DEBUG)
43 fi
44
45 dnl The --disable-debug used to control these two. But now they are
46 dnl a required part of the distribution.
47 AC_DEFINE(DEBUG_EXTENSIONS)
48 AC_DEFINE(READER_EXTENSIONS)
49
50 #--------------------------------------------------------------------
51
52 AC_PROG_CC
53 AC_PROG_CPP
54 AM_PROG_LIBTOOL
55
56 AC_AIX
57 AC_ISC_POSIX
58 AC_MINIX
59
60 AM_PROG_CC_STDC
61
62 AC_C_CONST
63 AC_C_INLINE
64 AC_CHECK_SIZEOF(int)
65 AC_CHECK_SIZEOF(long)
66 AC_CACHE_CHECK([for long longs], scm_cv_long_longs,
67 AC_TRY_COMPILE(,
68 [long long a],
69 scm_cv_long_longs=yes,
70 scm_cv_long_longs=no))
71 if test "$scm_cv_long_longs" = yes; then
72 AC_DEFINE(HAVE_LONG_LONGS)
73 fi
74
75 AC_HEADER_STDC
76 AC_HEADER_DIRENT
77 AC_HEADER_TIME
78 AC_HEADER_SYS_WAIT
79 AC_CHECK_HEADERS(libc.h limits.h malloc.h memory.h string.h regex.h rxposix.h rx/rxposix.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)
80 GUILE_HEADER_LIBC_WITH_UNISTD
81
82 AC_TYPE_GETGROUPS
83 AC_TYPE_SIGNAL
84 AC_TYPE_MODE_T
85
86 AC_CHECK_LIB(m, main)
87 AC_CHECK_FUNCS(gethostbyname)
88 if test $ac_cv_func_gethostbyname = no; then
89 AC_CHECK_LIB(nsl, gethostbyname)
90 fi
91 AC_CHECK_FUNCS(connect)
92 if test $ac_cv_func_connect = no; then
93 AC_CHECK_LIB(socket, connect)
94 fi
95
96 # Checks for dynamic linking
97
98 if test "$enable_dynamic_linking" = "yes"; then
99
100 AC_CHECK_LIB(dl,dlopen)
101 if test "$ac_cv_lib_dl_dlopen" = "yes"; then
102 AC_CHECK_FUNCS(dlopen)
103 AC_DEFINE(DYNAMIC_LINKING)
104 else
105 AC_CHECK_LIB(dld,dld_link)
106 if test "$ac_cv_lib_dld_dld_link" = "yes"; then
107 AC_DEFINE(DYNAMIC_LINKING)
108 else
109 AC_CHECK_FUNCS(shl_load)
110 if test "$ac_cv_func_shl_load" = "yes"; then
111 AC_DEFINE(DYNAMIC_LINKING)
112 else
113 AC_CHECK_FUNCS(dlopen)
114 if test "$ac_cv_func_dlopen" = "yes"; then
115 AC_DEFINE(DYNAMIC_LINKING)
116 fi
117 fi
118 fi
119 fi
120
121 fi
122
123 GUILE_DLSYM_USCORE
124
125 AC_CHECK_FUNCS(ctermid ftime getcwd geteuid gettimeofday lstat mkdir mknod nice readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction strftime strptime symlink sync tcgetpgrp tcsetpgrp times uname waitpid bzero strdup system usleep)
126
127 ### Some systems don't declare some functions. On such systems, we
128 ### need to at least provide our own K&R-style declarations.
129
130 ### GUILE_FUNC_DECLARED(function, headerfile)
131
132 ### Check for a declaration of FUNCTION in HEADERFILE; if it is
133 ### not there, #define MISSING_FUNCTION_DECL.
134 AC_DEFUN(GUILE_FUNC_DECLARED, [
135 AC_CACHE_CHECK(for $1 declaration, guile_cv_func_$1_declared,
136 AC_EGREP_HEADER($1, $2,
137 guile_cv_func_$1_declared=yes,
138 guile_cv_func_$1_declared=no))
139 if test [x$guile_cv_func_]$1[_declared] = xno; then
140 AC_DEFINE([MISSING_]translit($1, [a-z], [A-Z])[_DECL])
141 fi
142 ])
143
144 GUILE_FUNC_DECLARED(strptime, time.h)
145 GUILE_FUNC_DECLARED(bzero, string.h)
146 GUILE_FUNC_DECLARED(sleep, unistd.h)
147 GUILE_FUNC_DECLARED(usleep, unistd.h)
148
149 ### On some systems usleep has no return value. If it does have one,
150 ### we'd like to return it; otherwise, we'll fake it.
151 AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
152 [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
153 /usr/include/unistd.h,
154 [guile_cv_func_usleep_return_type=void],
155 [guile_cv_func_usleep_return_type=int])])
156 case "$guile_cv_func_usleep_return_type" in
157 "void" )
158 AC_DEFINE(USLEEP_RETURNS_VOID)
159 ;;
160 esac
161
162 dnl <GNU-WIN32 hacks>
163
164 AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
165 if test -n "$have_sys_un_h" ; then
166 AC_DEFINE(HAVE_UNIX_DOMAIN_SOCKETS)
167 fi
168
169 AC_CHECK_FUNCS(socketpair getgroups setpwent pause tzset)
170
171 dnl I don't know what this prefixing of cygwin32_ is for.
172 dnl scmconfig.h wasn't updated with the test results.
173 dnl so use AC_CHECK_FUNCS for now.
174
175 dnl how about:
176 dnl save confdefs.h
177 dnl if test $ac_cv_cigwin = yes; then
178 dnl modify confdefs.h
179 dnl fi
180 dnl AC_CHECK_FUNCS...
181 dnl restore confdefs.h
182
183 dnl cp confdefs.h confdefs.h.bak
184 dnl for func in gethostent sethostent endhostent getnetent setnetent endnetent getprotoent setprotoent endprotoent getservent setservent endservent getnetbyaddr getnetbyname inet_lnaof inet_makeaddr inet_netof ; do
185 dnl cp confdefs.h.bak confdefs.h
186 dnl cat >> confdefs.h << EOF
187 dnl #ifdef __CYGWIN32__
188 dnl #define $func cygwin32_$func
189 dnl #endif
190 dnl EOF
191 dnl AC_CHECK_FUNC($func)
192 dnl done
193 dnl cp confdefs.h.bak confdefs.h
194
195 AC_CHECK_FUNCS(sethostent gethostent endhostent dnl
196 setnetent getnetent endnetent dnl
197 setprotoent getprotoent endprotoent dnl
198 setservent getservent endservent dnl
199 getnetbyaddr getnetbyname inet_lnaof inet_makeaddr inet_netof)
200
201 dnl </GNU-WIN32 hacks>
202
203 AC_CACHE_CHECK([for restartable system calls], scm_cv_restarts,
204 if test $ac_cv_func_sigaction = yes; then
205 [AC_TRY_COMPILE([#include <signal.h>],
206 [int a = SA_RESTART],
207 scm_cv_restarts=yes,
208 scm_cv_restarts=no)]
209 else
210 scm_cv_restarts=no
211 fi)
212 if test $scm_cv_restarts = yes; then
213 AC_DEFINE(HAVE_RESTARTS)
214 fi
215
216 if test "$ac_cv_header_regex_h" = yes ||
217 test "$ac_cv_header_rxposix_h" = yes ||
218 test "$ac_cv_header_rx_rxposix_h" = yes; then
219 GUILE_NAMED_CHECK_FUNC(regcomp, norx, [LIBOBJS="regex-posix.o $LIBOBJS"],
220 [AC_CHECK_LIB(rx, main)
221 GUILE_NAMED_CHECK_FUNC(regcomp, rx, [LIBOBJS="regex-posix.o $LIBOBJS"])]
222 )
223 dnl The following should not be necessary, but for some reason
224 dnl autoheader misses it if we don't include it!
225 if test "$ac_cv_func_regcomp_norx" = yes ||
226 test "$ac_cv_func_regcomp_rx" = yes; then
227 AC_DEFINE(HAVE_REGCOMP)
228 fi
229 fi
230
231 AC_REPLACE_FUNCS(inet_aton putenv strerror)
232
233 # When testing for the presence of alloca, we need to add alloca.o
234 # explicitly to LIBOBJS to make sure that it is translated to
235 # `alloca.lo' for libtool later on. This can and should be done more cleanly.
236 AC_FUNC_ALLOCA
237 if test "$ALLOCA" = "alloca.o"; then LIBOBJS="alloca.o $LIBOBJS"; fi
238
239 AC_STRUCT_ST_RDEV
240 AC_STRUCT_ST_BLKSIZE
241
242 # We could use AC_STRUCT_ST_BLOCKS here, but that adds fileblocks.o to
243 # LIBOBJS, which we don't need. This seems more direct.
244 AC_CACHE_CHECK([for st_blocks in struct stat], ac_cv_struct_st_blocks,
245 [AC_TRY_COMPILE([#include <sys/types.h>
246 #include <sys/stat.h>], [struct stat s; s.st_blocks;],
247 ac_cv_struct_st_blocks=yes, ac_cv_struct_st_blocks=no)])
248 if test $ac_cv_struct_st_blocks = yes; then
249 AC_DEFINE(HAVE_ST_BLOCKS)
250 fi
251
252 AC_STRUCT_TIMEZONE
253 GUILE_STRUCT_UTIMBUF
254
255 #--------------------------------------------------------------------
256 #
257 # Which way does the stack grow?
258 #
259 #--------------------------------------------------------------------
260
261 AC_TRY_RUN(aux (l) unsigned long l;
262 { int x; exit (l >= ((unsigned long)&x)); }
263 main () { int q; aux((unsigned long)&q); },
264 AC_DEFINE(SCM_STACK_GROWS_UP),,AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h.in))
265
266 AC_CACHE_CHECK([whether floats fit in longs], guile_cv_type_float_fits_long,
267 [AC_TRY_RUN([main () { exit (sizeof(float) > sizeof(long)); }],
268 [guile_cv_type_float_fits_long=yes],
269 [guile_cv_type_float_fits_long=no],
270 [guile_cv_type_float_fits_long=guess-yes])])
271 case $guile_cv_type_float_fits_long in
272 "yes" )
273 AC_DEFINE(SCM_SINGLES)
274 ;;
275 "guess-yes" )
276 AC_DEFINE(SCM_SINGLES)
277 AC_MSG_WARN([guessing that sizeof(long) == sizeof(float)])
278 AC_MSG_WARN([see SCM_SINGLES in scmconfig.h.in])
279 ;;
280 esac
281
282
283 AC_MSG_CHECKING(for struct linger)
284 AC_CACHE_VAL(scm_cv_struct_linger,
285 AC_TRY_COMPILE([
286 #include <sys/types.h>
287 #include <sys/socket.h>],
288 [struct linger lgr; lgr.l_linger = 100],
289 scm_cv_struct_linger="yes",
290 scm_cv_struct_linger="no"))
291 AC_MSG_RESULT($scm_cv_struct_linger)
292 if test $scm_cv_struct_linger = yes; then
293 AC_DEFINE(HAVE_STRUCT_LINGER)
294 fi
295
296 #--------------------------------------------------------------------
297 #
298 # How can you violate a stdio abstraction by setting a stream's fd?
299 #
300 #--------------------------------------------------------------------
301
302 AC_MSG_CHECKING(how to set a stream file descriptor)
303 AC_CACHE_VAL(scm_cv_fd_setter,
304 AC_TRY_COMPILE([#include <stdio.h>],
305 [stdout->_file = 1],
306 scm_cv_fd_setter="_file",
307 AC_TRY_COMPILE([#include <stdio.h>],
308 [stdout->__file = 1],
309 scm_cv_fd_setter="__file",
310 AC_TRY_COMPILE([#include <stdio.h>],
311 [stdout->_fileno = 1],
312 scm_cv_fd_setter="_fileno",
313 scm_cv_fd_setter=""))))
314
315 if test "$scm_cv_fd_setter"; then
316 AC_MSG_RESULT($scm_cv_fd_setter)
317 AC_DEFINE_UNQUOTED(FD_SETTER, $scm_cv_fd_setter)
318 else
319 AC_MSG_RESULT(we couldn't do it!)
320 fi
321
322 #--------------------------------------------------------------------
323 # How to find out whether a FILE structure contains buffered data.
324 # From Tk we have the following list:
325 # _cnt: Most UNIX systems
326 # __cnt: HPUX and SCO
327 # _r: BSD
328 # readCount: Sprite
329 # Or, in GNU libc there are two fields, _gptr and _egptr, which
330 # have to be compared.
331 # These can also be known as _IO_read_ptr and _IO_read_end.
332 #--------------------------------------------------------------------
333
334 AC_MSG_CHECKING(how to get buffer char count from FILE structure)
335 AC_CACHE_VAL(scm_cv_struct_file_count,
336 AC_TRY_COMPILE([#include <stdio.h>],
337 [FILE *f = stdin; f->_cnt = 0],
338 scm_cv_struct_file_count="_cnt",
339 AC_TRY_COMPILE([#include <stdio.h>],
340 [FILE *f = stdin; f->__cnt = 0],
341 scm_cv_struct_file_count="__cnt",
342 AC_TRY_COMPILE([#include <stdio.h>],
343 [FILE *f = stdin; f->_r = 0],
344 scm_cv_struct_file_count="_r",
345 AC_TRY_COMPILE([#include <stdio.h>],
346 [FILE *f = stdin; f->readCount = 0],
347 scm_cv_struct_file_count="readCount",
348 scm_cv_struct_file_count="")))))
349 if test "$scm_cv_struct_file_count"; then
350 AC_MSG_RESULT($scm_cv_struct_file_count)
351 AC_DEFINE_UNQUOTED(FILE_CNT_FIELD, $scm_cv_struct_file_count)
352 else
353 AC_CACHE_VAL(scm_cv_struct_file_gptr,
354 AC_TRY_COMPILE([#include <stdio.h>],
355 [FILE *f = stdin; f->_gptr = f->egptr;],
356 scm_cv_struct_file_gptr=1,
357 scm_cv_struct_file_gptr=""))
358 if test "$scm_cv_struct_gptr"; then
359 AC_MSG_RESULT(gptr)
360 AC_DEFINE_UNQUOTED(FILE_CNT_GPTR, $scm_cv_struct_file_gptr)
361 else
362 AC_CACHE_VAL(scm_cv_struct_file_readptr,
363 AC_TRY_COMPILE([#include <stdio.h>],
364 [FILE *f = stdin; f->_IO_read_ptr = f->_IO_read_end;],
365 scm_cv_struct_file_readptr=1))
366 if test "$scm_cv_struct_file_readptr"; then
367 AC_MSG_RESULT(read_ptr)
368 AC_DEFINE_UNQUOTED(FILE_CNT_READPTR, $scm_cv_struct_file_readptr)
369 else
370 AC_MSG_RESULT(we couldn't do it!)
371 fi
372 fi
373 fi
374
375 #--------------------------------------------------------------------
376 #
377 # Flags for thread support
378 #
379 #--------------------------------------------------------------------
380
381 ### What thread package has the user asked for?
382 AC_ARG_WITH(threads, [ --with-threads thread interface],
383 , with_threads=no)
384
385 ### Turn $with_threads into either the name of a threads package, like
386 ### `qt', or `no', meaning that threads should not be supported.
387 AC_MSG_CHECKING(whether to support threads)
388 case "$with_threads" in
389 "yes" | "qt" | "coop" | "")
390 with_threads=qt
391 ;;
392 "no" )
393 ;;
394 * )
395 AC_MSG_ERROR(invalid value for --with-threads: $with_threads)
396 ;;
397 esac
398 AC_MSG_RESULT($with_threads)
399
400 ## Make sure the threads package we've chosen is actually supported on
401 ## the present platform.
402 case "${with_threads}" in
403 "qt" )
404 ## This configures the QuickThreads package, and sets or clears
405 ## the THREAD_PACKAGE variable if qthreads don't configure
406 ## correctly.
407 QTHREADS_CONFIGURE
408 ;;
409 esac
410
411 ## If we're using threads, bring in some other parts of Guile which
412 ## work with them.
413 if test "${THREAD_PACKAGE}" != "" ; then
414 AC_DEFINE(USE_THREADS, 1)
415
416 ## Include the Guile thread interface in the library...
417 LIBOBJS="$LIBOBJS threads.o"
418
419 ## ... and tell it which package to talk to.
420 case "${THREAD_PACKAGE}" in
421 "QT" )
422 AC_DEFINE(USE_COOP_THREADS, 1)
423 ;;
424 * )
425 AC_MSG_ERROR(invalid value for THREAD_PACKAGE: ${THREAD_PACKAGE})
426 ;;
427 esac
428
429 ## Bring in scm_internal_select, if appropriate.
430 if test $ac_cv_func_gettimeofday = yes &&
431 test $ac_cv_func_select = yes; then
432 LIBOBJS="$LIBOBJS iselect.o"
433 AC_DEFINE(GUILE_ISELECT, 1)
434 fi
435 fi
436
437 ## If we're using GCC, ask for aggressive warnings.
438 case "$GCC" in
439 yes )
440 ## We had -Wstrict-prototypes in here for a bit, but Guile does too
441 ## much stuff with generic function pointers for that to really be
442 ## less than exasperating.
443 CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wmissing-prototypes" ;;
444 esac
445
446 AC_PROG_AWK
447
448 ## If we're creating a shared library (using libtool!), then we'll
449 ## need to generate a list of .lo files corresponding to the .o files
450 ## given in LIBOBJS. We'll call it LIBLOBJS.
451 LIBLOBJS="`echo ${LIBOBJS} | sed 's/\.o/.lo/g'`"
452
453 AC_SUBST(GUILE_MAJOR_VERSION)
454 AC_SUBST(GUILE_MINOR_VERSION)
455 AC_SUBST(GUILE_VERSION)
456
457 dnl Tell guile-config what flags guile users should link against.
458 GUILE_LIBS="$LDFLAGS $THREAD_LIBS_INSTALLED $LIBS"
459 AC_SUBST(GUILE_LIBS)
460
461 dnl timestamping the interpreter and scheme libraries:
462 dnl
463 dnl Help us notice when we're running one version of the Guile
464 dnl interpreter against a different version of the ice-9 Scheme code.
465 dnl This will definitely detect version skew due to differing
466 dnl snapshots and releases, but may not catch skew for the developers.
467 dnl Hopefully it will not detect skew when there is none; if that
468 dnl happens, the warnings will be useless, and we should remove this.
469 GUILE_STAMP="`date`"
470 AC_SUBST(GUILE_STAMP)
471
472 AC_SUBST(AWK)
473 AC_SUBST(LIBLOBJS)
474
475 AC_OUTPUT([Makefile libguile/Makefile libguile/guile-snarf libguile/versiondat.h ice-9/Makefile ice-9/version.scm qt/Makefile qt/qt.h qt/md/Makefile qt/time/Makefile guile-config/Makefile doc/Makefile], [chmod +x libguile/guile-snarf])
476
477 dnl Local Variables:
478 dnl comment-start: "dnl "
479 dnl comment-end: ""
480 dnl comment-start-skip: "\\bdnl\\b\\s *"
481 dnl End: