1 dnl $Id: aclocal.m4,v 1.108 2002/12/04 23:41:15 dons 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.13. 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.13],
219 [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
221 HappyVersion=$fptools_cv_happy_version;
222 AC_SUBST(HappyVersion)
226 dnl Check for Haddock and version. If there's no installed Haddock, we look
227 dnl for a haddock source tree and point the build system at that instead.
229 AC_DEFUN(FPTOOLS_HADDOCK,
231 if test -d $srcdir/haddock; then
232 SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
234 if test x"$UseSrcTreeHaddock" = xYES; then
235 HaddockCmd=$SrcTreeHaddockCmd
237 AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
239 dnl Darn, I forgot to make Haddock print out its version number when
240 dnl invoked with -v. We could try generating some HTML and grepping
241 dnl through that to find the version number, but I think we'll make
242 dnl do without it for now.
246 dnl What's the best way of doing context diffs?
248 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
250 AC_DEFUN(FPTOOLS_PROG_DIFF,
251 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
252 [echo foo > conftest1
254 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
255 fptools_cv_context_diffs='diff -C 1'
257 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
258 fptools_cv_context_diffs='diff -c1'
260 echo "Can't figure out how to do context diffs."
261 echo "Neither \`diff -C 1' nor \`diff -c1' works."
265 rm -f conftest1 conftest2
267 ContextDiffCmd=$fptools_cv_context_diffs
268 AC_SUBST(ContextDiffCmd)
272 dnl Check whether ld supports -x
274 AC_DEFUN(FPTOOLS_LD_X,
275 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
277 echo 'foo() {}' > conftest.c
278 ${CC-cc} -c conftest.c
279 if ${LdCmd} -r -x -o foo.o conftest.o; then
284 rm -rf conftest.c conftest.o foo.o
286 if test "$fptools_cv_ld_x" = yes; then
295 dnl Finding the Right Yacc
297 AC_DEFUN(FPTOOLS_PROG_YACCY,
299 if test "$YACC" = "yacc"; then
300 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
301 [AC_CHECK_PROG(WhatCmd, what, what, :)
302 $WhatCmd $YACC > conftest.out
303 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
304 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
305 if test -f /usr/lang/yacc; then
306 echo "I'm going to use /usr/lang/yacc instead"
307 ac_cv_prog_yacc=/usr/lang/yacc
309 echo "I'm assuming the worst...no parser generator at all"
312 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
313 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
314 echo "I'm assuming the worst...no parser generator at all"
317 ac_cv_prog_yacc=$YACC
322 ac_cv_prog_yacc=$YACC
324 YaccCmd=$ac_cv_prog_yacc
328 dnl *** Checking for ar and its arguments + whether we need ranlib.
330 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
331 dnl On Digital UNIX, we test for the -Z (compress) and
332 dnl -input (take list of files from external file) flags.
334 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
335 [AC_PATH_PROG(ArCmdRaw,ar)
336 if test -z "$ArCmdRaw"; then
337 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
340 if $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
343 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
346 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
349 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
352 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
355 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
359 echo "I can't figure out how to use your $ArCmd"
363 case $HostPlatform in
365 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
367 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
370 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
372 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
373 ArSupportsInput='-input'
378 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
379 AC_SUBST(ArSupportsInput)
380 if test -z "$NeedRanLib"; then
382 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
390 dnl AC_SHEBANG_PERL - can we she-bang perl?
392 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
393 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
398 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
399 if test $? -ne 69; then
400 fptools_cv_shebang_perl=yes
402 fptools_cv_shebang_perl=no
408 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
409 dnl *Must* be called after AC_PROG_CC
411 AC_DEFUN(FPTOOLS_HAVE_GCC,
412 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
413 [if test -z "$GCC"; then
415 echo "You would be better off with gcc"
416 echo "Perhaps it is already installed, but not in your PATH?"
417 fptools_cv_have_gcc='no'
420 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' `"
422 fptools_cv_have_gcc='yes'
423 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
424 fptools_cv_have_gcc='no'
426 echo "your gcc version appears to be ..."
428 echo "gcc prior to 2.0 and have never worked with ghc."
429 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
430 AC_MSG_ERROR([gcc 1.X has never been supported])
434 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
438 dnl Small feature test for perl version. Assumes PerlCmd
439 dnl contains path to perl binary
441 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
442 [$PerlCmd -v >conftest.out 2>&1
443 if grep "version 5" conftest.out >/dev/null 2>&1; then
446 if grep "v5.6" conftest.out >/dev/null 2>&1; then
449 if grep "v5.8" conftest.out >/dev/null 2>&1; then
452 if grep "version 6" conftest.out >/dev/null 2>&1; then
455 echo "Your version of perl probably won't work."
464 dnl Getting at the right version of 'find'
465 dnl (i.e., not the MS util on a Win32 box).
467 AC_DEFUN(FPTOOLS_FIND_FIND,
469 AC_PATH_PROG(Find2Cmd, find)
470 $Find2Cmd --version > conftest.out 2>&1
471 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
472 # Encountered MS' find utility, which is not what we're after.
474 # HACK - AC_CHECK_PROG is useful here in that does let you reject
475 # an (absolute) entry in the path (Find2Cmd). It is not so useful
476 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
477 # absolute path eventually found. So, hack around this by inspecting
478 # what variables hold the abs. path & use them directly.
479 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
487 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
488 dnl values of the second argument to the result of running
489 dnl the commands given by the third. It does not cache its
490 dnl result, so it is suitable for checks which should be
493 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
494 [AC_MSG_CHECKING([$1])
496 AC_MSG_RESULT([$][$2])
500 dnl FPTOOLS_GHC_VERSION(version)
501 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
502 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
504 dnl Test for version of installed ghc. Uses $GHC.
505 dnl [original version pinched from c2hs]
507 AC_DEFUN(FPTOOLS_GHC_VERSION,
508 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
509 ["${WithGhc-ghc}" --version > conftestghc 2>&1
510 cat conftestghc >&AC_FD_CC
511 #Useless Use Of cat award...
512 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
514 if test "[$]fptools_version_of_ghc" = ""
516 fptools_version_of_ghc='unknown'
518 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
519 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
520 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
522 if test "[$]fptools_version_of_ghc[_pl]" = ""
524 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
525 fptools_version_of_ghc[_pl]="0"
527 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
531 [$1]="[$]fptools_version_of_ghc[_all]"
533 [$1]="[$]fptools_version_of_ghc[_major]"
534 [$2]="[$]fptools_version_of_ghc[_minor]"
536 [$1]="[$]fptools_version_of_ghc[_major]"
537 [$2]="[$]fptools_version_of_ghc[_minor]"
538 [$3]="[$]fptools_version_of_ghc[_pl]"
540 [$1]="[$]fptools_version_of_ghc[_all]"
541 [$2]="[$]fptools_version_of_ghc[_major]"
542 [$3]="[$]fptools_version_of_ghc[_minor]"
543 [$4]="[$]fptools_version_of_ghc[_pl]"
549 dnl ** figure out the alignment restriction of a type
550 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
551 dnl so we can't call REQUIRE)
553 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
554 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
555 [changequote(<<, >>)dnl
556 dnl The name to #define.
557 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
558 dnl The cache variable name.
559 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
560 dnl The name of the corresponding size.
561 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
563 AC_MSG_CHECKING(alignment of $1)
564 AC_CACHE_VAL(AC_CV_NAME,
571 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
576 FILE *f=fopen("conftestval", "w");
578 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
581 AC_CV_NAME=`cat conftestval`,
582 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
583 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
584 AC_MSG_RESULT($AC_CV_NAME)
585 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
586 AC_PROVIDE($AC_TYPE_NAME)
587 undefine([AC_TYPE_NAME])dnl
588 undefine([AC_CV_NAME])dnl
589 undefine([AC_CV_SIZEOF_NAME])dnl
592 dnl ** Map an arithmetic C type to a Haskell type.
593 dnl Based on autconf's AC_CHECK_SIZEOF.
595 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
596 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
597 [changequote(<<, >>)dnl
598 dnl The name to #define.
599 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
600 dnl The cache variable name.
601 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
603 AC_MSG_CHECKING(Haskell type for $1)
604 AC_CACHE_VAL(AC_CV_NAME,
605 [AC_TRY_RUN([#include <stdio.h>
608 #ifdef HAVE_SYS_TYPES_H
609 # include <sys/types.h>
616 #ifdef HAVE_SYS_STAT_H
617 # include <sys/stat.h>
632 #ifdef HAVE_TERMIOS_H
633 # include <termios.h>
651 FILE *f=fopen("conftestval", "w");
653 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
655 ((testing)(-1) < (testing)0) ? "Int" : "Word",
659 (sizeof(testing) > sizeof(double)) ? "LDouble" :
660 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
664 }], AC_CV_NAME=`cat conftestval`,
665 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
666 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
667 AC_MSG_RESULT($AC_CV_NAME)
668 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
669 undefine([AC_TYPE_NAME])dnl
670 undefine([AC_CV_NAME])dnl
673 dnl ** figure out whether C compiler supports 'long long's
674 dnl (Closely based on Andreas Zeller's macro for testing
675 dnl for this under C++)
677 dnl If the C compiler supports `long long' types,
678 dnl define `HAVE_LONG_LONG'.
680 AC_DEFUN(FPTOOLS_C_LONG_LONG,
682 AC_REQUIRE([AC_PROG_CC])
683 AC_MSG_CHECKING(whether ${CC} supports long long types)
684 AC_CACHE_VAL(fptools_cv_have_long_long,
688 AC_TRY_COMPILE(,[long long a;],
689 fptools_cv_have_long_long=yes,
690 fptools_cv_have_long_long=no)
693 AC_MSG_RESULT($fptools_cv_have_long_long)
694 if test "$fptools_cv_have_long_long" = yes; then
695 AC_DEFINE(HAVE_LONG_LONG)
699 dnl ** Obtain the value of a C constant.
700 dnl The value will be `(-1)' if the constant is undefined.
702 dnl This is set up so that the argument can be a shell variable.
704 AC_DEFUN(FPTOOLS_CHECK_CCONST,
706 eval "def_name=CCONST_$1"
707 eval "cv_name=ac_cv_cconst_$1"
708 AC_MSG_CHECKING(value of $1)
709 AC_CACHE_VAL($cv_name,
710 [AC_TRY_RUN([#include <stdio.h>
714 FILE *f=fopen("conftestval", "w");
716 fprintf(f, "%d\n", $1);
719 eval "$cv_name=`cat conftestval`",
721 eval "$cv_name=-1")])dnl
722 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
723 AC_MSG_RESULT($fptools_check_cconst_result)
724 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
725 unset fptools_check_cconst_result
728 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
731 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
732 [for ac_const_name in $1
734 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
739 dnl *** Can we open files in binary mode? ***
741 AC_DEFUN(FPTOOLS_O_BINARY,
743 AC_REQUIRE([AC_PROG_CC])
744 AC_MSG_CHECKING(whether we can open files in binary mode)
745 AC_CACHE_VAL(fptools_cv_have_o_binary,
754 fptools_cv_have_o_binary=yes,
755 fptools_cv_have_o_binary=no)
758 AC_MSG_RESULT($fptools_cv_have_o_binary)
759 if test "$fptools_cv_have_o_binary" = yes; then
760 AC_DEFINE(HAVE_O_BINARY)
764 dnl *** Which one comes first, .text or .data? ***
766 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
767 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
769 int f() { return 1; }
771 int main() { return ((char*)&f > (char*)&i); }
774 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
775 if test "$fptools_cv_code_bef_data" = yes; then
776 AC_DEFINE(CODE_BEFORE_DATA)
780 dnl *** Helper function **
782 AC_DEFUN(FPTOOLS_IN_SCOPE,
783 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
786 dnl *** What's the end-of-text-section marker called? ***
788 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
789 [AC_CACHE_CHECK([for end of text section marker],
790 [fptools_cv_end_of_text],
791 [fptools_cv_end_of_text=""
793 for i in data_start _data_start etext _etext __etext; do
794 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
795 if test "$fptools_end_of_text" = yes; then
796 fptools_cv_end_of_text=$i
801 if test "$not_done" = 1; then
802 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
803 if test "$fptools_end_of_text" = yes; then
804 fptools_cv_end_of_text="etext"
807 if test -n "$fptools_cv_end_of_text"; then
808 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
810 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
812 AC_CACHE_CHECK([for end of text section marker declaration],
813 [fptools_cv_end_of_text_decl],
814 [fptools_cv_end_of_text_decl=""
816 for i in data_start _data_start etext _etext __etext; do
817 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
818 if test "$fptools_end_of_text_decl" = yes; then
819 fptools_cv_end_of_text_decl=$i
824 if test "$not_done" = 1; then
825 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
826 if test "$fptools_end_of_text_decl" = yes; then
827 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
830 if test -n "$fptools_cv_end_of_text_decl"; then
831 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
833 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
837 dnl *** What's the end-of-data-section marker called? ***
839 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
840 [AC_CACHE_CHECK([for end of data section marker],
841 [fptools_cv_end_of_data],
842 [fptools_cv_end_of_data=""
844 for i in end _end __end; do
845 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
846 if test "$fptools_end_of_data" = yes; then
847 fptools_cv_end_of_data=$i
852 if test "$not_done" = 1; then
853 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
854 if test "$fptools_end_of_data" = yes; then
855 fptools_cv_end_of_data="end"
858 if test -n "$fptools_cv_end_of_data"; then
859 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
861 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
863 AC_CACHE_CHECK([for end of data section marker declaration],
864 [fptools_cv_end_of_data_decl],
865 [fptools_cv_end_of_data_decl=""
867 for i in end _end __end; do
868 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
869 if test "$fptools_end_of_data_decl" = yes; then
870 fptools_cv_end_of_data_decl=$i
875 if test "$not_done" = 1; then
876 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
877 if test "$fptools_end_of_data_decl" = yes; then
878 fptools_cv_end_of_data_decl="end asm(\"end\")"
881 if test -n "$fptools_cv_end_of_data_decl"; then
882 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
884 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
889 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
891 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
893 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
897 cat > conftest.$ac_ext <<EOF
898 dnl This sometimes fails to find confdefs.h, for some reason.
899 dnl [#]line __oline__ "[$]0"
900 [#]line __oline__ "configure"
901 #include "confdefs.h"
903 int t() { return 0; }
905 if AC_TRY_EVAL(ac_link); then
910 ifelse([$4], , , [else
920 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
922 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
924 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
925 [AC_MSG_CHECKING([for $1])
926 AC_CACHE_VAL(ac_cv_flag_$1,
927 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
928 eval "ac_cv_flag_$1=yes",
929 eval "ac_cv_flag_$1=no"
932 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
942 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
944 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
945 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
947 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
949 AC_DEFINE_UNQUOTED($ac_tr_lib)
951 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
953 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
955 AC_DEFINE_UNQUOTED($ac_tr_lib)
961 dnl check for prototypes
963 AC_DEFUN([AC_C_PROTOTYPES],
964 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
973 ac_cv_prototypes=yes,
974 ac_cv_prototypes=no)])
975 if test "$ac_cv_prototypes" = yes; then
976 AC_DEFINE([HAVE_PROTOTYPES])
980 dnl ** Check which CATALOG file we have to use with DocBook SGML.
982 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
984 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
985 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
986 dnl is set to "no". JADE is the jade executable and STYLESHEET
987 dnl a DocBook style sheet.
989 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
990 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
992 cat > conftest.sgml << EOF
993 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
997 <Author><OtherName>Test</OtherName></Author>
998 <Address>Test</Address>
999 <PubDate>Test</PubDate>
1001 <Sect1><Title>Test</Title>
1008 fptools_cv_sgml_catalog=no
1009 if test -z "$SGML_CATALOG_FILES" ; then
1010 for fptools_catalog in $4; do
1011 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
1012 if AC_TRY_EVAL(ac_try); then
1013 fptools_cv_sgml_catalog=[$]fptools_catalog
1018 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
1019 fptools_cv_sgml_catalog="yes"
1023 if test $fptools_cv_sgml_catalog != "no"; then
1024 $1=$fptools_cv_sgml_catalog
1028 dnl ######################################################################
1029 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1030 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1031 dnl Search for a library defining FUNC, if it's not already available.
1032 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1034 dnl ######################################################################
1036 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1038 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1039 [ac_func_search_save_LIBS="$LIBS"
1040 ac_cv_search_$2="no"
1041 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1042 test "$ac_cv_search_$2" = "no" && for i in $3; do
1043 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1044 AC_TRY_LINK([$1], [$2()],
1045 [ac_cv_search_$2="-l$i"
1048 LIBS="$ac_func_search_save_LIBS"])
1049 if test "$ac_cv_search_$2" != "no"; then
1050 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1056 dnl ####################### -*- Mode: M4 -*- ###########################
1057 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1059 dnl This file is free software; you can redistribute it and/or modify it
1060 dnl under the terms of the GNU General Public License as published by
1061 dnl the Free Software Foundation; either version 2 of the License, or
1062 dnl (at your option) any later version.
1064 dnl This file is distributed in the hope that it will be useful, but
1065 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1066 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1067 dnl General Public License for more details.
1069 dnl You should have received a copy of the GNU General Public License
1070 dnl along with this file; if not, write to:
1072 dnl Free Software Foundation, Inc.
1075 dnl Boston, MA 02111-1307, USA.
1076 dnl ####################################################################
1079 dnl @synopsis FPTOOLS_CHECK_LIBM
1081 dnl Search for math library (typically -lm).
1083 dnl The variable LIBM (which is not an output variable by default) is
1084 dnl set to a value which is suitable for use in a Makefile (for example,
1085 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1087 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1089 # FPTOOLS_CHECK_LIBM - check for math library
1090 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1091 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1095 # These system don't have libm
1098 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1099 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1102 AC_CHECK_LIB(m, main, LIBM="-lm")
1107 dnl ######################################################################
1108 dnl NOTE: Because of portability issues between different autoconf
1109 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1110 dnl Furthermore, caching has been completely rewritten.
1111 dnl ######################################################################
1113 dnl ########################### -*- Mode: M4 -*- #######################
1114 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1116 dnl This file is free software; you can redistribute it and/or modify it
1117 dnl under the terms of the GNU General Public License as published by
1118 dnl the Free Software Foundation; either version 2 of the License, or
1119 dnl (at your option) any later version.
1121 dnl This file is distributed in the hope that it will be useful, but
1122 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1123 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1124 dnl General Public License for more details.
1126 dnl You should have received a copy of the GNU General Public License
1127 dnl along with this file; if not, write to:
1129 dnl Free Software Foundation, Inc.
1132 dnl Boston, MA 02111-1307, USA.
1133 dnl ####################################################################
1135 dnl @synopsis FPTOOLS_HAVE_OPENGL
1137 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1138 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1139 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1141 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1142 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1145 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1146 dnl be missing) are added to the shell output variable "GL_LIBS", along
1147 dnl with any other libraries that are necessary to successfully link an
1148 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1149 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1152 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1153 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1154 dnl an OpenGL application.
1156 dnl The following shell variable (which are not output variables) are
1157 dnl also set to either "yes" or "no" (depending on which libraries were
1158 dnl found) to help you determine exactly what was found.
1165 dnl A complete little toy "Automake `make distcheck'" package of how to
1166 dnl use this macro is available at:
1168 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1170 dnl Please note that as the ac_opengl macro and the toy example evolves,
1171 dnl the version number increases, so you may have to adjust the above
1172 dnl URL accordingly.
1174 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1176 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1178 AC_REQUIRE([AC_PROG_CC])
1179 AC_REQUIRE([AC_PATH_X])
1180 AC_REQUIRE([AC_PATH_XTRA])
1181 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1183 dnl Check for Mesa first, unless we were asked not to.
1184 dnl AC_HELP_STRING([--with-Mesa],
1185 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1186 dnl with_Mesa_help_string)
1187 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1188 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=no)], use_Mesa=$enableval, use_Mesa=no)
1190 if test x"$use_Mesa" = xyes; then
1191 GL_search_list="MesaGL GL opengl32"
1192 GLU_search_list="MesaGLU GLU glu32"
1193 GLX_search_list="MesaGLX GLX"
1195 GL_search_list="GL opengl32 MesaGL"
1196 GLU_search_list="GLU glu32 MesaGLU"
1197 GLX_search_list="GLX MesaGLX"
1203 dnl If we are running under X11 then add in the appropriate libraries.
1204 if test x"$no_x" != xyes; then
1205 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1207 GL_CFLAGS="$X_CFLAGS"
1208 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1210 GL_save_CPPFLAGS="$CPPFLAGS"
1211 CPPFLAGS="$GL_CFLAGS"
1213 GL_save_LIBS="$LIBS"
1216 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1217 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1218 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1219 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1221 if test -n "$LIBS"; then
1228 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1229 GL_CFLAGS="$mdl_cv_gl_cflags"
1231 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1232 GL_LIBS="$mdl_cv_gl_libs"
1235 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1236 dnl and we don't want to be global namespace polluters.
1239 LIBS="$GL_save_LIBS"
1240 CPPFLAGS="$GL_save_CPPFLAGS"
1248 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1249 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1250 dnl 'lex' is actually present along the user's PATH).
1252 AC_DEFUN(AC_PROG_LEX_STRICT,
1253 [AC_CHECK_PROG(LEX, flex, flex)
1256 AC_CHECK_PROG(LEX,lex,lex)
1257 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1262 dnl Check to see whether CC (gcc) supports a particular option.
1264 AC_DEFUN(FPTOOLS_CC_FLAG,
1266 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1267 [save_CFLAGS="$CFLAGS"
1270 AC_TRY_COMPILE(,[int main(){return(0);}],
1273 CFLAGS="$save_CFLAGS"
1275 if test "$ac_cv_cc_$2"x = "yesx"; then
1283 dnl Check to see whether 'struct msghdr' contains msg_control
1285 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1286 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1287 [AC_TRY_COMPILE([#include <sys/types.h>
1288 #include <sys/uio.h>
1289 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1290 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1291 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1292 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1294 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1298 dnl Check to see whether 'struct msghdr' contains msg_accrights
1300 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1301 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1302 [AC_TRY_COMPILE([#include <sys/types.h>
1303 #include <sys/uio.h>
1304 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1305 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1306 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1307 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1309 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl