X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=aclocal.m4;h=ea3c4b24f0f005ef474f1686100849fc3369b2d8;hp=b38227fda330d9d24f941334668413e53daaa611;hb=b38fc90a990ebdc9bb30525e1656f7fc80c3c170;hpb=4acdf213cbd6cf84b9b2b07c596a044b8b64a7f1 diff --git a/aclocal.m4 b/aclocal.m4 index b38227f..ea3c4b2 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,61 +1,89 @@ -dnl $Id: aclocal.m4,v 1.90 2001/12/13 09:23:23 sof Exp $ -dnl -dnl Extra autoconf macros for the Glasgow fptools -dnl -dnl To be a good autoconf citizen, names of local macros have -dnl prefixed with FPTOOLS_ to ensure we don't clash -dnl with any pre-supplied autoconf ones. - -dnl -dnl Is timezone around? (in a header file) -dnl -AC_DEFUN(FPTOOLS_HAVE_TIMEZONE, -[AC_CACHE_CHECK([timezone], fptools_cv_have_timezone, -[AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif -], [return timezone;], -fptools_cv_have_timezone=yes, fptools_cv_have_timezone=no)]) -if test "$fptools_cv_have_timezone" = yes; then - AC_DEFINE(HAVE_TIMEZONE) +# Extra autoconf macros for the Glasgow fptools +# +# To be a good autoconf citizen, names of local macros have prefixed with FP_ to +# ensure we don't clash with any pre-supplied autoconf ones. + + +# 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], +[{ (eval $1) 2>conftest.er1 + fp_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + (exit $fp_status); }[]dnl +])# 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. +# +# 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. +# +# 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 -dnl -dnl Has timezone the type time_t or long (HP-UX 10.20 apparently -dnl has `long'..) -dnl -AC_DEFUN(FPTOOLS_TYPE_TIMEZONE, -[AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone, -[AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif -extern time_t timezone; -], -[int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)]) -AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone) -]) +# FP_PROG_CONTEXT_DIFF +# -------------------- +# Figure out how to do context diffs. Sets the output variable ContextDiffCmd. +# +# Note: NeXTStep thinks diff'ing a file against itself is "trouble". +# +# Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest. +AC_DEFUN([FP_PROG_CONTEXT_DIFF], +[AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff], +[echo foo > conftest1 +echo foo > conftest2 +fp_cv_context_diff=no +for fp_var in '-C 1' '-c1' +do + if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then + fp_cv_context_diff="diff $fp_var" + break + fi +done]) +if test x"$fp_cv_context_diff" = xno; then + AC_MSG_ERROR([cannot figure out how to do context diffs]) +fi +AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff]) +])# FP_PROG_CONTEXT_DIFF -dnl *** Is altzone available? *** -dnl -AC_DEFUN(FPTOOLS_ALTZONE, -[AC_CACHE_CHECK([altzone], fptools_cv_altzone, -[AC_TRY_LINK([#if TIME_WITH_SYS_TIME + +# 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 @@ -64,34 +92,83 @@ AC_DEFUN(FPTOOLS_ALTZONE, # else # include # endif -#endif -], [return altzone;], -fptools_cv_altzone=yes, fptools_cv_altzone=no)]) -if test "$fptools_cv_altzone" = yes; then - AC_DEFINE(HAVE_ALTZONE) -fi -]) +#endif]) +])# FP_DECL_ALTZONE -dnl *** Does libc contain GNU regex? *** -dnl -AC_DEFUN(FPTOOLS_REGEX_IN_LIBC, -[AC_CACHE_CHECK([for GNU regex in libc], fptools_cv_have_regex, -[AC_TRY_LINK([#if HAVE_UNISTD_H -#include -#endif -#include -],[ struct re_pattern_buffer patbuf; - re_compile_pattern("",0,&patbuf); - re_search_2 (&patbuf, "", 0, "",0, 0,0,0,0); ], -fptools_cv_have_regex=yes, fptools_cv_have_regex=no)]) -if test "$fptools_cv_have_regex" = yes; then - HaveRegex=YES +# 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. +# +# Implementation note: We are lazy and use an internal autoconf macro, but it +# is supported in autoconf versions 2.50 up to the actual 2.57, so there is +# little risk. +AC_DEFUN([FP_COMPUTE_INT], +[_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl +])# FP_COMPUTE_INT + + +# FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES]) +# ------------------------------------------------------------------ +# 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], [], + [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 +AC_CACHE_CHECK([alignment of $1], [fp_Cache], +[if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then + FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)], + [fp_Cache], + [AC_INCLUDES_DEFAULT([$3])], + [AC_MSG_ERROR([cannot compute alignment ($1) +See `config.log' for more details.], [77])]) else - HaveRegex=NO -fi -AC_SUBST(HaveRegex) -]) + fp_Cache=0 +fi])[]dnl +AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl +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 @@ -106,6 +183,8 @@ 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, @@ -119,6 +198,11 @@ dnl the underscoredness of that "platform" changequote(<<, >>)dnl << 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';; @@ -150,46 +234,65 @@ esac); LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'` AC_SUBST(LeadingUnderscore) case $LeadingUnderscore in -YES) AC_DEFINE(LEADING_UNDERSCORE);; +YES) AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.]);; esac ]) + +# FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# ---------------------------------------------------------------------------------- +# Compare dotted version numbers VERSION1 and VERSION2 lexicographically according +# to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge). +AC_DEFUN([FP_COMPARE_VERSIONS], +[fp_version1=$1; fp_version2=$3 +fp_save_IFS=$IFS; IFS='.' +while test x"$fp_version1" != x || test x"$fp_version2" != x +do + + set dummy $fp_version1; shift + fp_num1="" + test $[@%:@] = 0 || { fp_num1="[$]1"; shift; } + test x"$fp_num1" = x && fp_num1="0" + fp_version1="[$]*" + + set dummy $fp_version2; shift + fp_num2="" + test $[@%:@] = 0 || { fp_num2="[$]1"; shift; } + test x"$fp_num2" = x && fp_num2="0" + fp_version2="[$]*" + + test "$fp_num1" = "$fp_num2" || break; +done +IFS=$fp_save_IFS +AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl +])# FP_COMPARE_VERSIONS + + dnl -dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2, -dnl ACTION-IF-TRUE [, ACTION-IF-FALSE]) -dnl -dnl compare versions field-wise (separator is '.') -dnl TEST is one of {-lt,-le,-eq,-ge,-gt} -dnl -dnl quite shell-independant and SUSv2 compliant code -dnl -dnl NOTE: the loop could be unrolled within autoconf, but the -dnl macro code would be a) longer and b) harder to debug... ;) +dnl Check for GreenCard and version. dnl -AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION, -[if ( IFS="."; - a="[$1]"; b="[$3]"; - while test -n "$a$b" - do - set -- [$]a; h1="[$]1"; shift 2>/dev/null; a="[$]*" - set -- [$]b; h2="[$]1"; shift 2>/dev/null; b="[$]*" - test -n "[$]h1" || h1=0; test -n "[$]h2" || h2=0 - test [$]{h1} -eq [$]{h2} || break - done - test [$]{h1} [$2] [$]{h2} - ) -then ifelse([$4],,[:],[ - $4]) -ifelse([$5],,, -[else - $5]) +AC_DEFUN(FPTOOLS_GREENCARD, +[ +AC_PATH_PROG(GreenCardCmd,greencard) +AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version, +changequote(, )dnl +[if test x"$GreenCardCmd" != x; then + fptools_cv_greencard_version="`$GreenCardCmd --version | + grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`" +else + fptools_cv_greencard_version="" fi -])])dnl - +changequote([, ])dnl +]) +FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1], + [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl +GreenCardVersion=$fptools_cv_greencard_version +AC_SUBST(GreenCardVersion) +]) dnl dnl Check for Happy and version. If we're building GHC, then we need -dnl at least Happy version 1.9. If there's no installed Happy, we look +dnl at least Happy version 1.13. 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, @@ -214,49 +317,70 @@ else fi; changequote([, ])dnl ]) -if test -d $srcdir/ghc; then - FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9], - [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])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 fi HappyVersion=$fptools_cv_happy_version; AC_SUBST(HappyVersion) - -# 1.9 and later is required, assume that we can use -# the "-agc" options. -HappyOpts="-agc" - -FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-gt,[1.11], - [HappyOpts=-agcs]) - -AC_SUBST(HappyOpts) ]) dnl -dnl What's the best way of doing context diffs? +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 (NB: NeXTStep thinks diff'ing a file against itself is "trouble") +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 -AC_DEFUN(FPTOOLS_PROG_DIFF, -[AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs, -[echo foo > conftest1 -echo foo > conftest2 -if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then - fptools_cv_context_diffs='diff -C 1' +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 - if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then - fptools_cv_context_diffs='diff -c1' - else - echo "Can't figure out how to do context diffs." - echo "Neither \`diff -C 1' nor \`diff -c1' works." - exit 1 - fi + AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd) fi -rm -f conftest1 conftest2 +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'`" ; +else + fptools_cv_alex_version=""; +fi; +changequote([, ])dnl ]) -ContextDiffCmd=$fptools_cv_context_diffs -AC_SUBST(ContextDiffCmd) +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 +fi +AlexVersion=$fptools_cv_alex_version; +AC_SUBST(AlexVersion) ]) + dnl dnl Check whether ld supports -x dnl @@ -280,39 +404,6 @@ fi AC_SUBST(LdXFlag) ]) -dnl -dnl Finding the Right Yacc -dnl -AC_DEFUN(FPTOOLS_PROG_YACCY, -[AC_PROG_YACC -if test "$YACC" = "yacc"; then - AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc, - [AC_CHECK_PROG(WhatCmd, what, what, :) - $WhatCmd $YACC > conftest.out - if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then - echo "I don't trust your $YaccCmd; it looks like an old Sun yacc" - if test -f /usr/lang/yacc; then - echo "I'm going to use /usr/lang/yacc instead" - ac_cv_prog_yacc=/usr/lang/yacc - else - echo "I'm assuming the worst...no parser generator at all" - ac_cv_prog_yacc=: - fi - elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then - echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc" - echo "I'm assuming the worst...no parser generator at all" - ac_cv_prog_yacc=: - else - ac_cv_prog_yacc=$YACC - fi - rm -fr conftest* -]) -else - ac_cv_prog_yacc=$YACC -fi -YaccCmd=$ac_cv_prog_yacc -AC_SUBST(YaccCmd) -]) dnl *** Checking for ar and its arguments + whether we need ranlib. dnl @@ -321,34 +412,47 @@ 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(ArCmd,ar) -if test -z "$ArCmd"; then +[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 -if $ArCmd clqsZ conftest.a >/dev/null 2>/dev/null; then - ArCmd="$ArCmd clqsZ" +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 $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then - ArCmd="$ArCmd clqs" +elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then + ArCmdArgs="clqs" NeedRanLib='' -elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then - ArCmd="$ArCmd cqs" +elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then + ArCmdArgs="cqs" NeedRanLib='' -elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then - ArCmd="$ArCmd clq" +elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then + ArCmdArgs="clq" NeedRanLib='YES' -elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then - ArCmd="$ArCmd cq" +elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then + ArCmdArgs="cq" NeedRanLib='YES' -elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then - ArCmd="$ArCmd cq" +elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then + ArCmdArgs="cq" NeedRanLib='YES' else echo "I can't figure out how to use your $ArCmd" exit 1 fi rm -rf conftest* +case $HostPlatform in + *mingw32) + ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}" + ;; + *) ArCmd="${ArCmdRaw} ${ArCmdArgs}" + ;; +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 @@ -399,34 +503,39 @@ AC_DEFUN(FPTOOLS_HAVE_GCC, fptools_cv_have_gcc='no' else changequote(, )dnl - is_gcc_v1="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 2000 \\\>= \1 \\\* 1000 + \2/g' `" - is_gcc_v3="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 3000 \\\<= \1 \\\* 1000 + \2/g' `" + 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' - if test `eval $is_gcc_v1 2>/dev/null` = "1"; then - fptools_cv_have_gcc='no' + 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]) - fi - if test `eval $is_gcc_v3 2>/dev/null` = "1"; then - fptools_cv_have_gcc='no' - echo "" - echo "your gcc version appears to be ..." - $CC --version - echo "gcc versions 3.0 and above are not yet supported." - echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok." - AC_MSG_ERROR([gcc 3.0 and above is not currently supported]) - fi + AC_MSG_ERROR([gcc 1.X has never been supported])]) 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 + + dnl Small feature test for perl version. Assumes PerlCmd dnl contains path to perl binary dnl @@ -435,41 +544,53 @@ AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION, if grep "version 5" conftest.out >/dev/null 2>&1; then : else - if grep "v5.6" 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 + if grep "v5.6" 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 + 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_PROG([fp_prog_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". + 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 + dnl dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the @@ -494,7 +615,7 @@ dnl [original version pinched from c2hs] dnl AC_DEFUN(FPTOOLS_GHC_VERSION, [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc], -[${WithGhc-ghc} --version > conftestghc 2>&1 +["${WithGhc-ghc}" --version > conftestghc 2>&1 cat conftestghc >&AC_FD_CC #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'` @@ -534,49 +655,6 @@ ifelse($#, [1], [dnl ])dnl -dnl ** figure out the alignment restriction of a type -dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE -dnl so we can't call REQUIRE) - -dnl FPTOOLS_CHECK_ALIGNMENT(TYPE) -AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT, -[changequote(<<, >>)dnl -dnl The name to #define. -define(<>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl -dnl The cache variable name. -define(<>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl -dnl The name of the corresponding size. -define(<>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl -changequote([, ])dnl -AC_MSG_CHECKING(alignment of $1) -AC_CACHE_VAL(AC_CV_NAME, -[AC_TRY_RUN([ -#include -#if HAVE_STDDEF_H -#include -#endif -#ifndef offsetof -#define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0)) -#endif -int -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty)); - exit(0); -}], -AC_CV_NAME=`cat conftestval`, -AC_CV_NAME=$AC_CV_SIZEOF_NAME, -AC_CV_NAME=$AC_CV_SIZEOF_NAME)]) -AC_MSG_RESULT($AC_CV_NAME) -AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME) -AC_PROVIDE($AC_TYPE_NAME) -undefine([AC_TYPE_NAME])dnl -undefine([AC_CV_NAME])dnl -undefine([AC_CV_SIZEOF_NAME])dnl -]) - dnl ** Map an arithmetic C type to a Haskell type. dnl Based on autconf's AC_CHECK_SIZEOF. @@ -587,19 +665,66 @@ 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 +define(<>, translit(fptools_cv_htype_sup_$1, [ *], [_p]))dnl changequote([, ])dnl AC_MSG_CHECKING(Haskell type for $1) AC_CACHE_VAL(AC_CV_NAME, -[AC_TRY_RUN([#include +[AC_CV_NAME_supported=yes +fp_check_htype_save_cppflags="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $X_CFLAGS" +AC_TRY_RUN([#include #include -#ifdef HAVE_SIGNAL_H -#include + +#if HAVE_SYS_TYPES_H +# include +#endif + +#if HAVE_UNISTD_H +# include +#endif + +#if HAVE_SYS_STAT_H +# include #endif -#ifdef HAVE_TIME_H -#include + +#if HAVE_FCNTL_H +# include +#endif + +#if HAVE_SIGNAL_H +# include +#endif + +#if HAVE_TIME_H +# include +#endif + +#if HAVE_TERMIOS_H +# include +#endif + +#if HAVE_STRING_H +# include #endif -#ifdef HAVE_GL_GL_H -#include + +#if HAVE_CTYPE_H +# include +#endif + +#if defined(HAVE_GL_GL_H) +# include +#elif defined(HAVE_OPENGL_GL_H) +# include +#endif + +#if defined(HAVE_AL_ALC_H) +# include +#elif defined(HAVE_OPENAL_ALC_H) +# include +#endif + +#if HAVE_SYS_RESOURCE_H +# include #endif typedef $1 testing; @@ -618,231 +743,21 @@ main() { } 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) +}],AC_CV_NAME=`cat conftestval`, +ifelse([$2], , [AC_CV_NAME=NotReallyAType; AC_CV_NAME_supported=no], AC_CV_NAME=$2), +ifelse([$3], , [AC_CV_NAME=NotReallyATypeCross; AC_CV_NAME_supported=no], AC_CV_NAME=$3))]) dnl +CPPFLAGS="$fp_check_htype_save_cppflags" +if test "$AC_CV_NAME_supported" = yes; then + AC_MSG_RESULT($AC_CV_NAME) + AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1]) +else + AC_MSG_RESULT([not supported]) +fi undefine([AC_TYPE_NAME])dnl undefine([AC_CV_NAME])dnl +undefine([AC_CV_NAME_supported])dnl ]) -dnl ** figure out whether C compiler supports 'long long's -dnl (Closely based on Andreas Zeller's macro for testing -dnl for this under C++) -dnl -dnl If the C compiler supports `long long' types, -dnl define `HAVE_LONG_LONG'. -dnl -AC_DEFUN(FPTOOLS_C_LONG_LONG, -[ -AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING(whether ${CC} supports long long types) -AC_CACHE_VAL(fptools_cv_have_long_long, -[ -AC_LANG_SAVE -AC_LANG_C -AC_TRY_COMPILE(,[long long a;], -fptools_cv_have_long_long=yes, -fptools_cv_have_long_long=no) -AC_LANG_RESTORE -]) -AC_MSG_RESULT($fptools_cv_have_long_long) -if test "$fptools_cv_have_long_long" = yes; then -AC_DEFINE(HAVE_LONG_LONG) -fi -]) - -dnl ** Obtain the value of a C constant. -dnl The value will be `(-1)' if the constant is undefined. -dnl -dnl This is set up so that the argument can be a shell variable. -dnl -AC_DEFUN(FPTOOLS_CHECK_CCONST, -[ -eval "def_name=CCONST_$1" -eval "cv_name=ac_cv_cconst_$1" -AC_MSG_CHECKING(value of $1) -AC_CACHE_VAL($cv_name, -[AC_TRY_RUN([#include -#include -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", $1); - exit(0); -}], -eval "$cv_name=`cat conftestval`", -eval "$cv_name=-1", -eval "$cv_name=-1")])dnl -eval "fptools_check_cconst_result=`echo '$'{$cv_name}`" -AC_MSG_RESULT($fptools_check_cconst_result) -AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result) -unset fptools_check_cconst_result -]) - -dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with -dnl spaces) -dnl -AC_DEFUN(FPTOOLS_CHECK_CCONSTS, -[for ac_const_name in $1 -do -FPTOOLS_CHECK_CCONST($ac_const_name)dnl -done -]) - - -dnl *** Can we open files in binary mode? *** -dnl -AC_DEFUN(FPTOOLS_O_BINARY, -[ -AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING(whether we can open files in binary mode) -AC_CACHE_VAL(fptools_cv_have_o_binary, -[ -AC_LANG_SAVE -AC_LANG_C -AC_TRY_COMPILE(, -[#ifdef HAVE_FCNTL_H -#include -#endif -int x = O_BINARY;], -fptools_cv_have_o_binary=yes, -fptools_cv_have_o_binary=no) -AC_LANG_RESTORE -]) -AC_MSG_RESULT($fptools_cv_have_o_binary) -if test "$fptools_cv_have_o_binary" = yes; then -AC_DEFINE(HAVE_O_BINARY) -fi -]) - -dnl *** Which one comes first, .text or .data? *** -dnl -AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA, -[AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data, -[AC_TRY_RUN([ -int f() { return 1; } -int i; -int main() { return ((char*)&f > (char*)&i); } - -], -fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)]) -if test "$fptools_cv_code_bef_data" = yes; then - AC_DEFINE(CODE_BEFORE_DATA) -fi -]) - -dnl *** Helper function ** -dnl -AC_DEFUN(FPTOOLS_IN_SCOPE, -[AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no) -]) - -dnl *** What's the end-of-text-section marker called? *** -dnl -AC_DEFUN([FPTOOLS_END_TEXT_SECTION], -[AC_CACHE_CHECK([for end of text section marker], - [fptools_cv_end_of_text], - [fptools_cv_end_of_text="" - not_done=1 - for i in data_start _data_start etext _etext __etext; do - FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text) - if test "$fptools_end_of_text" = yes; then - fptools_cv_end_of_text=$i - not_done=0 - break - fi - done - if test "$not_done" = 1; then - FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text) - if test "$fptools_end_of_text" = yes; then - fptools_cv_end_of_text="etext" - fi - fi]) - if test -n "$fptools_cv_end_of_text"; then - AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text) - else - AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text) - fi - AC_CACHE_CHECK([for end of text section marker declaration], - [fptools_cv_end_of_text_decl], - [fptools_cv_end_of_text_decl="" - not_done=1 - for i in data_start _data_start etext _etext __etext; do - FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl) - if test "$fptools_end_of_text_decl" = yes; then - fptools_cv_end_of_text_decl=$i - not_done=0 - break - fi - done - if test "$not_done" = 1; then - FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl) - if test "$fptools_end_of_text_decl" = yes; then - fptools_cv_end_of_text_decl="etext asm(\"etext\")" - fi - fi]) - if test -n "$fptools_cv_end_of_text_decl"; then - AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl) - else - AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl) - fi -]) - -dnl *** What's the end-of-data-section marker called? *** -dnl -AC_DEFUN([FPTOOLS_END_DATA_SECTION], -[AC_CACHE_CHECK([for end of data section marker], - [fptools_cv_end_of_data], - [fptools_cv_end_of_data="" - not_done=1 - for i in end _end __end; do - FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data) - if test "$fptools_end_of_data" = yes; then - fptools_cv_end_of_data=$i - not_done=0 - break - fi - done - if test "$not_done" = 1; then - FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data) - if test "$fptools_end_of_data" = yes; then - fptools_cv_end_of_data="end" - fi - fi]) - if test -n "$fptools_cv_end_of_data"; then - AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data) - else - AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data) - fi - AC_CACHE_CHECK([for end of data section marker declaration], - [fptools_cv_end_of_data_decl], - [fptools_cv_end_of_data_decl="" - not_done=1 - for i in end _end __end; do - FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl) - if test "$fptools_end_of_data_decl" = yes; then - fptools_cv_end_of_data_decl=$i - not_done=0 - break - fi - done - if test "$not_done" = 1; then - FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl) - if test "$fptools_end_of_data_decl" = yes; then - fptools_cv_end_of_data_decl="end asm(\"end\")" - fi - fi]) - if test -n "$fptools_cv_end_of_data_decl"; then - AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl) - else - AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl) - fi -]) - - dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse) @@ -915,24 +830,6 @@ AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN, )])] ) -dnl check for prototypes -dnl -AC_DEFUN([AC_C_PROTOTYPES], -[AC_CACHE_CHECK([prototypes], ac_cv_prototypes, -[AC_TRY_COMPILE([ -void foo(int); -void foo(i) -int i; { -return; -} -], -[int i;], -ac_cv_prototypes=yes, -ac_cv_prototypes=no)]) -if test "$ac_cv_prototypes" = yes; then -AC_DEFINE([HAVE_PROTOTYPES]) -fi -]) dnl ** Check which CATALOG file we have to use with DocBook SGML. dnl @@ -963,13 +860,18 @@ Test. EOF fptools_cv_sgml_catalog=no -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 +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 ]) rm -rf conftest* if test $fptools_cv_sgml_catalog != "no"; then @@ -977,256 +879,205 @@ if test $fptools_cv_sgml_catalog != "no"; then 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]) -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 #################################################################### +# FP_CHECK_WIN32 +# -------------- +# If Windows is the target platform (e.g. MinGW/MSYS or Cygwin with +# -mno-cygwin), the variable "is_win32" is set to "yes", otherwise (e.g. *nix +# systems or plain Cygwin) it is set to "no". +AC_DEFUN([FP_CHECK_WIN32], +[AC_CACHE_CHECK([for Windows environment], [fp_cv_is_win32], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ +#if !_WIN32 + syntax error; +#endif +])], [fp_cv_is_win32=yes], [fp_cv_is_win32=no])]) +is_win32="$fp_cv_is_win32"[]dnl +])# FP_CHECK_WIN32 + + +# FP_PATH_X +# --------- +# Same as AC_PATH_X, but works even for broken Cygwins which try to include the +# non-existant header when -mno-cygwin is used. +AC_DEFUN([FP_PATH_X], +[AC_REQUIRE([FP_CHECK_WIN32]) +if test x"$is_win32" = xyes; then + no_x=yes +else + AC_PATH_X +fi +])# FP_PATH_X -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 -]) +# FP_PATH_XTRA +# ------------ +# Same as AC_PATH_XTRA, but works even for broken Cygwins which try to include +# the non-existant header when -mno-cygwin is used. +AC_DEFUN([FP_PATH_XTRA], +[AC_REQUIRE([FP_CHECK_WIN32]) +if test x"$is_win32" = xyes; then + no_x=yes +else + AC_PATH_XTRA +fi +])# FP_PATH_XTRA + + +# FP_CHECK_GL_HELPER(LIBNAME, LIBS, INCLUDES, FUNCTION-BODY) +# ---------------------------------------------------------- +# Try each library in LIBS to successfully link INCLUDES plus FUNCTION-BODY, +# setting LIBNAME_CFLAGS and LIBNAME_LIBS to the corresponding values. Sets +# no_LIBNAME to "yes" if no suitable library was found. (LIBNAME_CFLAGS0 +# contains the value of LIBNAME_CFLAGS without CPPFLAGS, and LIBNAME_LIBS0 +# contains the value of LIBNAME_LIBS without LDFLAGS, but these are only +# used internally.) +AC_DEFUN([FP_CHECK_GL_HELPER], +[AC_CACHE_CHECK([for $1 library], [fp_cv_check_$1_lib], + [fp_cv_check_$1_lib="no" + fp_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS ${$1_CFLAGS}" + fp_save_LIBS="$LIBS" + for fp_try_lib in $2; do + # transform "-lfoo" to "foo.lib" when using cl + if test x"$CC" = xcl; then + fp_try_lib=`echo $fp_try_lib | sed -e 's/^-l//' -e 's/$/.lib/'` + fi + LIBS="$fp_try_lib ${$1_LIBS} $fp_save_LIBS" + AC_TRY_LINK([$3], [$4], [fp_cv_check_$1_lib="$fp_try_lib ${$1_LIBS}"; break]) + done + LIBS="$fp_save_LIBS" + CPPFLAGS="$fp_save_CPPFLAGS"]) + + if test x"$fp_cv_check_$1_lib" = xno; then + no_$1=yes + $1_CFLAGS= + $1_LIBS= + else + $1_CFLAGS0="${$1_CFLAGS}" + $1_CFLAGS="$CPPFLAGS ${$1_CFLAGS0}" + $1_LIBS0="$fp_cv_check_$1_lib" + $1_LIBS="$LDFLAGS ${$1_LIBS0}" + fi +])# FP_CHECK_GL_HELPER -dnl ###################################################################### -dnl NOTE: Because of portability issues between different autoconf -dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL. -dnl Furthermore, caching has been completely rewritten. -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 -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 #################################################################### +# FP_CHECK_GL +# ----------- +AC_DEFUN([FP_CHECK_GL], +[AC_REQUIRE([FP_PATH_X]) +AC_REQUIRE([AC_CANONICAL_SYSTEM]) -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, unless we were -dnl specifically asked not to with `--with-Mesa=no' or `--without-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_ARG_ENABLE([hopengl], + [AC_HELP_STRING([--enable-hopengl], + [build a Haskell binding for OpenGL (GL/GLU). On Mac OS X, use + --enable-hopengl=x11 to use X11 instead of the "native" libraries. + (default=no)])], + [enable_opengl=$enableval], [enable_opengl=no]) -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, unless we were asked not to. -dnl AC_HELP_STRING([--with-Mesa], -dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)], -dnl with_Mesa_help_string) -dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes) - AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes) - - 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. - GL_CFLAGS="$X_CFLAGS" - GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM" - fi - GL_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$GL_CFLAGS" +if test x"$enable_opengl" = xno; then + no_GL=yes +else + use_quartz_opengl=no + case $target_os in + darwin*) + if test x"$enable_opengl" != xx11; then + AC_DEFINE([USE_QUARTZ_OPENGL], [1], + [Define to 1 if native OpenGL should be used on Mac OS X]) + use_quartz_opengl=yes + fi + ;; + esac - GL_save_LIBS="$LIBS" - LIBS="$GL_X_LIBS" + if test x"$use_quartz_opengl" != xyes; then + AC_CHECK_LIB([m], [main], [GL_LIBS="-lm $GL_LIBS"]) - 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 ], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no) - FPTOOLS_SEARCH_LIBS([#include ], glutMainLoop, glut glut32, have_glut=yes, have_glut=no) + if test x"$no_x" != xyes; then + test -n "$x_includes" && GL_CFLAGS="-I$x_includes $GL_CFLAGS" + test -n "$x_libraries" && GL_LIBS="-L$x_libraries -lX11 $GL_LIBS" + fi - if test -n "$LIBS"; then - GL_LIBS="$LIBS" - else - GL_LIBS= - GL_CFLAGS= + FP_CHECK_GL_HELPER([GL], [-lopengl32 -lGL], [@%:@include ], [glEnd()]) fi +fi - 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_SUBST([GL_CFLAGS]) +AC_SUBST([GL_LIBS]) +])# FP_CHECK_GL -dnl Reset GL_X_LIBS regardless, since it was just a temporary variable -dnl and we don't want to be global namespace polluters. - GL_X_LIBS= - LIBS="$GL_save_LIBS" - CPPFLAGS="$GL_save_CPPFLAGS" +# FP_CHECK_GLU +# ------------ +AC_DEFUN([FP_CHECK_GLU], +[AC_REQUIRE([FP_CHECK_GL])dnl +GLU_CFLAGS="$GL_CFLAGS0" +GLU_LIBS="$GL_LIBS0" - AC_LANG_RESTORE -]) +if test x"$enable_opengl" = xno; then + no_GLU=yes +elif test x"$use_quartz_opengl" != xyes; then + FP_CHECK_GL_HELPER([GLU], [-lglu32 -lGLU], [@%:@include ], [gluNewQuadric()]) +fi -# LocalWords: fi +AC_SUBST([GLU_CFLAGS]) +AC_SUBST([GLU_LIBS]) +])# FP_CHECK_GLU + + +# FP_CHECK_GLUT +# ------------- +AC_DEFUN([FP_CHECK_GLUT], +[AC_REQUIRE([FP_CHECK_GLU]) +FP_PATH_XTRA + +if test x"$enable_opengl" = xno; then + no_GLUT=yes +elif test x"$use_quartz_opengl" != xyes; then + GLUT_CFLAGS="$GLU_CFLAGS0" + GLUT_LIBS="$GLU_LIBS0" + if test x"$no_x" != xyes; then + GLUT_LIBS="$X_PRE_LIBS -lXmu -lXi $X_EXTRA_LIBS $GLUT_LIBS" + fi + + AC_CHECK_HEADERS([windows.h GL/glut.h]) + # Note 1: On Cygwin with X11, GL/GLU functions use the "normal" calling + # convention, but GLUT functions use stdcall. To get this right, it is + # necessary to include first. + # Note 2: MinGW/MSYS comes without a GLUT header, so we use Cygwin's one in + # that case. + FP_CHECK_GL_HELPER([GLUT], [-lglut32 -lglut], [ +#if HAVE_WINDOWS_H +#include +#endif +#if HAVE_GL_GLUT_H +#include +#else +#include "glut_local.h" +#endif + ], [glutMainLoop()]) +fi + +AC_SUBST([GLUT_CFLAGS]) +AC_SUBST([GLUT_LIBS]) +])# FP_CHECK_GLUT + + +dnl @synopsis FP_EMPTY_STRUCTS dnl -dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it -dnl defaults to 'lex' if 'flex' isn't found (without checking whether -dnl 'lex' is actually present along the user's PATH). +dnl Check whether empty structs is accepted by CC. dnl -AC_DEFUN(AC_PROG_LEX_STRICT, -[AC_CHECK_PROG(LEX, flex, flex) -if test -z "$LEX" -then - AC_CHECK_PROG(LEX,lex,lex) - test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.]) +AC_DEFUN(FP_EMPTY_STRUCTS, +[AC_CACHE_CHECK(empty struct support, fptools_cv_empty_structs, +[AC_TRY_COMPILE([ +typedef struct { /*empty*/ } StgFoo; +], +[int i;], +fptools_cv_empty_structs=yes, +fptools_cv_empty_structs=no)]) +if test "$fptools_cv_empty_structs" = yes; then +AC_DEFINE([SUPPORTS_EMPTY_STRUCTS], [1], [Define to 1 if C compiler supports declaration of empty structure types.]) fi ]) -dnl -dnl Check to see whether CC (gcc) supports a particular option. -dnl -AC_DEFUN(FPTOOLS_CC_FLAG, -[ -AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2], -[save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $1" - AC_LANG_C - AC_TRY_COMPILE(,[int main(){return(0);}], - [ac_cv_cc_$2=yes], - [ac_cv_cc_$2=no]) - CFLAGS="$save_CFLAGS" -]) -if test "$ac_cv_cc_$2"x = "yesx"; then - $2=$1; -else - $2=""; -fi; -]) +# LocalWords: fi