Comments only
[ghc-hetmet.git] / aclocal.m4
index bace42a..540ec3e 100644 (file)
@@ -44,36 +44,38 @@ AC_DEFUN([FP_EVAL_STDERR],
 ])# FP_EVAL_STDERR
 
 
 ])# FP_EVAL_STDERR
 
 
-# FP_CHECK_FLAG(FLAG, [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED])
-# ---------------------------------------------------------------------
-# Check to see whether the compiler for the current language supports a
-# particular option.
+# FP_ARG_WITH_PATH_GNU_PROG
+# --------------------
+# XXX
 #
 #
-# Implementation note: When given an unkown option, GCC issues an warning on
-# stderr only, but returns an exit value of 0 nevertheless. Consequently we have
-# to check stderr *and* the exit value.
+# $1 = the command to look for
+# $2 = the variable to set
 #
 #
-# Used by ghc.
-AC_DEFUN([FP_CHECK_FLAG],
-[AC_LANG_COMPILER_REQUIRE()dnl
-AC_LANG_CASE([C],          [fp_compiler="$CC"  m4_pushdef([fp_Flags], [CFLAGS])],
-             [C++],        [fp_compiler="$CXX" m4_pushdef([fp_Flags], [CXXFLAGS])],
-             [Fortran 77], [fp_compiler="$F77" m4_pushdef([fp_Flags], [FFLAGS])])
-m4_pushdef([fp_Cache], [fp_cv_[]fp_Flags[]AS_TR_SH([$1])])[]dnl
-AC_CACHE_CHECK([whether $fp_compiler accepts $1], [fp_Cache],
-[AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
-fp_save_flags="$fp_Flags"
-fp_Flags="$fp_Flags $1"
-fp_Cache=no
-if FP_EVAL_STDERR([$ac_compile conftest.$ac_ext]) >/dev/null; then
-  test -s conftest.err || fp_Cache=yes
-fi
-fp_Flags="$fp_save_flags"
-rm -f conftest.err conftest.$ac_ext])
-AS_IF([test $fp_Cache = yes], [$2], [$3])[]dnl
-m4_popdef([fp_Cache])[]dnl
-m4_popdef([fp_Flags])[]dnl
-])# FP_CHECK_FLAG
+AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
+[
+AC_ARG_WITH($2,
+[AC_HELP_STRING([--with-$2=ARG],
+        [Use ARG as the path to $2 [default=autodetect]])],
+[
+    if test "$HostOS" = "mingw32"
+    then
+        AC_MSG_WARN([Request to use $withval will be ignored])
+    else
+        $1=$withval
+    fi
+],
+[
+    if test "$HostOS" != "mingw32"
+    then
+        AC_PATH_PROG([$1], [$2])
+        if test -z "$$1"
+        then
+            AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link])
+        fi
+    fi
+]
+)
+]) # FP_ARG_WITH_PATH_GNU_PROG
 
 
 # FP_PROG_CONTEXT_DIFF
 
 
 # FP_PROG_CONTEXT_DIFF
@@ -88,7 +90,7 @@ AC_DEFUN([FP_PROG_CONTEXT_DIFF],
 [echo foo > conftest1
 echo foo > conftest2
 fp_cv_context_diff=no
 [echo foo > conftest1
 echo foo > conftest2
 fp_cv_context_diff=no
-for fp_var in '-C 1' '-c1'
+for fp_var in '-U 1' '-u1' '-C 1' '-c1'
 do
   if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
     fp_cv_context_diff="diff $fp_var"
 do
   if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
     fp_cv_context_diff="diff $fp_var"
@@ -256,49 +258,56 @@ dnl for a happy source tree and point the build system at that instead.
 dnl
 AC_DEFUN([FPTOOLS_HAPPY],
 [AC_PATH_PROG(HappyCmd,happy,)
 dnl
 AC_DEFUN([FPTOOLS_HAPPY],
 [AC_PATH_PROG(HappyCmd,happy,)
+# Happy is passed to Cabal, so we need a native path
+if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
+   test "${OSTYPE}"      != "msys"                  && \
+   test "${HappyCmd}"    != ""
+then
+    # Canonicalise to <drive>:/path/to/gcc
+    HappyCmd=`cygpath -m ${HappyCmd}`
+    AC_MSG_NOTICE([normalized happy command to $HappyCmd])
+fi
+
 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
 changequote(, )dnl
 [if test x"$HappyCmd" != x; then
 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
 changequote(, )dnl
 [if test x"$HappyCmd" != x; then
-   fptools_cv_happy_version="`$HappyCmd -v |
-                         grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
+   fptools_cv_happy_version=`"$HappyCmd" -v |
+                         grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ;
 else
    fptools_cv_happy_version="";
 fi;
 changequote([, ])dnl
 ])
 else
    fptools_cv_happy_version="";
 fi;
 changequote([, ])dnl
 ])
-if test ! -f compiler/parser/Parser.hs || test ! -f compiler/main/ParsePkgConf.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
+if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
 then
 then
-    FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.15],
-      [AC_MSG_ERROR([Happy version 1.15 or later is required to compile GHC.])])[]dnl
+    FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.16],
+      [AC_MSG_ERROR([Happy version 1.16 or later is required to compile GHC.])])[]
 fi
 HappyVersion=$fptools_cv_happy_version;
 AC_SUBST(HappyVersion)
 ])
 
 dnl
 fi
 HappyVersion=$fptools_cv_happy_version;
 AC_SUBST(HappyVersion)
 ])
 
 dnl
-dnl Check for Haddock and version.  If there's no installed Haddock, we look
-dnl for a haddock source tree and point the build system at that instead.
-dnl
-AC_DEFUN([FPTOOLS_HADDOCK],
-[AC_PATH_PROG(HaddockCmd,haddock,)
-dnl Darn, I forgot to make Haddock print out its version number when
-dnl invoked with -v.  We could try generating some HTML and grepping
-dnl through that to find the version number, but I think we'll make
-dnl do without it for now.
-])
-
-dnl
 dnl Check for Alex and version.  If we're building GHC, then we need
 dnl at least Alex version 2.0.1.
 dnl
 AC_DEFUN([FPTOOLS_ALEX],
 [
 AC_PATH_PROG(AlexCmd,alex,)
 dnl Check for Alex and version.  If we're building GHC, then we need
 dnl at least Alex version 2.0.1.
 dnl
 AC_DEFUN([FPTOOLS_ALEX],
 [
 AC_PATH_PROG(AlexCmd,alex,)
+# Alex is passed to Cabal, so we need a native path
+if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
+   test "${OSTYPE}"      != "msys"                  && \
+   test "${AlexCmd}"     != ""
+then
+    # Canonicalise to <drive>:/path/to/gcc
+    AlexCmd=`cygpath -m ${AlexCmd}`
+fi
+
 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
 changequote(, )dnl
 [if test x"$AlexCmd" != x; then
 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
 changequote(, )dnl
 [if test x"$AlexCmd" != x; then
-   fptools_cv_alex_version="`$AlexCmd -v |
-                         grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
+   fptools_cv_alex_version=`"$AlexCmd" -v |
+                         grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'` ;
 else
    fptools_cv_alex_version="";
 fi;
 else
    fptools_cv_alex_version="";
 fi;
@@ -306,53 +315,20 @@ changequote([, ])dnl
 ])
 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
 then
 ])
 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
 then
-    FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0.1],
-      [AC_MSG_ERROR([Alex version 2.0.1 or later is required to compile GHC.])])[]dnl
+    FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.1.0],
+      [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[]
 fi
 AlexVersion=$fptools_cv_alex_version;
 AC_SUBST(AlexVersion)
 ])
 
 
 fi
 AlexVersion=$fptools_cv_alex_version;
 AC_SUBST(AlexVersion)
 ])
 
 
-# FP_PROG_LD
-# ----------
-# Sets the output variable LdCmd to the (non-Cygwin version of the) full path
-# of ld. Exits if no ld can be found
-AC_DEFUN([FP_PROG_LD],
-[
-if test -z "$1"
-then
-  AC_PATH_PROG([fp_prog_ld_raw], [ld])
-  if test -z "$fp_prog_ld_raw"; then
-    AC_MSG_ERROR([cannot find ld in your PATH, no idea how to link])
-  fi
-  LdCmd=$fp_prog_ld_raw
-  case $HostPlatform in
-    *mingw32) if test x${OSTYPE} != xmsys; then
-             LdCmd="`cygpath -w ${fp_prog_ld_raw} | sed -e 's@\\\\@/@g'`"
-                AC_MSG_NOTICE([normalized ld command to $LdCmd])
-              fi
-           # Insist on >= ld-2.15.x, since earlier versions doesn't handle
-           # the generation of relocatable object files with large amounts
-           # of relocations correctly. (cf. HSbase.o splittage-hack)
-           fp_prog_ld_version=`${LdCmd} --version | sed -n '/GNU ld/p' | tr -cd 0-9 | cut -b1-3`
-           FP_COMPARE_VERSIONS([$fp_prog_ld_version],[-lt],[214],
-                                  [AC_MSG_ERROR([GNU ld version later than 2.14 required to compile GHC on Windows.])])[]dnl
-              ;;
-  esac
-else
-  LdCmd="$1"
-fi
-AC_SUBST([LdCmd])
-])# FP_PROG_LD
-
-
 # FP_PROG_LD_X
 # ------------
 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
 # variable's value is empty.
 AC_DEFUN([FP_PROG_LD_X],
 # FP_PROG_LD_X
 # ------------
 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
 # variable's value is empty.
 AC_DEFUN([FP_PROG_LD_X],
-[AC_REQUIRE([FP_PROG_LD])
+[
 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
 [echo 'foo() {}' > conftest.c
 ${CC-cc} -c conftest.c
 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
 [echo 'foo() {}' > conftest.c
 ${CC-cc} -c conftest.c
@@ -376,7 +352,7 @@ AC_SUBST([LdXFlag])
 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
 # GNU ld or not.
 AC_DEFUN([FP_PROG_LD_IS_GNU],
 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
 # GNU ld or not.
 AC_DEFUN([FP_PROG_LD_IS_GNU],
-[AC_REQUIRE([FP_PROG_LD])
+[
 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
   fp_cv_gnu_ld=yes
 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
   fp_cv_gnu_ld=yes
@@ -439,7 +415,7 @@ else
   touch conftest.dummy
   for fp_var in clqsZ clqs cqs clq cq ; do
      rm -f conftest.a
   touch conftest.dummy
   for fp_var in clqsZ clqs cqs clq cq ; do
      rm -f conftest.a
-     if $fp_prog_ar_raw $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
+     if "$fp_prog_ar_raw" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
         fp_cv_prog_ar_args=$fp_var
         break
      fi
         fp_cv_prog_ar_args=$fp_var
         break
      fi
@@ -450,7 +426,8 @@ else
   fi
 fi])
 fp_prog_ar_args=$fp_cv_prog_ar_args
   fi
 fi])
 fp_prog_ar_args=$fp_cv_prog_ar_args
-AC_SUBST([ArCmd], ["$fp_prog_ar $fp_prog_ar_args"])
+AC_SUBST([ArCmd], ["$fp_prog_ar"])
+AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
 
 ])# FP_PROG_AR_ARGS
 
 
 ])# FP_PROG_AR_ARGS
 
@@ -543,33 +520,25 @@ fi
 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
   AC_MSG_ERROR([gcc is required])
 fi
 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
   AC_MSG_ERROR([gcc is required])
 fi
-AC_CACHE_CHECK([version of gcc], [fp_gcc_version],
+GccLT34=
+AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
 [if test "$fp_have_gcc" = "YES"; then
 [if test "$fp_have_gcc" = "YES"; then
-   fp_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
-   FP_COMPARE_VERSIONS([$fp_gcc_version], [-lt], [2.0],
-     [AC_MSG_ERROR([Need at least gcc version 2.0 (3.4+ recommended)])])
+   fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
+   FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
+     [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
+   # See #2770: gcc 2.95 doesn't work any more, apparently.  There probably
+   # isn't a very good reason for that, but for now just make configure
+   # fail.
+   FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
  else
  else
-   fp_gcc_version="not-installed"
+   fp_cv_gcc_version="not-installed"
  fi
 ])
 AC_SUBST([HaveGcc], [$fp_have_gcc])
  fi
 ])
 AC_SUBST([HaveGcc], [$fp_have_gcc])
-AC_SUBST([GccVersion], [$fp_gcc_version])
+AC_SUBST([GccVersion], [$fp_cv_gcc_version])
+AC_SUBST(GccLT34)
 ])# FP_HAVE_GCC
 
 ])# FP_HAVE_GCC
 
-AC_DEFUN([FP_MINGW_GCC],
-[
-  case $HostOS_CPP in
-    mingw*)  AC_MSG_CHECKING([whether $CC is a mingw gcc])
-            if $CC -v 2>&1 | grep mingw >/dev/null; then
-               AC_MSG_RESULT([yes])
-            else
-               AC_MSG_RESULT([no])
-               AC_MSG_ERROR([Please use --with-gcc to specify a mingw gcc])
-            fi;;
-    *) ;;      
-  esac
-])
-
 dnl Small feature test for perl version. Assumes PerlCmd
 dnl contains path to perl binary.
 dnl
 dnl Small feature test for perl version. Assumes PerlCmd
 dnl contains path to perl binary.
 dnl
@@ -601,7 +570,7 @@ AC_DEFUN([FP_CHECK_PROG],
 # ------------
 # Find a non-WinDoze version of the "find" utility.
 AC_DEFUN([FP_PROG_FIND],
 # ------------
 # Find a non-WinDoze version of the "find" utility.
 AC_DEFUN([FP_PROG_FIND],
-[AC_PATH_PROG([fp_prog_find], [find])
+[AC_PATH_PROGS([fp_prog_find], [gfind find], find)
 echo foo > conftest.txt
 $fp_prog_find conftest.txt -print > conftest.out 2>&1
 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
 echo foo > conftest.txt
 $fp_prog_find conftest.txt -print > conftest.out 2>&1
 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
@@ -729,14 +698,28 @@ AS_VAR_POPDEF([fp_func])dnl
 # FP_GEN_DOCBOOK_XML
 # ------------------
 # Generates a DocBook XML V4.2 document in conftest.xml.
 # FP_GEN_DOCBOOK_XML
 # ------------------
 # Generates a DocBook XML V4.2 document in conftest.xml.
+#
+# It took a lot of experimentation to find a document that will cause
+# xsltproc to fail with an error code when the relevant
+# stylesheets/DTDs are not found.  I couldn't make xsltproc fail with
+# a single-file document, it seems a multi-file document is needed.
+# -- SDM 2009-06-03
+#
 AC_DEFUN([FP_GEN_DOCBOOK_XML],
 AC_DEFUN([FP_GEN_DOCBOOK_XML],
-[rm -f conftest.xml
+[rm -f conftest.xml conftest-book.xml
 cat > conftest.xml << EOF
 <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
 cat > conftest.xml << EOF
 <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [[
+<!ENTITY conftest-book SYSTEM "conftest-book.xml">
+]]>
 <book id="test">
 <book id="test">
-  <title>A DocBook Test Document</title>
+&conftest-book;
+</book>
+EOF
+cat >conftest-book.xml << EOF
+<?xml version="1.0" encoding="iso-8859-1"?>
+  <title>A DocBook &ldquo;Test Document&rdquo;</title>
   <chapter id="id-one">
     <title>A Chapter Title</title>
     <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
   <chapter id="id-one">
     <title>A Chapter Title</title>
     <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
@@ -745,11 +728,23 @@ cat > conftest.xml << EOF
     <title>Another Chapter Title</title>
     <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
   </chapter>
     <title>Another Chapter Title</title>
     <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
   </chapter>
-</book>
 EOF
 ]) # FP_GEN_DOCBOOK_XML
 
 
 EOF
 ]) # FP_GEN_DOCBOOK_XML
 
 
+# FP_PROG_DBLATEX
+# ----------------
+# Sets the output variable DblatexCmd to the full path of dblatex,
+# which we use for building PDF and PS docs.
+# DblatexCmd is empty if dblatex could not be found.
+AC_DEFUN([FP_PROG_DBLATEX],
+[AC_PATH_PROG([DblatexCmd], [dblatex])
+if test -z "$DblatexCmd"; then
+  AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
+fi
+])# FP_PROG_DBLATEX
+
+
 # FP_PROG_XSLTPROC
 # ----------------
 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
 # FP_PROG_XSLTPROC
 # ----------------
 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
@@ -757,38 +752,33 @@ EOF
 AC_DEFUN([FP_PROG_XSLTPROC],
 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
 if test -z "$XsltprocCmd"; then
 AC_DEFUN([FP_PROG_XSLTPROC],
 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
 if test -z "$XsltprocCmd"; then
-  AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the documentation])
+  AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the HTML documentation])
 fi
 ])# FP_PROG_XSLTPROC
 
 
 fi
 ])# FP_PROG_XSLTPROC
 
 
-# FP_DIR_DOCBOOK_XSL(XSL-DIRS)
+# FP_DOCBOOK_XSL
 # ----------------------------
 # ----------------------------
-# Check which of the directories XSL-DIRS contains DocBook XSL stylesheets. The
-# output variable DIR_DOCBOOK_XSL will contain the first usable directory or
-# will be empty if none could be found.
-AC_DEFUN([FP_DIR_DOCBOOK_XSL],
+# Check that we can process a DocBook XML document to HTML using xsltproc.
+AC_DEFUN([FP_DOCBOOK_XSL],
 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
 if test -n "$XsltprocCmd"; then
 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
 if test -n "$XsltprocCmd"; then
-  AC_CACHE_CHECK([for DocBook XSL stylesheet directory], fp_cv_dir_docbook_xsl,
+  AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
   [FP_GEN_DOCBOOK_XML
   fp_cv_dir_docbook_xsl=no
   [FP_GEN_DOCBOOK_XML
   fp_cv_dir_docbook_xsl=no
-  for fp_var in $1; do
-     if $XsltprocCmd ${fp_var}/html/docbook.xsl conftest.xml > /dev/null 2>&1; then
-        fp_cv_dir_docbook_xsl=$fp_var
-        break
-     fi
-  done
+  if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
+     fp_cv_dir_docbook_xsl=yes
+  fi
   rm -rf conftest*])
 fi
 if test x"$fp_cv_dir_docbook_xsl" = xno; then
   AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
   rm -rf conftest*])
 fi
 if test x"$fp_cv_dir_docbook_xsl" = xno; then
   AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
-  DIR_DOCBOOK_XSL=
+  HAVE_DOCBOOK_XSL=NO
 else
 else
-  DIR_DOCBOOK_XSL=$fp_cv_dir_docbook_xsl
+  HAVE_DOCBOOK_XSL=YES
 fi
 fi
-AC_SUBST([DIR_DOCBOOK_XSL])
-])# FP_DIR_DOCBOOK_XSL
+AC_SUBST([HAVE_DOCBOOK_XSL])
+])# FP_DOCBOOK_XSL
 
 
 # FP_PROG_XMLLINT
 
 
 # FP_PROG_XMLLINT
@@ -810,7 +800,7 @@ AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
 if test -n "$XmllintCmd"; then
   AC_MSG_CHECKING([for DocBook DTD])
   FP_GEN_DOCBOOK_XML
 if test -n "$XmllintCmd"; then
   AC_MSG_CHECKING([for DocBook DTD])
   FP_GEN_DOCBOOK_XML
-  if $XmllintCmd --valid --noout conftest.xml > /dev/null 2>&1; then
+  if $XmllintCmd --nonet --valid --noout conftest.xml ; then
     AC_MSG_RESULT([ok])
   else
     AC_MSG_RESULT([failed])
     AC_MSG_RESULT([ok])
   else
     AC_MSG_RESULT([failed])
@@ -875,31 +865,16 @@ AC_SUBST([FopCmd])
 ])# FP_PROG_FOP
 
 
 ])# FP_PROG_FOP
 
 
-# FP_PROG_FO_PROCESSOR
-# --------------------
-# Try to find an FO processor. PassiveTeX output is sometimes a bit strange, so
-# try FOP first. Sets the output variables FopCmd, XmltexCmd, DvipsCmd, and
-# PdfxmltexCmd.
-AC_DEFUN([FP_PROG_FO_PROCESSOR],
-[AC_REQUIRE([FP_PROG_FOP])
-AC_PATH_PROG([XmltexCmd], [xmltex])
-AC_PATH_PROG([DvipsCmd], [dvips])
-if test -z "$FopCmd"; then
-  if test -z "$XmltexCmd"; then
-    AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI or PostScript documentation])
-  else
-    if test -z "$DvipsCmd"; then
-      AC_MSG_WARN([cannot find a DVI  => PS converter, you will not be able to build PostScript documentation])
-    fi
-  fi
-  AC_PATH_PROG([PdfxmltexCmd], [pdfxmltex])
-  if test -z "$PdfxmltexCmd"; then
-    AC_MSG_WARN([cannot find an FO => PDF converter, you will not be able to build PDF documentation])
-  fi
-elif test -z "$XmltexCmd"; then
-  AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI documentation])
+# FP_PROG_HSTAGS
+# ----------------
+# Sets the output variable HstagsCmd to the full Haskell tags program path.
+# HstagsCmd is empty if no such program could be found.
+AC_DEFUN([FP_PROG_HSTAGS],
+[AC_PATH_PROG([HstagsCmd], [hasktags])
+if test -z "$HstagsCmd"; then
+  AC_MSG_WARN([cannot find hasktags in your PATH, you will not be able to build the tags])
 fi
 fi
-])# FP_PROG_FO_PROCESSOR
+])# FP_PROG_HSTAGS
 
 
 # FP_PROG_GHC_PKG
 
 
 # FP_PROG_GHC_PKG
@@ -912,6 +887,9 @@ AC_DEFUN([FP_PROG_GHC_PKG],
 [fp_ghc_pkg_guess=`echo $WithGhc | sed 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
 if "$fp_ghc_pkg_guess" -l > /dev/null 2>&1; then
   fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
 [fp_ghc_pkg_guess=`echo $WithGhc | sed 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
 if "$fp_ghc_pkg_guess" -l > /dev/null 2>&1; then
   fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
+elif "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
+  # from 6.10, ghc-pkg doesn't support the old -l syntax any more
+  fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
 else
   fp_cv_matching_ghc_pkg=no
 fi])
 else
   fp_cv_matching_ghc_pkg=no
 fi])
@@ -922,59 +900,52 @@ else
 fi])# FP_PROG_GHC_PKG
 
 
 fi])# FP_PROG_GHC_PKG
 
 
-# FP_GHC_HAS_READLINE
-# -------------------
-AC_DEFUN([FP_GHC_HAS_READLINE],
-[AC_REQUIRE([FP_PROG_GHC_PKG])
-AC_CACHE_CHECK([whether ghc has readline package], [fp_cv_ghc_has_readline],
-[if "${GhcPkgCmd-ghc-pkg}" --show-package readline >/dev/null 2>&1; then
-  fp_cv_ghc_has_readline=yes
-else
-  fp_cv_ghc_has_readline=no
- fi])
-AC_SUBST([GhcHasReadline], [`echo $fp_cv_ghc_has_readline | sed 'y/yesno/YESNO/'`])
-])# FP_GHC_HAS_READLINE
-
-
-# FP_GCC_NEEDS_NO_OMIT_LFPTR
-# --------------------------
+# FP_GCC_EXTRA_FLAGS
+# ------------------
+# Determine which extra flags we need to pass gcc when we invoke it
+# to compile .hc code.
+#
 # Some OSs (Mandrake Linux, in particular) configure GCC with
 # Some OSs (Mandrake Linux, in particular) configure GCC with
-# -momit-leaf-frame-pointer on by default. If this is the case, we need to turn
-# it off for mangling to work. The test is currently a bit crude, using only the
-# version number of gcc. Defines HAVE_GCC_MNO_OMIT_LFPTR.
-AC_DEFUN([FP_GCC_NEEDS_NO_OMIT_LFPTR],
-[AC_REQUIRE([FP_HAVE_GCC])
-AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], [fp_cv_gcc_needs_no_omit_lfptr],
-[FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.2],
-  [fp_cv_gcc_needs_no_omit_lfptr=yes],
-  [fp_cv_gcc_needs_no_omit_lfptr=no])])
-if test "$fp_cv_gcc_needs_no_omit_lfptr" = "yes"; then
-   AC_DEFINE([HAVE_GCC_MNO_OMIT_LFPTR], [1], [Define to 1 if gcc supports -mno-omit-leaf-frame-pointer.])
-fi])# FP_GCC_NEEDS_NO_OMIT_LFPTR
-
-# FP_GCC_HAS_NO_UNIT_AT_A_TIME
-# --------------------------
-AC_DEFUN([FP_GCC_HAS_NO_UNIT_AT_A_TIME],
+# -momit-leaf-frame-pointer on by default. If this is the case, we
+# need to turn it off for mangling to work. The test is currently a
+# bit crude, using only the version number of gcc.
+# 
+# -fwrapv is needed for gcc to emit well-behaved code in the presence of
+# integer wrap around. (Trac #952)
+#
+# -fno-unit-at-a-time or -fno-toplevel-reoder is necessary to avoid gcc
+# reordering things in the module and confusing the manger and/or splitter.
+# (eg. Trac #1427)
+#
+AC_DEFUN([FP_GCC_EXTRA_FLAGS],
 [AC_REQUIRE([FP_HAVE_GCC])
 [AC_REQUIRE([FP_HAVE_GCC])
-AC_CACHE_CHECK([whether gcc has -fno-unit-at-a-time], [fp_cv_gcc_has_no_unit_at_a_time],
-[FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
-  [fp_cv_gcc_has_no_unit_at_a_time=yes],
-  [fp_cv_gcc_has_no_unit_at_a_time=no])])
-if test "$fp_cv_gcc_has_no_unit_at_a_time" = "yes"; then
-   AC_DEFINE([HAVE_GCC_HAS_NO_UNIT_AT_A_TIME], [1], [Define to 1 if gcc supports -fno-unit-at-a-time.])
-fi])
+AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
+[fp_cv_gcc_extra_opts=
+ FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
+  [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
+  [])
+ case $TargetPlatform in
+  i386-*|x86_64-*) 
+     FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.2],
+      [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"],
+      [])
+    FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
+     [FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
+       [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
+       [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-unit-at-a-time"]
+     )],
+     [])
+  ;;
+  sparc-*-solaris2) 
+    FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
+      [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
+      [])
+  ;;
+ esac
+])
+AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
+])
 
 
-# FP_GCC_HAS_WRAPV
-# --------------------------
-AC_DEFUN([FP_GCC_HAS_WRAPV],
-[AC_REQUIRE([FP_HAVE_GCC])
-AC_CACHE_CHECK([whether gcc has -fwrapv], [fp_cv_gcc_has_wrapv],
-[FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
-  [fp_cv_gcc_has_wrapv=yes],
-  [fp_cv_gcc_has_wrapv=no])])
-if test "$fp_cv_gcc_has_wrapv" = "yes"; then
-   AC_DEFINE([HAVE_GCC_HAS_WRAPV], [1], [Define to 1 if gcc supports -fwrapv.])
-fi])
 
 # FP_SETUP_PROJECT_VERSION
 # ---------------------
 
 # FP_SETUP_PROJECT_VERSION
 # ---------------------
@@ -985,9 +956,19 @@ if test "$RELEASE" = "NO"; then
     if test -f VERSION_DATE; then
         PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
         AC_MSG_RESULT(given $PACKAGE_VERSION)
     if test -f VERSION_DATE; then
         PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
         AC_MSG_RESULT(given $PACKAGE_VERSION)
+    elif test -d .git; then
+        changequote(, )dnl
+        ver_date=`git log -n 1 --date=short --pretty=format:%ci | sed "s/^.*\([0-9][0-9][0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\).*$/\1\2\3/"`
+        if echo $ver_date | grep '^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$' 2>&1 >/dev/null; then true; else
+        changequote([, ])dnl
+                AC_MSG_ERROR([failed to detect version date: check that git is in your path])
+        fi
+        PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
+        AC_MSG_RESULT(inferred $PACKAGE_VERSION)
     elif test -d _darcs; then
     elif test -d _darcs; then
+        # TODO: Remove this branch after conversion to Git
         changequote(, )dnl
         changequote(, )dnl
-        ver_date=`darcs changes --quiet --no-summary --xml | head -500 | grep 'date=' | sed "s/^.*date='\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*$/\1/g" | sort -n | tail -1`
+        ver_date=`darcs changes --quiet --no-summary --xml | head -500 | grep 'date=' | sed "s/^.*date='\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*$/\1/g" | ${SortCmd} -n | tail -1`
         if echo $ver_date | grep '^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$' 2>&1 >/dev/null; then true; else
         changequote([, ])dnl
                 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
         if echo $ver_date | grep '^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$' 2>&1 >/dev/null; then true; else
         changequote([, ])dnl
                 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
@@ -998,7 +979,7 @@ if test "$RELEASE" = "NO"; then
         PACKAGE_VERSION=`cat VERSION`
         AC_MSG_RESULT(given $PACKAGE_VERSION)
     else
         PACKAGE_VERSION=`cat VERSION`
         AC_MSG_RESULT(given $PACKAGE_VERSION)
     else
-        AC_MSG_WARN([cannot determine snapshot version: no _darcs directory and no VERSION file])
+        AC_MSG_WARN([cannot determine snapshot version: no .git or _darcs directory and no VERSION file])
     fi
 fi
 
     fi
 fi
 
@@ -1029,10 +1010,19 @@ ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
 AC_SUBST([ProjectPatchLevel])
 ])# FP_SETUP_PROJECT_VERSION
 
 AC_SUBST([ProjectPatchLevel])
 ])# FP_SETUP_PROJECT_VERSION
 
+
+# Check for a working timer_create().  We need a pretty detailed check
+# here, because there exist partially-working implementations of
+# timer_create() in certain versions of Linux (see bug #1933).
+#
 AC_DEFUN([FP_CHECK_TIMER_CREATE],
   [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)], 
     [fptools_cv_timer_create_works],
     [AC_TRY_RUN([
 AC_DEFUN([FP_CHECK_TIMER_CREATE],
   [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)], 
     [fptools_cv_timer_create_works],
     [AC_TRY_RUN([
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
 #ifdef HAVE_TIME_H
 #include <time.h>
 #endif
 #ifdef HAVE_TIME_H
 #include <time.h>
 #endif
@@ -1042,19 +1032,103 @@ AC_DEFUN([FP_CHECK_TIMER_CREATE],
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+
+static volatile int tock = 0;
+static void handler(int i)
+{
+   tock = 1;
+}
+
+static void timeout(int i)
+{
+  // timer_settime() has been known to hang, so just in case
+  // we install a 1-second timeout (see #2257)
+  exit(99);
+}
+
 int main(int argc, char *argv[])
 {
 int main(int argc, char *argv[])
 {
-#if HAVE_TIMER_CREATE && HAVE_TIMER_SETTIME
+
     struct sigevent ev;
     timer_t timer;
     struct sigevent ev;
     timer_t timer;
+    struct itimerspec it;
+    struct sigaction action;
+    int m,n,count = 0;
+
     ev.sigev_notify = SIGEV_SIGNAL;
     ev.sigev_signo  = SIGVTALRM;
     ev.sigev_notify = SIGEV_SIGNAL;
     ev.sigev_signo  = SIGVTALRM;
+
+    action.sa_handler = handler;
+    action.sa_flags = 0;
+    sigemptyset(&action.sa_mask);
+    if (sigaction(SIGVTALRM, &action, NULL) == -1) {
+        fprintf(stderr,"SIGVTALRM problem\n");
+        exit(3);
+    }
+
+    action.sa_handler = timeout;
+    action.sa_flags = 0;
+    sigemptyset(&action.sa_mask);
+    if (sigaction(SIGALRM, &action, NULL) == -1) {
+      fprintf(stderr,"SIGALRM problem\n");
+      exit(3);
+    }
+    alarm(1);
+
     if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
     if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
+        fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
        exit(1);
     }
        exit(1);
     }
-#else
-    exit(1)
-#endif
+
+    it.it_value.tv_sec = 0;
+    it.it_value.tv_nsec = 1;
+    it.it_interval = it.it_value;
+    if (timer_settime(timer, 0, &it, NULL) != 0) {
+        fprintf(stderr,"settime problem\n");
+        exit(4);
+    }
+
+    tock = 0;
+
+    for(n = 3; n < 20000; n++){
+        for(m = 2; m <= n/2; m++){
+            if (!(n%m)) count++;
+            if (tock) goto out;
+        }
+    }
+out:
+
+    if (!tock) {
+        fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
+        exit(5);
+    }
+
+    timer_delete(timer);
+
+    if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
+        fprintf(stderr,"No CLOCK_REALTIME timer\n");
+        exit(2);
+    }
+
+    it.it_value.tv_sec = 0;
+    it.it_value.tv_nsec = 1000000;
+    it.it_interval = it.it_value;
+    if (timer_settime(timer, 0, &it, NULL) != 0) {
+        fprintf(stderr,"settime problem\n");
+        exit(4);
+    }
+
+    tock = 0;
+
+    usleep(3000);
+
+    if (!tock) {
+        fprintf(stderr,"no CLOCK_REALTIME signal\n");
+        exit(5);
+    }
+
+    timer_delete(timer);
+
     exit(0);
 }
      ],
     exit(0);
 }
      ],
@@ -1089,6 +1163,35 @@ AC_DEFUN([CHECK_GMP],
 AC_REQUIRE([AC_PROG_CC])
 ])
 
 AC_REQUIRE([AC_PROG_CC])
 ])
 
+# FP_CHECK_MACOSX_DEPLOYMENT_TARGET
+# ---------------------------------
+AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
+[
+if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
+  AC_MSG_CHECKING([Mac OS X deployment target])
+  case $FP_MACOSX_DEPLOYMENT_TARGET in
+    none)  ;;
+    10.4)  MACOSX_DEPLOYMENT_VERSION=10.4
+          MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
+          ;;
+    10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
+          MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
+          ;;
+    *)     MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
+          MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
+          ;;
+  esac
+  if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
+    AC_MSG_RESULT(none)
+  else
+    if test ! -d $MACOSX_DEPLOYMENT_SDK; then
+      AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
+    fi
+    AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
+  fi
+fi
+])
+
 # --------------------------------------------------------------
 # Calculate absolute path to build tree
 # --------------------------------------------------------------
 # --------------------------------------------------------------
 # Calculate absolute path to build tree
 # --------------------------------------------------------------
@@ -1097,26 +1200,29 @@ AC_DEFUN([FP_FIND_ROOT],[
 AC_MSG_CHECKING(for path to top of build tree)
 
 dnl This would be
 AC_MSG_CHECKING(for path to top of build tree)
 
 dnl This would be
-dnl     make -C utils/pwd clean && make -C utils/pwd
+dnl     make -C utils/ghc-pwd clean && make -C utils/ghc-pwd
 dnl except we don't want to have to know what make is called. Sigh.
 dnl except we don't want to have to know what make is called. Sigh.
-cd utils/pwd
-rm -f *.o
-rm -f *.hi
-rm -f pwd
-rm -f pwd.exe
-$WithGhc -v0 --make pwd
-cd ../..
+if test ! -f utils/ghc-pwd/ghc-pwd && test ! -f utils/ghc-pwd/ghc-pwd.exe; then
+  cd utils/ghc-pwd
+  rm -f *.o
+  rm -f *.hi
+  rm -f ghc-pwd
+  rm -f ghc-pwd.exe
+  "$WithGhc" -v0 --make ghc-pwd -o ghc-pwd
+  cd ../..
+fi
 
 
-hardtop=`utils/pwd/pwd forwardslash`
+hardtop=`utils/ghc-pwd/ghc-pwd`
+
+if ! test -d "$hardtop"; then
+  AC_MSG_ERROR([cannot determine current directory])
+fi   
 
 dnl Remove common automounter nonsense
 dnl
 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
 
 
 dnl Remove common automounter nonsense
 dnl
 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
 
-hardtop_plat="$hardtop"
-
 AC_SUBST(hardtop)
 AC_SUBST(hardtop)
-AC_SUBST(hardtop_plat)
 
 AC_MSG_RESULT(${hardtop})
 
 
 AC_MSG_RESULT(${hardtop})
 
@@ -1129,4 +1235,96 @@ case "$hardtop" in
 esac
 ])
 
 esac
 ])
 
+# GHC_CONVERT_CPU(cpu, target_var)
+# --------------------------------
+# converts cpu from gnu to ghc naming, and assigns the result to $target_var
+AC_DEFUN([GHC_CONVERT_CPU],[
+case "$1" in
+  alpha*)
+    $2="alpha"
+    ;;
+  arm*)
+    $2="arm"
+    ;;
+  hppa1.1*)
+    $2="hppa1_1"
+    ;;
+  hppa*)
+    $2="hppa"
+    ;;
+  i386)
+    $2="i386"
+    ;;
+  ia64)
+    $2="ia64"
+    ;;
+  m68k*)
+    $2="m68k"
+    ;;
+  mipseb*)
+    $2="mipseb"
+    ;;
+  mipsel*)
+    $2="mipsel"
+    ;;
+  mips*)
+    $2="mips"
+    ;;
+  powerpc64*)
+    $2="powerpc64"
+    ;;
+  powerpc*)
+    $2="powerpc"
+    ;;
+  rs6000)
+    $2="rs6000"
+    ;;
+  s390*)
+    $2="s390"
+    ;;
+  sparc64*)
+    $2="sparc64"
+    ;;
+  sparc*)
+    $2="sparc"
+    ;;
+  vax)
+    $2="vax"
+    ;;
+  x86_64)
+    $2="x86_64"
+    ;;
+  *)
+    echo "Unknown CPU $1"
+    exit 1
+    ;;
+  esac
+])
+
+# GHC_CONVERT_VENDOR(vendor, target_var)
+# --------------------------------
+# converts vendor from gnu to ghc naming, and assigns the result to $target_var
+AC_DEFUN([GHC_CONVERT_VENDOR],[
+$2="$1"
+])
+
+# GHC_CONVERT_OS(os, target_var)
+# --------------------------------
+# converts os from gnu to ghc naming, and assigns the result to $target_var
+AC_DEFUN([GHC_CONVERT_OS],[
+case "$1" in
+  linux-*|linux)
+    $2="linux"
+    ;;
+  # As far as I'm aware, none of these have relevant variants
+  freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
+    $2="$1"
+    ;;
+  *)
+    echo "Unknown OS $1"
+    exit 1
+    ;;
+  esac
+])
+
 # LocalWords:  fi
 # LocalWords:  fi