1 dnl $Id: aclocal.m4,v 1.101 2002/05/17 09:03:13 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
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)"
230 # Soon version 1.13 will be required. To give people a chance to
231 # switch over (and me a chance to actually release 1.13 :-) , we have
232 # a dummy copy of GlaExts in fptools/libraries/base.
234 # If 1.13 actually is installed, we turn on the --old-ghc option for
237 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-ge,[1.13],
238 [HappyOpts="--old-ghc -ac"])
244 dnl What's the best way of doing context diffs?
246 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
248 AC_DEFUN(FPTOOLS_PROG_DIFF,
249 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
250 [echo foo > conftest1
252 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
253 fptools_cv_context_diffs='diff -C 1'
255 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
256 fptools_cv_context_diffs='diff -c1'
258 echo "Can't figure out how to do context diffs."
259 echo "Neither \`diff -C 1' nor \`diff -c1' works."
263 rm -f conftest1 conftest2
265 ContextDiffCmd=$fptools_cv_context_diffs
266 AC_SUBST(ContextDiffCmd)
270 dnl Check whether ld supports -x
272 AC_DEFUN(FPTOOLS_LD_X,
273 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
275 echo 'foo() {}' > conftest.c
276 ${CC-cc} -c conftest.c
277 if ${LdCmd} -r -x -o foo.o conftest.o; then
282 rm -rf conftest.c conftest.o foo.o
284 if test "$fptools_cv_ld_x" = yes; then
293 dnl Finding the Right Yacc
295 AC_DEFUN(FPTOOLS_PROG_YACCY,
297 if test "$YACC" = "yacc"; then
298 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
299 [AC_CHECK_PROG(WhatCmd, what, what, :)
300 $WhatCmd $YACC > conftest.out
301 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
302 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
303 if test -f /usr/lang/yacc; then
304 echo "I'm going to use /usr/lang/yacc instead"
305 ac_cv_prog_yacc=/usr/lang/yacc
307 echo "I'm assuming the worst...no parser generator at all"
310 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
311 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
312 echo "I'm assuming the worst...no parser generator at all"
315 ac_cv_prog_yacc=$YACC
320 ac_cv_prog_yacc=$YACC
322 YaccCmd=$ac_cv_prog_yacc
326 dnl *** Checking for ar and its arguments + whether we need ranlib.
328 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
329 dnl On Digital UNIX, we test for the -Z (compress) and
330 dnl -input (take list of files from external file) flags.
332 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
333 [AC_PATH_PROG(ArCmdRaw,ar)
334 if test -z "$ArCmdRaw"; then
335 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
338 if $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
341 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
344 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
347 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
350 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
353 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
357 echo "I can't figure out how to use your $ArCmd"
361 case $HostPlatform in
363 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
365 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
368 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
370 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
371 ArSupportsInput='-input'
376 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
377 AC_SUBST(ArSupportsInput)
378 if test -z "$NeedRanLib"; then
380 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
388 dnl AC_SHEBANG_PERL - can we she-bang perl?
390 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
391 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
396 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
397 if test $? -ne 69; then
398 fptools_cv_shebang_perl=yes
400 fptools_cv_shebang_perl=no
406 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
407 dnl *Must* be called after AC_PROG_CC
409 AC_DEFUN(FPTOOLS_HAVE_GCC,
410 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
411 [if test -z "$GCC"; then
413 echo "You would be better off with gcc"
414 echo "Perhaps it is already installed, but not in your PATH?"
415 fptools_cv_have_gcc='no'
418 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' `"
420 fptools_cv_have_gcc='yes'
421 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
422 fptools_cv_have_gcc='no'
424 echo "your gcc version appears to be ..."
426 echo "gcc prior to 2.0 and have never worked with ghc."
427 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
428 AC_MSG_ERROR([gcc 1.X has never been supported])
432 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
436 dnl Small feature test for perl version. Assumes PerlCmd
437 dnl contains path to perl binary
439 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
440 [$PerlCmd -v >conftest.out 2>&1
441 if grep "version 5" conftest.out >/dev/null 2>&1; then
444 if grep "v5.6" conftest.out >/dev/null 2>&1; then
447 if grep "version 6" conftest.out >/dev/null 2>&1; then
450 echo "Your version of perl probably won't work."
458 dnl Getting at the right version of 'find'
459 dnl (i.e., not the MS util on a Win32 box).
461 AC_DEFUN(FPTOOLS_FIND_FIND,
463 AC_PATH_PROG(Find2Cmd, find)
464 $Find2Cmd --version > conftest.out 2>&1
465 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
466 # Encountered MS' find utility, which is not what we're after.
468 # HACK - AC_CHECK_PROG is useful here in that does let you reject
469 # an (absolute) entry in the path (Find2Cmd). It is not so useful
470 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
471 # absolute path eventually found. So, hack around this by inspecting
472 # what variables hold the abs. path & use them directly.
473 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
481 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
482 dnl values of the second argument to the result of running
483 dnl the commands given by the third. It does not cache its
484 dnl result, so it is suitable for checks which should be
487 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
488 [AC_MSG_CHECKING([$1])
490 AC_MSG_RESULT([$][$2])
494 dnl FPTOOLS_GHC_VERSION(version)
495 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
496 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
498 dnl Test for version of installed ghc. Uses $GHC.
499 dnl [original version pinched from c2hs]
501 AC_DEFUN(FPTOOLS_GHC_VERSION,
502 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
503 ["${WithGhc-ghc}" --version > conftestghc 2>&1
504 cat conftestghc >&AC_FD_CC
505 #Useless Use Of cat award...
506 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
508 if test "[$]fptools_version_of_ghc" = ""
510 fptools_version_of_ghc='unknown'
512 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
513 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
514 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
516 if test "[$]fptools_version_of_ghc[_pl]" = ""
518 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
519 fptools_version_of_ghc[_pl]="0"
521 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
525 [$1]="[$]fptools_version_of_ghc[_all]"
527 [$1]="[$]fptools_version_of_ghc[_major]"
528 [$2]="[$]fptools_version_of_ghc[_minor]"
530 [$1]="[$]fptools_version_of_ghc[_major]"
531 [$2]="[$]fptools_version_of_ghc[_minor]"
532 [$3]="[$]fptools_version_of_ghc[_pl]"
534 [$1]="[$]fptools_version_of_ghc[_all]"
535 [$2]="[$]fptools_version_of_ghc[_major]"
536 [$3]="[$]fptools_version_of_ghc[_minor]"
537 [$4]="[$]fptools_version_of_ghc[_pl]"
543 dnl ** figure out the alignment restriction of a type
544 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
545 dnl so we can't call REQUIRE)
547 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
548 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
549 [changequote(<<, >>)dnl
550 dnl The name to #define.
551 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
552 dnl The cache variable name.
553 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
554 dnl The name of the corresponding size.
555 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
557 AC_MSG_CHECKING(alignment of $1)
558 AC_CACHE_VAL(AC_CV_NAME,
565 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
570 FILE *f=fopen("conftestval", "w");
572 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
575 AC_CV_NAME=`cat conftestval`,
576 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
577 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
578 AC_MSG_RESULT($AC_CV_NAME)
579 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
580 AC_PROVIDE($AC_TYPE_NAME)
581 undefine([AC_TYPE_NAME])dnl
582 undefine([AC_CV_NAME])dnl
583 undefine([AC_CV_SIZEOF_NAME])dnl
586 dnl ** Map an arithmetic C type to a Haskell type.
587 dnl Based on autconf's AC_CHECK_SIZEOF.
589 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
590 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
591 [changequote(<<, >>)dnl
592 dnl The name to #define.
593 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
594 dnl The cache variable name.
595 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
597 AC_MSG_CHECKING(Haskell type for $1)
598 AC_CACHE_VAL(AC_CV_NAME,
599 [AC_TRY_RUN([#include <stdio.h>
602 #ifdef HAVE_SYS_TYPES_H
603 # include <sys/types.h>
610 #ifdef HAVE_SYS_STAT_H
611 # include <sys/stat.h>
626 #ifdef HAVE_TERMIOS_H
627 # include <termios.h>
645 FILE *f=fopen("conftestval", "w");
647 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
649 ((testing)(-1) < (testing)0) ? "Int" : "Word",
653 (sizeof(testing) > sizeof(double)) ? "LDouble" :
654 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
658 }], AC_CV_NAME=`cat conftestval`,
659 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
660 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
661 AC_MSG_RESULT($AC_CV_NAME)
662 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
663 undefine([AC_TYPE_NAME])dnl
664 undefine([AC_CV_NAME])dnl
667 dnl ** figure out whether C compiler supports 'long long's
668 dnl (Closely based on Andreas Zeller's macro for testing
669 dnl for this under C++)
671 dnl If the C compiler supports `long long' types,
672 dnl define `HAVE_LONG_LONG'.
674 AC_DEFUN(FPTOOLS_C_LONG_LONG,
676 AC_REQUIRE([AC_PROG_CC])
677 AC_MSG_CHECKING(whether ${CC} supports long long types)
678 AC_CACHE_VAL(fptools_cv_have_long_long,
682 AC_TRY_COMPILE(,[long long a;],
683 fptools_cv_have_long_long=yes,
684 fptools_cv_have_long_long=no)
687 AC_MSG_RESULT($fptools_cv_have_long_long)
688 if test "$fptools_cv_have_long_long" = yes; then
689 AC_DEFINE(HAVE_LONG_LONG)
693 dnl ** Obtain the value of a C constant.
694 dnl The value will be `(-1)' if the constant is undefined.
696 dnl This is set up so that the argument can be a shell variable.
698 AC_DEFUN(FPTOOLS_CHECK_CCONST,
700 eval "def_name=CCONST_$1"
701 eval "cv_name=ac_cv_cconst_$1"
702 AC_MSG_CHECKING(value of $1)
703 AC_CACHE_VAL($cv_name,
704 [AC_TRY_RUN([#include <stdio.h>
708 FILE *f=fopen("conftestval", "w");
710 fprintf(f, "%d\n", $1);
713 eval "$cv_name=`cat conftestval`",
715 eval "$cv_name=-1")])dnl
716 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
717 AC_MSG_RESULT($fptools_check_cconst_result)
718 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
719 unset fptools_check_cconst_result
722 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
725 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
726 [for ac_const_name in $1
728 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
733 dnl *** Can we open files in binary mode? ***
735 AC_DEFUN(FPTOOLS_O_BINARY,
737 AC_REQUIRE([AC_PROG_CC])
738 AC_MSG_CHECKING(whether we can open files in binary mode)
739 AC_CACHE_VAL(fptools_cv_have_o_binary,
748 fptools_cv_have_o_binary=yes,
749 fptools_cv_have_o_binary=no)
752 AC_MSG_RESULT($fptools_cv_have_o_binary)
753 if test "$fptools_cv_have_o_binary" = yes; then
754 AC_DEFINE(HAVE_O_BINARY)
758 dnl *** Which one comes first, .text or .data? ***
760 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
761 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
763 int f() { return 1; }
765 int main() { return ((char*)&f > (char*)&i); }
768 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
769 if test "$fptools_cv_code_bef_data" = yes; then
770 AC_DEFINE(CODE_BEFORE_DATA)
774 dnl *** Helper function **
776 AC_DEFUN(FPTOOLS_IN_SCOPE,
777 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
780 dnl *** What's the end-of-text-section marker called? ***
782 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
783 [AC_CACHE_CHECK([for end of text section marker],
784 [fptools_cv_end_of_text],
785 [fptools_cv_end_of_text=""
787 for i in data_start _data_start etext _etext __etext; do
788 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
789 if test "$fptools_end_of_text" = yes; then
790 fptools_cv_end_of_text=$i
795 if test "$not_done" = 1; then
796 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
797 if test "$fptools_end_of_text" = yes; then
798 fptools_cv_end_of_text="etext"
801 if test -n "$fptools_cv_end_of_text"; then
802 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
804 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
806 AC_CACHE_CHECK([for end of text section marker declaration],
807 [fptools_cv_end_of_text_decl],
808 [fptools_cv_end_of_text_decl=""
810 for i in data_start _data_start etext _etext __etext; do
811 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
812 if test "$fptools_end_of_text_decl" = yes; then
813 fptools_cv_end_of_text_decl=$i
818 if test "$not_done" = 1; then
819 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
820 if test "$fptools_end_of_text_decl" = yes; then
821 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
824 if test -n "$fptools_cv_end_of_text_decl"; then
825 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
827 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
831 dnl *** What's the end-of-data-section marker called? ***
833 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
834 [AC_CACHE_CHECK([for end of data section marker],
835 [fptools_cv_end_of_data],
836 [fptools_cv_end_of_data=""
838 for i in end _end __end; do
839 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
840 if test "$fptools_end_of_data" = yes; then
841 fptools_cv_end_of_data=$i
846 if test "$not_done" = 1; then
847 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
848 if test "$fptools_end_of_data" = yes; then
849 fptools_cv_end_of_data="end"
852 if test -n "$fptools_cv_end_of_data"; then
853 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
855 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
857 AC_CACHE_CHECK([for end of data section marker declaration],
858 [fptools_cv_end_of_data_decl],
859 [fptools_cv_end_of_data_decl=""
861 for i in end _end __end; do
862 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
863 if test "$fptools_end_of_data_decl" = yes; then
864 fptools_cv_end_of_data_decl=$i
869 if test "$not_done" = 1; then
870 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
871 if test "$fptools_end_of_data_decl" = yes; then
872 fptools_cv_end_of_data_decl="end asm(\"end\")"
875 if test -n "$fptools_cv_end_of_data_decl"; then
876 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
878 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
883 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
885 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
887 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
891 cat > conftest.$ac_ext <<EOF
892 dnl This sometimes fails to find confdefs.h, for some reason.
893 dnl [#]line __oline__ "[$]0"
894 [#]line __oline__ "configure"
895 #include "confdefs.h"
897 int t() { return 0; }
899 if AC_TRY_EVAL(ac_link); then
904 ifelse([$4], , , [else
914 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
916 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
918 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
919 [AC_MSG_CHECKING([for $1])
920 AC_CACHE_VAL(ac_cv_flag_$1,
921 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
922 eval "ac_cv_flag_$1=yes",
923 eval "ac_cv_flag_$1=no"
926 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
936 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
938 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
939 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
941 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
943 AC_DEFINE_UNQUOTED($ac_tr_lib)
945 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
947 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
949 AC_DEFINE_UNQUOTED($ac_tr_lib)
955 dnl check for prototypes
957 AC_DEFUN([AC_C_PROTOTYPES],
958 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
967 ac_cv_prototypes=yes,
968 ac_cv_prototypes=no)])
969 if test "$ac_cv_prototypes" = yes; then
970 AC_DEFINE([HAVE_PROTOTYPES])
974 dnl ** Check which CATALOG file we have to use with DocBook SGML.
976 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
978 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
979 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
980 dnl is set to "no". JADE is the jade executable and STYLESHEET
981 dnl a DocBook style sheet.
983 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
984 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
986 cat > conftest.sgml << EOF
987 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
991 <Author><OtherName>Test</OtherName></Author>
992 <Address>Test</Address>
993 <PubDate>Test</PubDate>
995 <Sect1><Title>Test</Title>
1002 fptools_cv_sgml_catalog=no
1003 if test -z "$SGML_CATALOG_FILES" ; then
1004 for fptools_catalog in $4; do
1005 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
1006 if AC_TRY_EVAL(ac_try); then
1007 fptools_cv_sgml_catalog=[$]fptools_catalog
1012 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
1013 fptools_cv_sgml_catalog="yes"
1017 if test $fptools_cv_sgml_catalog != "no"; then
1018 $1=$fptools_cv_sgml_catalog
1022 dnl ######################################################################
1023 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1024 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1025 dnl Search for a library defining FUNC, if it's not already available.
1026 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1028 dnl ######################################################################
1030 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1032 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1033 [ac_func_search_save_LIBS="$LIBS"
1034 ac_cv_search_$2="no"
1035 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1036 test "$ac_cv_search_$2" = "no" && for i in $3; do
1037 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1038 AC_TRY_LINK([$1], [$2()],
1039 [ac_cv_search_$2="-l$i"
1042 LIBS="$ac_func_search_save_LIBS"])
1043 if test "$ac_cv_search_$2" != "no"; then
1044 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1050 dnl ####################### -*- Mode: M4 -*- ###########################
1051 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1053 dnl This file is free software; you can redistribute it and/or modify it
1054 dnl under the terms of the GNU General Public License as published by
1055 dnl the Free Software Foundation; either version 2 of the License, or
1056 dnl (at your option) any later version.
1058 dnl This file is distributed in the hope that it will be useful, but
1059 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1060 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1061 dnl General Public License for more details.
1063 dnl You should have received a copy of the GNU General Public License
1064 dnl along with this file; if not, write to:
1066 dnl Free Software Foundation, Inc.
1069 dnl Boston, MA 02111-1307, USA.
1070 dnl ####################################################################
1073 dnl @synopsis FPTOOLS_CHECK_LIBM
1075 dnl Search for math library (typically -lm).
1077 dnl The variable LIBM (which is not an output variable by default) is
1078 dnl set to a value which is suitable for use in a Makefile (for example,
1079 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1081 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1083 # FPTOOLS_CHECK_LIBM - check for math library
1084 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1085 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1089 # These system don't have libm
1092 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1093 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1096 AC_CHECK_LIB(m, main, LIBM="-lm")
1101 dnl ######################################################################
1102 dnl NOTE: Because of portability issues between different autoconf
1103 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1104 dnl Furthermore, caching has been completely rewritten.
1105 dnl ######################################################################
1107 dnl ########################### -*- Mode: M4 -*- #######################
1108 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1110 dnl This file is free software; you can redistribute it and/or modify it
1111 dnl under the terms of the GNU General Public License as published by
1112 dnl the Free Software Foundation; either version 2 of the License, or
1113 dnl (at your option) any later version.
1115 dnl This file is distributed in the hope that it will be useful, but
1116 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1117 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1118 dnl General Public License for more details.
1120 dnl You should have received a copy of the GNU General Public License
1121 dnl along with this file; if not, write to:
1123 dnl Free Software Foundation, Inc.
1126 dnl Boston, MA 02111-1307, USA.
1127 dnl ####################################################################
1129 dnl @synopsis FPTOOLS_HAVE_OPENGL
1131 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1132 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1133 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1135 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1136 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1139 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1140 dnl be missing) are added to the shell output variable "GL_LIBS", along
1141 dnl with any other libraries that are necessary to successfully link an
1142 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1143 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1146 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1147 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1148 dnl an OpenGL application.
1150 dnl The following shell variable (which are not output variables) are
1151 dnl also set to either "yes" or "no" (depending on which libraries were
1152 dnl found) to help you determine exactly what was found.
1159 dnl A complete little toy "Automake `make distcheck'" package of how to
1160 dnl use this macro is available at:
1162 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1164 dnl Please note that as the ac_opengl macro and the toy example evolves,
1165 dnl the version number increases, so you may have to adjust the above
1166 dnl URL accordingly.
1168 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1170 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1172 AC_REQUIRE([AC_PROG_CC])
1173 AC_REQUIRE([AC_PATH_X])
1174 AC_REQUIRE([AC_PATH_XTRA])
1175 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1177 dnl Check for Mesa first, unless we were asked not to.
1178 dnl AC_HELP_STRING([--with-Mesa],
1179 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1180 dnl with_Mesa_help_string)
1181 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1182 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=no)], use_Mesa=$enableval, use_Mesa=no)
1184 if test x"$use_Mesa" = xyes; then
1185 GL_search_list="MesaGL GL opengl32"
1186 GLU_search_list="MesaGLU GLU glu32"
1187 GLX_search_list="MesaGLX GLX"
1189 GL_search_list="GL opengl32 MesaGL"
1190 GLU_search_list="GLU glu32 MesaGLU"
1191 GLX_search_list="GLX MesaGLX"
1197 dnl If we are running under X11 then add in the appropriate libraries.
1198 if ! test x"$no_x" = xyes; then
1199 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1201 GL_CFLAGS="$X_CFLAGS"
1202 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1204 GL_save_CPPFLAGS="$CPPFLAGS"
1205 CPPFLAGS="$GL_CFLAGS"
1207 GL_save_LIBS="$LIBS"
1210 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1211 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1212 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1213 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1215 if test -n "$LIBS"; then
1222 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1223 GL_CFLAGS="$mdl_cv_gl_cflags"
1225 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1226 GL_LIBS="$mdl_cv_gl_libs"
1229 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1230 dnl and we don't want to be global namespace polluters.
1233 LIBS="$GL_save_LIBS"
1234 CPPFLAGS="$GL_save_CPPFLAGS"
1242 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1243 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1244 dnl 'lex' is actually present along the user's PATH).
1246 AC_DEFUN(AC_PROG_LEX_STRICT,
1247 [AC_CHECK_PROG(LEX, flex, flex)
1250 AC_CHECK_PROG(LEX,lex,lex)
1251 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1256 dnl Check to see whether CC (gcc) supports a particular option.
1258 AC_DEFUN(FPTOOLS_CC_FLAG,
1260 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1261 [save_CFLAGS="$CFLAGS"
1264 AC_TRY_COMPILE(,[int main(){return(0);}],
1267 CFLAGS="$save_CFLAGS"
1269 if test "$ac_cv_cc_$2"x = "yesx"; then