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