* boot-9.scm (values, call-with-values): Moved here from
[bpt/guile.git] / aclocal.m4
index fb03a8a..eff9309 100644 (file)
@@ -539,106 +539,255 @@ AC_MSG_RESULT([$NM])
 AC_SUBST(NM)
 ])
 
-dnl
-dnl CY_AC_WITH_THREADS determines which thread library the user intends
-dnl to put underneath guile.  Pass it the path to find the guile top-level
-dnl source directory.  Eg CY_AC_WITH_THREADS(../..) for tcl/unix.
-dnl
 
-AC_DEFUN([CY_AC_WITH_THREADS],[
-AC_CACHE_CHECK("threads package type",cy_cv_threads_package,[
-AC_CACHE_VAL(cy_cv_threads_cflags,[
-AC_CACHE_VAL(cy_cv_threads_libs,[
-use_threads=no;
-AC_ARG_WITH(threads,[  --with-threads          thread interface],
-            use_threads=$withval, use_threads=no)
-test -n "$use_threads" || use_threads=qt
-threads_package=unknown
-if test "$use_threads" != no; then
-dnl
-dnl Test for the qt threads package - used for cooperative threads
-dnl This may not necessarily be built yet - so just check for the
-dnl header files.
-dnl
-  if test "$use_threads" = yes || test "$use_threads" = qt; then
-     # Look for qt in source directory. 
-     if test -f $srcdir/qt/qt.c; then
-       qtsrcdir="`(cd $srcdir; pwd)`/qt"
-       threads_package=COOP
-       cy_cv_threads_cflags="-I$qtsrcdir -I../qt"
-       cy_cv_threads_libs="../qt/libqthreads.a"
-     fi
-  else
-     if test -f $use_threads/qt.c; then
-       # FIXME seems as though we should try to use an installed qt here.
-       threads_package=COOP
-       cy_cv_threads_cflags="-I$use_threads -I../qt"
-       cy_cv_threads_libs="../qt/libqthreads.a"
-     fi
-  fi
-  if test "$use_threads" = pthreads; then
-     # Look for pthreads in srcdir.  See above to understand why
-     # we always set threads_package.
-     if test -f $srcdir/../../pthreads/pthreads/queue.c \
-         || test -f $srcdir/../pthreads/pthreads/queue.c; then
-       threads_package=MIT
-       cy_cv_threads_cflags="-I$srcdir/../../pthreads/include"
-       cy_cv_threads_libs="-L../../pthreads/lib -lpthread"
-     fi
-  fi
-  saved_CPP="$CPPFLAGS"
-  saved_LD="$LDFLAGS"
-  saved_LIBS="$LIBS"
-  if test "$threads_package" = unknown; then
-dnl
-dnl Test for the FSU threads package
+# serial 1
+
+# @defmac AC_PROG_CC_STDC
+# @maindex PROG_CC_STDC
+# @ovindex CC
+# If the C compiler in not in ANSI C mode by default, try to add an option
+# to output variable @code{CC} to make it so.  This macro tries various
+# options that select ANSI C on some system or another.  It considers the
+# compiler to be in ANSI C mode if it handles function prototypes correctly.
+#
+# If you use this macro, you should check after calling it whether the C
+# compiler has been set to accept ANSI C; if not, the shell variable
+# @code{am_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source
+# code in ANSI C, you can make an un-ANSIfied copy of it by using the
+# program @code{ansi2knr}, which comes with Ghostscript.
+# @end defmac
+
+AC_DEFUN(AM_PROG_CC_STDC,
+[AC_REQUIRE([AC_PROG_CC])
+AC_BEFORE([$0], [AC_C_INLINE])
+AC_BEFORE([$0], [AC_C_CONST])
+dnl Force this before AC_PROG_CPP.  Some cpp's, eg on HPUX, require
+dnl a magic option to avoid problems with ANSI preprocessor commands
+dnl like #elif.
+dnl FIXME: can't do this because then AC_AIX won't work due to a
+dnl circular dependency.
+dnl AC_BEFORE([$0], [AC_PROG_CPP])
+AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C)
+AC_CACHE_VAL(am_cv_prog_cc_stdc,
+[am_cv_prog_cc_stdc=no
+ac_save_CC="$CC"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX                  -qlanglvl=ansi
+# Ultrix and OSF/1     -std1
+# HP-UX                        -Aa -D_HPUX_SOURCE
+# SVR4                 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  AC_TRY_COMPILE(
+[#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+], [
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+],
+[am_cv_prog_cc_stdc="$ac_arg"; break])
+done
+CC="$ac_save_CC"
+])
+if test -z "$am_cv_prog_cc_stdc"; then
+  AC_MSG_RESULT([none needed])
+else
+  AC_MSG_RESULT($am_cv_prog_cc_stdc)
+fi
+case "x$am_cv_prog_cc_stdc" in
+  x|xno) ;;
+  *) CC="$CC $am_cv_prog_cc_stdc" ;;
+esac
+])
+
+dnl   Autoconf macros for configuring the QuickThreads package
+dnl   Jim Blandy <jimb@red-bean.com> --- July 1998
 dnl
-    CPPFLAGS="-I$use_threads/include"
-    LDFLAGS="-L$use_threads/lib"
-    LIBS="-lgthreads -lmalloc"
-    AC_TRY_LINK([#include <pthread.h>],[
-pthread_equal(NULL,NULL);
-], threads_package=FSU)
-  fi
-  if test "$threads_package" = unknown; then
+dnl    Copyright (C) 1998 Free Software Foundation, Inc.
 dnl
-dnl Test for the MIT threads package
+dnl   This file is part of GUILE.
+dnl   
+dnl   GUILE is free software; you can redistribute it and/or modify
+dnl   it under the terms of the GNU General Public License as
+dnl   published by the Free Software Foundation; either version 2, or
+dnl   (at your option) any later version.
+dnl   
+dnl   GUILE is distributed in the hope that it will be useful, but
+dnl   WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl   GNU General Public License for more details.
+dnl   
+dnl   You should have received a copy of the GNU General Public
+dnl   License along with GUILE; see the file COPYING.  If not, write
+dnl   to the Free Software Foundation, Inc., 59 Temple Place, Suite
+dnl   330, Boston, MA 02111-1307 USA
+
+
+
+dnl   QTHREADS_CONFIGURE configures the QuickThreads package.  The QT
+dnl   sources should be in $srcdir/qt.  If configuration succeeds, this
+dnl   macro creates the appropriate symlinks in the qt object directory,
+dnl   and sets the following variables, used in building libqthreads.a:
+dnl      QTHREAD_LTLIBS --- set to libqthreads.la if configuration
+dnl         succeeds, or the empty string if configuration fails.
+dnl      qtmd_h, qtmds_s, qtmdc_c, qtdmdb_s --- the names of the machine-
+dnl         dependent source files.
+dnl      qthread_asflags --- flags to pass to the compiler when processing
+dnl         assembly-language files.
 dnl
-    LIBS="-lpthread"
-    AC_TRY_LINK([#include <pthread.h>],[
-pthread_equal(NULL,NULL);
-], threads_package=MIT)
-  fi
-  if test "$threads_package" = unknown; then
+dnl   It also sets the following variables, which describe how clients
+dnl   can link against libqthreads.a:
+dnl      THREAD_PACKAGE --- set to "QT" if configuration succeeds, or
+dnl         the empty string if configuration fails.
+dnl     THREAD_CPPFLAGS --- set to `-I' flags for thread header files
+dnl     THREAD_LIBS_LOCAL --- linker options for use in this source tree
+dnl     THREAD_LIBS_INSTALLED --- linker options for use after this package
+dnl        is installed
+dnl   It would be nice if all thread configuration packages for Guile
+dnl   followed the same conventions.
 dnl
-dnl Test for the PCthreads package
+dnl   All of the above variables will be substituted into Makefiles in
+dnl   the usual autoconf fashion.
 dnl
-    LIBS="-lpthreads"
-    AC_TRY_LINK([#include <pthread.h>],[
-pthread_equal(NULL,NULL);
-], threads_package=PCthreads)
-  fi
+dnl   We distinguish between THREAD_LIBS_LOCAL and
+dnl   THREAD_LIBS_INSTALLED because the thread library might be in
+dnl   this tree, and be built using libtool.  This means that:
+dnl     1) when building other executables in this tree, one must
+dnl        pass the relative path to the ../libfoo.la file, but 
+dnl     2) once the whole package has been installed, users should
+dnl        link using -lfoo. 
+dnl   Normally, we only care about the first case, but since the
+dnl   guile-config script needs to give users all the flags they need
+dnl   to link programs against guile, the GUILE_WITH_THREADS macro
+dnl   needs to supply the second piece of information as well.
 dnl
-dnl Set the appropriate flags!
-dnl 
-  cy_cv_threads_cflags="$CPPFLAGS $cy_cv_threads_cflags"
-  cy_cv_threads_libs="$LDFLAGS $LIBS $cy_cv_threads_libs"
-  cy_cv_threads_package=$threads_package
-  CPPFLAGS="$saved_CPP"
-  LDFLAGS="$saved_LD"
-  LIBS="$saved_LIBS"
-  if test "$threads_package" = unknown; then
-    AC_MSG_ERROR("cannot find thread library installation")
+dnl   This whole thing is a little confused about what ought to be
+dnl   done in the top-level configure script, and what ought to be
+dnl   taken care of in the subdirectory.  For example, qtmds_s and
+dnl   friends really ought not to be even mentioned in the top-level
+dnl   configure script, but here they are.
+
+AC_DEFUN([QTHREADS_CONFIGURE],[
+  AC_REQUIRE([AC_PROG_LN_S])
+
+  AC_MSG_CHECKING(QuickThreads configuration)
+  # 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
+
+  THREAD_PACKAGE=QT
+  qthread_asflags=''
+  case "$host" in
+    i[3456]86-*-*)
+      port_name=i386
+      qtmd_h=md/i386.h
+      qtmds_s=md/i386.s
+      qtmdc_c=md/null.c 
+      qtdmdb_s=
+      case "$host" in
+        *-*-netbsd* )
+          ## NetBSD needs to be told to pass the assembly code through
+          ## the C preprocessor.  Other GCC installations seem to do
+          ## this by default, but NetBSD's doesn't.  We could get the
+          ## same effect by giving the file a name ending with .S
+          ## instead of .s, but I don't see how to tell automake to do
+          ## that.
+          qthread_asflags='-x assembler-with-cpp'
+        ;;
+      esac
+      ;;
+    mips-sgi-irix[56]*)
+      port_name=irix
+      qtmd_h=md/mips.h
+      qtmds_s=md/mips-irix5.s
+      qtmdc_c=md/null.c
+      qtdmdb_s=md/mips_b.s 
+      ;;
+    mips-*-*)
+      port_name=mips
+      qtmd_h=md/mips.h
+      qtmds_s=md/mips.s
+      qtmdc_c=md/null.c
+      qtdmdb_s=md/mips_b.s 
+      ;;
+    sparc-*-sunos*)
+      port_name=sparc-sunos
+      qtmd_h=md/sparc.h
+      qtmds_s=md/_sparc.s
+      qtmdc_c=md/null.c
+      qtdmdb_s=md/_sparc_b.s 
+      ;;
+    sparc-*-*)
+      port_name=sparc
+      qtmd_h=md/sparc.h
+      qtmds_s=md/sparc.s
+      qtmdc_c=md/null.c
+      qtdmdb_s=md/sparc_b.s 
+      ;;
+    alpha-*-*)
+      port_name=alpha
+      qtmd_h=md/axp.h
+      qtmds_s=md/axp.s
+      qtmdc_c=md/null.c
+      qtdmdb_s=md/axp_b.s 
+      ;;
+    *)
+      echo "Unknown configuration; threads package disabled"
+      THREAD_PACKAGE=""
+      ;;
+  esac
+  changequote([, ])
+
+  # Did configuration succeed?
+  if test -n "$THREAD_PACKAGE"; then
+    AC_MSG_RESULT($port_name)
+    QTHREAD_LTLIBS=libqthreads.la
+    THREAD_CPPFLAGS="-I$qtsrcdir -I../qt"
+    THREAD_LIBS_LOCAL="../qt/libqthreads.la"
+    THREAD_LIBS_INSTALLED="-lqthreads"
+  else
+    AC_MSG_RESULT(none; disabled)
   fi
-fi
-])
-])
-],
-dnl
-dnl Set flags according to what is cached.
-dnl
-CPPFLAGS="$cy_cv_threads_cflags"
-LIBS="$cy_cv_threads_libs"
-)
+
+  AC_SUBST(QTHREAD_LTLIBS)
+  AC_SUBST(qtmd_h)
+  AC_SUBST(qtmds_s)
+  AC_SUBST(qtmdc_c)
+  AC_SUBST(qtdmdb_s)
+  AC_SUBST(qthread_asflags)
+  AC_SUBST(THREAD_PACKAGE)
+  AC_SUBST(THREAD_CPPFLAGS)
+  AC_SUBST(THREAD_LIBS_LOCAL)
+  AC_SUBST(THREAD_LIBS_INSTALLED)
 ])