1 dnl $Id: aclocal.m4,v 1.91 2002/01/07 20:24:23 sof 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 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; 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
225 # the "-agc" options.
228 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-gt,[1.11],
235 dnl What's the best way of doing context diffs?
237 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
239 AC_DEFUN(FPTOOLS_PROG_DIFF,
240 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
241 [echo foo > conftest1
243 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
244 fptools_cv_context_diffs='diff -C 1'
246 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
247 fptools_cv_context_diffs='diff -c1'
249 echo "Can't figure out how to do context diffs."
250 echo "Neither \`diff -C 1' nor \`diff -c1' works."
254 rm -f conftest1 conftest2
256 ContextDiffCmd=$fptools_cv_context_diffs
257 AC_SUBST(ContextDiffCmd)
261 dnl Check whether ld supports -x
263 AC_DEFUN(FPTOOLS_LD_X,
264 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
266 echo 'foo() {}' > conftest.c
267 ${CC-cc} -c conftest.c
268 if ${LdCmd} -r -x -o foo.o conftest.o; then
273 rm -rf conftest.c conftest.o foo.o
275 if test "$fptools_cv_ld_x" = yes; then
284 dnl Finding the Right Yacc
286 AC_DEFUN(FPTOOLS_PROG_YACCY,
288 if test "$YACC" = "yacc"; then
289 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
290 [AC_CHECK_PROG(WhatCmd, what, what, :)
291 $WhatCmd $YACC > conftest.out
292 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
293 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
294 if test -f /usr/lang/yacc; then
295 echo "I'm going to use /usr/lang/yacc instead"
296 ac_cv_prog_yacc=/usr/lang/yacc
298 echo "I'm assuming the worst...no parser generator at all"
301 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
302 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
303 echo "I'm assuming the worst...no parser generator at all"
306 ac_cv_prog_yacc=$YACC
311 ac_cv_prog_yacc=$YACC
313 YaccCmd=$ac_cv_prog_yacc
317 dnl *** Checking for ar and its arguments + whether we need ranlib.
319 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
320 dnl On Digital UNIX, we test for the -Z (compress) and
321 dnl -input (take list of files from external file) flags.
323 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
324 [AC_PATH_PROG(ArCmd,ar)
325 if test -z "$ArCmd"; then
326 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
329 if $ArCmd clqsZ conftest.a >/dev/null 2>/dev/null; then
332 elif $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
335 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
338 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
341 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
344 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
348 echo "I can't figure out how to use your $ArCmd"
352 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
354 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
355 ArSupportsInput='-input'
360 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
361 AC_SUBST(ArSupportsInput)
362 if test -z "$NeedRanLib"; then
364 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
372 dnl AC_SHEBANG_PERL - can we she-bang perl?
374 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
375 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
380 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
381 if test $? -ne 69; then
382 fptools_cv_shebang_perl=yes
384 fptools_cv_shebang_perl=no
390 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
391 dnl *Must* be called after AC_PROG_CC
393 AC_DEFUN(FPTOOLS_HAVE_GCC,
394 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
395 [if test -z "$GCC"; then
397 echo "You would be better off with gcc"
398 echo "Perhaps it is already installed, but not in your PATH?"
399 fptools_cv_have_gcc='no'
402 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' `"
403 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' `"
405 fptools_cv_have_gcc='yes'
406 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
407 fptools_cv_have_gcc='no'
409 echo "your gcc version appears to be ..."
411 echo "gcc prior to 2.0 and have never worked with ghc."
412 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
413 AC_MSG_ERROR([gcc 1.X has never been supported])
415 if test `eval $is_gcc_v3 2>/dev/null` = "1"; then
416 fptools_cv_have_gcc='no'
418 echo "your gcc version appears to be ..."
420 echo "gcc versions 3.0 and above are not yet supported."
421 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
422 AC_MSG_ERROR([gcc 3.0 and above is not currently supported])
426 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
430 dnl Small feature test for perl version. Assumes PerlCmd
431 dnl contains path to perl binary
433 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
434 [$PerlCmd -v >conftest.out 2>&1
435 if grep "version 5" conftest.out >/dev/null 2>&1; then
438 if grep "v5.6" conftest.out >/dev/null 2>&1; then
441 if grep "version 6" conftest.out >/dev/null 2>&1; then
444 echo "Your version of perl probably won't work."
452 dnl Getting at the right version of 'find'
453 dnl (i.e., not the MS util on a Win32 box).
455 AC_DEFUN(FPTOOLS_FIND_FIND,
457 AC_PATH_PROG(Find2Cmd, find)
458 $Find2Cmd --version > conftest.out 2>&1
459 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
460 # Encountered MS' find utility, which is not what we're after.
462 # HACK - AC_CHECK_PROG is useful here in that does let you reject
463 # an (absolute) entry in the path (Find2Cmd). It is not so useful
464 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
465 # absolute path eventually found. So, hack around this by inspecting
466 # what variables hold the abs. path & use them directly.
467 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
475 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
476 dnl values of the second argument to the result of running
477 dnl the commands given by the third. It does not cache its
478 dnl result, so it is suitable for checks which should be
481 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
482 [AC_MSG_CHECKING([$1])
484 AC_MSG_RESULT([$][$2])
488 dnl FPTOOLS_GHC_VERSION(version)
489 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
490 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
492 dnl Test for version of installed ghc. Uses $GHC.
493 dnl [original version pinched from c2hs]
495 AC_DEFUN(FPTOOLS_GHC_VERSION,
496 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
497 [${WithGhc-ghc} --version > conftestghc 2>&1
498 cat conftestghc >&AC_FD_CC
499 #Useless Use Of cat award...
500 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
502 if test "[$]fptools_version_of_ghc" = ""
504 fptools_version_of_ghc='unknown'
506 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
507 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
508 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
510 if test "[$]fptools_version_of_ghc[_pl]" = ""
512 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
513 fptools_version_of_ghc[_pl]="0"
515 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
519 [$1]="[$]fptools_version_of_ghc[_all]"
521 [$1]="[$]fptools_version_of_ghc[_major]"
522 [$2]="[$]fptools_version_of_ghc[_minor]"
524 [$1]="[$]fptools_version_of_ghc[_major]"
525 [$2]="[$]fptools_version_of_ghc[_minor]"
526 [$3]="[$]fptools_version_of_ghc[_pl]"
528 [$1]="[$]fptools_version_of_ghc[_all]"
529 [$2]="[$]fptools_version_of_ghc[_major]"
530 [$3]="[$]fptools_version_of_ghc[_minor]"
531 [$4]="[$]fptools_version_of_ghc[_pl]"
537 dnl ** figure out the alignment restriction of a type
538 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
539 dnl so we can't call REQUIRE)
541 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
542 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
543 [changequote(<<, >>)dnl
544 dnl The name to #define.
545 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
546 dnl The cache variable name.
547 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
548 dnl The name of the corresponding size.
549 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
551 AC_MSG_CHECKING(alignment of $1)
552 AC_CACHE_VAL(AC_CV_NAME,
559 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
564 FILE *f=fopen("conftestval", "w");
566 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
569 AC_CV_NAME=`cat conftestval`,
570 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
571 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
572 AC_MSG_RESULT($AC_CV_NAME)
573 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
574 AC_PROVIDE($AC_TYPE_NAME)
575 undefine([AC_TYPE_NAME])dnl
576 undefine([AC_CV_NAME])dnl
577 undefine([AC_CV_SIZEOF_NAME])dnl
580 dnl ** Map an arithmetic C type to a Haskell type.
581 dnl Based on autconf's AC_CHECK_SIZEOF.
583 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
584 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
585 [changequote(<<, >>)dnl
586 dnl The name to #define.
587 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
588 dnl The cache variable name.
589 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
591 AC_MSG_CHECKING(Haskell type for $1)
592 AC_CACHE_VAL(AC_CV_NAME,
593 [AC_TRY_RUN([#include <stdio.h>
596 #ifdef HAVE_SYS_TYPES_H
597 # include <sys/types.h>
604 #ifdef HAVE_SYS_STAT_H
605 # include <sys/stat.h>
620 #ifdef HAVE_TERMIOS_H
621 # include <termios.h>
639 FILE *f=fopen("conftestval2", "w");
641 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
643 ((testing)(-1) < (testing)0) ? "Int" : "Word",
647 (sizeof(testing) > sizeof(double)) ? "LDouble" :
648 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
652 }], AC_CV_NAME=`cat conftestval2`,
654 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
655 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
656 AC_MSG_RESULT($AC_CV_NAME)
657 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
658 undefine([AC_TYPE_NAME])dnl
659 undefine([AC_CV_NAME])dnl
662 dnl ** figure out whether C compiler supports 'long long's
663 dnl (Closely based on Andreas Zeller's macro for testing
664 dnl for this under C++)
666 dnl If the C compiler supports `long long' types,
667 dnl define `HAVE_LONG_LONG'.
669 AC_DEFUN(FPTOOLS_C_LONG_LONG,
671 AC_REQUIRE([AC_PROG_CC])
672 AC_MSG_CHECKING(whether ${CC} supports long long types)
673 AC_CACHE_VAL(fptools_cv_have_long_long,
677 AC_TRY_COMPILE(,[long long a;],
678 fptools_cv_have_long_long=yes,
679 fptools_cv_have_long_long=no)
682 AC_MSG_RESULT($fptools_cv_have_long_long)
683 if test "$fptools_cv_have_long_long" = yes; then
684 AC_DEFINE(HAVE_LONG_LONG)
688 dnl ** Obtain the value of a C constant.
689 dnl The value will be `(-1)' if the constant is undefined.
691 dnl This is set up so that the argument can be a shell variable.
693 AC_DEFUN(FPTOOLS_CHECK_CCONST,
695 eval "def_name=CCONST_$1"
696 eval "cv_name=ac_cv_cconst_$1"
697 AC_MSG_CHECKING(value of $1)
698 AC_CACHE_VAL($cv_name,
699 [AC_TRY_RUN([#include <stdio.h>
703 FILE *f=fopen("conftestval", "w");
705 fprintf(f, "%d\n", $1);
708 eval "$cv_name=`cat conftestval`",
710 eval "$cv_name=-1")])dnl
711 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
712 AC_MSG_RESULT($fptools_check_cconst_result)
713 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
714 unset fptools_check_cconst_result
717 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
720 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
721 [for ac_const_name in $1
723 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
728 dnl *** Can we open files in binary mode? ***
730 AC_DEFUN(FPTOOLS_O_BINARY,
732 AC_REQUIRE([AC_PROG_CC])
733 AC_MSG_CHECKING(whether we can open files in binary mode)
734 AC_CACHE_VAL(fptools_cv_have_o_binary,
743 fptools_cv_have_o_binary=yes,
744 fptools_cv_have_o_binary=no)
747 AC_MSG_RESULT($fptools_cv_have_o_binary)
748 if test "$fptools_cv_have_o_binary" = yes; then
749 AC_DEFINE(HAVE_O_BINARY)
753 dnl *** Which one comes first, .text or .data? ***
755 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
756 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
758 int f() { return 1; }
760 int main() { return ((char*)&f > (char*)&i); }
763 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
764 if test "$fptools_cv_code_bef_data" = yes; then
765 AC_DEFINE(CODE_BEFORE_DATA)
769 dnl *** Helper function **
771 AC_DEFUN(FPTOOLS_IN_SCOPE,
772 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
775 dnl *** What's the end-of-text-section marker called? ***
777 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
778 [AC_CACHE_CHECK([for end of text section marker],
779 [fptools_cv_end_of_text],
780 [fptools_cv_end_of_text=""
782 for i in data_start _data_start etext _etext __etext; do
783 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
784 if test "$fptools_end_of_text" = yes; then
785 fptools_cv_end_of_text=$i
790 if test "$not_done" = 1; then
791 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
792 if test "$fptools_end_of_text" = yes; then
793 fptools_cv_end_of_text="etext"
796 if test -n "$fptools_cv_end_of_text"; then
797 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
799 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
801 AC_CACHE_CHECK([for end of text section marker declaration],
802 [fptools_cv_end_of_text_decl],
803 [fptools_cv_end_of_text_decl=""
805 for i in data_start _data_start etext _etext __etext; do
806 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
807 if test "$fptools_end_of_text_decl" = yes; then
808 fptools_cv_end_of_text_decl=$i
813 if test "$not_done" = 1; then
814 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
815 if test "$fptools_end_of_text_decl" = yes; then
816 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
819 if test -n "$fptools_cv_end_of_text_decl"; then
820 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
822 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
826 dnl *** What's the end-of-data-section marker called? ***
828 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
829 [AC_CACHE_CHECK([for end of data section marker],
830 [fptools_cv_end_of_data],
831 [fptools_cv_end_of_data=""
833 for i in end _end __end; do
834 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
835 if test "$fptools_end_of_data" = yes; then
836 fptools_cv_end_of_data=$i
841 if test "$not_done" = 1; then
842 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
843 if test "$fptools_end_of_data" = yes; then
844 fptools_cv_end_of_data="end"
847 if test -n "$fptools_cv_end_of_data"; then
848 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
850 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
852 AC_CACHE_CHECK([for end of data section marker declaration],
853 [fptools_cv_end_of_data_decl],
854 [fptools_cv_end_of_data_decl=""
856 for i in end _end __end; do
857 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
858 if test "$fptools_end_of_data_decl" = yes; then
859 fptools_cv_end_of_data_decl=$i
864 if test "$not_done" = 1; then
865 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
866 if test "$fptools_end_of_data_decl" = yes; then
867 fptools_cv_end_of_data_decl="end asm(\"end\")"
870 if test -n "$fptools_cv_end_of_data_decl"; then
871 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
873 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
878 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
880 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
882 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
886 cat > conftest.$ac_ext <<EOF
887 dnl This sometimes fails to find confdefs.h, for some reason.
888 dnl [#]line __oline__ "[$]0"
889 [#]line __oline__ "configure"
890 #include "confdefs.h"
892 int t() { return 0; }
894 if AC_TRY_EVAL(ac_link); then
899 ifelse([$4], , , [else
909 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
911 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
913 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
914 [AC_MSG_CHECKING([for $1])
915 AC_CACHE_VAL(ac_cv_flag_$1,
916 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
917 eval "ac_cv_flag_$1=yes",
918 eval "ac_cv_flag_$1=no"
921 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
931 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
933 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
934 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
936 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
938 AC_DEFINE_UNQUOTED($ac_tr_lib)
940 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
942 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
944 AC_DEFINE_UNQUOTED($ac_tr_lib)
950 dnl check for prototypes
952 AC_DEFUN([AC_C_PROTOTYPES],
953 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
962 ac_cv_prototypes=yes,
963 ac_cv_prototypes=no)])
964 if test "$ac_cv_prototypes" = yes; then
965 AC_DEFINE([HAVE_PROTOTYPES])
969 dnl ** Check which CATALOG file we have to use with DocBook SGML.
971 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
973 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
974 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
975 dnl is set to "no". JADE is the jade executable and STYLESHEET
976 dnl a DocBook style sheet.
978 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
979 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
981 cat > conftest.sgml << EOF
982 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
986 <Author><OtherName>Test</OtherName></Author>
987 <Address>Test</Address>
988 <PubDate>Test</PubDate>
990 <Sect1><Title>Test</Title>
997 fptools_cv_sgml_catalog=no
998 for fptools_catalog in $4; do
999 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
1000 if AC_TRY_EVAL(ac_try); then
1001 fptools_cv_sgml_catalog=[$]fptools_catalog
1007 if test $fptools_cv_sgml_catalog != "no"; then
1008 $1=$fptools_cv_sgml_catalog
1012 dnl ######################################################################
1013 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1014 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1015 dnl Search for a library defining FUNC, if it's not already available.
1016 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1018 dnl ######################################################################
1020 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1022 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1023 [ac_func_search_save_LIBS="$LIBS"
1024 ac_cv_search_$2="no"
1025 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1026 test "$ac_cv_search_$2" = "no" && for i in $3; do
1027 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1028 AC_TRY_LINK([$1], [$2()],
1029 [ac_cv_search_$2="-l$i"
1032 LIBS="$ac_func_search_save_LIBS"])
1033 if test "$ac_cv_search_$2" != "no"; then
1034 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1040 dnl ####################### -*- Mode: M4 -*- ###########################
1041 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1043 dnl This file is free software; you can redistribute it and/or modify it
1044 dnl under the terms of the GNU General Public License as published by
1045 dnl the Free Software Foundation; either version 2 of the License, or
1046 dnl (at your option) any later version.
1048 dnl This file is distributed in the hope that it will be useful, but
1049 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1050 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1051 dnl General Public License for more details.
1053 dnl You should have received a copy of the GNU General Public License
1054 dnl along with this file; if not, write to:
1056 dnl Free Software Foundation, Inc.
1059 dnl Boston, MA 02111-1307, USA.
1060 dnl ####################################################################
1063 dnl @synopsis FPTOOLS_CHECK_LIBM
1065 dnl Search for math library (typically -lm).
1067 dnl The variable LIBM (which is not an output variable by default) is
1068 dnl set to a value which is suitable for use in a Makefile (for example,
1069 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1071 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1073 # FPTOOLS_CHECK_LIBM - check for math library
1074 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1075 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1079 # These system don't have libm
1082 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1083 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1086 AC_CHECK_LIB(m, main, LIBM="-lm")
1091 dnl ######################################################################
1092 dnl NOTE: Because of portability issues between different autoconf
1093 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1094 dnl Furthermore, caching has been completely rewritten.
1095 dnl ######################################################################
1097 dnl ########################### -*- Mode: M4 -*- #######################
1098 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1100 dnl This file is free software; you can redistribute it and/or modify it
1101 dnl under the terms of the GNU General Public License as published by
1102 dnl the Free Software Foundation; either version 2 of the License, or
1103 dnl (at your option) any later version.
1105 dnl This file is distributed in the hope that it will be useful, but
1106 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1107 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1108 dnl General Public License for more details.
1110 dnl You should have received a copy of the GNU General Public License
1111 dnl along with this file; if not, write to:
1113 dnl Free Software Foundation, Inc.
1116 dnl Boston, MA 02111-1307, USA.
1117 dnl ####################################################################
1119 dnl @synopsis FPTOOLS_HAVE_OPENGL
1121 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1122 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1123 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1125 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1126 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1129 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1130 dnl be missing) are added to the shell output variable "GL_LIBS", along
1131 dnl with any other libraries that are necessary to successfully link an
1132 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1133 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1136 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1137 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1138 dnl an OpenGL application.
1140 dnl The following shell variable (which are not output variables) are
1141 dnl also set to either "yes" or "no" (depending on which libraries were
1142 dnl found) to help you determine exactly what was found.
1149 dnl A complete little toy "Automake `make distcheck'" package of how to
1150 dnl use this macro is available at:
1152 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1154 dnl Please note that as the ac_opengl macro and the toy example evolves,
1155 dnl the version number increases, so you may have to adjust the above
1156 dnl URL accordingly.
1158 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1160 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1162 AC_REQUIRE([AC_PROG_CC])
1163 AC_REQUIRE([AC_PATH_X])
1164 AC_REQUIRE([AC_PATH_XTRA])
1165 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1167 dnl Check for Mesa first, unless we were asked not to.
1168 dnl AC_HELP_STRING([--with-Mesa],
1169 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1170 dnl with_Mesa_help_string)
1171 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1172 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1174 if test x"$use_Mesa" = xyes; then
1175 GL_search_list="MesaGL GL opengl32"
1176 GLU_search_list="MesaGLU GLU glu32"
1177 GLX_search_list="MesaGLX GLX"
1179 GL_search_list="GL opengl32 MesaGL"
1180 GLU_search_list="GLU glu32 MesaGLU"
1181 GLX_search_list="GLX MesaGLX"
1187 dnl If we are running under X11 then add in the appropriate libraries.
1188 if ! test x"$no_x" = xyes; then
1189 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1191 GL_CFLAGS="$X_CFLAGS"
1192 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1194 GL_save_CPPFLAGS="$CPPFLAGS"
1195 CPPFLAGS="$GL_CFLAGS"
1197 GL_save_LIBS="$LIBS"
1200 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1201 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1202 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1203 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1205 if test -n "$LIBS"; then
1212 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1213 GL_CFLAGS="$mdl_cv_gl_cflags"
1215 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1216 GL_LIBS="$mdl_cv_gl_libs"
1219 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1220 dnl and we don't want to be global namespace polluters.
1223 LIBS="$GL_save_LIBS"
1224 CPPFLAGS="$GL_save_CPPFLAGS"
1232 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1233 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1234 dnl 'lex' is actually present along the user's PATH).
1236 AC_DEFUN(AC_PROG_LEX_STRICT,
1237 [AC_CHECK_PROG(LEX, flex, flex)
1240 AC_CHECK_PROG(LEX,lex,lex)
1241 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1246 dnl Check to see whether CC (gcc) supports a particular option.
1248 AC_DEFUN(FPTOOLS_CC_FLAG,
1250 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1251 [save_CFLAGS="$CFLAGS"
1254 AC_TRY_COMPILE(,[int main(){return(0);}],
1257 CFLAGS="$save_CFLAGS"
1259 if test "$ac_cv_cc_$2"x = "yesx"; then