Make dynamic linking work on Dec Unix. (Thanks to Clark McGrew)
[bpt/guile.git] / configure.in
dissimilarity index 93%
index 5070442..67ab605 100644 (file)
-AC_INIT(Makefile.in)
-
-. $srcdir/GUILE-VERSION
-
-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_PROG_CC
-
-### Use gtcltk-lib only if we seem to have Tcl installed on the
-### system.  This way of doing this doesn't really fit into the PLUGIN
-### approach, but I'm not sure how to do it more gracefully within
-### that approach.
-AC_CHECK_LIB(tcl7.5, Tcl_CreateInterp, have_tcl=true, have_tcl=false, -lm)
-if $have_tcl; then :; else
-  all_subdirs="`echo $all_subdirs | sed s:gtcltk-lib::`"
-  req_subdirs="`echo $req_subdirs | sed s:gtcltk-lib::`"
-fi  
-
-AC_CONFIG_SUBDIRS($all_subdirs)
-existingdirs=
-for d in $all_subdirs; do
-  if test -d $srcdir/$d ; then
-    existingdirs="$existingdirs $d"
-    if test "x$verbose" = xyes; then
-       if test -f $srcdir/$d/PLUGIN/greet ; then
-         cat $srcdir/$d/PLUGIN/greet
-       else
-        echo ===
-        echo === Configuring plug-in component $d
-        echo ===
-       fi
-    fi
-  fi
-done
-
-for d in $req_subdirs; do
-  if test ! -d $srcdir/$d ; then
-    echo "*******"
-    echo "*******"
-    echo "**\+/**"
-    echo "**=*=**" ERROR: Missing required package: $d
-    echo "**/+\**"
-    echo "*******"
-    echo "*******"
-    exit 1
-  fi
-done
-
-if test "x$verbose" = xyes; then
-  for d in $opt_subdirs; do
-    if test ! -d $srcdir/$d ; then
-      echo "*****"
-      echo "*===*"
-      echo "*=*=*" WARNING: Missing suggested package: $d
-      echo "*===*"
-      echo "*****"
-    fi
-  done
-fi
-
-
-AC_SUBST(existingdirs)
-AC_SUBST(GUILE_VERSION)
-AC_OUTPUT(Makefile doc/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
+
+# 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(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
+
+
+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)
+
+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
+
+## 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)
+
+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=libqt.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: