X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=aclocal.m4;h=bee5085b4ba5b5b93646235a0d04fa7a7659137a;hp=01e5c4fb405981754741d30590f07c6723f554cf;hb=9ba922ee06b048774d7a82964867ff768a78126e;hpb=049481ee9713acd755376033c3f131f6babbffff diff --git a/aclocal.m4 b/aclocal.m4 index 01e5c4f..bee5085 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -4,8 +4,66 @@ # 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], +[ + 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" + ;; + x86_64-apple-darwin) + $2="$$2 -m64" + $3="$$3 -m64" + ;; + 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 conftest.c conftest.o +]) + + +# FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN +# ---------------------------------- +# Little endian Arm on Linux with some ABIs has big endian word order +# in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case. +AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN], + [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [#include ], + [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN + return 0; + #else + not float word order big endian + #endif] + )], + [fptools_cv_float_word_order_bigendian=yes], + [fptools_cv_float_word_order_bigendian=no]) + ]) + case $fptools_cv_float_word_order_bigendian in + yes) + AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1, + [Define to 1 if your processor stores words of floats with + the most significant byte first]) ;; + esac +]) + + # FP_EVAL_STDERR(COMMAND) -# ------------------------ +# ----------------------- # Eval COMMAND, save its stderr (without lines resulting from shell tracing) # into the file conftest.err and the exit status in the variable fp_status. AC_DEFUN([FP_EVAL_STDERR], @@ -17,36 +75,38 @@ AC_DEFUN([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 @@ -61,7 +121,7 @@ AC_DEFUN([FP_PROG_CONTEXT_DIFF], [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" @@ -75,29 +135,8 @@ AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff]) ])# FP_PROG_CONTEXT_DIFF -# FP_DECL_ALTZONE -# ------------------- -# Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise. -# -# Used by base package. -AC_DEFUN([FP_DECL_ALTZONE], -[AC_REQUIRE([AC_HEADER_TIME])dnl -AC_CHECK_HEADERS([sys/time.h]) -AC_CHECK_DECLS([altzone], [], [],[#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif]) -])# FP_DECL_ALTZONE - - # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS) -# --------------------------------------------------------- +# -------------------------------------------------------- # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for # compilation. Execute IF-FAILS when unable to determine the value. Works for # cross-compilation, too. @@ -115,7 +154,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 @@ -134,89 +173,45 @@ m4_popdef([fp_Cache])[]dnl ])# FP_CHECK_ALIGNMENT -# FP_CHECK_CONST(EXPRESSION, [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = -1]) -# --------------------------------------------------------------------------------- -# Defines CONST_EXPRESSION to the value of the compile-time EXPRESSION, using -# INCLUDES. If the value cannot be determined, use VALUE-IF-FAIL. -AC_DEFUN([FP_CHECK_CONST], -[AS_VAR_PUSHDEF([fp_Cache], [fp_cv_const_$1])[]dnl -AC_CACHE_CHECK([value of $1], fp_Cache, -[FP_COMPUTE_INT([$1], fp_check_const_result, [AC_INCLUDES_DEFAULT([$2])], - [fp_check_const_result=m4_default([$3], ['-1'])]) -AS_VAR_SET(fp_Cache, [$fp_check_const_result])])[]dnl -AC_DEFINE_UNQUOTED(AS_TR_CPP([CONST_$1]), AS_VAR_GET(fp_Cache), [The value of $1.])[]dnl -AS_VAR_POPDEF([fp_Cache])[]dnl -])# FP_CHECK_CONST - - -# FP_CHECK_CONSTS_TEMPLATE(EXPRESSION...) -# ---------------------------------- -# autoheader helper for FP_CHECK_CONSTS -m4_define([FP_CHECK_CONSTS_TEMPLATE], -[AC_FOREACH([fp_Const], [$1], - [AH_TEMPLATE(AS_TR_CPP(CONST_[]fp_Const), - [The value of ]fp_Const[.])])[]dnl -])# FP_CHECK_CONSTS_TEMPLATE - - -# FP_CHECK_CONSTS(EXPRESSION..., [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = -1]) -# ------------------------------------------------------------------------------------- -# List version of FP_CHECK_CONST -AC_DEFUN(FP_CHECK_CONSTS, -[FP_CHECK_CONSTS_TEMPLATE([$1])dnl -for fp_const_name in $1 -do -FP_CHECK_CONST([$fp_const_name], [$2], [$3]) -done -])# FP_CHECK_CONSTS - - -dnl ** check for leading underscores in symbol names -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 -dnl Some nlist implementations seem to try to be compatible by ignoring -dnl a leading underscore sometimes (eg. FreeBSD). We therefore have -dnl to work around this by checking for *no* leading underscore first. -dnl Sigh. --SDM -dnl -dnl Similarly on OpenBSD, but this test doesn't help. -- dons -dnl -AC_DEFUN(FPTOOLS_UNDERSCORE, -[AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl -AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore, - -dnl -dnl Hack!: nlist() under Digital UNIX insist on there being an _, -dnl but symbol table listings shows none. What is going on here?!? -dnl -dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire -dnl the underscoredness of that "platform" -changequote(<<, >>)dnl -<< +# FP_LEADING_UNDERSCORE +# --------------------- +# Test for determining whether symbol names have a leading underscore. We assume +# that they _haven't_ if anything goes wrong. Sets the output variable +# LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly. +# +# Some nlist implementations seem to try to be compatible by ignoring a leading +# underscore sometimes (eg. FreeBSD). We therefore have to work around this by +# checking for *no* leading underscore first. Sigh. --SDM +# +# Similarly on OpenBSD, but this test doesn't help. -- dons +AC_DEFUN([FP_LEADING_UNDERSCORE], +[AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"]) +AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [ +# Hack!: nlist() under Digital UNIX insist on there being an _, +# but symbol table listings shows none. What is going on here?!? +# +# Another hack: cygwin doesn't come with nlist.h , so we hardwire +# the underscoredness of that "platform" case $HostPlatform in *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore - case $build in - i386-*2\.[[0-9]] | i386-*3\.[[0-3]] ) fptools_cv_lead_uscore='yes' ;; - *) fptools_cv_lead_uscore='no' ;; - esac ;; -alpha-dec-osf*) fptools_cv_lead_uscore='no';; -*cygwin32) fptools_cv_lead_uscore='yes';; -*mingw32) fptools_cv_lead_uscore='yes';; -*) >> -changequote([, ])dnl -AC_TRY_RUN([#ifdef HAVE_NLIST_H + case $build in + i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;; + *) fptools_cv_leading_underscore=no ;; + esac ;; +alpha-dec-osf*) fptools_cv_leading_underscore=no;; +*cygwin32) fptools_cv_leading_underscore=yes;; +*mingw32) fptools_cv_leading_underscore=yes;; + + # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries +x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;; + +*) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H #include -changequote(<<, >>)dnl -<< struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}}; struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}}; #endif -main(argc, argv) +int main(argc, argv) int argc; char **argv; { @@ -224,19 +219,16 @@ char **argv; if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0) exit(1); if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0) - exit(0);>> -changequote([, ])dnl + exit(0); #endif exit(1); -}], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO) +}]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no]) ;; -esac); -LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'` -AC_SUBST(LeadingUnderscore) -case $LeadingUnderscore in -YES) AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.]);; -esac -]) +esac]); +AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`]) +if test x"$fptools_cv_leading_underscore" = xyes; then + AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.]) +fi])# FP_LEADING_UNDERSCORE # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) @@ -271,7 +263,7 @@ AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl dnl dnl Check for GreenCard and version. dnl -AC_DEFUN(FPTOOLS_GREENCARD, +AC_DEFUN([FPTOOLS_GREENCARD], [ AC_PATH_PROG(GreenCardCmd,greencard) AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version, @@ -292,190 +284,271 @@ AC_SUBST(GreenCardVersion) dnl dnl Check for Happy and version. If we're building GHC, then we need -dnl at least Happy version 1.13. If there's no installed Happy, we look +dnl at least Happy version 1.14. If there's no installed Happy, we look dnl for a happy source tree and point the build system at that instead. dnl -AC_DEFUN(FPTOOLS_HAPPY, -[ -if test -d $srcdir/happy; then - SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace -fi -if test x"$UseSrcTreeHappy" = xYES; then - HappyCmd=$SrcTreeHappyCmd -else - AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd) +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 :/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"$SrcTreeHappyCmd"; then - fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`; -elif test x"$HappyCmd" != x; then - fptools_cv_happy_version="`$HappyCmd -v | - grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ; +[if test x"$HappyCmd" != x; then + fptools_cv_happy_version=`"$HappyCmd" -v | + grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ; else fptools_cv_happy_version=""; fi; changequote([, ])dnl ]) -if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then - FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.13], - [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])[]dnl +if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs +then + 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 -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, -[ -if test -d $srcdir/haddock; then - SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace -fi -if test x"$UseSrcTreeHaddock" = xYES; then - HaddockCmd=$SrcTreeHaddockCmd -else - AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd) -fi -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. If there's no installed Alex, we look -dnl for a alex source tree and point the build system at that instead. +dnl at least Alex version 2.0.1. dnl -AC_DEFUN(FPTOOLS_ALEX, +AC_DEFUN([FPTOOLS_ALEX], [ -if test -d $srcdir/alex; then - SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace -fi -if test x"$UseSrcTreeAlex" = xYES; then - AlexCmd=$SrcTreeAlexCmd -else - AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd) +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 :/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"$SrcTreeAlexCmd"; then - fptools_cv_alex_version=`grep '^ProjectVersion[ ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`; -elif 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'`" ; +[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'` ; else fptools_cv_alex_version=""; fi; changequote([, ])dnl ]) -if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then - FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0], - [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])[]dnl +if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs +then + 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) ]) -dnl -dnl Check whether ld supports -x -dnl -AC_DEFUN(FPTOOLS_LD_X, -[AC_CACHE_CHECK([whether ld understands -x], fptools_cv_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], [ -echo 'foo() {}' > conftest.c +AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x], +[echo 'foo() {}' > conftest.c ${CC-cc} -c conftest.c -if ${LdCmd} -r -x -o foo.o conftest.o; then - fptools_cv_ld_x=yes +if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then + fp_cv_ld_x=yes else - fptools_cv_ld_x=no + fp_cv_ld_x=no fi -rm -rf conftest.c conftest.o foo.o -]) -if test "$fptools_cv_ld_x" = yes; then - LdXFlag=-x +rm -rf conftest*]) +if test "$fp_cv_ld_x" = yes; then + LdXFlag=-x else - LdXFlag= + LdXFlag= fi -AC_SUBST(LdXFlag) -]) +AC_SUBST([LdXFlag]) +])# FP_PROG_LD_X -dnl *** Checking for ar and its arguments + whether we need ranlib. -dnl -dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed -dnl On Digital UNIX, we test for the -Z (compress) and -dnl -input (take list of files from external file) flags. -dnl -AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB, -[AC_PATH_PROG(ArCmdRaw,ar) -if test -z "$ArCmdRaw"; then - echo "You don't seem to have ar in your PATH...I have no idea how to make a library" - exit 1; -fi -dnl GNU ar needs special treatment: it appears to have problems with -dnl object files with the same name if you use the 's' modifier, but -dnl simple 'ar q' works fine, and doesn't need a separate ranlib. -if $ArCmdRaw --version | grep 'GNU' >/dev/null 2>/dev/null; then - ArCmdArgs='q' - NeedRanLib='' -elif $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then - ArCmdArgs="clqsZ" - NeedRanLib='' -elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then - ArCmdArgs="clqs" - NeedRanLib='' -elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then - ArCmdArgs="cqs" - NeedRanLib='' -elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then - ArCmdArgs="clq" - NeedRanLib='YES' -elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then - ArCmdArgs="cq" - NeedRanLib='YES' -elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then - ArCmdArgs="cq" - NeedRanLib='YES' +# 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_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 else - echo "I can't figure out how to use your $ArCmd" - exit 1 + fp_cv_gnu_ld=no +fi]) +AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`]) +])# FP_PROG_LD_IS_GNU + + +# FP_PROG_AR +# ---------- +# Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin +# version of it. Exits if no ar can be found +AC_DEFUN([FP_PROG_AR], +[AC_PATH_PROG([fp_prog_ar_raw], [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 -rm -rf conftest* +fp_prog_ar="$fp_prog_ar_raw" case $HostPlatform in - *mingw32) - ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}" - ;; - *) ArCmd="${ArCmdRaw} ${ArCmdArgs}" - ;; + *mingw32) if test x${OSTYPE} != xmsys; then + fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`" + AC_MSG_NOTICE([normalized ar command to $fp_prog_ar]) + fi + ;; esac -test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd" -AC_SUBST(ArCmd) -if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then - ArSupportsInput='-input' +])# FP_PROG_AR + + +# FP_PROG_AR_IS_GNU +# ----------------- +# Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not. +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 + fp_cv_prog_ar_is_gnu=yes else - ArSupportsInput='' + 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 +# to a non-Cygwin invocation of ar including these arguments. +AC_DEFUN([FP_PROG_AR_ARGS], +[AC_REQUIRE([FP_PROG_AR_IS_GNU]) +AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args], +[ +# GNU ar needs special treatment: it appears to have problems with +# object files with the same name if you use the 's' modifier, but +# simple 'ar q' works fine, and doesn't need a separate ranlib. +if test $fp_prog_ar_is_gnu = yes; then + fp_cv_prog_ar_args="q" +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 + fp_cv_prog_ar_args=$fp_var + break + fi + done + rm -f conftest* + if test -z "$fp_cv_prog_ar_args"; then + AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw]) + fi +fi]) +fp_prog_ar_args=$fp_cv_prog_ar_args +AC_SUBST([ArCmd], ["$fp_prog_ar"]) +AC_SUBST([ArArgs], ["$fp_prog_ar_args"]) + +])# FP_PROG_AR_ARGS + + +# FP_PROG_AR_NEEDS_RANLIB +# ----------------------- +# Sets the output variable RANLIB to "ranlib" if it is needed and found, +# to ":" otherwise. +AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB], +[AC_REQUIRE([FP_PROG_AR_IS_GNU]) +AC_REQUIRE([FP_PROG_AR_ARGS]) +AC_REQUIRE([AC_PROG_CC]) +AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib], +[if test $fp_prog_ar_is_gnu = yes; then + fp_cv_prog_ar_needs_ranlib=no +elif echo $TargetPlatform | grep "^.*-apple-darwin$" > /dev/null 2> /dev/null; then + # It's quite tedious to check for Apple's crazy timestamps in .a files, + # so we hardcode it. + fp_cv_prog_ar_needs_ranlib=yes +elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then + fp_cv_prog_ar_needs_ranlib=no +else + fp_cv_prog_ar_needs_ranlib=yes +fi]) +if test $fp_cv_prog_ar_needs_ranlib = yes; then + AC_PROG_RANLIB +else + RANLIB=":" + AC_SUBST([RANLIB]) fi -rm -rf conftest* -test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput" -AC_SUBST(ArSupportsInput) -if test -z "$NeedRanLib"; then - RANLIB=':' - test -n "$verbose" && echo " setting RANLIB to $RANLIB" - AC_SUBST(RANLIB) +])# FP_PROG_AR_NEEDS_RANLIB + + +# FP_PROG_AR_SUPPORTS_INPUT +# ------------------------- +# Sets the output variable ArSupportsInput to "-input" or "", depending on +# whether ar supports -input flag is supported or not. +AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT], +[AC_REQUIRE([FP_PROG_AR_IS_GNU]) +AC_REQUIRE([FP_PROG_AR_ARGS]) +AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input], +[fp_cv_prog_ar_supports_input=no +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 + test -s conftest.err || fp_cv_prog_ar_supports_input=yes + fi + rm -f conftest* +fi]) +if test $fp_cv_prog_ar_supports_input = yes; then + ArSupportsInput="-input" else - AC_PROG_RANLIB + ArSupportsInput="" fi -]) +AC_SUBST([ArSupportsInput]) +])# FP_PROG_AR_SUPPORTS_INPUT + dnl dnl AC_SHEBANG_PERL - can we she-bang perl? dnl -AC_DEFUN(FPTOOLS_SHEBANG_PERL, +AC_DEFUN([FPTOOLS_SHEBANG_PERL], [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl, [echo "#!$PerlCmd"' exit $1; @@ -490,99 +563,114 @@ fi rm -f conftest ])]) -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(FPTOOLS_HAVE_GCC, -[AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc, -[if test -z "$GCC"; then - echo '' - echo "You would be better off with gcc" - echo "Perhaps it is already installed, but not in your PATH?" - fptools_cv_have_gcc='no' + +# FP_HAVE_GCC +# ----------- +# Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the +# output variables HaveGcc and GccVersion. +AC_DEFUN([FP_HAVE_GCC], +[AC_REQUIRE([AC_PROG_CC]) +if test -z "$GCC"; then + fp_have_gcc=NO else -changequote(, )dnl - gcc_version_str="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1\.\2/g' `" -changequote([, ])dnl - fptools_cv_have_gcc='yes' - FP_COMPARE_VERSIONS([$gcc_version_str], [-lt], [2.0], - [fptools_cv_have_gcc='no' - echo "" - echo "your gcc version appears to be ..." - $CC --version - echo "gcc prior to 2.0 and have never worked with ghc." - echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok." - AC_MSG_ERROR([gcc 1.X has never been supported])]) + fp_have_gcc=YES fi +if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then + AC_MSG_ERROR([gcc is required]) +fi +GccLT34= +AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version], +[if test "$fp_have_gcc" = "YES"; then + 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 + fp_cv_gcc_version="not-installed" + fi ]) -HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'` -AC_SUBST(HaveGcc) -]) - -dnl -dnl Some OSs (Mandrake Linux, in particular) configure GCC with -dnl -momit-leaf-frame-pointer on by default. If this is the case, we -dnl need to turn it off for mangling to work. The test is currently a bit -dnl crude, using only the version number of gcc. -dnl -AC_DEFUN([FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR], -[AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], [fptools_cv_gcc_needs_no_omit_lfptr], -[FP_COMPARE_VERSIONS([$gcc_version_str], [-ge], [3.2], - [fptools_cv_gcc_needs_no_omit_lfptr=yes], - [fptools_cv_gcc_needs_no_omit_lfptr=no])]) -if test "$fptools_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])# FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR - +AC_SUBST([HaveGcc], [$fp_have_gcc]) +AC_SUBST([GccVersion], [$fp_cv_gcc_version]) +AC_SUBST(GccLT34) +])# FP_HAVE_GCC dnl Small feature test for perl version. Assumes PerlCmd -dnl contains path to perl binary +dnl contains path to perl binary. dnl -AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION, +dnl (Perl versions prior to v5.6 does not contain the string "v5"; +dnl instead they display version strings such as "version 5.005".) +dnl +AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION], [$PerlCmd -v >conftest.out 2>&1 -if grep "version 5" conftest.out >/dev/null 2>&1; then - : -else - if grep "v5.6" conftest.out >/dev/null 2>&1; then + if grep "v5" conftest.out >/dev/null 2>&1; then : else - if grep "v5.8" conftest.out >/dev/null 2>&1; then - : - else - if grep "version 6" conftest.out >/dev/null 2>&1; then - : - else - echo "Your version of perl probably won't work." - fi - fi + AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.]) fi -fi rm -fr conftest* ]) -dnl -dnl Getting at the right version of 'find' -dnl (i.e., not the MS util on a Win32 box). -dnl -AC_DEFUN(FPTOOLS_FIND_FIND, -[ -AC_PATH_PROG(Find2Cmd, find) -$Find2Cmd --version > conftest.out 2>&1 -if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then - # Encountered MS' find utility, which is not what we're after. - # - # HACK - AC_CHECK_PROG is useful here in that does let you reject - # an (absolute) entry in the path (Find2Cmd). It is not so useful - # in that it doesn't let you (AFAIU) set VARIABLE equal to the - # absolute path eventually found. So, hack around this by inspecting - # what variables hold the abs. path & use them directly. - AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd) + +# FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR, +# [VALUE-IF-NOT-FOUND], [PATH], [REJECT]) +# ----------------------------------------------------- +# HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path +# of PROG-TO-CHECK-FOR when found. +AC_DEFUN([FP_CHECK_PROG], +[AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl +)# FP_CHECK_PROC + + +# FP_PROG_FIND +# ------------ +# Find a non-WinDoze version of the "find" utility. +AC_DEFUN([FP_PROG_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 + # OK, looks like a real "find". + case $HostPlatform in + *mingw32) + if test x${OSTYPE} != xmsys + then + fp_prog_find="`cygpath --mixed ${fp_prog_find}`" + AC_MSG_NOTICE([normalized find command to $fp_prog_find]) + fi ;; + *) ;; + esac + FindCmd="$fp_prog_find" else -FindCmd=$Find2Cmd -AC_SUBST(FindCmd) + # Found a poor WinDoze version of "find", ignore it. + AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it]) + FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find]) fi -]) +rm -f conftest.txt conftest.out +AC_SUBST([FindCmd])[]dnl +])# FP_PROG_FIND + + +# FP_PROG_SORT +# ------------ +# Find a Unix-like sort +AC_DEFUN([FP_PROG_SORT], +[AC_PATH_PROG([fp_prog_sort], [sort]) +echo conwip > conftest.txt +$fp_prog_sort -f conftest.txt > conftest.out 2>&1 +if grep 'conwip' conftest.out > /dev/null 2>&1 ; then + # The goods + SortCmd="$fp_prog_sort" +else + # Summink else..pick next one. + AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it]) + FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort]) +fi +rm -f conftest.txt conftest.out +AC_SUBST([SortCmd])[]dnl +])# FP_PROG_SORT dnl dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the @@ -591,7 +679,7 @@ dnl the commands given by the third. It does not cache its dnl result, so it is suitable for checks which should be dnl run every time. dnl -AC_DEFUN(FPTOOLS_NOCACHE_CHECK, +AC_DEFUN([FPTOOLS_NOCACHE_CHECK], [AC_MSG_CHECKING([$1]) $3 AC_MSG_RESULT([$][$2]) @@ -605,10 +693,10 @@ dnl dnl Test for version of installed ghc. Uses $GHC. dnl [original version pinched from c2hs] dnl -AC_DEFUN(FPTOOLS_GHC_VERSION, +AC_DEFUN([FPTOOLS_GHC_VERSION], [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc], ["${WithGhc-ghc}" --version > conftestghc 2>&1 - cat conftestghc >&AC_FD_CC + cat conftestghc >&AS_MESSAGE_LOG_FD #Useless Use Of cat award... fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'` rm -fr conftest* @@ -647,445 +735,663 @@ ifelse($#, [1], [dnl ])dnl -dnl ** Map an arithmetic C type to a Haskell type. -dnl Based on autconf's AC_CHECK_SIZEOF. - -dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION]) -AC_DEFUN(FPTOOLS_CHECK_HTYPE, -[changequote(<<, >>)dnl -dnl The name to #define. -define(<>, translit(htype_$1, [a-z *], [A-Z_P]))dnl -dnl The cache variable name. -define(<>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl -changequote([, ])dnl -AC_MSG_CHECKING(Haskell type for $1) -AC_CACHE_VAL(AC_CV_NAME, -[AC_TRY_RUN([#include -#include - -#ifdef HAVE_SYS_TYPES_H -# include -#endif +# FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------------- +# A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the +# additional flexibility of specifying the PROLOGUE and BODY. +AC_DEFUN([FP_CHECK_FUNC], +[AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl +AC_CACHE_CHECK([for $1], fp_func, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])], + [AS_VAR_SET(fp_func, yes)], + [AS_VAR_SET(fp_func, no)])]) +AS_IF([test AS_VAR_GET(fp_func) = yes], + [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1], + [Define to 1 if you have the `]$1[' function.]) $4], + [$5])dnl +AS_VAR_POPDEF([fp_func])dnl +])# FP_CHECK_FUNC + + +# 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], +[rm -f conftest.xml conftest-book.xml +cat > conftest.xml << EOF + + +]]> + +&conftest-book; + +EOF +cat >conftest-book.xml << EOF + + A DocBook “Test Document” + + A Chapter Title + This is a paragraph, referencing . + + + Another Chapter Title + This is another paragraph, referencing . + +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 -#ifdef HAVE_UNISTD_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif +# FP_PROG_XSLTPROC +# ---------------- +# Sets the output variable XsltprocCmd to the full path of the XSLT processor +# xsltproc. XsltprocCmd is empty if xsltproc could not be found. +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 HTML documentation]) +fi +])# FP_PROG_XSLTPROC + + +# FP_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_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl, + [FP_GEN_DOCBOOK_XML + fp_cv_dir_docbook_xsl=no + 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]) + HAVE_DOCBOOK_XSL=NO +else + HAVE_DOCBOOK_XSL=YES +fi +AC_SUBST([HAVE_DOCBOOK_XSL]) +])# FP_DOCBOOK_XSL + + +# FP_PROG_XMLLINT +# ---------------- +# Sets the output variable XmllintCmd to the full path of the XSLT processor +# xmllint. XmllintCmd is empty if xmllint could not be found. +AC_DEFUN([FP_PROG_XMLLINT], +[AC_PATH_PROG([XmllintCmd], [xmllint]) +if test -z "$XmllintCmd"; then + AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation]) +fi +])# FP_PROG_XMLLINT -#ifdef HAVE_FCNTL_H -# include -#endif -#ifdef HAVE_SIGNAL_H -# include -#endif +# FP_CHECK_DOCBOOK_DTD +# -------------------- +AC_DEFUN([FP_CHECK_DOCBOOK_DTD], +[AC_REQUIRE([FP_PROG_XMLLINT])dnl +if test -n "$XmllintCmd"; then + AC_MSG_CHECKING([for DocBook DTD]) + FP_GEN_DOCBOOK_XML + if $XmllintCmd --nonet --valid --noout conftest.xml ; 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([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog]) + fi + rm -rf conftest* +fi +])# FP_CHECK_DOCBOOK_DTD + + +# FP_GEN_FO +# ------------------ +# Generates a formatting objects document in conftest.fo. +AC_DEFUN([FP_GEN_FO], +[rm -f conftest.fo +cat > conftest.fo << EOF + + + + + + + + + + + Test! + + + + +EOF +]) # FP_GEN_FO + + +# FP_PROG_FOP +# ----------- +# Set the output variable 'FopCmd' to the first working 'fop' in the current +# 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try +# /usr/share/fop/fop.sh in that case (or no 'fop'), too. +AC_DEFUN([FP_PROG_FOP], +[AC_PATH_PROGS([FopCmd1], [fop fop.sh]) +if test -n "$FopCmd1"; then + AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability], + [FP_GEN_FO + if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then + fp_cv_fop_usability=yes + else + fp_cv_fop_usability=no + fi + rm -rf conftest*]) + if test x"$fp_cv_fop_usability" = xyes; then + FopCmd=$FopCmd1 + fi +fi +if test -z "$FopCmd"; then + AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop]) + FopCmd=$FopCmd2 +fi +AC_SUBST([FopCmd]) +])# FP_PROG_FOP + + +# 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 +])# FP_PROG_HSTAGS -#ifdef HAVE_TIME_H -# include -#endif -#ifdef HAVE_TERMIOS_H -# include -#endif +# FP_PROG_GHC_PKG +# ---------------- +# Try to find a ghc-pkg matching the ghc mentioned in the environment variable +# 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, +[ +# 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 + AC_MSG_ERROR([Cannot find matching ghc-pkg]) +fi]) +GhcPkgCmd=$fp_cv_matching_ghc_pkg +AC_SUBST([GhcPkgCmd]) +])# FP_PROG_GHC_PKG -#ifdef HAVE_STRING_H -# include -#endif -#ifdef HAVE_CTYPE_H -# include -#endif +# 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 +# -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_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) +]) -#ifdef HAVE_GL_GL_H -# include -#endif -#ifdef HAVE_OPENGL_GL_H -# include -#endif +# FP_SETUP_PROJECT_VERSION +# --------------------- +AC_DEFUN([FP_SETUP_PROJECT_VERSION], +[ +if test "$RELEASE" = "NO"; then + AC_MSG_CHECKING([for GHC version date]) + 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 + # TODO: Remove this branch after conversion to Git + 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" | ${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]) + fi + PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date + AC_MSG_RESULT(inferred $PACKAGE_VERSION) + elif test -f VERSION; then + PACKAGE_VERSION=`cat VERSION` + AC_MSG_RESULT(given $PACKAGE_VERSION) + else + AC_MSG_WARN([cannot determine snapshot version: no .git or _darcs directory and no VERSION file]) + fi +fi -#ifdef HAVE_SYS_RESOURCE_H -# include -#endif +# Some renamings +AC_SUBST([ProjectName], [$PACKAGE_NAME]) +AC_SUBST([ProjectVersion], [$PACKAGE_VERSION]) + +# Split PACKAGE_VERSION into (possibly empty) parts +VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/` +VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/` +VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/` +ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/` + +# Calculate project version as an integer, using 2 digits for minor version +case $VERSION_MINOR in + ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;; + ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;; + *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;; +esac +AC_SUBST([ProjectVersionInt]) -typedef $1 testing; - -main() { - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - if (((testing)((int)((testing)1.4))) == ((testing)1.4)) { - fprintf(f, "%s%d\n", - ((testing)(-1) < (testing)0) ? "Int" : "Word", - sizeof(testing)*8); - } else { - fprintf(f,"%s\n", - (sizeof(testing) > sizeof(double)) ? "LDouble" : - (sizeof(testing) == sizeof(double)) ? "Double" : "Float"); - } - fclose(f); - exit(0); -}], AC_CV_NAME=`cat conftestval`, -ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2), -ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl -AC_MSG_RESULT($AC_CV_NAME) -AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1]) -undefine([AC_TYPE_NAME])dnl -undefine([AC_CV_NAME])dnl -]) +# The project patchlevel is zero unless stated otherwise +test -z "$ProjectPatchLevel" && ProjectPatchLevel=0 +# Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508 +ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'` -dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning +AC_SUBST([ProjectPatchLevel]) +])# FP_SETUP_PROJECT_VERSION -dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse) -AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN, -[ -ac_save_LIBS="$LIBS" -LIBS=[$1]; -cat > conftest.$ac_ext < +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_TIME_H +#include +#endif +#ifdef HAVE_SIGNAL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif -dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution - -dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse) - -AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN, -[AC_MSG_CHECKING([for $1]) - AC_CACHE_VAL(ac_cv_flag_$1, - [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ], - eval "ac_cv_flag_$1=yes", - eval "ac_cv_flag_$1=no" - )] - ) -if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then - AC_MSG_RESULT(yes) - LIBS="$2 $LIBS" - $4 -else - AC_MSG_RESULT(no) - $5 -fi -]) +static volatile int tock = 0; +static void handler(int i) +{ + tock = 1; +} -dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION) +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); +} -AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN, -[FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();], -[changequote(, )dnl - ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - changequote([, ])dnl - AC_DEFINE_UNQUOTED($ac_tr_lib) -], -[FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();], -[changequote(, )dnl - ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - changequote([, ])dnl - AC_DEFINE_UNQUOTED($ac_tr_lib) -], -[] -)])] -) +int main(int argc, char *argv[]) +{ + 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; + + 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) { + fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n"); + exit(1); + } + + 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); +} + ], + [fptools_cv_timer_create_works=yes], + [fptools_cv_timer_create_works=no]) + ]) +case $fptools_cv_timer_create_works in + yes) AC_DEFINE([USE_TIMER_CREATE], 1, + [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);; +esac +]) -dnl ** Check which CATALOG file we have to use with DocBook SGML. -dnl -dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR) -dnl -dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this -dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE -dnl is set to "no". JADE is the jade executable and STYLESHEET -dnl a DocBook style sheet. -dnl -AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG, -[AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog, +# FP_ARG_GMP +# ------------- +AC_DEFUN([FP_ARG_GMP], [ -cat > conftest.sgml << EOF - -
- -Test -Test -
Test
-Test -
-Test - -Test. - - -
-EOF -fptools_cv_sgml_catalog=no -if test -z "$SGML_CATALOG_FILES" ; then - for fptools_catalog in $4; do - ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml" - if AC_TRY_EVAL(ac_try); then - fptools_cv_sgml_catalog=[$]fptools_catalog - break - fi - done -else -# If the env var SGML_CATALOG_FILES is defined, assume things are cool. - fptools_cv_sgml_catalog="yes" -fi +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]) ]) -rm -rf conftest* -if test $fptools_cv_sgml_catalog != "no"; then - $1=$fptools_cv_sgml_catalog + +# 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 ]) -dnl ###################################################################### -dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND -dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]]) -dnl Search for a library defining FUNC, if it's not already available. -dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be -dnl specified. -dnl ###################################################################### - -AC_DEFUN(FPTOOLS_SEARCH_LIBS, -[AC_PREREQ([2.13]) -AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2], -[ac_func_search_save_LIBS="$LIBS" -ac_cv_search_$2="no" -AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"]) -test "$ac_cv_search_$2" = "no" && for i in $3; do -LIBS="-l$i $6 $ac_func_search_save_LIBS" -AC_TRY_LINK([$1], [$2()], -[ac_cv_search_$2="-l$i" -break]) -done -LIBS="$ac_func_search_save_LIBS"]) -if test "$ac_cv_search_$2" != "no"; then - test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS" - $4 -else : - $5 -fi]) +# -------------------------------------------------------------- +# Calculate absolute path to build tree +# -------------------------------------------------------------- + +AC_DEFUN([FP_FIND_ROOT],[ +AC_MSG_CHECKING(for path to top of build tree) + +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 -no-user-package-conf --make ghc-pwd -o ghc-pwd + cd ../.. +fi -dnl ####################### -*- Mode: M4 -*- ########################### -dnl Copyright (C) 98, 1999 Matthew D. Langston -dnl -dnl This file is free software; you can redistribute it and/or modify it -dnl under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2 of the License, or -dnl (at your option) any later version. -dnl -dnl This file 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 GNU -dnl General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this file; if not, write to: -dnl -dnl Free Software Foundation, Inc. -dnl Suite 330 -dnl 59 Temple Place -dnl Boston, MA 02111-1307, USA. -dnl #################################################################### +hardtop=`utils/ghc-pwd/ghc-pwd` +if ! test -d "$hardtop"; then + AC_MSG_ERROR([cannot determine current directory]) +fi -dnl @synopsis FPTOOLS_CHECK_LIBM -dnl -dnl Search for math library (typically -lm). -dnl -dnl The variable LIBM (which is not an output variable by default) is -dnl set to a value which is suitable for use in a Makefile (for example, -dnl in make's LOADLIBES macro) provided you AC_SUBST it first. -dnl -dnl @author Matthew D. Langston - -# FPTOOLS_CHECK_LIBM - check for math library -AC_DEFUN(FPTOOLS_CHECK_LIBM, -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case "$host" in -*-*-beos*) - # These system don't have libm - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, main, LIBM="-lm") - ;; -esac -]) - -dnl ###################################################################### -dnl Note: Caching has been completely rewritten, but is still no perfect yet. -dnl ###################################################################### - -dnl ########################### -*- Mode: M4 -*- ####################### -dnl Copyright (C) 98, 1999 Matthew D. Langston -dnl -dnl This file is free software; you can redistribute it and/or modify it -dnl under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2 of the License, or -dnl (at your option) any later version. +dnl Remove common automounter nonsense dnl -dnl This file 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 GNU -dnl General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this file; if not, write to: -dnl -dnl Free Software Foundation, Inc. -dnl Suite 330 -dnl 59 Temple Place -dnl Boston, MA 02111-1307, USA. -dnl #################################################################### - -dnl @synopsis FPTOOLS_HAVE_OPENGL -dnl -dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of -dnl OpenGL) before a vendor's version of OpenGL if we were specifically -dnl asked to with `--with-Mesa=yes' or `--with-Mesa'. -dnl -dnl The four "standard" OpenGL libraries are searched for: "-lGL", -dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and -dnl "-lglut". -dnl -dnl All of the libraries that are found (since "-lglut" or "-lGLX" might -dnl be missing) are added to the shell output variable "GL_LIBS", along -dnl with any other libraries that are necessary to successfully link an -dnl OpenGL application (e.g. the X11 libraries). Care has been taken to -dnl make sure that all of the libraries in "GL_LIBS" are listed in the -dnl proper order. -dnl -dnl Additionally, the shell output variable "GL_CFLAGS" is set to any -dnl flags (e.g. "-I" flags) that are necessary to successfully compile -dnl an OpenGL application. -dnl -dnl The following shell variable (which are not output variables) are -dnl also set to either "yes" or "no" (depending on which libraries were -dnl found) to help you determine exactly what was found. -dnl -dnl have_GL -dnl have_GLU -dnl have_GLX -dnl have_glut -dnl -dnl A complete little toy "Automake `make distcheck'" package of how to -dnl use this macro is available at: -dnl -dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz -dnl -dnl Please note that as the ac_opengl macro and the toy example evolves, -dnl the version number increases, so you may have to adjust the above -dnl URL accordingly. -dnl -dnl @author Matthew D. Langston - -AC_DEFUN(FPTOOLS_HAVE_OPENGL, -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_PATH_X]) - AC_REQUIRE([AC_PATH_XTRA]) - AC_REQUIRE([FPTOOLS_CHECK_LIBM]) - -dnl Check for Mesa first if we were asked to. - AC_ARG_ENABLE(Mesa, -[ --enable-mesa - Prefer Mesa over a vendor's native OpenGL library (default=no) -], - use_Mesa=$enableval, - use_Mesa=no) - - if test x"$use_Mesa" = xyes; then - GL_search_list="MesaGL GL opengl32" - GLU_search_list="MesaGLU GLU glu32" - GLX_search_list="MesaGLX GLX" - else - GL_search_list="GL opengl32 MesaGL" - GLU_search_list="GLU glu32 MesaGLU" - GLX_search_list="GLX MesaGLX" - fi - - AC_LANG_SAVE - AC_LANG_C - -dnl If we are running under X11 then add in the appropriate libraries. - if test x"$no_x" != xyes; then -dnl Add everything we need to compile and link X programs to GL_CFLAGS -dnl and GL_X_LIBS/GLUT_X_LIBS. - GL_CFLAGS="$CPPFLAGS $X_CFLAGS" - GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM" - GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM" - fi - GL_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$GL_CFLAGS" +hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'` - GL_save_LIBS="$LIBS" - LIBS="$GL_X_LIBS" +AC_SUBST(hardtop) - FPTOOLS_SEARCH_LIBS([#include ], glEnd, $GL_search_list, have_GL=yes, have_GL=no) - FPTOOLS_SEARCH_LIBS([#include ], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no) - FPTOOLS_SEARCH_LIBS([#include ], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no) +AC_MSG_RESULT(${hardtop}) - if test -n "$LIBS"; then - GL_LIBS="$LDFLAGS $LIBS" - else - GL_LIBS="$LDFLAGS" - GL_CFLAGS= - fi +# 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 Keep the GL/GLU/GLX libs, but expand the rest to what GLUT needs. - dnl (Some systems, like OpenBSD, need the GL/GLU libs.) - LIBS=`echo "$LIBS" | sed "s@$GL_X_LIBS@$GLUT_X_LIBS@"` +# 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 +]) - FPTOOLS_SEARCH_LIBS([#include ], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no) +# 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" +]) - if test -n "$LIBS"; then - GLUT_LIBS="$LDFLAGS $LIBS" - fi +# 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 +]) - AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"]) - GL_CFLAGS="$mdl_cv_gl_cflags" - AC_SUBST(GL_CFLAGS) - AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"]) - GL_LIBS="$mdl_cv_gl_libs" - AC_SUBST(GL_LIBS) - AC_CACHE_CHECK([GLUT libs], mdl_cv_glut_libs, [mdl_cv_glut_libs="$GLUT_LIBS"]) - GLUT_LIBS="$mdl_cv_glut_libs" - AC_SUBST(GLUT_LIBS) - -dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables -dnl and we don't want to be global namespace polluters. - GL_X_LIBS= - GLUT_X_LIBS= - - LIBS="$GL_save_LIBS" - CPPFLAGS="$GL_save_CPPFLAGS" - - AC_LANG_RESTORE +# 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