* dynl.c: Only check that HAVE_DLOPEN is defined before loading
[bpt/guile.git] / configure.in
dissimilarity index 84%
index 0dfd707..69f685c 100644 (file)
-dnl Process this file with autoconf to produce configure.
-AC_INIT(Makefile.in)
-. $srcdir/GUILE-VERSION
-AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
-AM_MAINTAINER_MODE
-
-dnl FIXME: tsort, xargs not GNU standard.
-all_subdirs=`cat $srcdir/*/PLUGIN/REQ $srcdir/*/PLUGIN/OPT /dev/null | tsort | xargs echo`
-req_subdirs=`cat $srcdir/*/PLUGIN/REQ /dev/null | tsort | xargs echo`
-opt_subdirs=`cat $srcdir/*/PLUGIN/OPT /dev/null | tsort | xargs echo`
-
-AC_CONFIG_SUBDIRS($all_subdirs)
-for d in $all_subdirs; do
-  if test -d $srcdir/$d ; then
-    existingdirs="$existingdirs $d"
-    test -n "$silent" || echo Configuring plug-in component $d
-  fi
-done
-
-for d in $req_subdirs; do
-  test -d $srcdir/$d || {
-     echo ERROR: Missing required package: $d 1>&2
-     exit 1
-  }
-done
-
-AC_SUBST(existingdirs)
-AC_OUTPUT(Makefile newdoc/Makefile newdoc/ref/Makefile newdoc/tutorial/Makefile)
+dnl Process this file with autoconf to produce configure.
+AC_INIT(Makefile.in)
+. $srcdir/GUILE-VERSION
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
+AM_MAINTAINER_MODE
+AM_CONFIG_HEADER(libguile/scmconfig.h)
+
+#--------------------------------------------------------------------
+#
+# User options
+#
+#--------------------------------------------------------------------
+
+AC_ARG_ENABLE(debug,
+[  --disable-debug         Don't include debugging support])
+if test "$enableval" != n && test "$enableval" != no; then
+  AC_DEFINE(DEBUG_EXTENSIONS)
+  AC_DEFINE(READER_EXTENSIONS)
+  LIBOBJS="backtrace.o stacks.o debug.o srcprop.o $LIBOBJS"
+fi
+
+AC_ARG_ENABLE(dynamic-linking,
+  [  --enable-dynamic-linking  Include support for dynamic linking],,
+  enable_dynamic_linking=yes)
+
+AC_ARG_ENABLE(guile-debug,
+[  --enable-guile-debug    Include internal debugging functions])
+if test "$enableval" = y || test "$enableval" = yes; then
+  AC_DEFINE(GUILE_DEBUG)
+fi
+
+#--------------------------------------------------------------------
+
+AC_PROG_CC
+AC_PROG_CPP
+AM_PROG_LIBTOOL
+
+AC_AIX
+AC_ISC_POSIX
+AC_MINIX
+
+AC_C_CONST
+
+AC_HEADER_STDC
+AC_HEADER_DIRENT
+AC_HEADER_TIME
+AC_HEADER_SYS_WAIT
+AC_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)
+GUILE_HEADER_LIBC_WITH_UNISTD
+
+AC_TYPE_GETGROUPS
+AC_TYPE_SIGNAL
+AC_TYPE_MODE_T
+
+AC_CHECK_LIB(m, main)
+AC_CHECK_FUNC(gethostbyname)
+if test $ac_cv_func_gethostbyname = no; then
+    AC_CHECK_LIB(nsl, gethostbyname)
+fi
+AC_CHECK_FUNC(connect)
+if test $ac_cv_func_connect = no; then
+    AC_CHECK_LIB(socket, connect)
+fi
+AC_CHECK_LIB(termcap, tgoto)
+AC_CHECK_LIB(readline, readline)
+
+# Checks for dynamic linking
+
+if test "$enable_dynamic_linking" = "yes"; then
+
+AC_CHECK_LIB(dl,dlopen)
+if test "$ac_cv_lib_dl_dlopen" = "yes"; then
+  AC_DEFINE(HAVE_DLOPEN)
+  AC_DEFINE(DYNAMIC_LINKING)
+else
+AC_CHECK_LIB(dld,dld_link)
+if test "$ac_cv_lib_dld_dld_link" = "yes"; then
+  AC_DEFINE(DYNAMIC_LINKING)
+else
+AC_CHECK_FUNCS(shl_load)
+if test "$ac_cv_func_shl_load" = "yes"; then
+  AC_DEFINE(DYNAMIC_LINKING)
+else
+AC_CHECK_FUNCS(dlopen)
+if test "$ac_cv_func_dlopen" = "yes"; then
+  AC_DEFINE(DYNAMIC_LINKING)
+fi
+fi
+fi
+fi
+
+fi
+
+GUILE_DLSYM_USCORE
+
+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 bzero system)
+
+dnl <GNU-WIN32 hacks>
+
+AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
+if test -n "$have_sys_un_h" ; then
+AC_DEFINE(HAVE_UNIX_DOMAIN_SOCKETS)
+fi
+
+AC_CHECK_FUNCS(socketpair getgroups setpwent pause tzset)
+
+dnl I don't know what this prefixing of cygwin32_ is for.
+dnl scmconfig.h wasn't updated with the test results.
+dnl so use AC_CHECK_FUNCS for now.
+
+dnl how about:
+dnl save confdefs.h
+dnl if test $ac_cv_cigwin = yes; then
+dnl   modify confdefs.h
+dnl fi
+dnl AC_CHECK_FUNCS...
+dnl restore confdefs.h
+
+dnl cp confdefs.h confdefs.h.bak
+dnl for func in sethostent endhostent getnetent setnetent endnetent getprotoent endprotoent getservent endservent getnetbyaddr getnetbyname inet_lnaof inet_makeaddr inet_netof ; do
+dnl cp confdefs.h.bak confdefs.h
+dnl cat >> confdefs.h << EOF 
+dnl #ifdef __CYGWIN32__
+dnl #define $func cygwin32_$func
+dnl #endif
+dnl EOF
+dnl AC_CHECK_FUNC($func)
+dnl done
+dnl cp confdefs.h.bak confdefs.h
+
+AC_CHECK_FUNCS(sethostent endhostent getnetent setnetent endnetent getprotoent endprotoent getservent endservent getnetbyaddr getnetbyname inet_lnaof inet_makeaddr inet_netof)
+
+dnl </GNU-WIN32 hacks>
+
+AC_CACHE_CHECK([for restartable system calls], scm_cv_restarts,
+       if test $ac_cv_func_sigaction = yes; then
+               [AC_TRY_COMPILE([#include <signal.h>],
+                               [int a = SA_RESTART],
+                               scm_cv_restarts=yes,
+                               scm_cv_restarts=no)]
+       else
+               scm_cv_restarts=no
+       fi)
+if test $scm_cv_restarts = yes; then
+       AC_DEFINE(HAVE_RESTARTS)
+fi
+
+if test "$ac_cv_header_regex_h" = yes ||
+   test "$ac_cv_header_rxposix_h" = yes ||
+   test "$ac_cv_header_rx_rxposix_h" = yes; then
+  GUILE_NAMED_CHECK_FUNC(regcomp, norx, [LIBOBJS="regex-posix.o $LIBOBJS"],
+  [AC_CHECK_LIB(rx, main)
+   GUILE_NAMED_CHECK_FUNC(regcomp, rx, [LIBOBJS="regex-posix.o $LIBOBJS"])]
+  )
+  dnl The following should not be necessary, but for some reason
+  dnl autoheader misses it if we don't include it!
+  if test "$ac_cv_func_regcomp_norx" = yes ||
+     test "$ac_cv_func_regcomp_rx" = yes; then
+    AC_DEFINE(HAVE_REGCOMP)
+  fi
+fi
+
+AC_REPLACE_FUNCS(inet_aton putenv strerror)
+
+# When testing for the presence of alloca, we need to add alloca.o
+# explicitly to LIBOBJS to make sure that it is translated to
+# `alloca.lo' for libtool later on.  This can and should be done more cleanly.
+AC_FUNC_ALLOCA
+if test "$ALLOCA" = "alloca.o"; then LIBOBJS="alloca.o $LIBOBJS"; fi
+
+AC_STRUCT_ST_RDEV
+AC_STRUCT_ST_BLKSIZE
+
+# We could use AC_STRUCT_ST_BLOCKS here, but that adds fileblocks.o to
+# LIBOBJS, which we don't need.  This seems more direct. 
+AC_CACHE_CHECK([for st_blocks in struct stat], ac_cv_struct_st_blocks,
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/stat.h>], [struct stat s; s.st_blocks;],
+ac_cv_struct_st_blocks=yes, ac_cv_struct_st_blocks=no)])
+if test $ac_cv_struct_st_blocks = yes; then
+  AC_DEFINE(HAVE_ST_BLOCKS)
+fi
+
+AC_STRUCT_TIMEZONE
+GUILE_STRUCT_UTIMBUF
+
+#--------------------------------------------------------------------
+#
+# Which way does the stack grow?
+#
+#--------------------------------------------------------------------
+
+AC_TRY_RUN(aux (l) unsigned long l;
+            { int x; exit (l >= ((unsigned long)&x)); }
+          main () { int q; aux((unsigned long)&q); }, 
+          AC_DEFINE(SCM_STACK_GROWS_UP),,AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h.in))
+
+
+AC_TRY_RUN(main () { exit (sizeof(float) != sizeof(long)); },
+          AC_DEFINE(SCM_SINGLES),,AC_DEFINE(SCM_SINGLES)
+          AC_MSG_WARN(Guessing that sizeof(long) == sizeof(float) -- see scmconfig.h.in))
+
+AC_MSG_CHECKING(for struct linger)
+AC_CACHE_VAL(scm_cv_struct_linger,
+       AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/socket.h>],
+                       [struct linger lgr;  lgr.l_linger = 100],
+                       scm_cv_struct_linger="yes",
+                       scm_cv_struct_linger="no"))
+AC_MSG_RESULT($scm_cv_struct_linger)
+if test $scm_cv_struct_linger = yes; then
+       AC_DEFINE(HAVE_STRUCT_LINGER)
+fi
+       
+#--------------------------------------------------------------------
+#
+# How can you violate a stdio abstraction by setting a stream's fd?
+#
+#--------------------------------------------------------------------
+
+AC_MSG_CHECKING(how to set a stream file descriptor)
+AC_CACHE_VAL(scm_cv_fd_setter,
+       AC_TRY_COMPILE([#include <stdio.h>],
+                       [stdout->_file = 1],
+                       scm_cv_fd_setter="_file",
+       AC_TRY_COMPILE([#include <stdio.h>],
+                       [stdout->_fileno = 1],
+                       scm_cv_fd_setter="_fileno",
+                       scm_cv_fd_setter="")))
+
+if test "$scm_cv_fd_setter"; then
+       AC_MSG_RESULT($scm_cv_fd_setter)
+       AC_DEFINE_UNQUOTED(FD_SETTER, $scm_cv_fd_setter)
+else
+       AC_MSG_RESULT(we couldn't do it!)
+fi
+
+#--------------------------------------------------------------------
+# How to find out whether a FILE structure contains buffered data.
+# From Tk we have the following list:
+#              _cnt:           Most UNIX systems
+#              __cnt:          HPUX
+#              _r:             BSD
+#              readCount:      Sprite
+#      Or, in GNU libc there are two fields, _gptr and _egptr, which
+#      have to be compared.
+#      These can also be known as _IO_read_ptr and _IO_read_end.
+#--------------------------------------------------------------------
+
+AC_MSG_CHECKING(how to get buffer char count from FILE structure)
+AC_CACHE_VAL(scm_cv_struct_file_count,
+       AC_TRY_COMPILE([#include <stdio.h>],
+                       [FILE *f = stdin; f->_cnt = 0],
+                       scm_cv_struct_file_count="_cnt",
+       AC_TRY_COMPILE([#include <stdio.h>],
+                       [FILE *f = stdin; f->_r = 0],
+                       scm_cv_struct_file_count="_r",
+       AC_TRY_COMPILE([#include <stdio.h>],
+                       [FILE *f = stdin; f->readCount = 0],
+                       scm_cv_struct_file_count="readCount",
+       scm_cv_struct_file_count=""))))
+if test "$scm_cv_struct_file_count"; then
+       AC_MSG_RESULT($scm_cv_struct_file_count)
+       AC_DEFINE_UNQUOTED(FILE_CNT_FIELD, $scm_cv_struct_file_count)
+else
+AC_CACHE_VAL(scm_cv_struct_file_gptr,
+       AC_TRY_COMPILE([#include <stdio.h>],
+                       [FILE *f = stdin; f->_gptr = f->egptr;],
+                       scm_cv_struct_file_gptr=1,
+       scm_cv_struct_file_gptr=""))
+if test "$scm_cv_struct_gptr"; then
+       AC_MSG_RESULT(gptr)
+       AC_DEFINE_UNQUOTED(FILE_CNT_GPTR, $scm_cv_struct_file_gptr)
+else
+AC_CACHE_VAL(scm_cv_struct_file_readptr,
+       AC_TRY_COMPILE([#include <stdio.h>],
+                       [FILE *f = stdin; f->_IO_read_ptr = f->_IO_read_end;],
+                       scm_cv_struct_file_readptr=1))
+if test "$scm_cv_struct_file_readptr"; then
+       AC_MSG_RESULT(read_ptr)
+       AC_DEFINE_UNQUOTED(FILE_CNT_READPTR, $scm_cv_struct_file_readptr)
+else
+       AC_MSG_RESULT(we couldn't do it!)
+fi
+fi
+fi
+
+#--------------------------------------------------------------------
+#
+# Flags for thread support
+#
+#--------------------------------------------------------------------
+
+CY_AC_WITH_THREADS
+CFLAGS="$CFLAGS $cy_cv_threads_cflags"
+THREAD_LIBS="$cy_cv_threads_libs"
+AC_SUBST(THREAD_LIBS)
+
+dnl
+dnl Set the appropriate flags!
+dnl  
+if test "$cy_cv_threads_package" = FSU; then
+  AC_DEFINE(USE_FSU_PTHREADS, 1)
+  else if test "$cy_cv_threads_package" = COOP; then
+    AC_DEFINE(USE_COOP_THREADS, 1)
+    else if test "$cy_cv_threads_package" = MIT; then
+      AC_DEFINE(USE_MIT_PTHREADS, 1)
+      else if test "$cy_cv_threads_package" = PCthreads; then
+        AC_DEFINE(USE_PCTHREADS_PTHREADS, 1)
+        else if test "$cy_cv_threads_package" = unknown; then
+          AC_MSG_ERROR("cannot find threads installation")
+        fi
+      fi
+    fi
+  fi
+fi
+
+if test "$cy_cv_threads_package" != ""; then
+  AC_DEFINE(USE_THREADS)
+  LIBOBJS="$LIBOBJS threads.o"
+fi
+
+#--------------------------------------------------------------------
+#
+# scm_internal_select
+#
+#--------------------------------------------------------------------
+
+if test "$cy_cv_threads_package" != "" &&
+   test $ac_cv_func_gettimeofday = yes &&
+   test $ac_cv_func_select = yes; then
+  AC_DEFINE(GUILE_ISELECT, 1)
+  LIBOBJS="$LIBOBJS iselect.o"
+fi
+
+## If we're using GCC, ask for aggressive warnings.
+case "$GCC" in
+  yes ) CFLAGS="$CFLAGS -Wall -Wpointer-arith" ;;
+esac
+
+AC_PROG_AWK
+
+## If we're creating a shared library (using libtool!), then we'll
+## need to generate a list of .lo files corresponding to the .o files
+## given in LIBOBJS.  We'll call it LIBLOBJS.
+LIBLOBJS="`echo ${LIBOBJS} | sed 's/\.o/.lo/g'`"
+
+AC_SUBST(GUILE_MAJOR_VERSION)
+AC_SUBST(GUILE_MINOR_VERSION)
+AC_SUBST(GUILE_VERSION)
+GUILE_LIBS="$LDFLAGS $THREAD_LIBS $LIBS"
+AC_SUBST(GUILE_LIBS)
+
+dnl timestamping the interpreter and scheme libraries:
+dnl
+dnl Help us notice when we're running one version of the Guile
+dnl interpreter against a different version of the ice-9 Scheme code.
+dnl This will definitely detect version skew due to differing
+dnl snapshots and releases, but may not catch skew for the developers.
+dnl Hopefully it will not detect skew when there is none; if that
+dnl happens, the warnings will be useless, and we should remove this.
+GUILE_STAMP="`date`"
+AC_SUBST(GUILE_STAMP)
+
+AC_SUBST(AWK)
+AC_SUBST(LIBLOBJS)
+
+
+dnl ======================================================================
+dnl configuration for the Qt package
+dnl ======================================================================
+
+threads_enabled=false
+if test "$cy_cv_threads_package" = COOP; then
+       threads_enabled=true
+fi
+
+# Determine the host we are working on
+AC_CANONICAL_HOST
+
+# How can we refer to the qt source directory from within the qt build
+# directory?  For headers, we can rely on the fact that the qt src
+# directory appears in the #include path.
+
+qtsrcdir="`(cd $srcdir; pwd)`/qt"
+
+changequote(,)dnl We use [ and ] in a regexp in the case
+case "$host" in
+i[3456]86-*-*)
+       qtmds_s=$qtsrcdir/md/i386.s
+       qtmd_h=md/i386.h
+       qtmdc_c=$qtsrcdir/md/null.c 
+       ;;
+mips-sgi-irix[56]*)
+       qtmds_s=$qtsrcdir/md/mips-irix5.s
+       qtmd_h=md/mips.h
+       qtmdc_c=$qtsrcdir/md/null.c
+       qtdmdb_s=$qtsrcdir/md/mips_b.s 
+       ;;
+mips-*-*)
+       qtmds_s=$qtsrcdir/md/mips.s
+       qtmd_h=md/mips.h
+       qtmdc_c=$qtsrcdir/md/null.c
+       qtdmdb_s=$qtsrcdir/md/mips_b.s 
+       ;;
+sparc-*-sunos*)
+       qtmd_h=md/sparc.h
+       qtmdc_c=$qtsrcdir/md/null.c
+       qtmds_s=$qtsrcdir/md/_sparc.s
+       qtdmdb_s=$qtsrcdir/md/_sparc_b.s 
+       ;;
+sparc-*-*)
+       qtmd_h=md/sparc.h
+       qtmdc_c=$qtsrcdir/md/null.c
+       qtmds_s=$qtsrcdir/md/sparc.s
+       qtdmdb_s=$qtsrcdir/md/sparc_b.s 
+       ;;
+alpha-*-*)
+       qtmd_h=md/axp.h
+       qtmdc_c=$qtsrcdir/md/null.c
+       qtmds_s=$qtsrcdir/md/axp.s
+       qtdmdb_s=$qtsrcdir/md/axp_b.s 
+       ;;
+*)
+       echo "Unknown configuration; threads package disabled"
+       threads_enabled=false
+       ;;
+esac
+changequote([, ])
+
+
+if $threads_enabled; then
+   target_libs=libqthreads.a
+else
+   target_libs=
+fi
+
+# Give the Makefile the names of the object files that will be
+# generated by compiling $qtmdc_c and $qtmds_s.
+qtmdc_o="`echo ${qtmdc_c} | sed -e 's:^.*/::' | sed -e 's:\.c$:\.o:'`"
+qtmds_o="`echo ${qtmds_s} | sed -e 's:^.*/::' | sed -e 's:\.s$:\.o:'`"
+
+AC_SUBST(target_libs)
+AC_SUBST(qtmd_h)
+AC_SUBST(qtmdc_c)
+AC_SUBST(qtmdc_o)
+AC_SUBST(qtmds_s)
+AC_SUBST(qtmds_o)
+AC_SUBST(qtmdb_s)
+
+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 build/Makefile], [chmod +x libguile/guile-snarf])
+
+dnl Local Variables:
+dnl comment-start: "dnl "
+dnl comment-end: ""
+dnl comment-start-skip: "\\bdnl\\b\\s *"
+dnl End: