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