1 dnl $Id: aclocal.m4,v 1.113 2003/01/27 16:41:18 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 gcc_version_str="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1\.\2/g' `"
422 fptools_cv_have_gcc='yes'
423 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
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/'`
439 dnl Some OSs (Mandrake Linux, in particular) configure GCC with
440 dnl -momit-leaf-frame-pointer on by default. If this is the case, we
441 dnl need to turn it off for mangling to work. The test is currently a bit
442 dnl crude, using only the version number of gcc.
444 AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
445 [AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
447 fptools_cv_gcc_needs_no_omit_lfptr='no'
448 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
449 fptools_cv_gcc_needs_no_omit_lfptr='yes')
451 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
452 AC_DEFINE(HAVE_GCC_MNO_OMIT_LFPTR)
456 dnl Small feature test for perl version. Assumes PerlCmd
457 dnl contains path to perl binary
459 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
460 [$PerlCmd -v >conftest.out 2>&1
461 if grep "version 5" conftest.out >/dev/null 2>&1; then
464 if grep "v5.6" conftest.out >/dev/null 2>&1; then
467 if grep "v5.8" conftest.out >/dev/null 2>&1; then
470 if grep "version 6" conftest.out >/dev/null 2>&1; then
473 echo "Your version of perl probably won't work."
482 dnl Getting at the right version of 'find'
483 dnl (i.e., not the MS util on a Win32 box).
485 AC_DEFUN(FPTOOLS_FIND_FIND,
487 AC_PATH_PROG(Find2Cmd, find)
488 $Find2Cmd --version > conftest.out 2>&1
489 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
490 # Encountered MS' find utility, which is not what we're after.
492 # HACK - AC_CHECK_PROG is useful here in that does let you reject
493 # an (absolute) entry in the path (Find2Cmd). It is not so useful
494 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
495 # absolute path eventually found. So, hack around this by inspecting
496 # what variables hold the abs. path & use them directly.
497 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
505 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
506 dnl values of the second argument to the result of running
507 dnl the commands given by the third. It does not cache its
508 dnl result, so it is suitable for checks which should be
511 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
512 [AC_MSG_CHECKING([$1])
514 AC_MSG_RESULT([$][$2])
518 dnl FPTOOLS_GHC_VERSION(version)
519 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
520 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
522 dnl Test for version of installed ghc. Uses $GHC.
523 dnl [original version pinched from c2hs]
525 AC_DEFUN(FPTOOLS_GHC_VERSION,
526 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
527 ["${WithGhc-ghc}" --version > conftestghc 2>&1
528 cat conftestghc >&AC_FD_CC
529 #Useless Use Of cat award...
530 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
532 if test "[$]fptools_version_of_ghc" = ""
534 fptools_version_of_ghc='unknown'
536 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
537 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
538 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
540 if test "[$]fptools_version_of_ghc[_pl]" = ""
542 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
543 fptools_version_of_ghc[_pl]="0"
545 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
549 [$1]="[$]fptools_version_of_ghc[_all]"
551 [$1]="[$]fptools_version_of_ghc[_major]"
552 [$2]="[$]fptools_version_of_ghc[_minor]"
554 [$1]="[$]fptools_version_of_ghc[_major]"
555 [$2]="[$]fptools_version_of_ghc[_minor]"
556 [$3]="[$]fptools_version_of_ghc[_pl]"
558 [$1]="[$]fptools_version_of_ghc[_all]"
559 [$2]="[$]fptools_version_of_ghc[_major]"
560 [$3]="[$]fptools_version_of_ghc[_minor]"
561 [$4]="[$]fptools_version_of_ghc[_pl]"
567 dnl ** figure out the alignment restriction of a type
568 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
569 dnl so we can't call REQUIRE)
571 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
572 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
573 [changequote(<<, >>)dnl
574 dnl The name to #define.
575 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
576 dnl The cache variable name.
577 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
578 dnl The name of the corresponding size.
579 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
581 AC_MSG_CHECKING(alignment of $1)
582 AC_CACHE_VAL(AC_CV_NAME,
589 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
594 FILE *f=fopen("conftestval", "w");
596 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
599 AC_CV_NAME=`cat conftestval`,
600 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
601 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
602 AC_MSG_RESULT($AC_CV_NAME)
603 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
604 AC_PROVIDE($AC_TYPE_NAME)
605 undefine([AC_TYPE_NAME])dnl
606 undefine([AC_CV_NAME])dnl
607 undefine([AC_CV_SIZEOF_NAME])dnl
610 dnl ** Map an arithmetic C type to a Haskell type.
611 dnl Based on autconf's AC_CHECK_SIZEOF.
613 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
614 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
615 [changequote(<<, >>)dnl
616 dnl The name to #define.
617 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
618 dnl The cache variable name.
619 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
621 AC_MSG_CHECKING(Haskell type for $1)
622 AC_CACHE_VAL(AC_CV_NAME,
623 [AC_TRY_RUN([#include <stdio.h>
626 #ifdef HAVE_SYS_TYPES_H
627 # include <sys/types.h>
634 #ifdef HAVE_SYS_STAT_H
635 # include <sys/stat.h>
650 #ifdef HAVE_TERMIOS_H
651 # include <termios.h>
669 FILE *f=fopen("conftestval", "w");
671 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
673 ((testing)(-1) < (testing)0) ? "Int" : "Word",
677 (sizeof(testing) > sizeof(double)) ? "LDouble" :
678 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
682 }], AC_CV_NAME=`cat conftestval`,
683 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
684 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
685 AC_MSG_RESULT($AC_CV_NAME)
686 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
687 undefine([AC_TYPE_NAME])dnl
688 undefine([AC_CV_NAME])dnl
691 dnl ** figure out whether C compiler supports 'long long's
692 dnl (Closely based on Andreas Zeller's macro for testing
693 dnl for this under C++)
695 dnl If the C compiler supports `long long' types,
696 dnl define `HAVE_LONG_LONG'.
698 AC_DEFUN(FPTOOLS_C_LONG_LONG,
700 AC_REQUIRE([AC_PROG_CC])
701 AC_MSG_CHECKING(whether ${CC} supports long long types)
702 AC_CACHE_VAL(fptools_cv_have_long_long,
706 AC_TRY_COMPILE(,[long long a;],
707 fptools_cv_have_long_long=yes,
708 fptools_cv_have_long_long=no)
711 AC_MSG_RESULT($fptools_cv_have_long_long)
712 if test "$fptools_cv_have_long_long" = yes; then
713 AC_DEFINE(HAVE_LONG_LONG)
717 dnl ** Obtain the value of a C constant.
718 dnl The value will be `(-1)' if the constant is undefined.
720 dnl This is set up so that the argument can be a shell variable.
722 AC_DEFUN(FPTOOLS_CHECK_CCONST,
724 eval "cv_name=ac_cv_cconst_$1"
725 AC_MSG_CHECKING(value of $1)
726 AC_CACHE_VAL($cv_name,
727 [AC_TRY_RUN([#include <stdio.h>
731 FILE *f=fopen("conftestval", "w");
733 fprintf(f, "%d\n", $1);
736 eval "$cv_name=`cat conftestval`",
738 eval "$cv_name=-1")])dnl
739 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
740 AC_MSG_RESULT($fptools_check_cconst_result)
741 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
742 unset fptools_check_cconst_result
745 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
748 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
749 [for ac_const_name in $1
751 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
756 dnl *** Can we open files in binary mode? ***
758 AC_DEFUN(FPTOOLS_O_BINARY,
760 AC_REQUIRE([AC_PROG_CC])
761 AC_MSG_CHECKING(whether we can open files in binary mode)
762 AC_CACHE_VAL(fptools_cv_have_o_binary,
771 fptools_cv_have_o_binary=yes,
772 fptools_cv_have_o_binary=no)
775 AC_MSG_RESULT($fptools_cv_have_o_binary)
776 if test "$fptools_cv_have_o_binary" = yes; then
777 AC_DEFINE(HAVE_O_BINARY)
781 dnl *** Helper function **
783 AC_DEFUN(FPTOOLS_IN_SCOPE,
784 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
788 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
790 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
792 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
796 cat > conftest.$ac_ext <<EOF
797 dnl This sometimes fails to find confdefs.h, for some reason.
798 dnl [#]line __oline__ "[$]0"
799 [#]line __oline__ "configure"
800 #include "confdefs.h"
802 int t() { return 0; }
804 if AC_TRY_EVAL(ac_link); then
809 ifelse([$4], , , [else
819 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
821 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
823 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
824 [AC_MSG_CHECKING([for $1])
825 AC_CACHE_VAL(ac_cv_flag_$1,
826 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
827 eval "ac_cv_flag_$1=yes",
828 eval "ac_cv_flag_$1=no"
831 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
841 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
843 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
844 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
846 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
848 AC_DEFINE_UNQUOTED($ac_tr_lib)
850 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
852 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
854 AC_DEFINE_UNQUOTED($ac_tr_lib)
860 dnl check for prototypes
862 AC_DEFUN([AC_C_PROTOTYPES],
863 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
872 ac_cv_prototypes=yes,
873 ac_cv_prototypes=no)])
874 if test "$ac_cv_prototypes" = yes; then
875 AC_DEFINE([HAVE_PROTOTYPES])
879 dnl ** Check which CATALOG file we have to use with DocBook SGML.
881 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
883 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
884 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
885 dnl is set to "no". JADE is the jade executable and STYLESHEET
886 dnl a DocBook style sheet.
888 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
889 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
891 cat > conftest.sgml << EOF
892 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
896 <Author><OtherName>Test</OtherName></Author>
897 <Address>Test</Address>
898 <PubDate>Test</PubDate>
900 <Sect1><Title>Test</Title>
907 fptools_cv_sgml_catalog=no
908 if test -z "$SGML_CATALOG_FILES" ; then
909 for fptools_catalog in $4; do
910 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
911 if AC_TRY_EVAL(ac_try); then
912 fptools_cv_sgml_catalog=[$]fptools_catalog
917 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
918 fptools_cv_sgml_catalog="yes"
922 if test $fptools_cv_sgml_catalog != "no"; then
923 $1=$fptools_cv_sgml_catalog
927 dnl ######################################################################
928 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
929 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
930 dnl Search for a library defining FUNC, if it's not already available.
931 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
933 dnl ######################################################################
935 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
937 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
938 [ac_func_search_save_LIBS="$LIBS"
940 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
941 test "$ac_cv_search_$2" = "no" && for i in $3; do
942 LIBS="-l$i $6 $ac_func_search_save_LIBS"
943 AC_TRY_LINK([$1], [$2()],
944 [ac_cv_search_$2="-l$i"
947 LIBS="$ac_func_search_save_LIBS"])
948 if test "$ac_cv_search_$2" != "no"; then
949 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
955 dnl ####################### -*- Mode: M4 -*- ###########################
956 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
958 dnl This file is free software; you can redistribute it and/or modify it
959 dnl under the terms of the GNU General Public License as published by
960 dnl the Free Software Foundation; either version 2 of the License, or
961 dnl (at your option) any later version.
963 dnl This file is distributed in the hope that it will be useful, but
964 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
965 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
966 dnl General Public License for more details.
968 dnl You should have received a copy of the GNU General Public License
969 dnl along with this file; if not, write to:
971 dnl Free Software Foundation, Inc.
974 dnl Boston, MA 02111-1307, USA.
975 dnl ####################################################################
978 dnl @synopsis FPTOOLS_CHECK_LIBM
980 dnl Search for math library (typically -lm).
982 dnl The variable LIBM (which is not an output variable by default) is
983 dnl set to a value which is suitable for use in a Makefile (for example,
984 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
986 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
988 # FPTOOLS_CHECK_LIBM - check for math library
989 AC_DEFUN(FPTOOLS_CHECK_LIBM,
990 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
994 # These system don't have libm
997 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
998 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1001 AC_CHECK_LIB(m, main, LIBM="-lm")
1006 dnl ######################################################################
1007 dnl Some notes about the heavily changed OpenGL test below:
1008 dnl * Caching has been completely rewritten, but is still no perfect yet.
1009 dnl * Version detection for GL and GLU has been added.
1010 dnl ######################################################################
1012 dnl ########################### -*- Mode: M4 -*- #######################
1013 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1015 dnl This file is free software; you can redistribute it and/or modify it
1016 dnl under the terms of the GNU General Public License as published by
1017 dnl the Free Software Foundation; either version 2 of the License, or
1018 dnl (at your option) any later version.
1020 dnl This file is distributed in the hope that it will be useful, but
1021 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1022 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1023 dnl General Public License for more details.
1025 dnl You should have received a copy of the GNU General Public License
1026 dnl along with this file; if not, write to:
1028 dnl Free Software Foundation, Inc.
1031 dnl Boston, MA 02111-1307, USA.
1032 dnl ####################################################################
1034 dnl @synopsis FPTOOLS_HAVE_OPENGL
1036 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1037 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
1038 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
1040 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1041 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1044 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1045 dnl be missing) are added to the shell output variable "GL_LIBS", along
1046 dnl with any other libraries that are necessary to successfully link an
1047 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1048 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1051 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1052 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1053 dnl an OpenGL application.
1055 dnl The following shell variable (which are not output variables) are
1056 dnl also set to either "yes" or "no" (depending on which libraries were
1057 dnl found) to help you determine exactly what was found.
1064 dnl A complete little toy "Automake `make distcheck'" package of how to
1065 dnl use this macro is available at:
1067 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1069 dnl Please note that as the ac_opengl macro and the toy example evolves,
1070 dnl the version number increases, so you may have to adjust the above
1071 dnl URL accordingly.
1073 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1075 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1077 AC_REQUIRE([AC_PROG_CC])
1078 AC_REQUIRE([AC_PATH_X])
1079 AC_REQUIRE([AC_PATH_XTRA])
1080 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1082 dnl Check for Mesa first if we were asked to.
1085 Prefer Mesa over a vendor's native OpenGL library (default=no)
1087 use_Mesa=$enableval,
1090 if test x"$use_Mesa" = xyes; then
1091 GL_search_list="MesaGL GL opengl32"
1092 GLU_search_list="MesaGLU GLU glu32"
1093 GLX_search_list="MesaGLX GLX"
1095 GL_search_list="GL opengl32 MesaGL"
1096 GLU_search_list="GLU glu32 MesaGLU"
1097 GLX_search_list="GLX MesaGLX"
1103 dnl If we are running under X11 then add in the appropriate libraries.
1104 if test x"$no_x" != xyes; then
1105 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1107 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1108 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1110 GL_save_CPPFLAGS="$CPPFLAGS"
1111 CPPFLAGS="$GL_CFLAGS"
1113 GL_save_LIBS="$LIBS"
1116 dnl Including <GL/glut.h> instead of plain <GL/gl.h> avoids problems on
1117 dnl platforms like WinDoze where special headers like <windows.h> or
1118 dnl some macro trickery would be needed
1119 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1121 dnl TODO: The tests for GL features should better be cascaded and the
1122 dnl results should be cached. A new macro would be helpful here.
1124 AC_MSG_CHECKING(glTexSubImage1D)
1125 AC_TRY_LINK([#include <GL/glut.h>],
1126 [glTexSubImage1D(GL_TEXTURE_1D,0,0,2,GL_INTENSITY,GL_BYTE,(void*)0)],
1127 fptools_gl_texsubimage1d=yes,
1128 fptools_gl_texsubimage1d=no);
1129 AC_MSG_RESULT($fptools_gl_texsubimage1d)
1131 AC_MSG_CHECKING(glDrawRangeElements)
1132 AC_TRY_LINK([#include <GL/glut.h>],
1133 [glDrawRangeElements(GL_QUADS,0,0,0,GL_UNSIGNED_BYTE,(void*)0)],
1134 fptools_gl_drawrangeelements=yes,
1135 fptools_gl_drawrangeelements=no);
1136 AC_MSG_RESULT($fptools_gl_drawrangeelements)
1138 AC_MSG_CHECKING(glActiveTexture)
1139 AC_TRY_LINK([#include <GL/glut.h>],
1140 [glActiveTexture(GL_TEXTURE1)],
1141 fptools_gl_activetexture=yes,
1142 fptools_gl_activetexture=no);
1143 AC_MSG_RESULT($fptools_gl_activetexture)
1145 AC_MSG_CHECKING(glMultiDrawArrays)
1146 AC_TRY_LINK([#include <GL/glut.h>],
1147 [glMultiDrawArrays(GL_TRIANGLES, (GLint*)0, (GLsizei*)0, 0)],
1148 fptools_gl_multidrawarrays=yes,
1149 fptools_gl_multidrawarrays=no);
1150 AC_MSG_RESULT($fptools_gl_multidrawarrays)
1152 if test x"$fptools_gl_texsubimage1d" != xyes; then
1153 fptools_gl_version=1.0
1155 if test x"$fptools_gl_drawrangeelements" != xyes; then
1156 fptools_gl_version=1.1
1158 if test x"$fptools_gl_activetexture" != xyes; then
1159 fptools_gl_version=1.2
1161 if test x"$fptools_gl_multidrawarrays" != xyes; then
1162 fptools_gl_version=1.3
1164 fptools_gl_version=1.4
1169 echo "It looks like GL version ${fptools_gl_version}"
1171 dnl TODO: Cache the results of the tests for the imaging subset.
1173 AC_MSG_CHECKING(EXT_blend_color)
1174 AC_TRY_LINK([#include <GL/glut.h>],
1175 [glBlendColorEXT((GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0)],
1176 hopengl_EXT_blend_color=yes,
1177 hopengl_EXT_blend_color=no);
1178 AC_MSG_RESULT($hopengl_EXT_blend_color)
1180 AC_MSG_CHECKING(EXT_blend_minmax)
1181 AC_TRY_LINK([#include <GL/glut.h>],
1182 [glBlendEquationEXT(GL_FUNC_ADD_EXT)],
1183 hopengl_EXT_blend_minmax=yes,
1184 hopengl_EXT_blend_minmax=no);
1185 AC_MSG_RESULT($hopengl_EXT_blend_minmax)
1187 AC_MSG_CHECKING(EXT_blend_subtract)
1188 AC_TRY_LINK([#include <GL/glut.h>],
1189 [glBlendEquationEXT(GL_FUNC_SUBTRACT_EXT)],
1190 hopengl_EXT_blend_subtract=yes,
1191 hopengl_EXT_blend_subtract=no);
1192 AC_MSG_RESULT($hopengl_EXT_blend_subtract)
1194 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1196 dnl TODO: Cascade and cache...
1198 AC_MSG_CHECKING(gluGetString)
1199 AC_TRY_LINK([#include <GL/glut.h>],
1200 [gluGetString(GLU_EXTENSIONS)],
1201 fptools_glu_getstring=yes,
1202 fptools_glu_getstring=no);
1203 AC_MSG_RESULT($fptools_glu_getstring)
1205 AC_MSG_CHECKING(gluTessEndPolygon)
1206 AC_TRY_LINK([#include <GL/glut.h>],
1207 [gluTessEndPolygon((GLUtesselator*)0)],
1208 fptools_glu_tessendpolygon=yes,
1209 fptools_glu_tessendpolygon=no);
1210 AC_MSG_RESULT($fptools_glu_tessendpolygon)
1212 AC_MSG_CHECKING(gluUnProject4)
1213 AC_TRY_LINK([#include <GL/glut.h>],
1214 [gluUnProject4(0.0,0.0,0.0,0.0,(GLdouble*)0,(GLdouble*)0,(GLint*)0,0.0,0.0,(GLdouble*)0,(GLdouble*)0,(GLdouble*)0,(GLdouble*)0)],
1215 fptools_glu_unproject4=yes,
1216 fptools_glu_unproject4=no);
1217 AC_MSG_RESULT($fptools_glu_unproject4)
1219 if test x"$fptools_glu_getstring" != xyes; then
1220 fptools_glu_version=1.0
1222 if test x"$fptools_glu_tessendpolygon" != xyes; then
1223 fptools_glu_version=1.1
1225 if test x"$fptools_glu_unproject4" != xyes; then
1226 fptools_glu_version=1.2
1228 fptools_glu_version=1.3
1232 echo "It looks like GLU version ${fptools_glu_version}"
1234 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1235 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1237 if test -n "$LIBS"; then
1238 GL_LIBS="$LDFLAGS $LIBS"
1244 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1245 GL_CFLAGS="$mdl_cv_gl_cflags"
1247 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1248 GL_LIBS="$mdl_cv_gl_libs"
1251 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1252 dnl and we don't want to be global namespace polluters.
1255 LIBS="$GL_save_LIBS"
1256 CPPFLAGS="$GL_save_CPPFLAGS"
1264 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1265 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1266 dnl 'lex' is actually present along the user's PATH).
1268 AC_DEFUN(AC_PROG_LEX_STRICT,
1269 [AC_CHECK_PROG(LEX, flex, flex)
1272 AC_CHECK_PROG(LEX,lex,lex)
1273 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1278 dnl Check to see whether CC (gcc) supports a particular option.
1280 AC_DEFUN(FPTOOLS_CC_FLAG,
1282 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1283 [save_CFLAGS="$CFLAGS"
1286 AC_TRY_COMPILE(,[int main(){return(0);}],
1289 CFLAGS="$save_CFLAGS"
1291 if test "$ac_cv_cc_$2"x = "yesx"; then
1299 dnl Check to see whether 'struct msghdr' contains msg_control
1301 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1302 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1303 [AC_TRY_COMPILE([#include <sys/types.h>
1304 #include <sys/uio.h>
1305 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1306 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1307 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1308 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1310 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1314 dnl Check to see whether 'struct msghdr' contains msg_accrights
1316 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1317 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1318 [AC_TRY_COMPILE([#include <sys/types.h>
1319 #include <sys/uio.h>
1320 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1321 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1322 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1323 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1325 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl