1 dnl $Id: aclocal.m4,v 1.86 2001/10/24 09:43:47 simonmar Exp $
3 dnl Extra autoconf macros for the Glasgow fptools
5 dnl To be a good autoconf citizen, names of local macros have
6 dnl prefixed with FPTOOLS_ to ensure we don't clash
7 dnl with any pre-supplied autoconf ones.
10 dnl Is timezone around? (in a header file)
12 AC_DEFUN(FPTOOLS_HAVE_TIMEZONE,
13 [AC_CACHE_CHECK([timezone], fptools_cv_have_timezone,
14 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
15 # include <sys/time.h>
19 # include <sys/time.h>
24 ], [return timezone;],
25 fptools_cv_have_timezone=yes, fptools_cv_have_timezone=no)])
26 if test "$fptools_cv_have_timezone" = yes; then
27 AC_DEFINE(HAVE_TIMEZONE)
32 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
35 AC_DEFUN(FPTOOLS_TYPE_TIMEZONE,
36 [AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone,
37 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
38 # include <sys/time.h>
42 # include <sys/time.h>
48 extern time_t timezone;
50 [int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
51 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
54 dnl *** Is altzone available? ***
56 AC_DEFUN(FPTOOLS_ALTZONE,
57 [AC_CACHE_CHECK([altzone], fptools_cv_altzone,
58 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
59 # include <sys/time.h>
63 # include <sys/time.h>
69 fptools_cv_altzone=yes, fptools_cv_altzone=no)])
70 if test "$fptools_cv_altzone" = yes; then
71 AC_DEFINE(HAVE_ALTZONE)
76 dnl *** Does libc contain GNU regex? ***
78 AC_DEFUN(FPTOOLS_REGEX_IN_LIBC,
79 [AC_CACHE_CHECK([for GNU regex in libc], fptools_cv_have_regex,
80 [AC_TRY_LINK([#if HAVE_UNISTD_H
84 ],[ struct re_pattern_buffer patbuf;
85 re_compile_pattern("",0,&patbuf);
86 re_search_2 (&patbuf, "", 0, "",0, 0,0,0,0); ],
87 fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
88 if test "$fptools_cv_have_regex" = yes; then
97 dnl ** check for leading underscores in symbol names
99 dnl Test for determining whether symbol names have a leading
102 dnl We assume that they _haven't_ if anything goes wrong.
104 dnl Some nlist implementations seem to try to be compatible by ignoring
105 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
106 dnl to work around this by checking for *no* leading underscore first.
109 AC_DEFUN(FPTOOLS_UNDERSCORE,
110 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
111 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
114 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
115 dnl but symbol table listings shows none. What is going on here?!?
117 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
118 dnl the underscoredness of that "platform"
119 changequote(<<, >>)dnl
121 case $HostPlatform in
122 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
123 *cygwin32) fptools_cv_lead_uscore='yes';;
124 *mingw32) fptools_cv_lead_uscore='yes';;
127 AC_TRY_RUN([#ifdef HAVE_NLIST_H
129 changequote(<<, >>)dnl
131 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
132 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
140 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
142 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
147 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
150 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
151 AC_SUBST(LeadingUnderscore)
152 case $LeadingUnderscore in
153 YES) AC_DEFINE(LEADING_UNDERSCORE);;
158 dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
159 dnl ACTION-IF-TRUE [, ACTION-IF-FALSE])
161 dnl compare versions field-wise (separator is '.')
162 dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
164 dnl quite shell-independant and SUSv2 compliant code
166 dnl NOTE: the loop could be unrolled within autoconf, but the
167 dnl macro code would be a) longer and b) harder to debug... ;)
169 AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
174 set -- [$]a; h1="[$]1"; shift 2>/dev/null; a="[$]*"
175 set -- [$]b; h2="[$]1"; shift 2>/dev/null; b="[$]*"
176 test -n "[$]h1" || h1=0; test -n "[$]h2" || h2=0
177 test [$]{h1} -eq [$]{h2} || break
179 test [$]{h1} [$2] [$]{h2}
181 then ifelse([$4],,[:],[
191 dnl Check for Happy and version. If we're building GHC, then we need
192 dnl at least Happy version 1.9. If there's no installed Happy, we look
193 dnl for a happy source tree and point the build system at that instead.
195 AC_DEFUN(FPTOOLS_HAPPY,
197 if test -d $srcdir/happy; then
198 SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
200 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
201 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
203 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
204 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
205 elif test x"$HappyCmd" != x; then
206 fptools_cv_happy_version="`$HappyCmd -v |
207 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
209 fptools_cv_happy_version="";
213 if test -d $srcdir/ghc; then
214 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9],
215 [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])dnl
217 HappyVersion=$fptools_cv_happy_version;
218 AC_SUBST(HappyVersion)
222 dnl What's the best way of doing context diffs?
224 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
226 AC_DEFUN(FPTOOLS_PROG_DIFF,
227 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
228 [echo foo > conftest1
230 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
231 fptools_cv_context_diffs='diff -C 1'
233 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
234 fptools_cv_context_diffs='diff -c1'
236 echo "Can't figure out how to do context diffs."
237 echo "Neither \`diff -C 1' nor \`diff -c1' works."
241 rm -f conftest1 conftest2
243 ContextDiffCmd=$fptools_cv_context_diffs
244 AC_SUBST(ContextDiffCmd)
248 dnl Check whether ld supports -x
250 AC_DEFUN(FPTOOLS_LD_X,
251 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
253 echo 'foo() {}' > conftest.c
254 ${CC-cc} -c conftest.c
255 if ${LdCmd} -r -x -o foo.o conftest.o; then
260 rm -rf conftest.c conftest.o foo.o
262 if test "$fptools_cv_ld_x" = yes; then
271 dnl Finding the Right Yacc
273 AC_DEFUN(FPTOOLS_PROG_YACCY,
275 if test "$YACC" = "yacc"; then
276 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
277 [AC_CHECK_PROG(WhatCmd, what, what, :)
278 $WhatCmd $YACC > conftest.out
279 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
280 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
281 if test -f /usr/lang/yacc; then
282 echo "I'm going to use /usr/lang/yacc instead"
283 ac_cv_prog_yacc=/usr/lang/yacc
285 echo "I'm assuming the worst...no parser generator at all"
288 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
289 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
290 echo "I'm assuming the worst...no parser generator at all"
293 ac_cv_prog_yacc=$YACC
298 ac_cv_prog_yacc=$YACC
300 YaccCmd=$ac_cv_prog_yacc
304 dnl *** Checking for ar and its arguments + whether we need ranlib.
306 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
307 dnl On Digital UNIX, we test for the -Z (compress) and
308 dnl -input (take list of files from external file) flags.
310 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
311 [AC_PATH_PROG(ArCmd,ar)
312 if test -z "$ArCmd"; then
313 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
316 if $ArCmd clqsZ conftest.a >/dev/null 2>/dev/null; then
319 elif $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
322 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
325 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
328 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
331 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
335 echo "I can't figure out how to use your $ArCmd"
339 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
341 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
342 ArSupportsInput='-input'
347 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
348 AC_SUBST(ArSupportsInput)
349 if test -z "$NeedRanLib"; then
351 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
359 dnl AC_SHEBANG_PERL - can we she-bang perl?
361 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
362 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
367 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
368 if test $? -ne 69; then
369 fptools_cv_shebang_perl=yes
371 fptools_cv_shebang_perl=no
377 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
378 dnl *Must* be called after AC_PROG_CC
380 AC_DEFUN(FPTOOLS_HAVE_GCC,
381 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
382 [if test -z "$GCC"; then
384 echo "You would be better off with gcc"
385 echo "Perhaps it is already installed, but not in your PATH?"
386 fptools_cv_have_gcc='no'
389 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' `"
390 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' `"
392 fptools_cv_have_gcc='yes'
393 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
394 fptools_cv_have_gcc='no'
396 echo "your gcc version appears to be ..."
398 echo "gcc prior to 2.0 and have never worked with ghc."
399 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
400 AC_MSG_ERROR([gcc 1.X has never been supported])
402 if test `eval $is_gcc_v3 2>/dev/null` = "1"; then
403 fptools_cv_have_gcc='no'
405 echo "your gcc version appears to be ..."
407 echo "gcc versions 3.0 and above are not yet supported."
408 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
409 AC_MSG_ERROR([gcc 3.0 and above is not currently supported])
413 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
417 dnl Small feature test for perl version. Assumes PerlCmd
418 dnl contains path to perl binary
420 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
421 [$PerlCmd -v >conftest.out 2>&1
422 if grep "version 5" conftest.out >/dev/null 2>&1; then
425 if grep "v5.6" conftest.out >/dev/null 2>&1; then
428 if grep "version 6" conftest.out >/dev/null 2>&1; then
431 echo "Your version of perl probably won't work."
439 dnl Getting at the right version of 'find'
440 dnl (i.e., not the MS util on a Win32 box).
442 AC_DEFUN(FPTOOLS_FIND_FIND,
444 AC_PATH_PROG(Find2Cmd, find)
445 $Find2Cmd --version > conftest.out 2>&1
446 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
447 # Encountered MS' find utility, which is not what we're after.
449 # HACK - AC_CHECK_PROG is useful here in that does let you reject
450 # an (absolute) entry in the path (Find2Cmd). It is not so useful
451 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
452 # absolute path eventually found. So, hack around this by inspecting
453 # what variables hold the abs. path & use them directly.
454 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
462 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
463 dnl values of the second argument to the result of running
464 dnl the commands given by the third. It does not cache its
465 dnl result, so it is suitable for checks which should be
468 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
469 [AC_MSG_CHECKING([$1])
471 AC_MSG_RESULT([$][$2])
475 dnl FPTOOLS_GHC_VERSION(version)
476 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
477 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
479 dnl Test for version of installed ghc. Uses $GHC.
480 dnl [original version pinched from c2hs]
482 AC_DEFUN(FPTOOLS_GHC_VERSION,
483 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
484 [${WithGhc-ghc} --version > conftestghc 2>&1
485 cat conftestghc >&AC_FD_CC
486 #Useless Use Of cat award...
487 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
489 if test "[$]fptools_version_of_ghc" = ""
491 fptools_version_of_ghc='unknown'
493 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
494 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
495 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
497 if test "[$]fptools_version_of_ghc[_pl]" = ""
499 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
500 fptools_version_of_ghc[_pl]="0"
502 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
506 [$1]="[$]fptools_version_of_ghc[_all]"
508 [$1]="[$]fptools_version_of_ghc[_major]"
509 [$2]="[$]fptools_version_of_ghc[_minor]"
511 [$1]="[$]fptools_version_of_ghc[_major]"
512 [$2]="[$]fptools_version_of_ghc[_minor]"
513 [$3]="[$]fptools_version_of_ghc[_pl]"
515 [$1]="[$]fptools_version_of_ghc[_all]"
516 [$2]="[$]fptools_version_of_ghc[_major]"
517 [$3]="[$]fptools_version_of_ghc[_minor]"
518 [$4]="[$]fptools_version_of_ghc[_pl]"
524 dnl ** figure out the alignment restriction of a type
525 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
526 dnl so we can't call REQUIRE)
528 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
529 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
530 [changequote(<<, >>)dnl
531 dnl The name to #define.
532 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
533 dnl The cache variable name.
534 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
535 dnl The name of the corresponding size.
536 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
538 AC_MSG_CHECKING(alignment of $1)
539 AC_CACHE_VAL(AC_CV_NAME,
546 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
551 FILE *f=fopen("conftestval", "w");
553 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
556 AC_CV_NAME=`cat conftestval`,
557 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
558 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
559 AC_MSG_RESULT($AC_CV_NAME)
560 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
561 AC_PROVIDE($AC_TYPE_NAME)
562 undefine([AC_TYPE_NAME])dnl
563 undefine([AC_CV_NAME])dnl
564 undefine([AC_CV_SIZEOF_NAME])dnl
567 dnl ** Map an arithmetic C type to a Haskell type.
568 dnl Based on autconf's AC_CHECK_SIZEOF.
570 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
571 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
572 [changequote(<<, >>)dnl
573 dnl The name to #define.
574 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
575 dnl The cache variable name.
576 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
578 AC_MSG_CHECKING(Haskell type for $1)
579 AC_CACHE_VAL(AC_CV_NAME,
580 [AC_TRY_RUN([#include <stdio.h>
595 FILE *f=fopen("conftestval", "w");
597 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
599 ((testing)(-1) < (testing)0) ? "Int" : "Word",
603 (sizeof(testing) > sizeof(double)) ? "LDouble" :
604 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
608 }], AC_CV_NAME=`cat conftestval`,
609 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
610 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
611 AC_MSG_RESULT($AC_CV_NAME)
612 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
613 undefine([AC_TYPE_NAME])dnl
614 undefine([AC_CV_NAME])dnl
617 dnl ** figure out whether C compiler supports 'long long's
618 dnl (Closely based on Andreas Zeller's macro for testing
619 dnl for this under C++)
621 dnl If the C compiler supports `long long' types,
622 dnl define `HAVE_LONG_LONG'.
624 AC_DEFUN(FPTOOLS_C_LONG_LONG,
626 AC_REQUIRE([AC_PROG_CC])
627 AC_MSG_CHECKING(whether ${CC} supports long long types)
628 AC_CACHE_VAL(fptools_cv_have_long_long,
632 AC_TRY_COMPILE(,[long long a;],
633 fptools_cv_have_long_long=yes,
634 fptools_cv_have_long_long=no)
637 AC_MSG_RESULT($fptools_cv_have_long_long)
638 if test "$fptools_cv_have_long_long" = yes; then
639 AC_DEFINE(HAVE_LONG_LONG)
643 dnl ** Obtain the value of a C constant.
644 dnl The value will be `(-1)' if the constant is undefined.
646 dnl This is set up so that the argument can be a shell variable.
648 AC_DEFUN(FPTOOLS_CHECK_CCONST,
650 eval "def_name=CCONST_$1"
651 eval "cv_name=ac_cv_cconst_$1"
652 AC_MSG_CHECKING(value of $1)
653 AC_CACHE_VAL($cv_name,
654 [AC_TRY_RUN([#include <stdio.h>
658 FILE *f=fopen("conftestval", "w");
660 fprintf(f, "%d\n", $1);
663 eval "$cv_name=`cat conftestval`",
665 eval "$cv_name=-1")])dnl
666 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
667 AC_MSG_RESULT($fptools_check_cconst_result)
668 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
669 unset fptools_check_cconst_result
672 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
675 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
676 [for ac_const_name in $1
678 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
683 dnl *** Can we open files in binary mode? ***
685 AC_DEFUN(FPTOOLS_O_BINARY,
687 AC_REQUIRE([AC_PROG_CC])
688 AC_MSG_CHECKING(whether we can open files in binary mode)
689 AC_CACHE_VAL(fptools_cv_have_o_binary,
698 fptools_cv_have_o_binary=yes,
699 fptools_cv_have_o_binary=no)
702 AC_MSG_RESULT($fptools_cv_have_o_binary)
703 if test "$fptools_cv_have_o_binary" = yes; then
704 AC_DEFINE(HAVE_O_BINARY)
708 dnl *** Which one comes first, .text or .data? ***
710 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
711 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
713 int f() { return 1; }
715 int main() { return ((char*)&f > (char*)&i); }
718 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
719 if test "$fptools_cv_code_bef_data" = yes; then
720 AC_DEFINE(CODE_BEFORE_DATA)
724 dnl *** Helper function **
726 AC_DEFUN(FPTOOLS_IN_SCOPE,
727 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
730 dnl *** What's the end-of-text-section marker called? ***
732 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
733 [AC_CACHE_CHECK([for end of text section marker],
734 [fptools_cv_end_of_text],
735 [fptools_cv_end_of_text=""
737 for i in data_start _data_start etext _etext __etext; do
738 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
739 if test "$fptools_end_of_text" = yes; then
740 fptools_cv_end_of_text=$i
745 if test "$not_done" = 1; then
746 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
747 if test "$fptools_end_of_text" = yes; then
748 fptools_cv_end_of_text="etext"
751 if test -n "$fptools_cv_end_of_text"; then
752 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
754 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
756 AC_CACHE_CHECK([for end of text section marker declaration],
757 [fptools_cv_end_of_text_decl],
758 [fptools_cv_end_of_text_decl=""
760 for i in data_start _data_start etext _etext __etext; do
761 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
762 if test "$fptools_end_of_text_decl" = yes; then
763 fptools_cv_end_of_text_decl=$i
768 if test "$not_done" = 1; then
769 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
770 if test "$fptools_end_of_text_decl" = yes; then
771 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
774 if test -n "$fptools_cv_end_of_text_decl"; then
775 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
777 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
781 dnl *** What's the end-of-data-section marker called? ***
783 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
784 [AC_CACHE_CHECK([for end of data section marker],
785 [fptools_cv_end_of_data],
786 [fptools_cv_end_of_data=""
788 for i in end _end __end; do
789 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
790 if test "$fptools_end_of_data" = yes; then
791 fptools_cv_end_of_data=$i
796 if test "$not_done" = 1; then
797 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
798 if test "$fptools_end_of_data" = yes; then
799 fptools_cv_end_of_data="end"
802 if test -n "$fptools_cv_end_of_data"; then
803 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
805 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
807 AC_CACHE_CHECK([for end of data section marker declaration],
808 [fptools_cv_end_of_data_decl],
809 [fptools_cv_end_of_data_decl=""
811 for i in end _end __end; do
812 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
813 if test "$fptools_end_of_data_decl" = yes; then
814 fptools_cv_end_of_data_decl=$i
819 if test "$not_done" = 1; then
820 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
821 if test "$fptools_end_of_data_decl" = yes; then
822 fptools_cv_end_of_data_decl="end asm(\"end\")"
825 if test -n "$fptools_cv_end_of_data_decl"; then
826 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
828 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
833 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
835 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
837 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
841 cat > conftest.$ac_ext <<EOF
842 dnl This sometimes fails to find confdefs.h, for some reason.
843 dnl [#]line __oline__ "[$]0"
844 [#]line __oline__ "configure"
845 #include "confdefs.h"
847 int t() { return 0; }
849 if AC_TRY_EVAL(ac_link); then
854 ifelse([$4], , , [else
864 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
866 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
868 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
869 [AC_MSG_CHECKING([for $1])
870 AC_CACHE_VAL(ac_cv_flag_$1,
871 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
872 eval "ac_cv_flag_$1=yes",
873 eval "ac_cv_flag_$1=no"
876 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
886 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
888 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
889 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
891 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
893 AC_DEFINE_UNQUOTED($ac_tr_lib)
895 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
897 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
899 AC_DEFINE_UNQUOTED($ac_tr_lib)
905 dnl check for prototypes
907 AC_DEFUN([AC_C_PROTOTYPES],
908 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
917 ac_cv_prototypes=yes,
918 ac_cv_prototypes=no)])
919 if test "$ac_cv_prototypes" = yes; then
920 AC_DEFINE([HAVE_PROTOTYPES])
924 dnl ** Check which CATALOG file we have to use with DocBook SGML.
926 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
928 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
929 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
930 dnl is set to "no". JADE is the jade executable and STYLESHEET
931 dnl a DocBook style sheet.
933 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
934 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
936 cat > conftest.sgml << EOF
937 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
941 <Author><OtherName>Test</OtherName></Author>
942 <Address>Test</Address>
943 <PubDate>Test</PubDate>
945 <Sect1><Title>Test</Title>
952 fptools_cv_sgml_catalog=no
953 for fptools_catalog in $4; do
954 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
955 if AC_TRY_EVAL(ac_try); then
956 fptools_cv_sgml_catalog=[$]fptools_catalog
962 if test $fptools_cv_sgml_catalog != "no"; then
963 $1=$fptools_cv_sgml_catalog
967 dnl ######################################################################
968 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
969 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
970 dnl Search for a library defining FUNC, if it's not already available.
971 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
973 dnl ######################################################################
975 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
977 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
978 [ac_func_search_save_LIBS="$LIBS"
980 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
981 test "$ac_cv_search_$2" = "no" && for i in $3; do
982 LIBS="-l$i $6 $ac_func_search_save_LIBS"
983 AC_TRY_LINK([$1], [$2()],
984 [ac_cv_search_$2="-l$i"
987 LIBS="$ac_func_search_save_LIBS"])
988 if test "$ac_cv_search_$2" != "no"; then
989 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
995 dnl ####################### -*- Mode: M4 -*- ###########################
996 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
998 dnl This file is free software; you can redistribute it and/or modify it
999 dnl under the terms of the GNU General Public License as published by
1000 dnl the Free Software Foundation; either version 2 of the License, or
1001 dnl (at your option) any later version.
1003 dnl This file is distributed in the hope that it will be useful, but
1004 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1005 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1006 dnl General Public License for more details.
1008 dnl You should have received a copy of the GNU General Public License
1009 dnl along with this file; if not, write to:
1011 dnl Free Software Foundation, Inc.
1014 dnl Boston, MA 02111-1307, USA.
1015 dnl ####################################################################
1018 dnl @synopsis FPTOOLS_CHECK_LIBM
1020 dnl Search for math library (typically -lm).
1022 dnl The variable LIBM (which is not an output variable by default) is
1023 dnl set to a value which is suitable for use in a Makefile (for example,
1024 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1026 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1028 # FPTOOLS_CHECK_LIBM - check for math library
1029 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1030 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1033 *-*-beos* | *-*-macosx*)
1034 # These system don't have libm
1037 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1038 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1041 AC_CHECK_LIB(m, main, LIBM="-lm")
1046 dnl ######################################################################
1047 dnl NOTE: Because of portability issues between different autoconf
1048 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1049 dnl Furthermore, caching has been completely rewritten.
1050 dnl ######################################################################
1052 dnl ########################### -*- Mode: M4 -*- #######################
1053 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1055 dnl This file is free software; you can redistribute it and/or modify it
1056 dnl under the terms of the GNU General Public License as published by
1057 dnl the Free Software Foundation; either version 2 of the License, or
1058 dnl (at your option) any later version.
1060 dnl This file is distributed in the hope that it will be useful, but
1061 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1062 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1063 dnl General Public License for more details.
1065 dnl You should have received a copy of the GNU General Public License
1066 dnl along with this file; if not, write to:
1068 dnl Free Software Foundation, Inc.
1071 dnl Boston, MA 02111-1307, USA.
1072 dnl ####################################################################
1074 dnl @synopsis FPTOOLS_HAVE_OPENGL
1076 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1077 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1078 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1080 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1081 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1084 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1085 dnl be missing) are added to the shell output variable "GL_LIBS", along
1086 dnl with any other libraries that are necessary to successfully link an
1087 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1088 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1091 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1092 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1093 dnl an OpenGL application.
1095 dnl The following shell variable (which are not output variables) are
1096 dnl also set to either "yes" or "no" (depending on which libraries were
1097 dnl found) to help you determine exactly what was found.
1104 dnl A complete little toy "Automake `make distcheck'" package of how to
1105 dnl use this macro is available at:
1107 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1109 dnl Please note that as the ac_opengl macro and the toy example evolves,
1110 dnl the version number increases, so you may have to adjust the above
1111 dnl URL accordingly.
1113 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1115 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1117 AC_REQUIRE([AC_PROG_CC])
1118 AC_REQUIRE([AC_PATH_X])
1119 AC_REQUIRE([AC_PATH_XTRA])
1120 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1122 dnl Check for Mesa first, unless we were asked not to.
1123 dnl AC_HELP_STRING([--with-Mesa],
1124 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1125 dnl with_Mesa_help_string)
1126 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1127 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1129 if test x"$use_Mesa" = xyes; then
1130 GL_search_list="MesaGL GL opengl32"
1131 GLU_search_list="MesaGLU GLU glu32"
1132 GLX_search_list="MesaGLX GLX"
1134 GL_search_list="GL opengl32 MesaGL"
1135 GLU_search_list="GLU glu32 MesaGLU"
1136 GLX_search_list="GLX MesaGLX"
1142 dnl If we are running under X11 then add in the appropriate libraries.
1143 if ! test x"$no_x" = xyes; then
1144 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1146 GL_CFLAGS="$X_CFLAGS"
1147 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1149 GL_save_CPPFLAGS="$CPPFLAGS"
1150 CPPFLAGS="$GL_CFLAGS"
1152 GL_save_LIBS="$LIBS"
1155 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1156 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1157 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1158 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1160 if test -n "$LIBS"; then
1167 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1168 GL_CFLAGS="$mdl_cv_gl_cflags"
1170 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1171 GL_LIBS="$mdl_cv_gl_libs"
1174 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1175 dnl and we don't want to be global namespace polluters.
1178 LIBS="$GL_save_LIBS"
1179 CPPFLAGS="$GL_save_CPPFLAGS"
1187 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1188 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1189 dnl 'lex' is actually present along the user's PATH).
1191 AC_DEFUN(AC_PROG_LEX_STRICT,
1192 [AC_CHECK_PROG(LEX, flex, flex)
1195 AC_CHECK_PROG(LEX,lex,lex)
1196 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1201 dnl Check to see whether CC (gcc) supports a particular option.
1203 AC_DEFUN(FPTOOLS_CC_FLAG,
1205 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1206 [save_CFLAGS="$CFLAGS"
1209 AC_TRY_COMPILE(,[int main(){return(0);}],
1212 CFLAGS="$save_CFLAGS"
1214 if test "$ac_cv_cc_$2"x = "yesx"; then