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