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