* evalext.c (scm_definedp): Removed check for isyms; Added a
[bpt/guile.git] / configure.in
... / ...
CommitLineData
1dnl configuration script for Guile
2dnl Process this file with autoconf to produce configure.
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
23AC_INIT(Makefile.in)
24. $srcdir/GUILE-VERSION
25AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
26AM_MAINTAINER_MODE
27AM_CONFIG_HEADER(libguile/scmconfig.h)
28
29#--------------------------------------------------------------------
30#
31# User options
32#
33#--------------------------------------------------------------------
34
35AC_ARG_ENABLE(dynamic-linking,
36 [ --enable-dynamic-linking Include support for dynamic linking],,
37 enable_dynamic_linking=yes)
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
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
50#--------------------------------------------------------------------
51
52AC_PROG_CC
53AC_PROG_CPP
54AM_PROG_LIBTOOL
55
56AC_AIX
57AC_ISC_POSIX
58AC_MINIX
59
60AM_PROG_CC_STDC
61
62AC_C_CONST
63AC_C_INLINE
64
65AC_HEADER_STDC
66AC_HEADER_DIRENT
67AC_HEADER_TIME
68AC_HEADER_SYS_WAIT
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)
70GUILE_HEADER_LIBC_WITH_UNISTD
71
72AC_TYPE_GETGROUPS
73AC_TYPE_SIGNAL
74AC_TYPE_MODE_T
75
76AC_CHECK_LIB(m, main)
77AC_CHECK_FUNCS(gethostbyname)
78if test $ac_cv_func_gethostbyname = no; then
79 AC_CHECK_LIB(nsl, gethostbyname)
80fi
81AC_CHECK_FUNCS(connect)
82if test $ac_cv_func_connect = no; then
83 AC_CHECK_LIB(socket, connect)
84fi
85AC_CHECK_LIB(termcap, tgoto)
86AC_CHECK_LIB(readline, readline)
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])])
97if test "$ac_cv_var_rl_getc_function" = "yes"; then
98 AC_DEFINE(HAVE_RL_GETC_FUNCTION)
99fi
100
101if test $ac_cv_lib_readline_readline = yes -a $ac_cv_var_rl_getc_function = no; then
102 echo 'Warning: libreadline is too old on your system. Need >= 2.1.'
103fi
104
105# Checks for dynamic linking
106
107if test "$enable_dynamic_linking" = "yes"; then
108
109AC_CHECK_LIB(dl,dlopen)
110if test "$ac_cv_lib_dl_dlopen" = "yes"; then
111 AC_CHECK_FUNCS(dlopen)
112 AC_DEFINE(DYNAMIC_LINKING)
113else
114AC_CHECK_LIB(dld,dld_link)
115if test "$ac_cv_lib_dld_dld_link" = "yes"; then
116 AC_DEFINE(DYNAMIC_LINKING)
117else
118AC_CHECK_FUNCS(shl_load)
119if test "$ac_cv_func_shl_load" = "yes"; then
120 AC_DEFINE(DYNAMIC_LINKING)
121else
122AC_CHECK_FUNCS(dlopen)
123if test "$ac_cv_func_dlopen" = "yes"; then
124 AC_DEFINE(DYNAMIC_LINKING)
125fi
126fi
127fi
128fi
129
130fi
131
132GUILE_DLSYM_USCORE
133
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)
135
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, [
144 AC_CACHE_CHECK(for $1 declaration, guile_cv_func_$1_declared,
145 AC_EGREP_HEADER($1, $2,
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
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)
155GUILE_FUNC_DECLARED(sleep, unistd.h)
156GUILE_FUNC_DECLARED(usleep, unistd.h)
157
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.
160AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
161 [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
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
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
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)
205
206dnl </GNU-WIN32 hacks>
207
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
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
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 )
228 dnl The following should not be necessary, but for some reason
229 dnl autoheader misses it if we don't include it!
230 if test "$ac_cv_func_regcomp_norx" = yes ||
231 test "$ac_cv_func_regcomp_rx" = yes; then
232 AC_DEFINE(HAVE_REGCOMP)
233 fi
234fi
235
236AC_REPLACE_FUNCS(inet_aton putenv strerror)
237
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.
241AC_FUNC_ALLOCA
242if test "$ALLOCA" = "alloca.o"; then LIBOBJS="alloca.o $LIBOBJS"; fi
243
244AC_STRUCT_ST_RDEV
245AC_STRUCT_ST_BLKSIZE
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
257AC_STRUCT_TIMEZONE
258GUILE_STRUCT_UTIMBUF
259
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
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
286
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",
312 AC_TRY_COMPILE([#include <stdio.h>],
313 [stdout->__file = 1],
314 scm_cv_fd_setter="__file",
315 AC_TRY_COMPILE([#include <stdio.h>],
316 [stdout->_fileno = 1],
317 scm_cv_fd_setter="_fileno",
318 scm_cv_fd_setter=""))))
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
331# __cnt: HPUX and SCO
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",
344 AC_TRY_COMPILE([#include <stdio.h>],
345 [FILE *f = stdin; f->__cnt = 0],
346 scm_cv_struct_file_count="__cnt",
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",
353 scm_cv_struct_file_count="")))))
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
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.
392AC_MSG_CHECKING(whether to support threads)
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
403AC_MSG_RESULT($with_threads)
404
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
415
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)
420
421 ## Include the Guile thread interface in the library...
422 LIBOBJS="$LIBOBJS threads.o"
423
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
440fi
441
442## If we're using GCC, ask for aggressive warnings.
443case "$GCC" in
444 yes )
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" ;;
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
458AC_SUBST(GUILE_MAJOR_VERSION)
459AC_SUBST(GUILE_MINOR_VERSION)
460AC_SUBST(GUILE_VERSION)
461
462dnl Tell guile-config what flags guile users should link against.
463GUILE_LIBS="$LDFLAGS $THREAD_LIBS_INSTALLED $LIBS"
464AC_SUBST(GUILE_LIBS)
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)
476
477AC_SUBST(AWK)
478AC_SUBST(LIBLOBJS)
479
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])
481
482dnl Local Variables:
483dnl comment-start: "dnl "
484dnl comment-end: ""
485dnl comment-start-skip: "\\bdnl\\b\\s *"
486dnl End: