* threads.m4: Copy Anthony's change here, so it'll actually
[bpt/guile.git] / configure.in
1 dnl Process this file with autoconf to produce configure.
2 AC_INIT(Makefile.in)
3 . $srcdir/GUILE-VERSION
4 AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
5 AM_MAINTAINER_MODE
6 AM_CONFIG_HEADER(libguile/scmconfig.h)
7
8 #--------------------------------------------------------------------
9 #
10 # User options
11 #
12 #--------------------------------------------------------------------
13
14 AC_ARG_ENABLE(debug,
15 [ --disable-debug Don't include debugging support])
16 if 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"
20 fi
21
22 AC_ARG_ENABLE(dynamic-linking,
23 [ --enable-dynamic-linking Include support for dynamic linking])
24
25 AC_ARG_ENABLE(guile-debug,
26 [ --enable-guile-debug Include internal debugging functions])
27 if test "$enableval" = y || test "$enableval" = yes; then
28 AC_DEFINE(GUILE_DEBUG)
29 fi
30
31 #--------------------------------------------------------------------
32
33 AC_PROG_CC
34 AC_PROG_CPP
35 AM_PROG_LIBTOOL
36
37 AC_AIX
38 AC_ISC_POSIX
39 AC_MINIX
40
41 AC_C_CONST
42
43 AC_HEADER_STDC
44 AC_HEADER_DIRENT
45 AC_HEADER_TIME
46 AC_HEADER_SYS_WAIT
47 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)
48 GUILE_HEADER_LIBC_WITH_UNISTD
49
50 AC_TYPE_GETGROUPS
51 AC_TYPE_SIGNAL
52 AC_TYPE_MODE_T
53
54 AC_CHECK_FUNCS(ctermid ftime getcwd geteuid gethostent gettimeofday lstat mkdir mknod nice readlink rename rmdir select setegid seteuid setlocale setpgid setsid strftime strptime symlink sync tcgetpgrp tcsetpgrp times uname waitpid)
55
56 AC_REPLACE_FUNCS(inet_aton putenv strerror)
57
58 AC_FUNC_ALLOCA
59
60 AC_STRUCT_ST_RDEV
61 AC_STRUCT_ST_BLKSIZE
62 AC_STRUCT_ST_BLOCKS
63 AC_STRUCT_TIMEZONE
64 GUILE_STRUCT_UTIMBUF
65
66 # Checks for dynamic linking
67
68 xtra_PLUGIN_guile_libs=""
69 AC_SUBST(xtra_PLUGIN_guile_libs)
70
71 AC_CHECK_LIB(m, main)
72 AC_CHECK_LIB(socket, main)
73 AC_CHECK_LIB(nsl, main)
74
75 if test "$enable_dynamic_linking" = "yes"; then
76
77 AC_CHECK_LIB(dl,dlopen)
78 if test "$ac_cv_lib_dl_dlopen" = "yes"; then
79 xtra_PLUGIN_guile_libs="-lguile -ldl"
80 AC_DEFINE(DYNAMIC_LINKING)
81 else
82 AC_CHECK_LIB(dld,dld_link)
83 if test "$ac_cv_lib_dld_dld_link" = "yes"; then
84 xtra_PLUGIN_guile_libs="-lguile -ldld"
85 AC_DEFINE(DYNAMIC_LINKING)
86 else
87 AC_CHECK_FUNCS(shl_load)
88 if test "$ac_cv_func_shl_load" = "yes"; then
89 AC_DEFINE(DYNAMIC_LINKING)
90 fi
91 fi
92 fi
93
94 fi
95
96 #--------------------------------------------------------------------
97 #
98 # Which way does the stack grow?
99 #
100 #--------------------------------------------------------------------
101
102 AC_TRY_RUN(aux (l) unsigned long l;
103 { int x; exit (l >= ((unsigned long)&x)); }
104 main () { int q; aux((unsigned long)&q); },
105 AC_DEFINE(SCM_STACK_GROWS_UP),,AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h.in))
106
107
108 AC_TRY_RUN(main () { exit (sizeof(float) != sizeof(long)); },
109 AC_DEFINE(SCM_SINGLES),,AC_DEFINE(SCM_SINGLES)
110 AC_MSG_WARN(Guessing that sizeof(long) == sizeof(float) -- see scmconfig.h.in))
111
112 AC_MSG_CHECKING(for struct linger)
113 AC_CACHE_VAL(scm_cv_struct_linger,
114 AC_TRY_COMPILE([
115 #include <sys/types.h>
116 #include <sys/socket.h>],
117 [struct linger lgr; lgr.l_linger = 100],
118 scm_cv_struct_linger="yes",
119 scm_cv_struct_linger="no"))
120 AC_MSG_RESULT($scm_cv_struct_linger)
121 if test $scm_cv_struct_linger = yes; then
122 AC_DEFINE(HAVE_STRUCT_LINGER)
123 fi
124
125 #--------------------------------------------------------------------
126 #
127 # How can you violate a stdio abstraction by setting a stream's fd?
128 #
129 #--------------------------------------------------------------------
130
131 AC_MSG_CHECKING(how to set a stream file descriptor)
132 AC_CACHE_VAL(scm_cv_fd_setter,
133 AC_TRY_COMPILE([#include <stdio.h>],
134 [stdout->_file = 1],
135 scm_cv_fd_setter="_file",
136 AC_TRY_COMPILE([#include <stdio.h>],
137 [stdout->_fileno = 1],
138 scm_cv_fd_setter="_fileno",
139 scm_cv_fd_setter="")))
140
141 if test "$scm_cv_fd_setter"; then
142 AC_MSG_RESULT($scm_cv_fd_setter)
143 AC_DEFINE_UNQUOTED(FD_SETTER, $scm_cv_fd_setter)
144 else
145 AC_MSG_RESULT(we couldn't do it!)
146 fi
147
148 #--------------------------------------------------------------------
149 # How to find out whether a FILE structure contains buffered data.
150 # From Tk we have the following list:
151 # _cnt: Most UNIX systems
152 # __cnt: HPUX
153 # _r: BSD
154 # readCount: Sprite
155 # Or, in GNU libc there are two fields, _gptr and _egptr, which
156 # have to be compared.
157 # These can also be known as _IO_read_ptr and _IO_read_end.
158 #--------------------------------------------------------------------
159
160 AC_MSG_CHECKING(how to get buffer char count from FILE structure)
161 AC_CACHE_VAL(scm_cv_struct_file_count,
162 AC_TRY_COMPILE([#include <stdio.h>],
163 [FILE *f = stdin; f->_cnt = 0],
164 scm_cv_struct_file_count="_cnt",
165 AC_TRY_COMPILE([#include <stdio.h>],
166 [FILE *f = stdin; f->_r = 0],
167 scm_cv_struct_file_count="_r",
168 AC_TRY_COMPILE([#include <stdio.h>],
169 [FILE *f = stdin; f->readCount = 0],
170 scm_cv_struct_file_count="readCount",
171 scm_cv_struct_file_count=""))))
172 if test "$scm_cv_struct_file_count"; then
173 AC_MSG_RESULT($scm_cv_struct_file_count)
174 AC_DEFINE_UNQUOTED(FILE_CNT_FIELD, $scm_cv_struct_file_count)
175 else
176 AC_CACHE_VAL(scm_cv_struct_file_gptr,
177 AC_TRY_COMPILE([#include <stdio.h>],
178 [FILE *f = stdin; f->_gptr = f->egptr;],
179 scm_cv_struct_file_gptr=1,
180 scm_cv_struct_file_gptr=""))
181 if test "$scm_cv_struct_gptr"; then
182 AC_MSG_RESULT(gptr)
183 AC_DEFINE_UNQUOTED(FILE_CNT_GPTR, $scm_cv_struct_file_gptr)
184 else
185 AC_CACHE_VAL(scm_cv_struct_file_readptr,
186 AC_TRY_COMPILE([#include <stdio.h>],
187 [FILE *f = stdin; f->_IO_read_ptr = f->_IO_read_end;],
188 scm_cv_struct_file_readptr=1))
189 if test "$scm_cv_struct_file_readptr"; then
190 AC_MSG_RESULT(read_ptr)
191 AC_DEFINE_UNQUOTED(FILE_CNT_READPTR, $scm_cv_struct_file_readptr)
192 else
193 AC_MSG_RESULT(we couldn't do it!)
194 fi
195 fi
196 fi
197
198 #--------------------------------------------------------------------
199 #
200 # Flags for thread support
201 #
202 #--------------------------------------------------------------------
203
204 CY_AC_WITH_THREADS
205 CFLAGS="$CFLAGS $cy_cv_threads_cflags"
206 THREAD_LIBS="$cy_cv_threads_libs"
207 AC_SUBST(THREAD_LIBS)
208
209 dnl
210 dnl Set the appropriate flags!
211 dnl
212 if test "$cy_cv_threads_package" = FSU; then
213 AC_DEFINE(USE_FSU_PTHREADS, 1)
214 else if test "$cy_cv_threads_package" = COOP; then
215 AC_DEFINE(USE_COOP_THREADS, 1)
216 else if test "$cy_cv_threads_package" = MIT; then
217 AC_DEFINE(USE_MIT_PTHREADS, 1)
218 else if test "$cy_cv_threads_package" = PCthreads; then
219 AC_DEFINE(USE_PCTHREADS_PTHREADS, 1)
220 else if test "$cy_cv_threads_package" = unknown; then
221 AC_MSG_ERROR("cannot find threads installation")
222 fi
223 fi
224 fi
225 fi
226 fi
227
228 if test "$cy_cv_threads_package" != ""; then
229 AC_DEFINE(USE_THREADS)
230 LIBOBJS="$LIBOBJS threads.o"
231 fi
232
233 ## If we're using GCC, ask for aggressive warnings.
234 case "$GCC" in
235 yes ) CFLAGS="$CFLAGS -Wall -Wpointer-arith" ;;
236 esac
237
238 AC_PROG_AWK
239
240 ## If we're creating a shared library (using libtool!), then we'll
241 ## need to generate a list of .lo files corresponding to the .o files
242 ## given in LIBOBJS. We'll call it LIBLOBJS.
243 LIBLOBJS="`echo ${LIBOBJS} | sed 's/\.o/.lo/g'`"
244
245 AC_DEFINE_UNQUOTED(GUILE_MAJOR_VERSION, "$GUILE_MAJOR_VERSION")
246 AC_DEFINE_UNQUOTED(GUILE_MINOR_VERSION, "$GUILE_MINOR_VERSION")
247 AC_DEFINE_UNQUOTED(GUILE_VERSION, "$GUILE_VERSION")
248
249 AC_SUBST(AWK)
250 AC_SUBST(LIBLOBJS)
251
252
253 dnl ======================================================================
254 dnl configuration for the Qt package
255 dnl ======================================================================
256
257 threads_enabled=false
258 if test "$cy_cv_threads_package" = COOP; then
259 threads_enabled=true
260 fi
261
262 # Determine the host we are working on
263 AC_CANONICAL_HOST
264
265 # How can we refer to the qt source directory from within the qt build
266 # directory? For headers, we can rely on the fact that the qt src
267 # directory appears in the #include path.
268
269 qtsrcdir="`(cd $srcdir; pwd)`/qt"
270
271 changequote(,)dnl We use [ and ] in a regexp in the case
272 case "$host" in
273 i[3456]86-*-*)
274 qtmds_s=$qtsrcdir/md/i386.s
275 qtmd_h=md/i386.h
276 qtmdc_c=$qtsrcdir/md/null.c
277 ;;
278 mips-sgi-irix5*)
279 qtmds_s=$qtsrcdir/md/mips-irix5.s
280 qtmd_h=md/mips.h
281 qtmdc_c=$qtsrcdir/md/null.c
282 qtdmdb_s=$qtsrcdir/md/mips_b.s
283 ;;
284 mips-*-*)
285 qtmds_s=$qtsrcdir/md/mips.s
286 qtmd_h=md/mips.h
287 qtmdc_c=$qtsrcdir/md/null.c
288 qtdmdb_s=$qtsrcdir/md/mips_b.s
289 ;;
290 sparc-*-sunos*)
291 qtmd_h=md/sparc.h
292 qtmdc_c=$qtsrcdir/md/null.c
293 qtmds_s=$qtsrcdir/md/_sparc.s
294 qtdmdb_s=$qtsrcdir/md/_sparc_b.s
295 ;;
296 sparc-*-*)
297 qtmd_h=md/sparc.h
298 qtmdc_c=$qtsrcdir/md/null.c
299 qtmds_s=$qtsrcdir/md/sparc.s
300 qtdmdb_s=$qtsrcdir/md/sparc_b.s
301 ;;
302 *)
303 echo "Unknown configuration; threads package disabled"
304 threads_enabled=false
305 ;;
306 esac
307 changequote([, ])
308
309
310 if $threads_enabled; then
311 target_libs=libqt.a
312 else
313 target_libs=
314 fi
315
316 # Give the Makefile the names of the object files that will be
317 # generated by compiling $qtmdc_c and $qtmds_s.
318 qtmdc_o="`echo ${qtmdc_c} | sed -e 's:^.*/::' | sed -e 's:\.c$:\.o:'`"
319 qtmds_o="`echo ${qtmds_s} | sed -e 's:^.*/::' | sed -e 's:\.s$:\.o:'`"
320
321 AC_SUBST(target_libs)
322 AC_SUBST(qtmd_h)
323 AC_SUBST(qtmdc_c)
324 AC_SUBST(qtmdc_o)
325 AC_SUBST(qtmds_s)
326 AC_SUBST(qtmds_o)
327 AC_SUBST(qtmdb_s)
328
329 AC_OUTPUT([Makefile libguile/Makefile libguile/guile-snarf ice-9/Makefile qt/Makefile qt/qt.h qt/md/Makefile qt/time/Makefile], [chmod +x libguile/guile-snarf])
330
331 dnl Local Variables:
332 dnl comment-start: "dnl "
333 dnl comment-end: ""
334 dnl comment-start-skip: "\\bdnl\\b\\s *"
335 dnl End: