* fports.c (scm_fgets): Return if the last char in a chunk is
[bpt/guile.git] / configure.in
CommitLineData
733943b9 1dnl Process this file with autoconf to produce configure.
0f2d19dd 2AC_INIT(Makefile.in)
2d26def0 3. $srcdir/GUILE-VERSION
3a629497 4AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
15ae1bee 5AM_MAINTAINER_MODE
3a629497 6AM_CONFIG_HEADER(libguile/scmconfig.h)
2d26def0 7
3a629497
JB
8#--------------------------------------------------------------------
9#
10# User options
11#
12#--------------------------------------------------------------------
86789f9b 13
3a629497
JB
14AC_ARG_ENABLE(debug,
15[ --disable-debug Don't include debugging support])
16if test "$enableval" != n && test "$enableval" != no; then
17 AC_DEFINE(DEBUG_EXTENSIONS)
18 AC_DEFINE(READER_EXTENSIONS)
19 LIBOBJS="backtrace.o stacks.o debug.o srcprop.o $LIBOBJS"
20fi
21
22AC_ARG_ENABLE(dynamic-linking,
af8865f7
JB
23 [ --enable-dynamic-linking Include support for dynamic linking],,
24 enable_dynamic_linking=yes)
3a629497
JB
25
26AC_ARG_ENABLE(guile-debug,
27[ --enable-guile-debug Include internal debugging functions])
28if test "$enableval" = y || test "$enableval" = yes; then
29 AC_DEFINE(GUILE_DEBUG)
30fi
31
32#--------------------------------------------------------------------
33
34AC_PROG_CC
35AC_PROG_CPP
36AM_PROG_LIBTOOL
37
38AC_AIX
39AC_ISC_POSIX
40AC_MINIX
41
42AC_C_CONST
43
44AC_HEADER_STDC
45AC_HEADER_DIRENT
46AC_HEADER_TIME
47AC_HEADER_SYS_WAIT
e9cd5d2f 48AC_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
49GUILE_HEADER_LIBC_WITH_UNISTD
50
51AC_TYPE_GETGROUPS
52AC_TYPE_SIGNAL
53AC_TYPE_MODE_T
54
5852c051
JB
55AC_CHECK_LIB(m, main)
56AC_CHECK_FUNC(gethostbyname)
57if test $ac_cv_func_gethostbyname = no; then
58 AC_CHECK_LIB(nsl, gethostbyname)
59fi
60AC_CHECK_FUNC(connect)
61if test $ac_cv_func_connect = no; then
62 AC_CHECK_LIB(socket, connect)
63fi
81e9e32f
JB
64AC_CHECK_LIB(termcap, tgoto)
65AC_CHECK_LIB(readline, readline)
5852c051 66
90fcac06
JB
67# Checks for dynamic linking
68
5852c051
JB
69if test "$enable_dynamic_linking" = "yes"; then
70
71AC_CHECK_LIB(dl,dlopen)
72if test "$ac_cv_lib_dl_dlopen" = "yes"; then
5852c051
JB
73 AC_DEFINE(DYNAMIC_LINKING)
74else
75AC_CHECK_LIB(dld,dld_link)
76if test "$ac_cv_lib_dld_dld_link" = "yes"; then
5852c051
JB
77 AC_DEFINE(DYNAMIC_LINKING)
78else
79AC_CHECK_FUNCS(shl_load)
80if test "$ac_cv_func_shl_load" = "yes"; then
81 AC_DEFINE(DYNAMIC_LINKING)
a4995389
MV
82else
83AC_CHECK_FUNCS(dlopen)
84if test "$ac_cv_func_dlopen" = "yes"; then
85 AC_DEFINE(DYNAMIC_LINKING)
86fi
5852c051
JB
87fi
88fi
89fi
90
91fi
92
2a0d7176 93GUILE_DLSYM_USCORE
5852c051 94
933a7411 95AC_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)
e1a191a8 96
da88f0cb
JB
97dnl <GNU-WIN32 hacks>
98
99AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
100if test -n "$have_sys_un_h" ; then
101AC_DEFINE(HAVE_UNIX_DOMAIN_SOCKETS)
102fi
103
104AC_CHECK_FUNCS(socketpair getgroups setpwent pause tzset)
105
f4e5b810
GH
106dnl I don't know what this prefixing of cygwin32_ is for.
107dnl scmconfig.h wasn't updated with the test results.
108dnl so use AC_CHECK_FUNCS for now.
109
110dnl how about:
111dnl save confdefs.h
112dnl if test $ac_cv_cigwin = yes; then
113dnl modify confdefs.h
114dnl fi
115dnl AC_CHECK_FUNCS...
116dnl restore confdefs.h
117
118dnl cp confdefs.h confdefs.h.bak
119dnl for func in sethostent endhostent getnetent setnetent endnetent getprotoent endprotoent getservent endservent getnetbyaddr getnetbyname inet_lnaof inet_makeaddr inet_netof ; do
120dnl cp confdefs.h.bak confdefs.h
121dnl cat >> confdefs.h << EOF
122dnl #ifdef __CYGWIN32__
123dnl #define $func cygwin32_$func
124dnl #endif
125dnl EOF
126dnl AC_CHECK_FUNC($func)
127dnl done
128dnl cp confdefs.h.bak confdefs.h
129
130AC_CHECK_FUNCS(sethostent endhostent getnetent setnetent endnetent getprotoent endprotoent getservent endservent getnetbyaddr getnetbyname inet_lnaof inet_makeaddr inet_netof)
da88f0cb
JB
131
132dnl </GNU-WIN32 hacks>
133
e1a191a8
GH
134AC_CACHE_CHECK([for restartable system calls], scm_cv_restarts,
135 if test $ac_cv_func_sigaction = yes; then
136 [AC_TRY_COMPILE([#include <signal.h>],
137 [int a = SA_RESTART],
138 scm_cv_restarts=yes,
139 scm_cv_restarts=no)]
140 else
141 scm_cv_restarts=no
142 fi)
143if test $scm_cv_restarts = yes; then
144 AC_DEFINE(HAVE_RESTARTS)
145fi
146
e9cd5d2f
MD
147if test "$ac_cv_header_regex_h" = yes ||
148 test "$ac_cv_header_rxposix_h" = yes ||
149 test "$ac_cv_header_rx_rxposix_h" = yes; then
0b89e78e
MD
150 GUILE_NAMED_CHECK_FUNC(regcomp, norx, [LIBOBJS="regex-posix.o $LIBOBJS"],
151 [AC_CHECK_LIB(rx, main)
152 GUILE_NAMED_CHECK_FUNC(regcomp, rx, [LIBOBJS="regex-posix.o $LIBOBJS"])]
153 )
e9cd5d2f
MD
154 dnl The following should not be necessary, but for some reason
155 dnl autoheader misses it if we don't include it!
0b89e78e
MD
156 if test "$ac_cv_func_regcomp_norx" = yes ||
157 test "$ac_cv_func_regcomp_rx" = yes; then
e9cd5d2f
MD
158 AC_DEFINE(HAVE_REGCOMP)
159 fi
da88f0cb 160fi
8e1bfcd0 161
3a629497
JB
162AC_REPLACE_FUNCS(inet_aton putenv strerror)
163
4a5fa91c
TP
164# When testing for the presence of alloca, we need to add alloca.o
165# explicitly to LIBOBJS to make sure that it is translated to
166# `alloca.lo' for libtool later on. This can and should be done more cleanly.
3a629497 167AC_FUNC_ALLOCA
4a5fa91c 168if test "$ALLOCA" = "alloca.o"; then LIBOBJS="alloca.o $LIBOBJS"; fi
3a629497
JB
169
170AC_STRUCT_ST_RDEV
171AC_STRUCT_ST_BLKSIZE
075edbde
JB
172
173# We could use AC_STRUCT_ST_BLOCKS here, but that adds fileblocks.o to
174# LIBOBJS, which we don't need. This seems more direct.
175AC_CACHE_CHECK([for st_blocks in struct stat], ac_cv_struct_st_blocks,
176[AC_TRY_COMPILE([#include <sys/types.h>
177#include <sys/stat.h>], [struct stat s; s.st_blocks;],
178ac_cv_struct_st_blocks=yes, ac_cv_struct_st_blocks=no)])
179if test $ac_cv_struct_st_blocks = yes; then
180 AC_DEFINE(HAVE_ST_BLOCKS)
181fi
182
3a629497
JB
183AC_STRUCT_TIMEZONE
184GUILE_STRUCT_UTIMBUF
185
3a629497
JB
186#--------------------------------------------------------------------
187#
188# Which way does the stack grow?
189#
190#--------------------------------------------------------------------
191
192AC_TRY_RUN(aux (l) unsigned long l;
193 { int x; exit (l >= ((unsigned long)&x)); }
194 main () { int q; aux((unsigned long)&q); },
195 AC_DEFINE(SCM_STACK_GROWS_UP),,AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h.in))
196
197
198AC_TRY_RUN(main () { exit (sizeof(float) != sizeof(long)); },
199 AC_DEFINE(SCM_SINGLES),,AC_DEFINE(SCM_SINGLES)
200 AC_MSG_WARN(Guessing that sizeof(long) == sizeof(float) -- see scmconfig.h.in))
201
202AC_MSG_CHECKING(for struct linger)
203AC_CACHE_VAL(scm_cv_struct_linger,
204 AC_TRY_COMPILE([
205#include <sys/types.h>
206#include <sys/socket.h>],
207 [struct linger lgr; lgr.l_linger = 100],
208 scm_cv_struct_linger="yes",
209 scm_cv_struct_linger="no"))
210AC_MSG_RESULT($scm_cv_struct_linger)
211if test $scm_cv_struct_linger = yes; then
212 AC_DEFINE(HAVE_STRUCT_LINGER)
213fi
214
215#--------------------------------------------------------------------
216#
217# How can you violate a stdio abstraction by setting a stream's fd?
218#
219#--------------------------------------------------------------------
220
221AC_MSG_CHECKING(how to set a stream file descriptor)
222AC_CACHE_VAL(scm_cv_fd_setter,
223 AC_TRY_COMPILE([#include <stdio.h>],
224 [stdout->_file = 1],
225 scm_cv_fd_setter="_file",
226 AC_TRY_COMPILE([#include <stdio.h>],
227 [stdout->_fileno = 1],
228 scm_cv_fd_setter="_fileno",
229 scm_cv_fd_setter="")))
230
231if test "$scm_cv_fd_setter"; then
232 AC_MSG_RESULT($scm_cv_fd_setter)
233 AC_DEFINE_UNQUOTED(FD_SETTER, $scm_cv_fd_setter)
234else
235 AC_MSG_RESULT(we couldn't do it!)
236fi
237
238#--------------------------------------------------------------------
239# How to find out whether a FILE structure contains buffered data.
240# From Tk we have the following list:
241# _cnt: Most UNIX systems
242# __cnt: HPUX
243# _r: BSD
244# readCount: Sprite
245# Or, in GNU libc there are two fields, _gptr and _egptr, which
246# have to be compared.
247# These can also be known as _IO_read_ptr and _IO_read_end.
248#--------------------------------------------------------------------
249
250AC_MSG_CHECKING(how to get buffer char count from FILE structure)
251AC_CACHE_VAL(scm_cv_struct_file_count,
252 AC_TRY_COMPILE([#include <stdio.h>],
253 [FILE *f = stdin; f->_cnt = 0],
254 scm_cv_struct_file_count="_cnt",
255 AC_TRY_COMPILE([#include <stdio.h>],
256 [FILE *f = stdin; f->_r = 0],
257 scm_cv_struct_file_count="_r",
258 AC_TRY_COMPILE([#include <stdio.h>],
259 [FILE *f = stdin; f->readCount = 0],
260 scm_cv_struct_file_count="readCount",
261 scm_cv_struct_file_count=""))))
262if test "$scm_cv_struct_file_count"; then
263 AC_MSG_RESULT($scm_cv_struct_file_count)
264 AC_DEFINE_UNQUOTED(FILE_CNT_FIELD, $scm_cv_struct_file_count)
265else
266AC_CACHE_VAL(scm_cv_struct_file_gptr,
267 AC_TRY_COMPILE([#include <stdio.h>],
268 [FILE *f = stdin; f->_gptr = f->egptr;],
269 scm_cv_struct_file_gptr=1,
270 scm_cv_struct_file_gptr=""))
271if test "$scm_cv_struct_gptr"; then
272 AC_MSG_RESULT(gptr)
273 AC_DEFINE_UNQUOTED(FILE_CNT_GPTR, $scm_cv_struct_file_gptr)
274else
275AC_CACHE_VAL(scm_cv_struct_file_readptr,
276 AC_TRY_COMPILE([#include <stdio.h>],
277 [FILE *f = stdin; f->_IO_read_ptr = f->_IO_read_end;],
278 scm_cv_struct_file_readptr=1))
279if test "$scm_cv_struct_file_readptr"; then
280 AC_MSG_RESULT(read_ptr)
281 AC_DEFINE_UNQUOTED(FILE_CNT_READPTR, $scm_cv_struct_file_readptr)
282else
283 AC_MSG_RESULT(we couldn't do it!)
284fi
285fi
286fi
287
288#--------------------------------------------------------------------
289#
290# Flags for thread support
291#
292#--------------------------------------------------------------------
293
294CY_AC_WITH_THREADS
295CFLAGS="$CFLAGS $cy_cv_threads_cflags"
296THREAD_LIBS="$cy_cv_threads_libs"
297AC_SUBST(THREAD_LIBS)
298
299dnl
300dnl Set the appropriate flags!
301dnl
302if test "$cy_cv_threads_package" = FSU; then
303 AC_DEFINE(USE_FSU_PTHREADS, 1)
304 else if test "$cy_cv_threads_package" = COOP; then
305 AC_DEFINE(USE_COOP_THREADS, 1)
306 else if test "$cy_cv_threads_package" = MIT; then
307 AC_DEFINE(USE_MIT_PTHREADS, 1)
308 else if test "$cy_cv_threads_package" = PCthreads; then
309 AC_DEFINE(USE_PCTHREADS_PTHREADS, 1)
310 else if test "$cy_cv_threads_package" = unknown; then
311 AC_MSG_ERROR("cannot find threads installation")
312 fi
313 fi
314 fi
0f2d19dd 315 fi
3a629497
JB
316fi
317
318if test "$cy_cv_threads_package" != ""; then
319 AC_DEFINE(USE_THREADS)
320 LIBOBJS="$LIBOBJS threads.o"
321fi
322
933a7411
MD
323#--------------------------------------------------------------------
324#
325# scm_internal_select
326#
327#--------------------------------------------------------------------
328
329if test "$cy_cv_threads_package" != "" &&
330 test $ac_cv_func_gettimeofday = yes &&
331 test $ac_cv_func_select = yes; then
332 AC_DEFINE(GUILE_ISELECT, 1)
333 LIBOBJS="$LIBOBJS iselect.o"
334fi
335
3a629497
JB
336## If we're using GCC, ask for aggressive warnings.
337case "$GCC" in
338 yes ) CFLAGS="$CFLAGS -Wall -Wpointer-arith" ;;
339esac
340
341AC_PROG_AWK
342
343## If we're creating a shared library (using libtool!), then we'll
344## need to generate a list of .lo files corresponding to the .o files
345## given in LIBOBJS. We'll call it LIBLOBJS.
346LIBLOBJS="`echo ${LIBOBJS} | sed 's/\.o/.lo/g'`"
347
7c86ae05
JB
348AC_SUBST(GUILE_MAJOR_VERSION)
349AC_SUBST(GUILE_MINOR_VERSION)
350AC_SUBST(GUILE_VERSION)
351
352dnl timestamping the interpreter and scheme libraries:
353dnl
354dnl Help us notice when we're running one version of the Guile
355dnl interpreter against a different version of the ice-9 Scheme code.
356dnl This will definitely detect version skew due to differing
357dnl snapshots and releases, but may not catch skew for the developers.
358dnl Hopefully it will not detect skew when there is none; if that
359dnl happens, the warnings will be useless, and we should remove this.
360GUILE_STAMP="`date`"
361AC_SUBST(GUILE_STAMP)
3a629497
JB
362
363AC_SUBST(AWK)
364AC_SUBST(LIBLOBJS)
365
366
367dnl ======================================================================
368dnl configuration for the Qt package
369dnl ======================================================================
370
371threads_enabled=false
372if test "$cy_cv_threads_package" = COOP; then
373 threads_enabled=true
374fi
375
376# Determine the host we are working on
377AC_CANONICAL_HOST
378
77c7a433
JB
379# How can we refer to the qt source directory from within the qt build
380# directory? For headers, we can rely on the fact that the qt src
381# directory appears in the #include path.
382
383qtsrcdir="`(cd $srcdir; pwd)`/qt"
384
3a629497
JB
385changequote(,)dnl We use [ and ] in a regexp in the case
386case "$host" in
387i[3456]86-*-*)
77c7a433
JB
388 qtmds_s=$qtsrcdir/md/i386.s
389 qtmd_h=md/i386.h
390 qtmdc_c=$qtsrcdir/md/null.c
3a629497 391 ;;
894e484e 392mips-sgi-irix[56]*)
77c7a433
JB
393 qtmds_s=$qtsrcdir/md/mips-irix5.s
394 qtmd_h=md/mips.h
395 qtmdc_c=$qtsrcdir/md/null.c
396 qtdmdb_s=$qtsrcdir/md/mips_b.s
3a629497
JB
397 ;;
398mips-*-*)
77c7a433
JB
399 qtmds_s=$qtsrcdir/md/mips.s
400 qtmd_h=md/mips.h
401 qtmdc_c=$qtsrcdir/md/null.c
402 qtdmdb_s=$qtsrcdir/md/mips_b.s
3a629497 403 ;;
2a18e748 404sparc-*-sunos*)
77c7a433
JB
405 qtmd_h=md/sparc.h
406 qtmdc_c=$qtsrcdir/md/null.c
2a18e748
JB
407 qtmds_s=$qtsrcdir/md/_sparc.s
408 qtdmdb_s=$qtsrcdir/md/_sparc_b.s
3a629497
JB
409 ;;
410sparc-*-*)
77c7a433
JB
411 qtmd_h=md/sparc.h
412 qtmdc_c=$qtsrcdir/md/null.c
2a18e748
JB
413 qtmds_s=$qtsrcdir/md/sparc.s
414 qtdmdb_s=$qtsrcdir/md/sparc_b.s
3a629497 415 ;;
757cfb94
MD
416alpha-*-*)
417 qtmd_h=md/axp.h
418 qtmdc_c=$qtsrcdir/md/null.c
419 qtmds_s=$qtsrcdir/md/axp.s
420 qtdmdb_s=$qtsrcdir/md/axp_b.s
421 ;;
3a629497
JB
422*)
423 echo "Unknown configuration; threads package disabled"
424 threads_enabled=false
425 ;;
426esac
427changequote([, ])
428
429
430if $threads_enabled; then
51e6b883 431 target_libs=libqthreads.a
3a629497
JB
432else
433 target_libs=
434fi
435
436# Give the Makefile the names of the object files that will be
437# generated by compiling $qtmdc_c and $qtmds_s.
438qtmdc_o="`echo ${qtmdc_c} | sed -e 's:^.*/::' | sed -e 's:\.c$:\.o:'`"
439qtmds_o="`echo ${qtmds_s} | sed -e 's:^.*/::' | sed -e 's:\.s$:\.o:'`"
440
441AC_SUBST(target_libs)
442AC_SUBST(qtmd_h)
443AC_SUBST(qtmdc_c)
444AC_SUBST(qtmdc_o)
445AC_SUBST(qtmds_s)
446AC_SUBST(qtmds_o)
447AC_SUBST(qtmdb_s)
0f2d19dd 448
9ba3d403 449AC_OUTPUT([Makefile libguile/Makefile libguile/guile-snarf ice-9/Makefile ice-9/version.scm qt/Makefile qt/qt.h qt/md/Makefile qt/time/Makefile build/Makefile], [chmod +x libguile/guile-snarf])
0f2d19dd 450
3a629497
JB
451dnl Local Variables:
452dnl comment-start: "dnl "
453dnl comment-end: ""
454dnl comment-start-skip: "\\bdnl\\b\\s *"
455dnl End: