[project @ 1998-05-26 22:12:51 by reid]
[ghc-hetmet.git] / aclocal.m4
index a4b1767..2447a1c 100644 (file)
@@ -1,11 +1,29 @@
-#
-# Extra autoconf macros for the Glasgow fptools
-#
+dnl $Id: aclocal.m4,v 1.22 1998/04/10 12:38:38 simonm Exp $
+dnl 
+dnl Extra autoconf macros for the Glasgow fptools
+dnl
 
-#
-# Has timezone the type time_t or long (HP-UX 10.20 apparently
-# has `long'..)
-#
+dnl 
+dnl Are we running under the GNU libc?  Need -D_GNU_SOURCE to get 
+dnl caddr_t and such.
+dnl 
+AC_DEFUN(AC_GNU_LIBC,
+[AC_CACHE_CHECK([GNU libc], ac_cv_gnu_libc,
+[AC_EGREP_CPP(yes,
+[#include <features.h>
+#ifdef __GLIBC__
+yes
+#endif
+], ac_cv_gnu_libc=yes, ac_cv_gnu_libc=no)])
+if test "$ac_cv_gnu_libc" = yes; then
+  AC_DEFINE(_GNU_SOURCE)
+fi
+])
+
+dnl
+dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
+dnl has `long'..)
+dnl 
 AC_DEFUN(AC_TYPE_TIMEZONE,
 [AC_CACHE_CHECK([type of timezone], ac_cv_type_timezone,
 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
@@ -25,9 +43,8 @@ extern time_t timezone;
 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $ac_cv_type_timezone)
 ])
 
-#
-# Is altzone available?
-#
+dnl *** Is altzone available? ***
+dnl 
 AC_DEFUN(AC_ALTZONE,
 [AC_CACHE_CHECK([altzone], ac_cv_altzone,
 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
@@ -47,24 +64,27 @@ if test "$ac_cv_altzone" = yes; then
 fi
 ])
 
-#
 dnl ** check for leading underscores in symbol names
-#
-# Test for determining whether symbol names have a leading
-# underscore.
-#
-# We assume that they _haven't_ if anything goes wrong.
-#
+dnl 
+dnl Test for determining whether symbol names have a leading
+dnl underscore.
+dnl 
+dnl We assume that they _haven't_ if anything goes wrong.
+dnl
 AC_DEFUN(AC_UNDERSCORE,
 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
 AC_CACHE_CHECK([leading underscore in symbol names], ac_cv_lead_uscore,
-#
-# Hack!: nlist() under Digital UNIX insist on there being an _,
-# but symbol table listings show none. What is going on here?!?
-#
-if test $HostPlatform = "alpha-dec-osf1"; then
-   ac_cv_lead_uscore='no'
-else
+
+dnl
+dnl Hack!: nlist() under Digital UNIX insist on there being an _,
+dnl but symbol table listings show none. What is going on here?!?
+dnl
+changequote(<<, >>)dnl
+<<
+case $HostPlatform in
+alpha-dec-osf*) ac_cv_lead_uscore='no';;
+*) >>
+changequote([, ])dnl
 AC_TRY_RUN([#ifdef HAVE_NLIST_H
 #include <nlist.h>
 changequote(<<, >>)dnl
@@ -83,14 +103,18 @@ changequote([, ])dnl
 #endif
     exit(1);
 }], ac_cv_lead_uscore=yes, ac_cv_lead_uscore=no, ac_cv_lead_uscore=NO)
-fi);
+;;
+esac);
 LeadingUnderscore=`echo $ac_cv_lead_uscore | sed 'y/yesno/YESNO/'`
 AC_SUBST(LeadingUnderscore)
+case $LeadingUnderscore in
+YES) AC_DEFINE(LEADING_UNDERSCORE);;
+esac
 ])
 
-#
-# Check for Happy and version.
-#
+dnl
+dnl Check for Happy and version.
+dnl
 AC_DEFUN(AC_HAPPY,
 [AC_PATH_PROG(HappyCmd,happy)
 AC_CACHE_CHECK([for version of happy], ac_cv_happy_version,
@@ -112,11 +136,11 @@ HappyVersion=$ac_cv_happy_version;
 AC_SUBST(HappyVersion)
 ])
 
-#
-# What's the best way of doing context diffs?
-#
-# (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
-#
+dnl
+dnl What's the best way of doing context diffs?
+dnl
+dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
+dnl
 AC_DEFUN(AC_PROG_DIFF,
 [AC_CACHE_CHECK([for ok way to do context diffs], ac_cv_context_diffs,
 [echo foo > conftest1
@@ -138,9 +162,9 @@ ContextDiffCmd=$ac_cv_context_diffs
 AC_SUBST(ContextDiffCmd)
 ])
 
-#
-# Finding the Right Yacc
-#
+dnl
+dnl Finding the Right Yacc
+dnl
 AC_DEFUN(AC_PROG_YACCY,
 [AC_PROG_YACC
 if test "$YACC" = "yacc"; then
@@ -172,10 +196,10 @@ YaccCmd=$ac_cv_prog_yacc
 AC_SUBST(YaccCmd)
 ])
 
-dnl Checking for ar and its arguments + whether we need ranlib.
-#
-# ArCmd and RANLIB are AC_SUBST'ed
-#
+dnl *** Checking for ar and its arguments + whether we need ranlib.
+dnl
+dnl ArCmd and RANLIB are AC_SUBST'ed
+dnl 
 AC_DEFUN(AC_PROG_AR_AND_RANLIB,
 [AC_PATH_PROG(ArCmd,ar)
 if test -z "$ArCmd"; then
@@ -213,9 +237,9 @@ else
 fi
 ])
 
-#
+dnl
 dnl AC_SHEBANG_PERL - can we she-bang perl?
-#
+dnl
 AC_DEFUN(AC_SHEBANG_PERL,
 [AC_CACHE_CHECK([if your perl works in shell scripts], ac_cv_shebang_perl,
 [echo "#!$PerlCmd"'
@@ -231,10 +255,10 @@ fi
 rm -f conftest
 ])])
 
-#
-# Extra testing of the result AC_PROG_CC, testing the gcc version no.
-# *Must* be called after AC_PROG_CC
-#
+dnl
+dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
+dnl *Must* be called after AC_PROG_CC
+dnl
 AC_DEFUN(AC_HAVE_GCC,
 [AC_CACHE_CHECK([whether you have an ok gcc], ac_cv_have_gcc,
 [if test -z "$GCC"; then
@@ -244,7 +268,7 @@ AC_DEFUN(AC_HAVE_GCC,
     ac_cv_have_gcc='no'
 else
 changequote(, )dnl
-    cmd_string="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 20 \\\< \1 \\\* 10 + \2/g' `"
+    cmd_string="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 20 \\\< \1 \\\* 10 + \2/g' `"
 changequote([, ])dnl
     if test `eval $cmd_string 2>/dev/null` != "1"; then
        echo ''
@@ -258,18 +282,19 @@ HaveGcc=`echo $ac_cv_have_gcc | sed 'y/yesno/YESNO/'`
 AC_SUBST(HaveGcc)
 ])
 
-#
-# AC_PROG_GNUCPP gathers the path to the cpp that the
-# gcc driver calls upon.
-#
-# Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
-#
+dnl
+dnl AC_PROG_GNUCPP gathers the path to the cpp that the
+dnl gcc driver calls upon.
+dnl
+dnl Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
+dnl
 AC_DEFUN(AC_PROG_GNUCPP,
 [AC_CACHE_CHECK([how to invoke GNU cpp directly], ac_cv_gnu_cpp,
 [if test "$HaveGcc" = "YES"; then
        echo > conftest.c
        gcc -v -E conftest.c >/dev/null 2>conftest.out
-       echo '/(\S+(\/|\\\\)cpp)/ && print "[$]1";' > conftest.pl
+       # \x5c = backslash
+       echo 'tr/\x5c/\//; /(\S+\/cpp)/ && print "[$]1";' > conftest.pl
        ac_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
        rm -fr conftest*
  else
@@ -287,10 +312,9 @@ AC_SUBST(GNUCPP)
 AC_SUBST(RAWCPP)
 ])
 
-#
-# Small feature test for perl version. Assumes PerlCmd
-# contains path to perl binary
-#
+dnl Small feature test for perl version. Assumes PerlCmd
+dnl contains path to perl binary
+dnl
 AC_DEFUN(AC_CHECK_PERL_VERSION,
 [$PerlCmd -v >conftest.out 2>&1
 if grep "version 4" conftest.out >/dev/null 2>&1; then
@@ -317,3 +341,47 @@ else
 fi
 rm -fr conftest*
 ])
+
+dnl ** figure out the alignment restriction of a type
+dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
+dnl     so we can't call REQUIRE)
+
+dnl GHC_CHECK_ALIGNMENT(TYPE)
+AC_DEFUN(GHC_CHECK_ALIGNMENT,
+[changequote(<<, >>)dnl
+dnl The name to #define.
+define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
+dnl The cache variable name.
+define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
+dnl The name of the corresponding size.
+define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
+changequote([, ])dnl
+AC_MSG_CHECKING(alignment of $1)
+AC_CACHE_VAL(AC_CV_NAME,
+[AC_TRY_RUN([
+#include <stdio.h>
+#if HAVE_STDDEF_H
+#include <stddef.h>
+#endif
+#ifndef offsetof
+#define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
+#endif
+int
+main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
+  exit(0);
+}],
+AC_CV_NAME=`cat conftestval`,
+AC_CV_NAME=$AC_CV_SIZEOF_NAME,
+AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
+AC_MSG_RESULT($AC_CV_NAME)
+AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
+AC_PROVIDE($AC_TYPE_NAME)
+undefine([AC_TYPE_NAME])dnl
+undefine([AC_CV_NAME])dnl
+undefine([AC_CV_SIZEOF_NAME])dnl
+])
+