X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=aclocal.m4;h=fcfbef8a60d808d0f6f0bf3c514f021a1e7f3318;hb=776afe7766a4fe991dbb5a38595900ebd95d4d5a;hp=9bc0d4ce7385516fb66b00268ce4316a9313a251;hpb=793ae9ef474a90b7e66bca52591d3cdf7efa61a8;p=ghc-hetmet.git diff --git a/aclocal.m4 b/aclocal.m4 index 9bc0d4c..fcfbef8 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -134,7 +134,7 @@ m4_popdef([fp_Cache])[]dnl ])# FP_CHECK_ALIGNMENT -# FP_CHECK_CONST(EXPRESSION, [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = (-1)]) +# 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. @@ -142,7 +142,7 @@ 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)'])]) + [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 @@ -159,7 +159,7 @@ m4_define([FP_CHECK_CONSTS_TEMPLATE], ])# FP_CHECK_CONSTS_TEMPLATE -# FP_CHECK_CONSTS(EXPRESSION..., [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = (-1)]) +# FP_CHECK_CONSTS(EXPRESSION..., [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = -1]) # ------------------------------------------------------------------------------------- # List version of FP_CHECK_CONST AC_DEFUN(FP_CHECK_CONSTS, @@ -238,64 +238,61 @@ YES) AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leadi esac ]) -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 -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]) -fi -])])dnl + +# 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 Check for Greencard and version. +dnl Check for GreenCard and version. dnl AC_DEFUN(FPTOOLS_GREENCARD, [ -AC_PATH_PROG(GreencardCmd,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 | +[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 changequote([, ])dnl ]) -FPTOOLS_PROG_CHECK_VERSION([$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) +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.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, @@ -310,7 +307,7 @@ else fi AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version, changequote(, )dnl -[if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then +[if test x"$HappyCmd" = x"$SrcTreeHappyCmd" -a -e $srcdir/happy/mk/version.mk; 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 | @@ -321,8 +318,8 @@ fi; changequote([, ])dnl ]) if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then - FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13], - [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl + FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.14], + [AC_MSG_ERROR([Happy version 1.14 or later is required to compile GHC.])])[]dnl fi HappyVersion=$fptools_cv_happy_version; AC_SUBST(HappyVersion) @@ -375,10 +372,10 @@ else fi; changequote([, ])dnl ]) -dnl if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then -dnl FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0], -dnl [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl -dnl fi +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) ]) @@ -408,72 +405,123 @@ AC_SUBST(LdXFlag) ]) -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; +# 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 -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' -else - echo "I can't figure out how to use your $ArCmd" - exit 1 -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 | grep "GNU" > /dev/null 2> /dev/null; then + fp_cv_prog_ar_is_gnu=yes +else + fp_cv_prog_ar_is_gnu=no +fi]) +fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu +])# FP_PROG_AR_IS_GNU + + +# 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 $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_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 $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 - ArSupportsInput='' + 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_prog_ar_raw $fp_prog_ar_args conftest.a -input conftest.lst > /dev/null 2> /dev/null; then + 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? @@ -509,15 +557,14 @@ 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' - FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0", - 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]) - ) + AC_MSG_ERROR([gcc 1.X has never been supported])]) fi ]) HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'` @@ -530,17 +577,15 @@ 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, -[ - fptools_cv_gcc_needs_no_omit_lfptr='no' - FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2", - fptools_cv_gcc_needs_no_omit_lfptr='yes') -]) +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 -]) +fi])# FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR + dnl Small feature test for perl version. Assumes PerlCmd dnl contains path to perl binary @@ -567,28 +612,36 @@ 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 @@ -663,57 +716,65 @@ 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_SYS_TYPES_H +#if HAVE_SYS_TYPES_H # include #endif -#ifdef HAVE_UNISTD_H +#if HAVE_UNISTD_H # include #endif -#ifdef HAVE_SYS_STAT_H +#if HAVE_SYS_STAT_H # include #endif -#ifdef HAVE_FCNTL_H +#if HAVE_FCNTL_H # include #endif -#ifdef HAVE_SIGNAL_H +#if HAVE_SIGNAL_H # include #endif -#ifdef HAVE_TIME_H +#if HAVE_TIME_H # include #endif -#ifdef HAVE_TERMIOS_H +#if HAVE_TERMIOS_H # include #endif -#ifdef HAVE_STRING_H +#if HAVE_STRING_H # include #endif -#ifdef HAVE_CTYPE_H +#if HAVE_CTYPE_H # include #endif -#ifdef HAVE_GL_GL_H +#if defined(HAVE_GL_GL_H) # include +#elif defined(HAVE_OPENGL_GL_H) +# include #endif -#ifdef HAVE_OPENGL_GL_H -# include +#if defined(HAVE_AL_ALC_H) +# include +#elif defined(HAVE_OPENAL_ALC_H) +# include #endif -#ifdef HAVE_SYS_RESOURCE_H +#if HAVE_SYS_RESOURCE_H # include #endif @@ -733,87 +794,38 @@ 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, [Define to Haskell type for $1]) -undefine([AC_TYPE_NAME])dnl -undefine([AC_CV_NAME])dnl -]) - - -dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning - -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 < -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: 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 -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 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_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 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"$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 + + if test x"$use_quartz_opengl" != xyes; then + AC_CHECK_LIB([m], [atan], [GL_LIBS="-lm $GL_LIBS"]) + + 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 + + FP_CHECK_GL_HELPER([GL], [-lGL -lopengl32], [@%:@include ], [glEnd()]) + + if test x"$no_GL" != xyes; then + # Ugly: To get wglGetProcAddress on Windows, we have to link with + # opengl32.dll, too, even when we are using Cygwin with X11. + case "$GL_LIBS" in + *-lopengl32*|*opengl32.lib*) ;; + *) fp_save_LIBS="$LIBS" + LIBS="$LIBS -lopengl32" + AC_TRY_LINK([@%:@include ], [glEnd()], + [GL_LIBS="$GL_LIBS -lopengl32"; GL_LIBS0="$GL_LIBS0 -lopengl32"]) + LIBS="$fp_save_LIBS" + ;; + esac + fi + fi +fi - 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_SUBST([GL_CFLAGS]) +AC_SUBST([GL_LIBS]) +])# FP_CHECK_GL - 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" +# FP_CHECK_GLU +# ------------ +AC_DEFUN([FP_CHECK_GLU], +[AC_REQUIRE([FP_CHECK_GL])dnl +GLU_CFLAGS="$GL_CFLAGS0" +GLU_LIBS="$GL_LIBS0" - GL_save_LIBS="$LIBS" - LIBS="$GL_X_LIBS" +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 - 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_SUBST([GLU_CFLAGS]) +AC_SUBST([GLU_LIBS]) +])# FP_CHECK_GLU - if test -n "$LIBS"; then - GL_LIBS="$LDFLAGS $LIBS" - else - GL_LIBS="$LDFLAGS" - GL_CFLAGS= - fi - LIBS="$GLUT_X_LIBS" +# FP_CHECK_GLUT +# ------------- +AC_DEFUN([FP_CHECK_GLUT], +[AC_REQUIRE([FP_CHECK_GLU]) +FP_PATH_XTRA - FPTOOLS_SEARCH_LIBS([#include ], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no) +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 -n "$LIBS"; then - GLUT_LIBS="$LDFLAGS $LIBS" + if test x"$no_x" != xyes; then + GLUT_LIBS="$X_PRE_LIBS -lXmu -lXi $X_EXTRA_LIBS $GLUT_LIBS" 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_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 + 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 Check whether empty structs is accepted by CC. +dnl +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 ]) # LocalWords: fi