1 dnl $Id: aclocal.m4,v 1.107 2002/07/23 10:08:58 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.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 "version 6" conftest.out >/dev/null 2>&1; then
452 echo "Your version of perl probably won't work."
460 dnl Getting at the right version of 'find'
461 dnl (i.e., not the MS util on a Win32 box).
463 AC_DEFUN(FPTOOLS_FIND_FIND,
465 AC_PATH_PROG(Find2Cmd, find)
466 $Find2Cmd --version > conftest.out 2>&1
467 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
468 # Encountered MS' find utility, which is not what we're after.
470 # HACK - AC_CHECK_PROG is useful here in that does let you reject
471 # an (absolute) entry in the path (Find2Cmd). It is not so useful
472 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
473 # absolute path eventually found. So, hack around this by inspecting
474 # what variables hold the abs. path & use them directly.
475 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
483 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
484 dnl values of the second argument to the result of running
485 dnl the commands given by the third. It does not cache its
486 dnl result, so it is suitable for checks which should be
489 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
490 [AC_MSG_CHECKING([$1])
492 AC_MSG_RESULT([$][$2])
496 dnl FPTOOLS_GHC_VERSION(version)
497 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
498 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
500 dnl Test for version of installed ghc. Uses $GHC.
501 dnl [original version pinched from c2hs]
503 AC_DEFUN(FPTOOLS_GHC_VERSION,
504 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
505 ["${WithGhc-ghc}" --version > conftestghc 2>&1
506 cat conftestghc >&AC_FD_CC
507 #Useless Use Of cat award...
508 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
510 if test "[$]fptools_version_of_ghc" = ""
512 fptools_version_of_ghc='unknown'
514 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
515 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
516 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
518 if test "[$]fptools_version_of_ghc[_pl]" = ""
520 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
521 fptools_version_of_ghc[_pl]="0"
523 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
527 [$1]="[$]fptools_version_of_ghc[_all]"
529 [$1]="[$]fptools_version_of_ghc[_major]"
530 [$2]="[$]fptools_version_of_ghc[_minor]"
532 [$1]="[$]fptools_version_of_ghc[_major]"
533 [$2]="[$]fptools_version_of_ghc[_minor]"
534 [$3]="[$]fptools_version_of_ghc[_pl]"
536 [$1]="[$]fptools_version_of_ghc[_all]"
537 [$2]="[$]fptools_version_of_ghc[_major]"
538 [$3]="[$]fptools_version_of_ghc[_minor]"
539 [$4]="[$]fptools_version_of_ghc[_pl]"
545 dnl ** figure out the alignment restriction of a type
546 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
547 dnl so we can't call REQUIRE)
549 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
550 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
551 [changequote(<<, >>)dnl
552 dnl The name to #define.
553 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
554 dnl The cache variable name.
555 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
556 dnl The name of the corresponding size.
557 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
559 AC_MSG_CHECKING(alignment of $1)
560 AC_CACHE_VAL(AC_CV_NAME,
567 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
572 FILE *f=fopen("conftestval", "w");
574 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
577 AC_CV_NAME=`cat conftestval`,
578 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
579 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
580 AC_MSG_RESULT($AC_CV_NAME)
581 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
582 AC_PROVIDE($AC_TYPE_NAME)
583 undefine([AC_TYPE_NAME])dnl
584 undefine([AC_CV_NAME])dnl
585 undefine([AC_CV_SIZEOF_NAME])dnl
588 dnl ** Map an arithmetic C type to a Haskell type.
589 dnl Based on autconf's AC_CHECK_SIZEOF.
591 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
592 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
593 [changequote(<<, >>)dnl
594 dnl The name to #define.
595 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
596 dnl The cache variable name.
597 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
599 AC_MSG_CHECKING(Haskell type for $1)
600 AC_CACHE_VAL(AC_CV_NAME,
601 [AC_TRY_RUN([#include <stdio.h>
604 #ifdef HAVE_SYS_TYPES_H
605 # include <sys/types.h>
612 #ifdef HAVE_SYS_STAT_H
613 # include <sys/stat.h>
628 #ifdef HAVE_TERMIOS_H
629 # include <termios.h>
647 FILE *f=fopen("conftestval", "w");
649 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
651 ((testing)(-1) < (testing)0) ? "Int" : "Word",
655 (sizeof(testing) > sizeof(double)) ? "LDouble" :
656 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
660 }], AC_CV_NAME=`cat conftestval`,
661 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
662 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
663 AC_MSG_RESULT($AC_CV_NAME)
664 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
665 undefine([AC_TYPE_NAME])dnl
666 undefine([AC_CV_NAME])dnl
669 dnl ** figure out whether C compiler supports 'long long's
670 dnl (Closely based on Andreas Zeller's macro for testing
671 dnl for this under C++)
673 dnl If the C compiler supports `long long' types,
674 dnl define `HAVE_LONG_LONG'.
676 AC_DEFUN(FPTOOLS_C_LONG_LONG,
678 AC_REQUIRE([AC_PROG_CC])
679 AC_MSG_CHECKING(whether ${CC} supports long long types)
680 AC_CACHE_VAL(fptools_cv_have_long_long,
684 AC_TRY_COMPILE(,[long long a;],
685 fptools_cv_have_long_long=yes,
686 fptools_cv_have_long_long=no)
689 AC_MSG_RESULT($fptools_cv_have_long_long)
690 if test "$fptools_cv_have_long_long" = yes; then
691 AC_DEFINE(HAVE_LONG_LONG)
695 dnl ** Obtain the value of a C constant.
696 dnl The value will be `(-1)' if the constant is undefined.
698 dnl This is set up so that the argument can be a shell variable.
700 AC_DEFUN(FPTOOLS_CHECK_CCONST,
702 eval "def_name=CCONST_$1"
703 eval "cv_name=ac_cv_cconst_$1"
704 AC_MSG_CHECKING(value of $1)
705 AC_CACHE_VAL($cv_name,
706 [AC_TRY_RUN([#include <stdio.h>
710 FILE *f=fopen("conftestval", "w");
712 fprintf(f, "%d\n", $1);
715 eval "$cv_name=`cat conftestval`",
717 eval "$cv_name=-1")])dnl
718 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
719 AC_MSG_RESULT($fptools_check_cconst_result)
720 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
721 unset fptools_check_cconst_result
724 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
727 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
728 [for ac_const_name in $1
730 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
735 dnl *** Can we open files in binary mode? ***
737 AC_DEFUN(FPTOOLS_O_BINARY,
739 AC_REQUIRE([AC_PROG_CC])
740 AC_MSG_CHECKING(whether we can open files in binary mode)
741 AC_CACHE_VAL(fptools_cv_have_o_binary,
750 fptools_cv_have_o_binary=yes,
751 fptools_cv_have_o_binary=no)
754 AC_MSG_RESULT($fptools_cv_have_o_binary)
755 if test "$fptools_cv_have_o_binary" = yes; then
756 AC_DEFINE(HAVE_O_BINARY)
760 dnl *** Which one comes first, .text or .data? ***
762 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
763 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
765 int f() { return 1; }
767 int main() { return ((char*)&f > (char*)&i); }
770 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
771 if test "$fptools_cv_code_bef_data" = yes; then
772 AC_DEFINE(CODE_BEFORE_DATA)
776 dnl *** Helper function **
778 AC_DEFUN(FPTOOLS_IN_SCOPE,
779 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
782 dnl *** What's the end-of-text-section marker called? ***
784 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
785 [AC_CACHE_CHECK([for end of text section marker],
786 [fptools_cv_end_of_text],
787 [fptools_cv_end_of_text=""
789 for i in data_start _data_start etext _etext __etext; do
790 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
791 if test "$fptools_end_of_text" = yes; then
792 fptools_cv_end_of_text=$i
797 if test "$not_done" = 1; then
798 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
799 if test "$fptools_end_of_text" = yes; then
800 fptools_cv_end_of_text="etext"
803 if test -n "$fptools_cv_end_of_text"; then
804 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
806 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
808 AC_CACHE_CHECK([for end of text section marker declaration],
809 [fptools_cv_end_of_text_decl],
810 [fptools_cv_end_of_text_decl=""
812 for i in data_start _data_start etext _etext __etext; do
813 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
814 if test "$fptools_end_of_text_decl" = yes; then
815 fptools_cv_end_of_text_decl=$i
820 if test "$not_done" = 1; then
821 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
822 if test "$fptools_end_of_text_decl" = yes; then
823 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
826 if test -n "$fptools_cv_end_of_text_decl"; then
827 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
829 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
833 dnl *** What's the end-of-data-section marker called? ***
835 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
836 [AC_CACHE_CHECK([for end of data section marker],
837 [fptools_cv_end_of_data],
838 [fptools_cv_end_of_data=""
840 for i in end _end __end; do
841 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
842 if test "$fptools_end_of_data" = yes; then
843 fptools_cv_end_of_data=$i
848 if test "$not_done" = 1; then
849 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
850 if test "$fptools_end_of_data" = yes; then
851 fptools_cv_end_of_data="end"
854 if test -n "$fptools_cv_end_of_data"; then
855 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
857 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
859 AC_CACHE_CHECK([for end of data section marker declaration],
860 [fptools_cv_end_of_data_decl],
861 [fptools_cv_end_of_data_decl=""
863 for i in end _end __end; do
864 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
865 if test "$fptools_end_of_data_decl" = yes; then
866 fptools_cv_end_of_data_decl=$i
871 if test "$not_done" = 1; then
872 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
873 if test "$fptools_end_of_data_decl" = yes; then
874 fptools_cv_end_of_data_decl="end asm(\"end\")"
877 if test -n "$fptools_cv_end_of_data_decl"; then
878 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
880 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
885 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
887 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
889 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
893 cat > conftest.$ac_ext <<EOF
894 dnl This sometimes fails to find confdefs.h, for some reason.
895 dnl [#]line __oline__ "[$]0"
896 [#]line __oline__ "configure"
897 #include "confdefs.h"
899 int t() { return 0; }
901 if AC_TRY_EVAL(ac_link); then
906 ifelse([$4], , , [else
916 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
918 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
920 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
921 [AC_MSG_CHECKING([for $1])
922 AC_CACHE_VAL(ac_cv_flag_$1,
923 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
924 eval "ac_cv_flag_$1=yes",
925 eval "ac_cv_flag_$1=no"
928 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
938 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
940 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
941 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
943 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
945 AC_DEFINE_UNQUOTED($ac_tr_lib)
947 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
949 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
951 AC_DEFINE_UNQUOTED($ac_tr_lib)
957 dnl check for prototypes
959 AC_DEFUN([AC_C_PROTOTYPES],
960 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
969 ac_cv_prototypes=yes,
970 ac_cv_prototypes=no)])
971 if test "$ac_cv_prototypes" = yes; then
972 AC_DEFINE([HAVE_PROTOTYPES])
976 dnl ** Check which CATALOG file we have to use with DocBook SGML.
978 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
980 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
981 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
982 dnl is set to "no". JADE is the jade executable and STYLESHEET
983 dnl a DocBook style sheet.
985 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
986 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
988 cat > conftest.sgml << EOF
989 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
993 <Author><OtherName>Test</OtherName></Author>
994 <Address>Test</Address>
995 <PubDate>Test</PubDate>
997 <Sect1><Title>Test</Title>
1004 fptools_cv_sgml_catalog=no
1005 if test -z "$SGML_CATALOG_FILES" ; then
1006 for fptools_catalog in $4; do
1007 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
1008 if AC_TRY_EVAL(ac_try); then
1009 fptools_cv_sgml_catalog=[$]fptools_catalog
1014 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
1015 fptools_cv_sgml_catalog="yes"
1019 if test $fptools_cv_sgml_catalog != "no"; then
1020 $1=$fptools_cv_sgml_catalog
1024 dnl ######################################################################
1025 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1026 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1027 dnl Search for a library defining FUNC, if it's not already available.
1028 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1030 dnl ######################################################################
1032 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1034 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1035 [ac_func_search_save_LIBS="$LIBS"
1036 ac_cv_search_$2="no"
1037 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1038 test "$ac_cv_search_$2" = "no" && for i in $3; do
1039 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1040 AC_TRY_LINK([$1], [$2()],
1041 [ac_cv_search_$2="-l$i"
1044 LIBS="$ac_func_search_save_LIBS"])
1045 if test "$ac_cv_search_$2" != "no"; then
1046 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1052 dnl ####################### -*- Mode: M4 -*- ###########################
1053 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1055 dnl This file is free software; you can redistribute it and/or modify it
1056 dnl under the terms of the GNU General Public License as published by
1057 dnl the Free Software Foundation; either version 2 of the License, or
1058 dnl (at your option) any later version.
1060 dnl This file is distributed in the hope that it will be useful, but
1061 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1062 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1063 dnl General Public License for more details.
1065 dnl You should have received a copy of the GNU General Public License
1066 dnl along with this file; if not, write to:
1068 dnl Free Software Foundation, Inc.
1071 dnl Boston, MA 02111-1307, USA.
1072 dnl ####################################################################
1075 dnl @synopsis FPTOOLS_CHECK_LIBM
1077 dnl Search for math library (typically -lm).
1079 dnl The variable LIBM (which is not an output variable by default) is
1080 dnl set to a value which is suitable for use in a Makefile (for example,
1081 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1083 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1085 # FPTOOLS_CHECK_LIBM - check for math library
1086 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1087 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1091 # These system don't have libm
1094 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1095 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1098 AC_CHECK_LIB(m, main, LIBM="-lm")
1103 dnl ######################################################################
1104 dnl NOTE: Because of portability issues between different autoconf
1105 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1106 dnl Furthermore, caching has been completely rewritten.
1107 dnl ######################################################################
1109 dnl ########################### -*- Mode: M4 -*- #######################
1110 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1112 dnl This file is free software; you can redistribute it and/or modify it
1113 dnl under the terms of the GNU General Public License as published by
1114 dnl the Free Software Foundation; either version 2 of the License, or
1115 dnl (at your option) any later version.
1117 dnl This file is distributed in the hope that it will be useful, but
1118 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1119 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1120 dnl General Public License for more details.
1122 dnl You should have received a copy of the GNU General Public License
1123 dnl along with this file; if not, write to:
1125 dnl Free Software Foundation, Inc.
1128 dnl Boston, MA 02111-1307, USA.
1129 dnl ####################################################################
1131 dnl @synopsis FPTOOLS_HAVE_OPENGL
1133 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1134 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1135 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1137 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1138 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1141 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1142 dnl be missing) are added to the shell output variable "GL_LIBS", along
1143 dnl with any other libraries that are necessary to successfully link an
1144 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1145 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1148 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1149 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1150 dnl an OpenGL application.
1152 dnl The following shell variable (which are not output variables) are
1153 dnl also set to either "yes" or "no" (depending on which libraries were
1154 dnl found) to help you determine exactly what was found.
1161 dnl A complete little toy "Automake `make distcheck'" package of how to
1162 dnl use this macro is available at:
1164 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1166 dnl Please note that as the ac_opengl macro and the toy example evolves,
1167 dnl the version number increases, so you may have to adjust the above
1168 dnl URL accordingly.
1170 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1172 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1174 AC_REQUIRE([AC_PROG_CC])
1175 AC_REQUIRE([AC_PATH_X])
1176 AC_REQUIRE([AC_PATH_XTRA])
1177 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1179 dnl Check for Mesa first, unless we were asked not to.
1180 dnl AC_HELP_STRING([--with-Mesa],
1181 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1182 dnl with_Mesa_help_string)
1183 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1184 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=no)], use_Mesa=$enableval, use_Mesa=no)
1186 if test x"$use_Mesa" = xyes; then
1187 GL_search_list="MesaGL GL opengl32"
1188 GLU_search_list="MesaGLU GLU glu32"
1189 GLX_search_list="MesaGLX GLX"
1191 GL_search_list="GL opengl32 MesaGL"
1192 GLU_search_list="GLU glu32 MesaGLU"
1193 GLX_search_list="GLX MesaGLX"
1199 dnl If we are running under X11 then add in the appropriate libraries.
1200 if test x"$no_x" != xyes; then
1201 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1203 GL_CFLAGS="$X_CFLAGS"
1204 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1206 GL_save_CPPFLAGS="$CPPFLAGS"
1207 CPPFLAGS="$GL_CFLAGS"
1209 GL_save_LIBS="$LIBS"
1212 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1213 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1214 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1215 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1217 if test -n "$LIBS"; then
1224 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1225 GL_CFLAGS="$mdl_cv_gl_cflags"
1227 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1228 GL_LIBS="$mdl_cv_gl_libs"
1231 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1232 dnl and we don't want to be global namespace polluters.
1235 LIBS="$GL_save_LIBS"
1236 CPPFLAGS="$GL_save_CPPFLAGS"
1244 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1245 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1246 dnl 'lex' is actually present along the user's PATH).
1248 AC_DEFUN(AC_PROG_LEX_STRICT,
1249 [AC_CHECK_PROG(LEX, flex, flex)
1252 AC_CHECK_PROG(LEX,lex,lex)
1253 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1258 dnl Check to see whether CC (gcc) supports a particular option.
1260 AC_DEFUN(FPTOOLS_CC_FLAG,
1262 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1263 [save_CFLAGS="$CFLAGS"
1266 AC_TRY_COMPILE(,[int main(){return(0);}],
1269 CFLAGS="$save_CFLAGS"
1271 if test "$ac_cv_cc_$2"x = "yesx"; then
1279 dnl Check to see whether 'struct msghdr' contains msg_control
1281 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1282 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1283 [AC_TRY_COMPILE([#include <sys/types.h>
1284 #include <sys/uio.h>
1285 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1286 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1287 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1288 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1290 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1294 dnl Check to see whether 'struct msghdr' contains msg_accrights
1296 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1297 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1298 [AC_TRY_COMPILE([#include <sys/types.h>
1299 #include <sys/uio.h>
1300 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1301 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1302 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1303 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1305 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl