1 dnl $Id: aclocal.m4,v 1.96 2002/02/17 13:56:35 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; 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(ArCmdRaw,ar)
325 if test -z "$ArCmdRaw"; then
326 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
329 if $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
332 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
335 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
338 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
341 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
344 elif $ArCmdRaw 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 case $HostPlatform in
354 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
356 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
359 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
361 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
362 ArSupportsInput='-input'
367 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
368 AC_SUBST(ArSupportsInput)
369 if test -z "$NeedRanLib"; then
371 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
379 dnl AC_SHEBANG_PERL - can we she-bang perl?
381 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
382 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
387 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
388 if test $? -ne 69; then
389 fptools_cv_shebang_perl=yes
391 fptools_cv_shebang_perl=no
397 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
398 dnl *Must* be called after AC_PROG_CC
400 AC_DEFUN(FPTOOLS_HAVE_GCC,
401 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
402 [if test -z "$GCC"; then
404 echo "You would be better off with gcc"
405 echo "Perhaps it is already installed, but not in your PATH?"
406 fptools_cv_have_gcc='no'
409 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' `"
410 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' `"
412 fptools_cv_have_gcc='yes'
413 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
414 fptools_cv_have_gcc='no'
416 echo "your gcc version appears to be ..."
418 echo "gcc prior to 2.0 and have never worked with ghc."
419 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
420 AC_MSG_ERROR([gcc 1.X has never been supported])
422 if test `eval $is_gcc_v3 2>/dev/null` = "1"; then
423 fptools_cv_have_gcc='no'
425 echo "your gcc version appears to be ..."
427 echo "gcc versions 3.0 and above are not yet supported."
428 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
429 AC_MSG_ERROR([gcc 3.0 and above is not currently supported])
433 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
437 dnl Small feature test for perl version. Assumes PerlCmd
438 dnl contains path to perl binary
440 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
441 [$PerlCmd -v >conftest.out 2>&1
442 if grep "version 5" conftest.out >/dev/null 2>&1; then
445 if grep "v5.6" conftest.out >/dev/null 2>&1; then
448 if grep "version 6" conftest.out >/dev/null 2>&1; then
451 echo "Your version of perl probably won't work."
459 dnl Getting at the right version of 'find'
460 dnl (i.e., not the MS util on a Win32 box).
462 AC_DEFUN(FPTOOLS_FIND_FIND,
464 AC_PATH_PROG(Find2Cmd, find)
465 $Find2Cmd --version > conftest.out 2>&1
466 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
467 # Encountered MS' find utility, which is not what we're after.
469 # HACK - AC_CHECK_PROG is useful here in that does let you reject
470 # an (absolute) entry in the path (Find2Cmd). It is not so useful
471 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
472 # absolute path eventually found. So, hack around this by inspecting
473 # what variables hold the abs. path & use them directly.
474 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
482 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
483 dnl values of the second argument to the result of running
484 dnl the commands given by the third. It does not cache its
485 dnl result, so it is suitable for checks which should be
488 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
489 [AC_MSG_CHECKING([$1])
491 AC_MSG_RESULT([$][$2])
495 dnl FPTOOLS_GHC_VERSION(version)
496 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
497 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
499 dnl Test for version of installed ghc. Uses $GHC.
500 dnl [original version pinched from c2hs]
502 AC_DEFUN(FPTOOLS_GHC_VERSION,
503 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
504 [${WithGhc-ghc} --version > conftestghc 2>&1
505 cat conftestghc >&AC_FD_CC
506 #Useless Use Of cat award...
507 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
509 if test "[$]fptools_version_of_ghc" = ""
511 fptools_version_of_ghc='unknown'
513 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
514 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
515 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
517 if test "[$]fptools_version_of_ghc[_pl]" = ""
519 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
520 fptools_version_of_ghc[_pl]="0"
522 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
526 [$1]="[$]fptools_version_of_ghc[_all]"
528 [$1]="[$]fptools_version_of_ghc[_major]"
529 [$2]="[$]fptools_version_of_ghc[_minor]"
531 [$1]="[$]fptools_version_of_ghc[_major]"
532 [$2]="[$]fptools_version_of_ghc[_minor]"
533 [$3]="[$]fptools_version_of_ghc[_pl]"
535 [$1]="[$]fptools_version_of_ghc[_all]"
536 [$2]="[$]fptools_version_of_ghc[_major]"
537 [$3]="[$]fptools_version_of_ghc[_minor]"
538 [$4]="[$]fptools_version_of_ghc[_pl]"
544 dnl ** figure out the alignment restriction of a type
545 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
546 dnl so we can't call REQUIRE)
548 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
549 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
550 [changequote(<<, >>)dnl
551 dnl The name to #define.
552 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
553 dnl The cache variable name.
554 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
555 dnl The name of the corresponding size.
556 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
558 AC_MSG_CHECKING(alignment of $1)
559 AC_CACHE_VAL(AC_CV_NAME,
566 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
571 FILE *f=fopen("conftestval", "w");
573 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
576 AC_CV_NAME=`cat conftestval`,
577 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
578 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
579 AC_MSG_RESULT($AC_CV_NAME)
580 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
581 AC_PROVIDE($AC_TYPE_NAME)
582 undefine([AC_TYPE_NAME])dnl
583 undefine([AC_CV_NAME])dnl
584 undefine([AC_CV_SIZEOF_NAME])dnl
587 dnl ** Map an arithmetic C type to a Haskell type.
588 dnl Based on autconf's AC_CHECK_SIZEOF.
590 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
591 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
592 [changequote(<<, >>)dnl
593 dnl The name to #define.
594 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
595 dnl The cache variable name.
596 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
598 AC_MSG_CHECKING(Haskell type for $1)
599 AC_CACHE_VAL(AC_CV_NAME,
600 [AC_TRY_RUN([#include <stdio.h>
603 #ifdef HAVE_SYS_TYPES_H
604 # include <sys/types.h>
611 #ifdef HAVE_SYS_STAT_H
612 # include <sys/stat.h>
627 #ifdef HAVE_TERMIOS_H
628 # include <termios.h>
646 FILE *f=fopen("conftestval", "w");
648 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
650 ((testing)(-1) < (testing)0) ? "Int" : "Word",
654 (sizeof(testing) > sizeof(double)) ? "LDouble" :
655 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
659 }], AC_CV_NAME=`cat conftestval`,
660 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
661 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
662 AC_MSG_RESULT($AC_CV_NAME)
663 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
664 undefine([AC_TYPE_NAME])dnl
665 undefine([AC_CV_NAME])dnl
668 dnl ** figure out whether C compiler supports 'long long's
669 dnl (Closely based on Andreas Zeller's macro for testing
670 dnl for this under C++)
672 dnl If the C compiler supports `long long' types,
673 dnl define `HAVE_LONG_LONG'.
675 AC_DEFUN(FPTOOLS_C_LONG_LONG,
677 AC_REQUIRE([AC_PROG_CC])
678 AC_MSG_CHECKING(whether ${CC} supports long long types)
679 AC_CACHE_VAL(fptools_cv_have_long_long,
683 AC_TRY_COMPILE(,[long long a;],
684 fptools_cv_have_long_long=yes,
685 fptools_cv_have_long_long=no)
688 AC_MSG_RESULT($fptools_cv_have_long_long)
689 if test "$fptools_cv_have_long_long" = yes; then
690 AC_DEFINE(HAVE_LONG_LONG)
694 dnl ** Obtain the value of a C constant.
695 dnl The value will be `(-1)' if the constant is undefined.
697 dnl This is set up so that the argument can be a shell variable.
699 AC_DEFUN(FPTOOLS_CHECK_CCONST,
701 eval "def_name=CCONST_$1"
702 eval "cv_name=ac_cv_cconst_$1"
703 AC_MSG_CHECKING(value of $1)
704 AC_CACHE_VAL($cv_name,
705 [AC_TRY_RUN([#include <stdio.h>
709 FILE *f=fopen("conftestval", "w");
711 fprintf(f, "%d\n", $1);
714 eval "$cv_name=`cat conftestval`",
716 eval "$cv_name=-1")])dnl
717 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
718 AC_MSG_RESULT($fptools_check_cconst_result)
719 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
720 unset fptools_check_cconst_result
723 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
726 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
727 [for ac_const_name in $1
729 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
734 dnl *** Can we open files in binary mode? ***
736 AC_DEFUN(FPTOOLS_O_BINARY,
738 AC_REQUIRE([AC_PROG_CC])
739 AC_MSG_CHECKING(whether we can open files in binary mode)
740 AC_CACHE_VAL(fptools_cv_have_o_binary,
749 fptools_cv_have_o_binary=yes,
750 fptools_cv_have_o_binary=no)
753 AC_MSG_RESULT($fptools_cv_have_o_binary)
754 if test "$fptools_cv_have_o_binary" = yes; then
755 AC_DEFINE(HAVE_O_BINARY)
759 dnl *** Which one comes first, .text or .data? ***
761 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
762 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
764 int f() { return 1; }
766 int main() { return ((char*)&f > (char*)&i); }
769 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
770 if test "$fptools_cv_code_bef_data" = yes; then
771 AC_DEFINE(CODE_BEFORE_DATA)
775 dnl *** Helper function **
777 AC_DEFUN(FPTOOLS_IN_SCOPE,
778 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
781 dnl *** What's the end-of-text-section marker called? ***
783 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
784 [AC_CACHE_CHECK([for end of text section marker],
785 [fptools_cv_end_of_text],
786 [fptools_cv_end_of_text=""
788 for i in data_start _data_start etext _etext __etext; do
789 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
790 if test "$fptools_end_of_text" = yes; then
791 fptools_cv_end_of_text=$i
796 if test "$not_done" = 1; then
797 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
798 if test "$fptools_end_of_text" = yes; then
799 fptools_cv_end_of_text="etext"
802 if test -n "$fptools_cv_end_of_text"; then
803 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
805 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
807 AC_CACHE_CHECK([for end of text section marker declaration],
808 [fptools_cv_end_of_text_decl],
809 [fptools_cv_end_of_text_decl=""
811 for i in data_start _data_start etext _etext __etext; do
812 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
813 if test "$fptools_end_of_text_decl" = yes; then
814 fptools_cv_end_of_text_decl=$i
819 if test "$not_done" = 1; then
820 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
821 if test "$fptools_end_of_text_decl" = yes; then
822 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
825 if test -n "$fptools_cv_end_of_text_decl"; then
826 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
828 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
832 dnl *** What's the end-of-data-section marker called? ***
834 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
835 [AC_CACHE_CHECK([for end of data section marker],
836 [fptools_cv_end_of_data],
837 [fptools_cv_end_of_data=""
839 for i in end _end __end; do
840 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
841 if test "$fptools_end_of_data" = yes; then
842 fptools_cv_end_of_data=$i
847 if test "$not_done" = 1; then
848 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
849 if test "$fptools_end_of_data" = yes; then
850 fptools_cv_end_of_data="end"
853 if test -n "$fptools_cv_end_of_data"; then
854 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
856 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
858 AC_CACHE_CHECK([for end of data section marker declaration],
859 [fptools_cv_end_of_data_decl],
860 [fptools_cv_end_of_data_decl=""
862 for i in end _end __end; do
863 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
864 if test "$fptools_end_of_data_decl" = yes; then
865 fptools_cv_end_of_data_decl=$i
870 if test "$not_done" = 1; then
871 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
872 if test "$fptools_end_of_data_decl" = yes; then
873 fptools_cv_end_of_data_decl="end asm(\"end\")"
876 if test -n "$fptools_cv_end_of_data_decl"; then
877 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
879 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
884 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
886 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
888 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
892 cat > conftest.$ac_ext <<EOF
893 dnl This sometimes fails to find confdefs.h, for some reason.
894 dnl [#]line __oline__ "[$]0"
895 [#]line __oline__ "configure"
896 #include "confdefs.h"
898 int t() { return 0; }
900 if AC_TRY_EVAL(ac_link); then
905 ifelse([$4], , , [else
915 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
917 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
919 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
920 [AC_MSG_CHECKING([for $1])
921 AC_CACHE_VAL(ac_cv_flag_$1,
922 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
923 eval "ac_cv_flag_$1=yes",
924 eval "ac_cv_flag_$1=no"
927 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
937 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
939 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
940 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
942 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
944 AC_DEFINE_UNQUOTED($ac_tr_lib)
946 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
948 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
950 AC_DEFINE_UNQUOTED($ac_tr_lib)
956 dnl check for prototypes
958 AC_DEFUN([AC_C_PROTOTYPES],
959 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
968 ac_cv_prototypes=yes,
969 ac_cv_prototypes=no)])
970 if test "$ac_cv_prototypes" = yes; then
971 AC_DEFINE([HAVE_PROTOTYPES])
975 dnl ** Check which CATALOG file we have to use with DocBook SGML.
977 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
979 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
980 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
981 dnl is set to "no". JADE is the jade executable and STYLESHEET
982 dnl a DocBook style sheet.
984 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
985 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
987 cat > conftest.sgml << EOF
988 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
992 <Author><OtherName>Test</OtherName></Author>
993 <Address>Test</Address>
994 <PubDate>Test</PubDate>
996 <Sect1><Title>Test</Title>
1003 fptools_cv_sgml_catalog=no
1004 if test -z "$SGML_CATALOG_FILES" ; then
1005 for fptools_catalog in $4; do
1006 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
1007 if AC_TRY_EVAL(ac_try); then
1008 fptools_cv_sgml_catalog=[$]fptools_catalog
1013 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
1014 fptools_cv_sgml_catalog="yes"
1018 if test $fptools_cv_sgml_catalog != "no"; then
1019 $1=$fptools_cv_sgml_catalog
1023 dnl ######################################################################
1024 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1025 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1026 dnl Search for a library defining FUNC, if it's not already available.
1027 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1029 dnl ######################################################################
1031 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1033 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1034 [ac_func_search_save_LIBS="$LIBS"
1035 ac_cv_search_$2="no"
1036 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1037 test "$ac_cv_search_$2" = "no" && for i in $3; do
1038 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1039 AC_TRY_LINK([$1], [$2()],
1040 [ac_cv_search_$2="-l$i"
1043 LIBS="$ac_func_search_save_LIBS"])
1044 if test "$ac_cv_search_$2" != "no"; then
1045 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1051 dnl ####################### -*- Mode: M4 -*- ###########################
1052 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1054 dnl This file is free software; you can redistribute it and/or modify it
1055 dnl under the terms of the GNU General Public License as published by
1056 dnl the Free Software Foundation; either version 2 of the License, or
1057 dnl (at your option) any later version.
1059 dnl This file is distributed in the hope that it will be useful, but
1060 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1061 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1062 dnl General Public License for more details.
1064 dnl You should have received a copy of the GNU General Public License
1065 dnl along with this file; if not, write to:
1067 dnl Free Software Foundation, Inc.
1070 dnl Boston, MA 02111-1307, USA.
1071 dnl ####################################################################
1074 dnl @synopsis FPTOOLS_CHECK_LIBM
1076 dnl Search for math library (typically -lm).
1078 dnl The variable LIBM (which is not an output variable by default) is
1079 dnl set to a value which is suitable for use in a Makefile (for example,
1080 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1082 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1084 # FPTOOLS_CHECK_LIBM - check for math library
1085 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1086 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1090 # These system don't have libm
1093 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1094 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1097 AC_CHECK_LIB(m, main, LIBM="-lm")
1102 dnl ######################################################################
1103 dnl NOTE: Because of portability issues between different autoconf
1104 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1105 dnl Furthermore, caching has been completely rewritten.
1106 dnl ######################################################################
1108 dnl ########################### -*- Mode: M4 -*- #######################
1109 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1111 dnl This file is free software; you can redistribute it and/or modify it
1112 dnl under the terms of the GNU General Public License as published by
1113 dnl the Free Software Foundation; either version 2 of the License, or
1114 dnl (at your option) any later version.
1116 dnl This file is distributed in the hope that it will be useful, but
1117 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1118 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1119 dnl General Public License for more details.
1121 dnl You should have received a copy of the GNU General Public License
1122 dnl along with this file; if not, write to:
1124 dnl Free Software Foundation, Inc.
1127 dnl Boston, MA 02111-1307, USA.
1128 dnl ####################################################################
1130 dnl @synopsis FPTOOLS_HAVE_OPENGL
1132 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1133 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1134 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1136 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1137 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1140 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1141 dnl be missing) are added to the shell output variable "GL_LIBS", along
1142 dnl with any other libraries that are necessary to successfully link an
1143 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1144 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1147 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1148 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1149 dnl an OpenGL application.
1151 dnl The following shell variable (which are not output variables) are
1152 dnl also set to either "yes" or "no" (depending on which libraries were
1153 dnl found) to help you determine exactly what was found.
1160 dnl A complete little toy "Automake `make distcheck'" package of how to
1161 dnl use this macro is available at:
1163 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1165 dnl Please note that as the ac_opengl macro and the toy example evolves,
1166 dnl the version number increases, so you may have to adjust the above
1167 dnl URL accordingly.
1169 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1171 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1173 AC_REQUIRE([AC_PROG_CC])
1174 AC_REQUIRE([AC_PATH_X])
1175 AC_REQUIRE([AC_PATH_XTRA])
1176 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1178 dnl Check for Mesa first, unless we were asked not to.
1179 dnl AC_HELP_STRING([--with-Mesa],
1180 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1181 dnl with_Mesa_help_string)
1182 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1183 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=no)], use_Mesa=$enableval, use_Mesa=no)
1185 if test x"$use_Mesa" = xyes; then
1186 GL_search_list="MesaGL GL opengl32"
1187 GLU_search_list="MesaGLU GLU glu32"
1188 GLX_search_list="MesaGLX GLX"
1190 GL_search_list="GL opengl32 MesaGL"
1191 GLU_search_list="GLU glu32 MesaGLU"
1192 GLX_search_list="GLX MesaGLX"
1198 dnl If we are running under X11 then add in the appropriate libraries.
1199 if ! test x"$no_x" = xyes; then
1200 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1202 GL_CFLAGS="$X_CFLAGS"
1203 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1205 GL_save_CPPFLAGS="$CPPFLAGS"
1206 CPPFLAGS="$GL_CFLAGS"
1208 GL_save_LIBS="$LIBS"
1211 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1212 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1213 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1214 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1216 if test -n "$LIBS"; then
1223 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1224 GL_CFLAGS="$mdl_cv_gl_cflags"
1226 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1227 GL_LIBS="$mdl_cv_gl_libs"
1230 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1231 dnl and we don't want to be global namespace polluters.
1234 LIBS="$GL_save_LIBS"
1235 CPPFLAGS="$GL_save_CPPFLAGS"
1243 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1244 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1245 dnl 'lex' is actually present along the user's PATH).
1247 AC_DEFUN(AC_PROG_LEX_STRICT,
1248 [AC_CHECK_PROG(LEX, flex, flex)
1251 AC_CHECK_PROG(LEX,lex,lex)
1252 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1257 dnl Check to see whether CC (gcc) supports a particular option.
1259 AC_DEFUN(FPTOOLS_CC_FLAG,
1261 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1262 [save_CFLAGS="$CFLAGS"
1265 AC_TRY_COMPILE(,[int main(){return(0);}],
1268 CFLAGS="$save_CFLAGS"
1270 if test "$ac_cv_cc_$2"x = "yesx"; then