White space only
[ghc.git] / aclocal.m4
index d4a58f9..f5ae279 100644 (file)
@@ -4,6 +4,68 @@
 # ensure we don't clash with any pre-supplied autoconf ones.
 
 
+# FPTOOLS_SET_C_LD_FLAGS
+# ----------------------------------
+# Set the C and LD flags for a given platform
+AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
+[
+    AC_MSG_CHECKING([Setting up $2, $3 and $4])
+    case $$1 in
+    i386-apple-darwin)
+        # By default, gcc on OS X will generate SSE
+        # instructions, which need things 16-byte aligned,
+        # but we don't 16-byte align things. Thus drop
+        # back to generic i686 compatibility. Trac #2983.
+        $2="$$2 -march=i686 -m32"
+        $3="$$3 -march=i686 -m32"
+        $4="$$4 -march=i686 -m32"
+        ;;
+    x86_64-apple-darwin)
+        $2="$$2 -m64"
+        $3="$$3 -m64"
+        $4="$$4 -m64"
+        ;;
+    esac
+
+    case $$1 in
+    i386-apple-darwin|x86_64-apple-darwin)
+        # We support back to OS X 10.5
+        $2="$$2 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
+        $3="$$3 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
+        $4="$$4 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
+        ;;
+    esac
+
+    # If gcc knows about the stack protector, turn it off.
+    # Otherwise the stack-smash handler gets triggered.
+    echo 'int main(void) {return 0;}' > conftest.c
+    if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
+    then
+        $2="$$2 -fno-stack-protector"
+    fi
+    rm -f conftest.c conftest.o
+    AC_MSG_RESULT([done])
+])
+
+
+# FP_VISIBILITY_HIDDEN
+# ----------------------------------
+# Is the visibility hidden attribute supported?
+AC_DEFUN([FP_VISIBILITY_HIDDEN],
+[
+    AC_MSG_CHECKING([whether __attribute__((visibility("hidden"))) is supported])
+    echo '__attribute__((visibility("hidden"))) void foo(void) {}' > conftest.c
+    if $CC -Wall -Werror -c conftest.c > /dev/null 2>&1
+    then
+        AC_MSG_RESULT([yes])
+        AC_DEFINE(HAS_VISIBILITY_HIDDEN, 1, [Has visibility hidden])
+    else
+        AC_MSG_RESULT([no])
+    fi
+    rm -f conftest.c conftest.o
+])
+
+
 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
 # ----------------------------------
 # Little endian Arm on Linux with some ABIs has big endian word order
@@ -123,7 +185,7 @@ AC_DEFUN([FP_COMPUTE_INT],
 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
 # given type. Defines ALIGNMENT_TYPE.
 AC_DEFUN([FP_CHECK_ALIGNMENT],
-[AS_LITERAL_IF([$1], [],
+[AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [],
                [AC_FATAL([$0: requires literal arguments])])[]dnl
 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
@@ -264,7 +326,7 @@ if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
    test "${HappyCmd}"    != ""
 then
     # Canonicalise to <drive>:/path/to/gcc
-    HappyCmd=`cygpath -m ${HappyCmd}`
+    HappyCmd=`cygpath -m "${HappyCmd}"`
     AC_MSG_NOTICE([normalized happy command to $HappyCmd])
 fi
 
@@ -300,7 +362,7 @@ if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
    test "${AlexCmd}"     != ""
 then
     # Canonicalise to <drive>:/path/to/gcc
-    AlexCmd=`cygpath -m ${AlexCmd}`
+    AlexCmd=`cygpath -m "${AlexCmd}"`
 fi
 
 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
@@ -372,10 +434,10 @@ AC_DEFUN([FP_PROG_AR],
 if test -z "$fp_prog_ar_raw"; then
   AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
 fi
-fp_prog_ar=$fp_prog_ar_raw
+fp_prog_ar="$fp_prog_ar_raw"
 case $HostPlatform in
   *mingw32) if test x${OSTYPE} != xmsys; then
-             fp_prog_ar="`cygpath -w ${fp_prog_ar_raw} | sed -e 's@\\\\@/@g'`"
+             fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`"
               AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
             fi
             ;;
@@ -389,15 +451,42 @@ esac
 AC_DEFUN([FP_PROG_AR_IS_GNU],
 [AC_REQUIRE([FP_PROG_AR])
 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
-[if $fp_prog_ar_raw --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
+[if "$fp_prog_ar_raw" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
   fp_cv_prog_ar_is_gnu=yes
 else
   fp_cv_prog_ar_is_gnu=no
 fi])
 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
+AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
 ])# FP_PROG_AR_IS_GNU
 
 
+# FP_PROG_AR_SUPPORTS_ATFILE
+# -----------------
+# Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
+# or not it supports the @file syntax
+AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
+[AC_REQUIRE([FP_PROG_AR])
+ AC_REQUIRE([FP_PROG_AR_ARGS])
+AC_CACHE_CHECK([whether $fp_prog_ar_raw supports @file], [fp_cv_prog_ar_supports_atfile],
+[
+rm -f conftest*
+touch conftest.file
+echo conftest.file  > conftest.atfile
+echo conftest.file >> conftest.atfile
+"$fp_prog_ar_raw" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
+fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar_raw" t conftest.a 2> /dev/null | grep -c conftest.file`
+rm -f conftest*
+if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
+then
+  fp_cv_prog_ar_supports_atfile=yes
+else
+  fp_cv_prog_ar_supports_atfile=no
+fi])
+fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
+AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
+])# FP_PROG_AR_SUPPORTS_ATFILE
+
 # FP_PROG_AR_ARGS
 # ---------------
 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
@@ -415,7 +504,7 @@ else
   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
@@ -426,7 +515,8 @@ else
   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
 
@@ -472,7 +562,7 @@ AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_support
 if test $fp_prog_ar_is_gnu = no; then
   rm -f conftest*
   touch conftest.lst
-  if FP_EVAL_STDERR([$fp_prog_ar_raw $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
+  if FP_EVAL_STDERR(["$fp_prog_ar_raw" $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
     test -s conftest.err || fp_cv_prog_ar_supports_input=yes
   fi
   rm -f conftest*
@@ -696,7 +786,7 @@ AS_VAR_POPDEF([fp_func])dnl
 
 # FP_GEN_DOCBOOK_XML
 # ------------------
-# Generates a DocBook XML V4.2 document in conftest.xml.
+# Generates a DocBook XML V4.5 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
@@ -708,8 +798,8 @@ AC_DEFUN([FP_GEN_DOCBOOK_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"
-   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [[
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [[
 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
 ]]>
 <book id="test">
@@ -803,7 +893,7 @@ if test -n "$XmllintCmd"; then
     AC_MSG_RESULT([ok])
   else
     AC_MSG_RESULT([failed])
-    AC_MSG_WARN([cannot find a DTD for DocBook XML V4.2, you will not be able to validate your documentation])
+    AC_MSG_WARN([cannot find a DTD for DocBook XML V4.5, you will not be able to validate your documentation])
     AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
   fi
   rm -rf conftest*
@@ -879,24 +969,24 @@ fi
 # FP_PROG_GHC_PKG
 # ----------------
 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
-# WithGhc. If the latter is unset or no matching ghc-pkg can be found, try to
-# find a plain ghc-pkg. Sets the output variable GhcPkgCmd.
+# WithGhc. Sets the output variable GhcPkgCmd.
 AC_DEFUN([FP_PROG_GHC_PKG],
 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_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
-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
+[
+# If we are told to use ghc-stage2, then we're using an in-tree
+# compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
+# so we sed off -stage[0-9]$. However, if we are told to use
+# ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
+# other suffix.
+fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
+if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
   fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
 else
-  fp_cv_matching_ghc_pkg=no
+  AC_MSG_ERROR([Cannot find matching ghc-pkg])
 fi])
-if test x"$fp_cv_matching_ghc_pkg" = xno; then
-  AC_PATH_PROG([GhcPkgCmd], [ghc-pkg])
-else
-  GhcPkgCmd=$fp_cv_matching_ghc_pkg
-fi])# FP_PROG_GHC_PKG
+GhcPkgCmd=$fp_cv_matching_ghc_pkg
+AC_SUBST([GhcPkgCmd])
+])# FP_PROG_GHC_PKG
 
 
 # FP_GCC_EXTRA_FLAGS
@@ -1140,27 +1230,53 @@ case $fptools_cv_timer_create_works in
 esac
 ])
 
-# FP_ARG_GMP
+# FP_ICONV
 # -------------
-AC_DEFUN([FP_ARG_GMP],
+AC_DEFUN([FP_ICONV],
 [
-AC_ARG_WITH([gmp-includes],
-  [AC_HELP_STRING([--with-gmp-includes],
-    [directory containing gmp.h])],
-    [gmp_includes=$withval],
-    [gmp_includes=NONE])
-
-AC_ARG_WITH([gmp-libraries],
-  [AC_HELP_STRING([--with-gmp-libraries],
-    [directory containing gmp library])],
-    [gmp_libraries=$withval],
-    [gmp_libraries=NONE])
-])# FP_ARG_GMP
-
-AC_DEFUN([CHECK_GMP],
-[AC_REQUIRE([AC_PROG_CPP])
-AC_REQUIRE([AC_PROG_CC])
-])
+  dnl--------------------------------------------------------------------
+  dnl * Deal with arguments telling us iconv is somewhere odd
+  dnl--------------------------------------------------------------------
+
+  dnl Note: ICONV_LIB_DIRS and ICONV_INCLUDE_DIRS are not predefined
+  dnl to the empty string to allow them to be overridden from the
+  dnl environment.
+
+  AC_ARG_WITH([iconv-includes],
+    [AC_HELP_STRING([--with-iconv-includes],
+      [directory containing iconv.h])],
+      [ICONV_INCLUDE_DIRS=$withval])
+
+  AC_ARG_WITH([iconv-libraries],
+    [AC_HELP_STRING([--with-iconv-libraries],
+      [directory containing iconv library])],
+      [ICONV_LIB_DIRS=$withval])
+
+  AC_SUBST(ICONV_INCLUDE_DIRS)
+  AC_SUBST(ICONV_LIB_DIRS)
+])# FP_ICONV
+
+# FP_GMP
+# -------------
+AC_DEFUN([FP_GMP],
+[
+  dnl--------------------------------------------------------------------
+  dnl * Deal with arguments telling us gmp is somewhere odd
+  dnl--------------------------------------------------------------------
+
+  AC_ARG_WITH([gmp-includes],
+    [AC_HELP_STRING([--with-gmp-includes],
+      [directory containing gmp.h])],
+      [GMP_INCLUDE_DIRS=$withval])
+
+  AC_ARG_WITH([gmp-libraries],
+    [AC_HELP_STRING([--with-gmp-libraries],
+      [directory containing gmp library])],
+      [GMP_LIB_DIRS=$withval])
+
+  AC_SUBST(GMP_INCLUDE_DIRS)
+  AC_SUBST(GMP_LIB_DIRS)
+])# FP_GMP
 
 # FP_CHECK_MACOSX_DEPLOYMENT_TARGET
 # ---------------------------------
 # Calculate absolute path to build tree
 # --------------------------------------------------------------
 
+AC_DEFUN([FP_INTREE_GHC_PWD],[
+AC_MSG_NOTICE(Building in-tree ghc-pwd)
+    dnl This would be
+    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.
+    rm -rf utils/ghc-pwd/dist-boot
+    mkdir  utils/ghc-pwd/dist-boot
+    if ! "$WithGhc" -v0 -no-user-package-conf -hidir utils/ghc-pwd/dist-boot -odir utils/ghc-pwd/dist-boot -stubdir utils/ghc-pwd/dist-boot --make utils/ghc-pwd/Main.hs -o utils/ghc-pwd/dist-boot/ghc-pwd
+    then
+        AC_MSG_ERROR([Building ghc-pwd failed])
+    fi
+
+    GHC_PWD=utils/ghc-pwd/dist-boot/ghc-pwd
+])
+
+AC_DEFUN([FP_BINDIST_GHC_PWD],[
+    GHC_PWD=utils/ghc-pwd/dist/build/tmp/ghc-pwd
+])
+
 AC_DEFUN([FP_FIND_ROOT],[
 AC_MSG_CHECKING(for path to top of build tree)
+    hardtop=`$GHC_PWD`
 
-dnl This would be
-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.
-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
+    dnl Remove common automounter nonsense
+    hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
 
-hardtop=`utils/ghc-pwd/ghc-pwd`
+    if ! test -d "$hardtop"; then
+        AC_MSG_ERROR([cannot determine current directory])
+    fi
 
-if ! test -d "$hardtop"; then
-  AC_MSG_ERROR([cannot determine current directory])
-fi   
+    dnl We don't support building in directories with spaces.
+    case "$hardtop" in
+    *' '*)
+        AC_MSG_ERROR([
+        The build system does not support building in a directory
+        containing space characters.
+        Suggestion: move the build tree somewhere else.])
+        ;;
+    esac
 
-dnl Remove common automounter nonsense
-dnl
-hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
+    AC_SUBST(hardtop)
+
+    AC_MSG_RESULT($hardtop)
+])
 
-AC_SUBST(hardtop)
+# 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
+])
 
-AC_MSG_RESULT(${hardtop})
+# 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"
+])
 
-# We don't support building in directories with spaces.
-case "$hardtop" in
-  *' '*) AC_MSG_ERROR([
-   The build system does not support building in a directory containing
-   space characters.  Suggestion: move the build tree somewhere else.])
- ;;
-esac
+# 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
+])
+
+# LIBRARY_VERSION(lib)
+# --------------------------------
+# Gets the version number of a library.
+# If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3
+AC_DEFUN([LIBRARY_VERSION],[
+LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/$1/$1.cabal | sed "s/.* //"`
+AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION)
 ])
 
 # LocalWords:  fi