*** 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
9dec9737
MD
64AC_CHECK_SIZEOF(int)
65AC_CHECK_SIZEOF(long)
66AC_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))
71if test "$scm_cv_long_longs" = yes; then
72 AC_DEFINE(HAVE_LONG_LONGS)
73fi
3a629497
JB
74
75AC_HEADER_STDC
76AC_HEADER_DIRENT
77AC_HEADER_TIME
78AC_HEADER_SYS_WAIT
e9cd5d2f 79AC_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
80GUILE_HEADER_LIBC_WITH_UNISTD
81
82AC_TYPE_GETGROUPS
83AC_TYPE_SIGNAL
84AC_TYPE_MODE_T
85
5852c051 86AC_CHECK_LIB(m, main)
4c787b52 87AC_CHECK_FUNCS(gethostbyname)
5852c051
JB
88if test $ac_cv_func_gethostbyname = no; then
89 AC_CHECK_LIB(nsl, gethostbyname)
90fi
4c787b52 91AC_CHECK_FUNCS(connect)
5852c051
JB
92if test $ac_cv_func_connect = no; then
93 AC_CHECK_LIB(socket, connect)
94fi
5ee74cec 95
90fcac06
JB
96# Checks for dynamic linking
97
5852c051
JB
98if test "$enable_dynamic_linking" = "yes"; then
99
100AC_CHECK_LIB(dl,dlopen)
101if test "$ac_cv_lib_dl_dlopen" = "yes"; then
4c787b52 102 AC_CHECK_FUNCS(dlopen)
5852c051
JB
103 AC_DEFINE(DYNAMIC_LINKING)
104else
105AC_CHECK_LIB(dld,dld_link)
106if test "$ac_cv_lib_dld_dld_link" = "yes"; then
5852c051
JB
107 AC_DEFINE(DYNAMIC_LINKING)
108else
4c787b52 109AC_CHECK_FUNCS(shl_load)
5852c051
JB
110if test "$ac_cv_func_shl_load" = "yes"; then
111 AC_DEFINE(DYNAMIC_LINKING)
a4995389 112else
4c787b52 113AC_CHECK_FUNCS(dlopen)
a4995389
MV
114if test "$ac_cv_func_dlopen" = "yes"; then
115 AC_DEFINE(DYNAMIC_LINKING)
116fi
5852c051
JB
117fi
118fi
119fi
120
121fi
122
2a0d7176 123GUILE_DLSYM_USCORE
5852c051 124
219a5a5b 125AC_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)
64e121dc 126
777b022a
JB
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.
134AC_DEFUN(GUILE_FUNC_DECLARED, [
fc342a63 135 AC_CACHE_CHECK(for $1 declaration, guile_cv_func_$1_declared,
777b022a 136 AC_EGREP_HEADER($1, $2,
fc342a63
JB
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
777b022a
JB
140 AC_DEFINE([MISSING_]translit($1, [a-z], [A-Z])[_DECL])
141 fi
142])
143
144GUILE_FUNC_DECLARED(strptime, time.h)
145GUILE_FUNC_DECLARED(bzero, string.h)
c31bfb85 146GUILE_FUNC_DECLARED(sleep, unistd.h)
777b022a 147GUILE_FUNC_DECLARED(usleep, unistd.h)
e1a191a8 148
da753252
JB
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.
fc342a63 151AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
c43f86c1 152 [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
fc342a63
JB
153 /usr/include/unistd.h,
154 [guile_cv_func_usleep_return_type=void],
155 [guile_cv_func_usleep_return_type=int])])
156case "$guile_cv_func_usleep_return_type" in
157 "void" )
158 AC_DEFINE(USLEEP_RETURNS_VOID)
159 ;;
160esac
161
da88f0cb
JB
162dnl <GNU-WIN32 hacks>
163
164AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
165if test -n "$have_sys_un_h" ; then
166AC_DEFINE(HAVE_UNIX_DOMAIN_SOCKETS)
167fi
168
169AC_CHECK_FUNCS(socketpair getgroups setpwent pause tzset)
170
f4e5b810
GH
171dnl I don't know what this prefixing of cygwin32_ is for.
172dnl scmconfig.h wasn't updated with the test results.
173dnl so use AC_CHECK_FUNCS for now.
174
175dnl how about:
176dnl save confdefs.h
177dnl if test $ac_cv_cigwin = yes; then
178dnl modify confdefs.h
179dnl fi
180dnl AC_CHECK_FUNCS...
181dnl restore confdefs.h
182
183dnl cp confdefs.h confdefs.h.bak
219a5a5b 184dnl for func in gethostent sethostent endhostent getnetent setnetent endnetent getprotoent setprotoent endprotoent getservent setservent endservent getnetbyaddr getnetbyname inet_lnaof inet_makeaddr inet_netof ; do
f4e5b810
GH
185dnl cp confdefs.h.bak confdefs.h
186dnl cat >> confdefs.h << EOF
187dnl #ifdef __CYGWIN32__
188dnl #define $func cygwin32_$func
189dnl #endif
190dnl EOF
191dnl AC_CHECK_FUNC($func)
192dnl done
193dnl cp confdefs.h.bak confdefs.h
194
219a5a5b
JB
195AC_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)
da88f0cb
JB
200
201dnl </GNU-WIN32 hacks>
202
e1a191a8
GH
203AC_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)
212if test $scm_cv_restarts = yes; then
213 AC_DEFINE(HAVE_RESTARTS)
214fi
215
e9cd5d2f
MD
216if 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
0b89e78e
MD
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 )
e9cd5d2f
MD
223 dnl The following should not be necessary, but for some reason
224 dnl autoheader misses it if we don't include it!
0b89e78e
MD
225 if test "$ac_cv_func_regcomp_norx" = yes ||
226 test "$ac_cv_func_regcomp_rx" = yes; then
e9cd5d2f
MD
227 AC_DEFINE(HAVE_REGCOMP)
228 fi
da88f0cb 229fi
8e1bfcd0 230
3a629497
JB
231AC_REPLACE_FUNCS(inet_aton putenv strerror)
232
4a5fa91c
TP
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.
3a629497 236AC_FUNC_ALLOCA
4a5fa91c 237if test "$ALLOCA" = "alloca.o"; then LIBOBJS="alloca.o $LIBOBJS"; fi
3a629497
JB
238
239AC_STRUCT_ST_RDEV
240AC_STRUCT_ST_BLKSIZE
075edbde
JB
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.
244AC_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;],
247ac_cv_struct_st_blocks=yes, ac_cv_struct_st_blocks=no)])
248if test $ac_cv_struct_st_blocks = yes; then
249 AC_DEFINE(HAVE_ST_BLOCKS)
250fi
251
3a629497
JB
252AC_STRUCT_TIMEZONE
253GUILE_STRUCT_UTIMBUF
254
3a629497
JB
255#--------------------------------------------------------------------
256#
257# Which way does the stack grow?
258#
259#--------------------------------------------------------------------
260
261AC_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
3a171311
JB
266AC_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])])
271case $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 ;;
280esac
3a629497 281
3a629497
JB
282
283AC_MSG_CHECKING(for struct linger)
284AC_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"))
291AC_MSG_RESULT($scm_cv_struct_linger)
292if test $scm_cv_struct_linger = yes; then
293 AC_DEFINE(HAVE_STRUCT_LINGER)
294fi
295
296#--------------------------------------------------------------------
297#
298# How can you violate a stdio abstraction by setting a stream's fd?
299#
300#--------------------------------------------------------------------
301
302AC_MSG_CHECKING(how to set a stream file descriptor)
303AC_CACHE_VAL(scm_cv_fd_setter,
304 AC_TRY_COMPILE([#include <stdio.h>],
305 [stdout->_file = 1],
306 scm_cv_fd_setter="_file",
fe75dfc5
JB
307 AC_TRY_COMPILE([#include <stdio.h>],
308 [stdout->__file = 1],
309 scm_cv_fd_setter="__file",
3a629497
JB
310 AC_TRY_COMPILE([#include <stdio.h>],
311 [stdout->_fileno = 1],
312 scm_cv_fd_setter="_fileno",
fe75dfc5 313 scm_cv_fd_setter=""))))
3a629497
JB
314
315if test "$scm_cv_fd_setter"; then
316 AC_MSG_RESULT($scm_cv_fd_setter)
317 AC_DEFINE_UNQUOTED(FD_SETTER, $scm_cv_fd_setter)
318else
319 AC_MSG_RESULT(we couldn't do it!)
320fi
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
fe75dfc5 326# __cnt: HPUX and SCO
3a629497
JB
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
334AC_MSG_CHECKING(how to get buffer char count from FILE structure)
335AC_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",
fe75dfc5
JB
339 AC_TRY_COMPILE([#include <stdio.h>],
340 [FILE *f = stdin; f->__cnt = 0],
341 scm_cv_struct_file_count="__cnt",
3a629497
JB
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",
fe75dfc5 348 scm_cv_struct_file_count="")))))
3a629497
JB
349if 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)
352else
353AC_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=""))
358if test "$scm_cv_struct_gptr"; then
359 AC_MSG_RESULT(gptr)
360 AC_DEFINE_UNQUOTED(FILE_CNT_GPTR, $scm_cv_struct_file_gptr)
361else
362AC_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))
366if 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)
369else
370 AC_MSG_RESULT(we couldn't do it!)
371fi
372fi
373fi
374
375#--------------------------------------------------------------------
376#
377# Flags for thread support
378#
379#--------------------------------------------------------------------
380
539c89a1
JB
381### What thread package has the user asked for?
382AC_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.
e0f54bcc 387AC_MSG_CHECKING(whether to support threads)
539c89a1
JB
388case "$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 ;;
397esac
e0f54bcc 398AC_MSG_RESULT($with_threads)
3a629497 399
539c89a1
JB
400## Make sure the threads package we've chosen is actually supported on
401## the present platform.
402case "${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 ;;
409esac
3a629497 410
539c89a1
JB
411## If we're using threads, bring in some other parts of Guile which
412## work with them.
413if test "${THREAD_PACKAGE}" != "" ; then
414 AC_DEFINE(USE_THREADS, 1)
3a629497 415
539c89a1
JB
416 ## Include the Guile thread interface in the library...
417 LIBOBJS="$LIBOBJS threads.o"
933a7411 418
539c89a1
JB
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
933a7411
MD
435fi
436
3a629497
JB
437## If we're using GCC, ask for aggressive warnings.
438case "$GCC" in
99be3450 439 yes )
0a1b8b15
JB
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" ;;
3a629497
JB
444esac
445
446AC_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.
451LIBLOBJS="`echo ${LIBOBJS} | sed 's/\.o/.lo/g'`"
452
7c86ae05
JB
453AC_SUBST(GUILE_MAJOR_VERSION)
454AC_SUBST(GUILE_MINOR_VERSION)
455AC_SUBST(GUILE_VERSION)
539c89a1 456
bcc695e3 457dnl Tell guile-config what flags guile users should link against.
539c89a1 458GUILE_LIBS="$LDFLAGS $THREAD_LIBS_INSTALLED $LIBS"
daa4f38c 459AC_SUBST(GUILE_LIBS)
7c86ae05
JB
460
461dnl timestamping the interpreter and scheme libraries:
462dnl
463dnl Help us notice when we're running one version of the Guile
464dnl interpreter against a different version of the ice-9 Scheme code.
465dnl This will definitely detect version skew due to differing
466dnl snapshots and releases, but may not catch skew for the developers.
467dnl Hopefully it will not detect skew when there is none; if that
468dnl happens, the warnings will be useless, and we should remove this.
469GUILE_STAMP="`date`"
470AC_SUBST(GUILE_STAMP)
3a629497
JB
471
472AC_SUBST(AWK)
473AC_SUBST(LIBLOBJS)
474
0e6d926d 475AC_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 476
3a629497
JB
477dnl Local Variables:
478dnl comment-start: "dnl "
479dnl comment-end: ""
480dnl comment-start-skip: "\\bdnl\\b\\s *"
481dnl End: