c8c3189d63747e1c0590254739dd016f4b099691
[bpt/guile.git] / libguile / configure.in
1 AC_INIT(eval.c)
2 AM_CONFIG_HEADER(scmconfig.h)
3 AM_INIT_GUILE_MODULE(libguile)
4
5 #--------------------------------------------------------------------
6 #
7 # User options
8 #
9 #--------------------------------------------------------------------
10
11 AC_ARG_ENABLE(debug,
12 [ --disable-debug Don't include debugging support])
13 if test "$enableval" != n && test "$enableval" != no; then
14 AC_DEFINE(DEBUG_EXTENSIONS)
15 AC_DEFINE(READER_EXTENSIONS)
16 LIBOBJS="backtrace.o stacks.o debug.o srcprop.o $LIBOBJS"
17 fi
18
19 AC_ARG_ENABLE(dynamic-linking,
20 [ --enable-dynamic-linking Include support for dynamic linking])
21
22 #--------------------------------------------------------------------
23
24 AC_PROG_CC
25 AC_PROG_CPP
26 AM_PROG_LIBTOOL
27
28 AC_AIX
29 AC_ISC_POSIX
30 AC_MINIX
31
32 CY_AC_WITH_THREADS
33
34 AC_C_CONST
35
36 AC_HEADER_STDC
37 AC_HEADER_DIRENT
38 AC_HEADER_TIME
39 AC_HEADER_SYS_WAIT
40 AC_CHECK_HEADERS(libc.h limits.h malloc.h memory.h string.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)
41 GUILE_HEADER_LIBC_WITH_UNISTD
42
43 AC_TYPE_GETGROUPS
44 AC_TYPE_SIGNAL
45 AC_TYPE_MODE_T
46
47 AC_CHECK_FUNCS(ctermid ftime getcwd geteuid lstat mkdir mknod nice putenv readlink rename rmdir select setegid seteuid setlocale setpgid setsid strftime strptime symlink sync tcgetpgrp tcsetpgrp times uname waitpid)
48
49 AC_REPLACE_FUNCS(inet_aton strerror)
50
51 AC_STRUCT_ST_RDEV
52 AC_STRUCT_ST_BLKSIZE
53 AC_STRUCT_ST_BLOCKS
54 GUILE_STRUCT_UTIMBUF
55
56 # Checks for dynamic linking
57
58 xtra_PLUGIN_guile_libs=""
59 AC_SUBST(xtra_PLUGIN_guile_libs)
60
61 if test "$enable_dynamic_linking" = "yes"; then
62
63 AC_CHECK_LIB(dl,dlopen)
64 if test "$ac_cv_lib_dl_dlopen" = "yes"; then
65 xtra_PLUGIN_guile_libs="-lguile -ldl"
66 AC_DEFINE(DYNAMIC_LINKING)
67 else
68 AC_CHECK_LIB(dld,dld_link)
69 if test "$ac_cv_lib_dld_dld_link" = "yes"; then
70 xtra_PLUGIN_guile_libs="-lguile -ldld"
71 AC_DEFINE(DYNAMIC_LINKING)
72 else
73 AC_CHECK_FUNCS(shl_load)
74 if test "$ac_cv_func_shl_load" = "yes"; then
75 AC_DEFINE(DYNAMIC_LINKING)
76 fi fi fi
77
78 fi
79
80 #--------------------------------------------------------------------
81 #
82 # Which way does the stack grow?
83 #
84 #--------------------------------------------------------------------
85
86 AC_TRY_RUN(aux (l) unsigned long l;
87 { int x; exit (l >= ((unsigned long)&x)); }
88 main () { int q; aux((unsigned long)&q); },
89 AC_DEFINE(SCM_STACK_GROWS_UP),,AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h.in))
90
91
92 AC_TRY_RUN(main () { exit (sizeof(float) != sizeof(long)); },
93 AC_DEFINE(SCM_SINGLES),,AC_DEFINE(SCM_SINGLES)
94 AC_MSG_WARN(Guessing that sizeof(long) == sizeof(float) -- see scmconfig.h.in))
95
96 AC_MSG_CHECKING(for struct linger)
97 AC_CACHE_VAL(scm_cv_struct_linger,
98 AC_TRY_COMPILE([
99 #include <sys/types.h>
100 #include <sys/socket.h>],
101 [struct linger lgr; lgr.l_linger = 100],
102 scm_cv_struct_linger="yes",
103 scm_cv_struct_linger="no"))
104 AC_MSG_RESULT($scm_cv_struct_linger)
105 if test $scm_cv_struct_linger = yes; then
106 AC_DEFINE(HAVE_STRUCT_LINGER)
107 fi
108
109 #--------------------------------------------------------------------
110 #
111 # How can you violate a stdio abstraction by setting a stream's fd?
112 #
113 #--------------------------------------------------------------------
114
115 FD_SETTER=""
116
117 if test "x$FD_SETTER" = x; then
118 AC_TRY_COMPILE(#include <stdio.h>
119 , stdout->_file = 1,
120 FD_SETTER="((F)->_file = (D))")
121 fi
122
123 if test "x$FD_SETTER" = x; then
124 AC_TRY_COMPILE(#include <stdio.h>
125 , stdout->_fileno,
126 FD_SETTER="((F)->_fileno = (D))")
127 fi
128
129 dnl
130 dnl Add FD_SETTER tests for other systems here. Your test should
131 dnl try a particular style of assigning to the descriptor
132 dnl field(s) of a FILE* and define FD_SETTER accordingly.
133 dnl
134 dnl The value of FD_SETTER is used as a macro body, as in:
135 dnl
136 dnl #define SET_FILE_FD_FIELD(F,D) @FD_SETTER@
137 dnl
138 dnl F is a FILE* and D a descriptor (int).
139 dnl
140
141 test "x$FD_SETTER" != x && AC_DEFINE(HAVE_FD_SETTER)
142
143 #--------------------------------------------------------------------
144 # How to find out whether a FILE structure contains buffered data.
145 # From Tk we have the following list:
146 # _cnt: Most UNIX systems
147 # __cnt: HPUX
148 # _r: BSD
149 # readCount: Sprite
150 # Or, in GNU libc there are two fields, _gptr and _egptr, which
151 # have to be compared.
152 # These can also be known as _IO_read_ptr and _IO_read_end.
153 #--------------------------------------------------------------------
154
155 AC_MSG_CHECKING(how to get buffer char count from FILE structure)
156 AC_CACHE_VAL(scm_cv_struct_file_count,
157 AC_TRY_COMPILE([#include <stdio.h>],
158 [FILE *f = stdin; f->_cnt = 0],
159 scm_cv_struct_file_count="_cnt",
160 AC_TRY_COMPILE([#include <stdio.h>],
161 [FILE *f = stdin; f->_r = 0],
162 scm_cv_struct_file_count="_r",
163 AC_TRY_COMPILE([#include <stdio.h>],
164 [FILE *f = stdin; f->readCount = 0],
165 scm_cv_struct_file_count="readCount",
166 scm_cv_struct_file_count=""))))
167 if test "$scm_cv_struct_file_count"; then
168 AC_MSG_RESULT($scm_cv_struct_file_count)
169 AC_DEFINE_UNQUOTED(FILE_CNT_FIELD, $scm_cv_struct_file_count)
170 else
171 AC_CACHE_VAL(scm_cv_struct_file_gptr,
172 AC_TRY_COMPILE([#include <stdio.h>],
173 [FILE *f = stdin; f->_gptr = f->egptr;],
174 scm_cv_struct_file_gptr=1,
175 scm_cv_struct_file_gptr=""))
176 if test "$scm_cv_struct_gptr"; then
177 AC_MSG_RESULT(gptr)
178 AC_DEFINE_UNQUOTED(FILE_CNT_GPTR, $scm_cv_struct_file_gptr)
179 else
180 AC_CACHE_VAL(scm_cv_struct_file_readptr,
181 AC_TRY_COMPILE([#include <stdio.h>],
182 [FILE *f = stdin; f->_IO_read_ptr = f->_IO_read_end;],
183 scm_cv_struct_file_readptr=1))
184 if test "$scm_cv_struct_file_readptr"; then
185 AC_MSG_RESULT(read_ptr)
186 AC_DEFINE_UNQUOTED(FILE_CNT_READPTR, $scm_cv_struct_file_readptr)
187 fi
188 fi
189 fi
190
191 #--------------------------------------------------------------------
192 #
193 # Flags for thread support
194 #
195 #--------------------------------------------------------------------
196
197 dnl
198 dnl Set the appropriate flags!
199 dnl
200 if test "$cy_cv_threads_package" = FSU; then
201 AC_DEFINE(USE_FSU_PTHREADS, 1)
202 else if test "$cy_cv_threads_package" = COOP; then
203 AC_DEFINE(USE_COOP_THREADS, 1)
204 else if test "$cy_cv_threads_package" = MIT; then
205 AC_DEFINE(USE_MIT_PTHREADS, 1)
206 else if test "$cy_cv_threads_package" = PCthreads; then
207 AC_DEFINE(USE_PCTHREADS_PTHREADS, 1)
208 else if test "$cy_cv_threads_package" = unknown; then
209 AC_MSG_ERROR("cannot find threads installation")
210 fi
211 fi
212 fi
213 fi
214 fi
215
216 if test "$cy_cv_threads_package" != ""; then
217 AC_DEFINE(USE_THREADS)
218 fi
219
220 ## If we're using GCC, ask for aggressive warnings.
221 case "$GCC" in
222 yes ) CFLAGS="$CFLAGS -Wall -Wpointer-arith" ;;
223 esac
224
225 AC_PROG_AWK
226 AC_MSG_CHECKING(whether errno codes can be extracted from errno.h)
227 goterrnos=0
228 if test "$GCC" = yes ; then
229 ${CC-cc} -undef -dM -E $srcdir/errnos_get.c | egrep ' E.+' | cut -f2 -d' ' > errnos.list
230 egrep '^E.+' errnos.list > /dev/null 2>&1 && goterrnos=1
231 fi
232 if test $goterrnos = 1 ; then
233 AC_MSG_RESULT(yes)
234 else
235 cp $srcdir/errnos.default errnos.list
236 AC_MSG_RESULT([no, using default])
237 fi
238
239 AC_DEFINE_UNQUOTED(GUILE_MAJOR_VERSION, "$GUILE_MAJOR_VERSION")
240 AC_DEFINE_UNQUOTED(GUILE_MINOR_VERSION, "$GUILE_MINOR_VERSION")
241 AC_DEFINE_UNQUOTED(GUILE_VERSION, "$GUILE_VERSION")
242
243 AC_SUBST(FD_SETTER)
244 AC_OUTPUT([Makefile fd.h guile-snarf PLUGIN/guile.libs], [chmod +x guile-snarf])
245
246 dnl Local Variables:
247 dnl comment-start: "dnl "
248 dnl comment-end: ""
249 dnl comment-start-skip: "\\bdnl\\b\\s *"
250 dnl End: