1 dnl $Id: aclocal.m4,v 1.100 2002/05/05 17:03:54 panne 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
93 AC_SUBST(HaveGNURegex)
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 if test x"$UseSrcTreeHappy" = xYES; then
201 HappyCmd=$SrcTreeHappyCmd
203 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
205 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
207 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
208 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
209 elif test x"$HappyCmd" != x; then
210 fptools_cv_happy_version="`$HappyCmd -v |
211 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
213 fptools_cv_happy_version="";
217 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
218 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9],
219 [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])dnl
221 HappyVersion=$fptools_cv_happy_version;
222 AC_SUBST(HappyVersion)
224 # 1.9 and later is required, assume that we can use the
225 # "-agc" options. NOTE: The Master of Happy-ness says:
226 # "Don't use -s! (yet)"
232 dnl What's the best way of doing context diffs?
234 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
236 AC_DEFUN(FPTOOLS_PROG_DIFF,
237 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
238 [echo foo > conftest1
240 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
241 fptools_cv_context_diffs='diff -C 1'
243 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
244 fptools_cv_context_diffs='diff -c1'
246 echo "Can't figure out how to do context diffs."
247 echo "Neither \`diff -C 1' nor \`diff -c1' works."
251 rm -f conftest1 conftest2
253 ContextDiffCmd=$fptools_cv_context_diffs
254 AC_SUBST(ContextDiffCmd)
258 dnl Check whether ld supports -x
260 AC_DEFUN(FPTOOLS_LD_X,
261 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
263 echo 'foo() {}' > conftest.c
264 ${CC-cc} -c conftest.c
265 if ${LdCmd} -r -x -o foo.o conftest.o; then
270 rm -rf conftest.c conftest.o foo.o
272 if test "$fptools_cv_ld_x" = yes; then
281 dnl Finding the Right Yacc
283 AC_DEFUN(FPTOOLS_PROG_YACCY,
285 if test "$YACC" = "yacc"; then
286 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
287 [AC_CHECK_PROG(WhatCmd, what, what, :)
288 $WhatCmd $YACC > conftest.out
289 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
290 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
291 if test -f /usr/lang/yacc; then
292 echo "I'm going to use /usr/lang/yacc instead"
293 ac_cv_prog_yacc=/usr/lang/yacc
295 echo "I'm assuming the worst...no parser generator at all"
298 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
299 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
300 echo "I'm assuming the worst...no parser generator at all"
303 ac_cv_prog_yacc=$YACC
308 ac_cv_prog_yacc=$YACC
310 YaccCmd=$ac_cv_prog_yacc
314 dnl *** Checking for ar and its arguments + whether we need ranlib.
316 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
317 dnl On Digital UNIX, we test for the -Z (compress) and
318 dnl -input (take list of files from external file) flags.
320 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
321 [AC_PATH_PROG(ArCmdRaw,ar)
322 if test -z "$ArCmdRaw"; then
323 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
326 if $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
329 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
332 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
335 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
338 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
341 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
345 echo "I can't figure out how to use your $ArCmd"
349 case $HostPlatform in
351 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
353 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
356 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
358 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
359 ArSupportsInput='-input'
364 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
365 AC_SUBST(ArSupportsInput)
366 if test -z "$NeedRanLib"; then
368 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
376 dnl AC_SHEBANG_PERL - can we she-bang perl?
378 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
379 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
384 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
385 if test $? -ne 69; then
386 fptools_cv_shebang_perl=yes
388 fptools_cv_shebang_perl=no
394 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
395 dnl *Must* be called after AC_PROG_CC
397 AC_DEFUN(FPTOOLS_HAVE_GCC,
398 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
399 [if test -z "$GCC"; then
401 echo "You would be better off with gcc"
402 echo "Perhaps it is already installed, but not in your PATH?"
403 fptools_cv_have_gcc='no'
406 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' `"
408 fptools_cv_have_gcc='yes'
409 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
410 fptools_cv_have_gcc='no'
412 echo "your gcc version appears to be ..."
414 echo "gcc prior to 2.0 and have never worked with ghc."
415 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
416 AC_MSG_ERROR([gcc 1.X has never been supported])
420 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
424 dnl Small feature test for perl version. Assumes PerlCmd
425 dnl contains path to perl binary
427 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
428 [$PerlCmd -v >conftest.out 2>&1
429 if grep "version 5" conftest.out >/dev/null 2>&1; then
432 if grep "v5.6" conftest.out >/dev/null 2>&1; then
435 if grep "version 6" conftest.out >/dev/null 2>&1; then
438 echo "Your version of perl probably won't work."
446 dnl Getting at the right version of 'find'
447 dnl (i.e., not the MS util on a Win32 box).
449 AC_DEFUN(FPTOOLS_FIND_FIND,
451 AC_PATH_PROG(Find2Cmd, find)
452 $Find2Cmd --version > conftest.out 2>&1
453 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
454 # Encountered MS' find utility, which is not what we're after.
456 # HACK - AC_CHECK_PROG is useful here in that does let you reject
457 # an (absolute) entry in the path (Find2Cmd). It is not so useful
458 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
459 # absolute path eventually found. So, hack around this by inspecting
460 # what variables hold the abs. path & use them directly.
461 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
469 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
470 dnl values of the second argument to the result of running
471 dnl the commands given by the third. It does not cache its
472 dnl result, so it is suitable for checks which should be
475 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
476 [AC_MSG_CHECKING([$1])
478 AC_MSG_RESULT([$][$2])
482 dnl FPTOOLS_GHC_VERSION(version)
483 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
484 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
486 dnl Test for version of installed ghc. Uses $GHC.
487 dnl [original version pinched from c2hs]
489 AC_DEFUN(FPTOOLS_GHC_VERSION,
490 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
491 ["${WithGhc-ghc}" --version > conftestghc 2>&1
492 cat conftestghc >&AC_FD_CC
493 #Useless Use Of cat award...
494 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
496 if test "[$]fptools_version_of_ghc" = ""
498 fptools_version_of_ghc='unknown'
500 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
501 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
502 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
504 if test "[$]fptools_version_of_ghc[_pl]" = ""
506 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
507 fptools_version_of_ghc[_pl]="0"
509 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
513 [$1]="[$]fptools_version_of_ghc[_all]"
515 [$1]="[$]fptools_version_of_ghc[_major]"
516 [$2]="[$]fptools_version_of_ghc[_minor]"
518 [$1]="[$]fptools_version_of_ghc[_major]"
519 [$2]="[$]fptools_version_of_ghc[_minor]"
520 [$3]="[$]fptools_version_of_ghc[_pl]"
522 [$1]="[$]fptools_version_of_ghc[_all]"
523 [$2]="[$]fptools_version_of_ghc[_major]"
524 [$3]="[$]fptools_version_of_ghc[_minor]"
525 [$4]="[$]fptools_version_of_ghc[_pl]"
531 dnl ** figure out the alignment restriction of a type
532 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
533 dnl so we can't call REQUIRE)
535 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
536 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
537 [changequote(<<, >>)dnl
538 dnl The name to #define.
539 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
540 dnl The cache variable name.
541 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
542 dnl The name of the corresponding size.
543 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
545 AC_MSG_CHECKING(alignment of $1)
546 AC_CACHE_VAL(AC_CV_NAME,
553 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
558 FILE *f=fopen("conftestval", "w");
560 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
563 AC_CV_NAME=`cat conftestval`,
564 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
565 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
566 AC_MSG_RESULT($AC_CV_NAME)
567 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
568 AC_PROVIDE($AC_TYPE_NAME)
569 undefine([AC_TYPE_NAME])dnl
570 undefine([AC_CV_NAME])dnl
571 undefine([AC_CV_SIZEOF_NAME])dnl
574 dnl ** Map an arithmetic C type to a Haskell type.
575 dnl Based on autconf's AC_CHECK_SIZEOF.
577 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
578 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
579 [changequote(<<, >>)dnl
580 dnl The name to #define.
581 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
582 dnl The cache variable name.
583 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
585 AC_MSG_CHECKING(Haskell type for $1)
586 AC_CACHE_VAL(AC_CV_NAME,
587 [AC_TRY_RUN([#include <stdio.h>
590 #ifdef HAVE_SYS_TYPES_H
591 # include <sys/types.h>
598 #ifdef HAVE_SYS_STAT_H
599 # include <sys/stat.h>
614 #ifdef HAVE_TERMIOS_H
615 # include <termios.h>
633 FILE *f=fopen("conftestval", "w");
635 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
637 ((testing)(-1) < (testing)0) ? "Int" : "Word",
641 (sizeof(testing) > sizeof(double)) ? "LDouble" :
642 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
646 }], AC_CV_NAME=`cat conftestval`,
647 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
648 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
649 AC_MSG_RESULT($AC_CV_NAME)
650 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
651 undefine([AC_TYPE_NAME])dnl
652 undefine([AC_CV_NAME])dnl
655 dnl ** figure out whether C compiler supports 'long long's
656 dnl (Closely based on Andreas Zeller's macro for testing
657 dnl for this under C++)
659 dnl If the C compiler supports `long long' types,
660 dnl define `HAVE_LONG_LONG'.
662 AC_DEFUN(FPTOOLS_C_LONG_LONG,
664 AC_REQUIRE([AC_PROG_CC])
665 AC_MSG_CHECKING(whether ${CC} supports long long types)
666 AC_CACHE_VAL(fptools_cv_have_long_long,
670 AC_TRY_COMPILE(,[long long a;],
671 fptools_cv_have_long_long=yes,
672 fptools_cv_have_long_long=no)
675 AC_MSG_RESULT($fptools_cv_have_long_long)
676 if test "$fptools_cv_have_long_long" = yes; then
677 AC_DEFINE(HAVE_LONG_LONG)
681 dnl ** Obtain the value of a C constant.
682 dnl The value will be `(-1)' if the constant is undefined.
684 dnl This is set up so that the argument can be a shell variable.
686 AC_DEFUN(FPTOOLS_CHECK_CCONST,
688 eval "def_name=CCONST_$1"
689 eval "cv_name=ac_cv_cconst_$1"
690 AC_MSG_CHECKING(value of $1)
691 AC_CACHE_VAL($cv_name,
692 [AC_TRY_RUN([#include <stdio.h>
696 FILE *f=fopen("conftestval", "w");
698 fprintf(f, "%d\n", $1);
701 eval "$cv_name=`cat conftestval`",
703 eval "$cv_name=-1")])dnl
704 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
705 AC_MSG_RESULT($fptools_check_cconst_result)
706 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
707 unset fptools_check_cconst_result
710 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
713 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
714 [for ac_const_name in $1
716 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
721 dnl *** Can we open files in binary mode? ***
723 AC_DEFUN(FPTOOLS_O_BINARY,
725 AC_REQUIRE([AC_PROG_CC])
726 AC_MSG_CHECKING(whether we can open files in binary mode)
727 AC_CACHE_VAL(fptools_cv_have_o_binary,
736 fptools_cv_have_o_binary=yes,
737 fptools_cv_have_o_binary=no)
740 AC_MSG_RESULT($fptools_cv_have_o_binary)
741 if test "$fptools_cv_have_o_binary" = yes; then
742 AC_DEFINE(HAVE_O_BINARY)
746 dnl *** Which one comes first, .text or .data? ***
748 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
749 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
751 int f() { return 1; }
753 int main() { return ((char*)&f > (char*)&i); }
756 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
757 if test "$fptools_cv_code_bef_data" = yes; then
758 AC_DEFINE(CODE_BEFORE_DATA)
762 dnl *** Helper function **
764 AC_DEFUN(FPTOOLS_IN_SCOPE,
765 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
768 dnl *** What's the end-of-text-section marker called? ***
770 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
771 [AC_CACHE_CHECK([for end of text section marker],
772 [fptools_cv_end_of_text],
773 [fptools_cv_end_of_text=""
775 for i in data_start _data_start etext _etext __etext; do
776 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
777 if test "$fptools_end_of_text" = yes; then
778 fptools_cv_end_of_text=$i
783 if test "$not_done" = 1; then
784 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
785 if test "$fptools_end_of_text" = yes; then
786 fptools_cv_end_of_text="etext"
789 if test -n "$fptools_cv_end_of_text"; then
790 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
792 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
794 AC_CACHE_CHECK([for end of text section marker declaration],
795 [fptools_cv_end_of_text_decl],
796 [fptools_cv_end_of_text_decl=""
798 for i in data_start _data_start etext _etext __etext; do
799 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
800 if test "$fptools_end_of_text_decl" = yes; then
801 fptools_cv_end_of_text_decl=$i
806 if test "$not_done" = 1; then
807 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
808 if test "$fptools_end_of_text_decl" = yes; then
809 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
812 if test -n "$fptools_cv_end_of_text_decl"; then
813 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
815 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
819 dnl *** What's the end-of-data-section marker called? ***
821 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
822 [AC_CACHE_CHECK([for end of data section marker],
823 [fptools_cv_end_of_data],
824 [fptools_cv_end_of_data=""
826 for i in end _end __end; do
827 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
828 if test "$fptools_end_of_data" = yes; then
829 fptools_cv_end_of_data=$i
834 if test "$not_done" = 1; then
835 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
836 if test "$fptools_end_of_data" = yes; then
837 fptools_cv_end_of_data="end"
840 if test -n "$fptools_cv_end_of_data"; then
841 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
843 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
845 AC_CACHE_CHECK([for end of data section marker declaration],
846 [fptools_cv_end_of_data_decl],
847 [fptools_cv_end_of_data_decl=""
849 for i in end _end __end; do
850 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
851 if test "$fptools_end_of_data_decl" = yes; then
852 fptools_cv_end_of_data_decl=$i
857 if test "$not_done" = 1; then
858 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
859 if test "$fptools_end_of_data_decl" = yes; then
860 fptools_cv_end_of_data_decl="end asm(\"end\")"
863 if test -n "$fptools_cv_end_of_data_decl"; then
864 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
866 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
871 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
873 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
875 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
879 cat > conftest.$ac_ext <<EOF
880 dnl This sometimes fails to find confdefs.h, for some reason.
881 dnl [#]line __oline__ "[$]0"
882 [#]line __oline__ "configure"
883 #include "confdefs.h"
885 int t() { return 0; }
887 if AC_TRY_EVAL(ac_link); then
892 ifelse([$4], , , [else
902 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
904 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
906 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
907 [AC_MSG_CHECKING([for $1])
908 AC_CACHE_VAL(ac_cv_flag_$1,
909 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
910 eval "ac_cv_flag_$1=yes",
911 eval "ac_cv_flag_$1=no"
914 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
924 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
926 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
927 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
929 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
931 AC_DEFINE_UNQUOTED($ac_tr_lib)
933 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
935 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
937 AC_DEFINE_UNQUOTED($ac_tr_lib)
943 dnl check for prototypes
945 AC_DEFUN([AC_C_PROTOTYPES],
946 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
955 ac_cv_prototypes=yes,
956 ac_cv_prototypes=no)])
957 if test "$ac_cv_prototypes" = yes; then
958 AC_DEFINE([HAVE_PROTOTYPES])
962 dnl ** Check which CATALOG file we have to use with DocBook SGML.
964 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
966 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
967 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
968 dnl is set to "no". JADE is the jade executable and STYLESHEET
969 dnl a DocBook style sheet.
971 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
972 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
974 cat > conftest.sgml << EOF
975 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
979 <Author><OtherName>Test</OtherName></Author>
980 <Address>Test</Address>
981 <PubDate>Test</PubDate>
983 <Sect1><Title>Test</Title>
990 fptools_cv_sgml_catalog=no
991 if test -z "$SGML_CATALOG_FILES" ; then
992 for fptools_catalog in $4; do
993 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
994 if AC_TRY_EVAL(ac_try); then
995 fptools_cv_sgml_catalog=[$]fptools_catalog
1000 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
1001 fptools_cv_sgml_catalog="yes"
1005 if test $fptools_cv_sgml_catalog != "no"; then
1006 $1=$fptools_cv_sgml_catalog
1010 dnl ######################################################################
1011 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1012 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1013 dnl Search for a library defining FUNC, if it's not already available.
1014 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1016 dnl ######################################################################
1018 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1020 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1021 [ac_func_search_save_LIBS="$LIBS"
1022 ac_cv_search_$2="no"
1023 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1024 test "$ac_cv_search_$2" = "no" && for i in $3; do
1025 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1026 AC_TRY_LINK([$1], [$2()],
1027 [ac_cv_search_$2="-l$i"
1030 LIBS="$ac_func_search_save_LIBS"])
1031 if test "$ac_cv_search_$2" != "no"; then
1032 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1038 dnl ####################### -*- Mode: M4 -*- ###########################
1039 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1041 dnl This file is free software; you can redistribute it and/or modify it
1042 dnl under the terms of the GNU General Public License as published by
1043 dnl the Free Software Foundation; either version 2 of the License, or
1044 dnl (at your option) any later version.
1046 dnl This file is distributed in the hope that it will be useful, but
1047 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1048 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1049 dnl General Public License for more details.
1051 dnl You should have received a copy of the GNU General Public License
1052 dnl along with this file; if not, write to:
1054 dnl Free Software Foundation, Inc.
1057 dnl Boston, MA 02111-1307, USA.
1058 dnl ####################################################################
1061 dnl @synopsis FPTOOLS_CHECK_LIBM
1063 dnl Search for math library (typically -lm).
1065 dnl The variable LIBM (which is not an output variable by default) is
1066 dnl set to a value which is suitable for use in a Makefile (for example,
1067 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1069 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1071 # FPTOOLS_CHECK_LIBM - check for math library
1072 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1073 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1077 # These system don't have libm
1080 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1081 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1084 AC_CHECK_LIB(m, main, LIBM="-lm")
1089 dnl ######################################################################
1090 dnl NOTE: Because of portability issues between different autoconf
1091 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1092 dnl Furthermore, caching has been completely rewritten.
1093 dnl ######################################################################
1095 dnl ########################### -*- Mode: M4 -*- #######################
1096 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1098 dnl This file is free software; you can redistribute it and/or modify it
1099 dnl under the terms of the GNU General Public License as published by
1100 dnl the Free Software Foundation; either version 2 of the License, or
1101 dnl (at your option) any later version.
1103 dnl This file is distributed in the hope that it will be useful, but
1104 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1105 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1106 dnl General Public License for more details.
1108 dnl You should have received a copy of the GNU General Public License
1109 dnl along with this file; if not, write to:
1111 dnl Free Software Foundation, Inc.
1114 dnl Boston, MA 02111-1307, USA.
1115 dnl ####################################################################
1117 dnl @synopsis FPTOOLS_HAVE_OPENGL
1119 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1120 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1121 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1123 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1124 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1127 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1128 dnl be missing) are added to the shell output variable "GL_LIBS", along
1129 dnl with any other libraries that are necessary to successfully link an
1130 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1131 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1134 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1135 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1136 dnl an OpenGL application.
1138 dnl The following shell variable (which are not output variables) are
1139 dnl also set to either "yes" or "no" (depending on which libraries were
1140 dnl found) to help you determine exactly what was found.
1147 dnl A complete little toy "Automake `make distcheck'" package of how to
1148 dnl use this macro is available at:
1150 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1152 dnl Please note that as the ac_opengl macro and the toy example evolves,
1153 dnl the version number increases, so you may have to adjust the above
1154 dnl URL accordingly.
1156 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1158 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1160 AC_REQUIRE([AC_PROG_CC])
1161 AC_REQUIRE([AC_PATH_X])
1162 AC_REQUIRE([AC_PATH_XTRA])
1163 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1165 dnl Check for Mesa first, unless we were asked not to.
1166 dnl AC_HELP_STRING([--with-Mesa],
1167 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1168 dnl with_Mesa_help_string)
1169 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1170 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=no)], use_Mesa=$enableval, use_Mesa=no)
1172 if test x"$use_Mesa" = xyes; then
1173 GL_search_list="MesaGL GL opengl32"
1174 GLU_search_list="MesaGLU GLU glu32"
1175 GLX_search_list="MesaGLX GLX"
1177 GL_search_list="GL opengl32 MesaGL"
1178 GLU_search_list="GLU glu32 MesaGLU"
1179 GLX_search_list="GLX MesaGLX"
1185 dnl If we are running under X11 then add in the appropriate libraries.
1186 if ! test x"$no_x" = xyes; then
1187 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1189 GL_CFLAGS="$X_CFLAGS"
1190 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1192 GL_save_CPPFLAGS="$CPPFLAGS"
1193 CPPFLAGS="$GL_CFLAGS"
1195 GL_save_LIBS="$LIBS"
1198 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1199 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1200 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1201 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1203 if test -n "$LIBS"; then
1210 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1211 GL_CFLAGS="$mdl_cv_gl_cflags"
1213 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1214 GL_LIBS="$mdl_cv_gl_libs"
1217 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1218 dnl and we don't want to be global namespace polluters.
1221 LIBS="$GL_save_LIBS"
1222 CPPFLAGS="$GL_save_CPPFLAGS"
1230 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1231 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1232 dnl 'lex' is actually present along the user's PATH).
1234 AC_DEFUN(AC_PROG_LEX_STRICT,
1235 [AC_CHECK_PROG(LEX, flex, flex)
1238 AC_CHECK_PROG(LEX,lex,lex)
1239 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1244 dnl Check to see whether CC (gcc) supports a particular option.
1246 AC_DEFUN(FPTOOLS_CC_FLAG,
1248 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1249 [save_CFLAGS="$CFLAGS"
1252 AC_TRY_COMPILE(,[int main(){return(0);}],
1255 CFLAGS="$save_CFLAGS"
1257 if test "$ac_cv_cc_$2"x = "yesx"; then