X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=aclocal.m4;h=7d4e52bb929b84ac17310804facb5f31c7e7113b;hb=bb2a403575996eee68edb9a5633ce40aecc08ac4;hp=84a17e80f2a3d646a02f0c45915a5ab50b48b270;hpb=89205ddd57213f807d6cd7e43f91c469411c8502;p=ghc-hetmet.git diff --git a/aclocal.m4 b/aclocal.m4 index 84a17e8..7d4e52b 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,13 +1,39 @@ -# -# extra autoconf macros for Glasgow fptools distribution -# - -# -# Has timezone the type time_t or long (HP-UX 10.20 apparently -# has `long'..) -# -AC_DEFUN(AC_TYPE_TIMEZONE, -[AC_CACHE_CHECK([type of timezone], ac_cv_type_timezone, +dnl $Id: aclocal.m4,v 1.46 1999/12/21 13:00:54 simonmar 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) +fi +]) + +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 @@ -19,17 +45,16 @@ AC_DEFUN(AC_TYPE_TIMEZONE, # endif #endif -extern time_t timezone; +extern time_t timezone; ], -[int i;], ac_cv_type_timezone=time_t, ac_cv_type_timezone=long)]) -AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $ac_cv_type_timezone) +[int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)]) +AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone) ]) -# -# Is altzone available? -# -AC_DEFUN(AC_ALTZONE, -[AC_CACHE_CHECK([altzone], ac_cv_altzone, +dnl *** Is altzone available? *** +dnl +AC_DEFUN(FPTOOLS_ALTZONE, +[AC_CACHE_CHECK([altzone], fptools_cv_altzone, [AC_TRY_LINK([#if TIME_WITH_SYS_TIME # include # include @@ -41,28 +66,49 @@ AC_DEFUN(AC_ALTZONE, # endif #endif ], [return altzone;], -ac_cv_altzone=yes, ac_cv_altzone=no)]) -if test "$ac_cv_altzone" = yes; then +fptools_cv_altzone=yes, fptools_cv_altzone=no)]) +if test "$fptools_cv_altzone" = yes; then AC_DEFINE(HAVE_ALTZONE) fi ]) -# + dnl ** check for leading underscores in symbol names -# -# Test for determining whether symbol names have a leading -# underscore. -# -# We assume that they _haven't_ if anything goes wrong. -# -AC_DEFUN(AC_UNDERSCORE, -[AC_CHECK_LIB(elf, elf_begin, LIBS="-lelf $LIBS")dnl -AC_CACHE_CHECK([leading underscore in symbol names], ac_cv_lead_uscore, +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 +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 +<< +case $HostPlatform in +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 #include changequote(<<, >>)dnl << -struct nlist xYzzY[] = {{"_xYzzY", 0},{0}}; +struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}}; +struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}}; #endif main(argc, argv) @@ -70,23 +116,494 @@ int argc; char **argv; { #ifdef HAVE_NLIST_H - if(nlist(argv[0], xYzzY) == 0 && xYzzY[0].n_value != 0) + 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 #endif exit(1); -}], ac_cv_lead_uscore=yes, ac_cv_lead_uscore=no, ac_cv_lead_uscore=NO)), -# -# Hack!: nlist() under Digital UNIX insist on there being an _, -# but symbol table listings show none. What is going on here?!? -# -if test $HostPlatform = "alpha-dec-osf1"; then - LeadingUnderscore=NO +}], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO) +;; +esac); +LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'` +AC_SUBST(LeadingUnderscore) +case $LeadingUnderscore in +YES) AC_DEFINE(LEADING_UNDERSCORE);; +esac +]) + +dnl +dnl Check for Happy and version. If we're building GHC, then we need +dnl at least Happy version 1.6. If there's no installed Happy, we look +dnl for a happy source tree and point the build system at that instead. +dnl +dnl ToDo: when we reset HappyCmd to the source tree, autoconf doesn't +dnl seems to insert it in the cache file. sigh. +dnl +AC_DEFUN(FPTOOLS_HAPPY, +[AC_PATH_PROG(HappyCmd,happy) +AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version, +[if test x"$HappyCmd" != x; then + fptools_cv_happy_version="`$HappyCmd -v | +changequote(, )dnl + grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ; +elif test -d $srcdir/happy; then + HappyCmd=$hardtop/happy/src/happy-inplace; + fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`; + echo -n "using happy from the source tree... "; else - LeadingUnderscore=`echo $ac_cv_lead_uscore | sed 'y/yesno/YESNO/'` + fptools_cv_happy_version=""; fi; -test -n "$verbose" && echo " setting LeadingUnderscore to $LeadingUnderscore" -AC_SUBST(LeadingUnderscore) +changequote([, ])dnl +if expr "$fptools_cv_happy_version" "<" 1.6 > /dev/null 2>&1; then + if test -d $srcdir/ghc; then + echo + echo "Happy version 1.6 or later is required to compile GHC." + exit 1; + fi +fi; +]) +HappyVersion=$fptools_cv_happy_version; +AC_SUBST(HappyVersion) +]) + +dnl +dnl What's the best way of doing context diffs? +dnl +dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble") +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' +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 +fi +rm -f conftest1 conftest2 +]) +ContextDiffCmd=$fptools_cv_context_diffs +AC_SUBST(ContextDiffCmd) +]) + +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 +dnl ArCmd and RANLIB are AC_SUBST'ed +dnl +AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB, +[AC_PATH_PROG(ArCmd,ar) +if test -z "$ArCmd"; 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 clqs conftest.a >/dev/null 2>/dev/null; then + ArCmd="$ArCmd clqs" + NeedRanLib='' +elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then + ArCmd="$ArCmd cqs" + NeedRanLib='' +elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then + ArCmd="$ArCmd clq" + NeedRanLib='YES' +elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then + ArCmd="$ArCmd cq" + NeedRanLib='YES' +elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then + ArCmd="$ArCmd cq" + NeedRanLib='YES' +else + echo "I can't figure out how to use your $ArCmd" + exit 1 +fi +rm -rf conftest* +test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd" +AC_SUBST(ArCmd) +if test -z "$NeedRanLib"; then + RANLIB=':' + test -n "$verbose" && echo " setting RANLIB to $RANLIB" + AC_SUBST(RANLIB) +else + AC_PROG_RANLIB +fi +]) + +dnl +dnl AC_SHEBANG_PERL - can we she-bang perl? +dnl +AC_DEFUN(FPTOOLS_SHEBANG_PERL, +[AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl, +[echo "#!$PerlCmd"' +exit $1; +' > conftest +chmod u+x conftest +(SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null) +if test $? -ne 69; then + fptools_cv_shebang_perl=yes +else + fptools_cv_shebang_perl=no +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' +else +changequote(, )dnl + cmd_string="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 20 \\\< \1 \\\* 10 + \2/g' `" +changequote([, ])dnl + if test `eval $cmd_string 2>/dev/null` != "1"; then + echo '' + echo "I'm not sure if your version of gcc will work," + echo "but it's worth a shot, eh?" + fi + fptools_cv_have_gcc='yes' +fi +]) +HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'` +AC_SUBST(HaveGcc) +]) + +dnl Small feature test for perl version. Assumes PerlCmd +dnl contains path to perl binary +dnl +AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION, +[$PerlCmd -v >conftest.out 2>&1 +if grep "version 4" conftest.out >/dev/null 2>&1; then + if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then + echo " +************************************************************************ +Uh-oh...looks like you have Perl 4.035. + +Perl version 4.035 has a bug to do with recursion that will bite if +you run the lit2texi script, when making Info files from +literate files of various sorts. Either use perl5, the last version of perl4 +(4.036), or an older version (e.g., perl 4.019). Failing that, don't create +any Info files :-) +************************************************************************ +" + fi +else + if grep "version 5" conftest.out >/dev/null 2>&1; then + : + else + echo "I'm not sure if your version of perl will work," + echo "but it's worth a shot, eh?" + fi +fi +rm -fr conftest* +]) + +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\n", 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 ** 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 *** 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_MSG_CHECKING([for end of text section marker]) +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 + AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i)) + AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $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 + AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext)) + AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext"))) +else + AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is) + AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is) +fi +fi +AC_MSG_RESULT([$]fptools_cv_end_of_text) +]) + +dnl *** What's the end-of-data-section marker called? *** +dnl +AC_DEFUN(FPTOOLS_END_DATA_SECTION, +[AC_MSG_CHECKING([for end of data section marker]) +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 + AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)]) + AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $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 + AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))]) + AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)]) +else + AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)]) + AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)]) +fi +fi +AC_MSG_RESULT([$]fptools_cv_end_of_data) +]) + + + +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 <