1 dnl $Id: aclocal.m4,v 1.115 2003/03/26 12:33:11 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 dnl GNU ar needs special treatment: it appears to have problems with
341 dnl object files with the same name if you use the 's' modifier, but
342 dnl simple 'ar q' works fine, and doesn't need a separate ranlib.
343 if $ArCmdRaw --version | grep 'GNU' >/dev/null 2>/dev/null; then
346 elif $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
349 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
352 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
355 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
358 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
361 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
365 echo "I can't figure out how to use your $ArCmd"
369 case $HostPlatform in
371 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
373 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
376 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
378 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
379 ArSupportsInput='-input'
384 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
385 AC_SUBST(ArSupportsInput)
386 if test -z "$NeedRanLib"; then
388 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
396 dnl AC_SHEBANG_PERL - can we she-bang perl?
398 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
399 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
404 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
405 if test $? -ne 69; then
406 fptools_cv_shebang_perl=yes
408 fptools_cv_shebang_perl=no
414 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
415 dnl *Must* be called after AC_PROG_CC
417 AC_DEFUN(FPTOOLS_HAVE_GCC,
418 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
419 [if test -z "$GCC"; then
421 echo "You would be better off with gcc"
422 echo "Perhaps it is already installed, but not in your PATH?"
423 fptools_cv_have_gcc='no'
426 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' `"
428 fptools_cv_have_gcc='yes'
429 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
430 fptools_cv_have_gcc='no'
432 echo "your gcc version appears to be ..."
434 echo "gcc prior to 2.0 and have never worked with ghc."
435 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
436 AC_MSG_ERROR([gcc 1.X has never been supported])
440 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
445 dnl Some OSs (Mandrake Linux, in particular) configure GCC with
446 dnl -momit-leaf-frame-pointer on by default. If this is the case, we
447 dnl need to turn it off for mangling to work. The test is currently a bit
448 dnl crude, using only the version number of gcc.
450 AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
451 [AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
453 fptools_cv_gcc_needs_no_omit_lfptr='no'
454 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
455 fptools_cv_gcc_needs_no_omit_lfptr='yes')
457 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
458 AC_DEFINE(HAVE_GCC_MNO_OMIT_LFPTR)
462 dnl Small feature test for perl version. Assumes PerlCmd
463 dnl contains path to perl binary
465 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
466 [$PerlCmd -v >conftest.out 2>&1
467 if grep "version 5" conftest.out >/dev/null 2>&1; then
470 if grep "v5.6" conftest.out >/dev/null 2>&1; then
473 if grep "v5.8" conftest.out >/dev/null 2>&1; then
476 if grep "version 6" conftest.out >/dev/null 2>&1; then
479 echo "Your version of perl probably won't work."
488 dnl Getting at the right version of 'find'
489 dnl (i.e., not the MS util on a Win32 box).
491 AC_DEFUN(FPTOOLS_FIND_FIND,
493 AC_PATH_PROG(Find2Cmd, find)
494 $Find2Cmd --version > conftest.out 2>&1
495 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
496 # Encountered MS' find utility, which is not what we're after.
498 # HACK - AC_CHECK_PROG is useful here in that does let you reject
499 # an (absolute) entry in the path (Find2Cmd). It is not so useful
500 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
501 # absolute path eventually found. So, hack around this by inspecting
502 # what variables hold the abs. path & use them directly.
503 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
511 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
512 dnl values of the second argument to the result of running
513 dnl the commands given by the third. It does not cache its
514 dnl result, so it is suitable for checks which should be
517 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
518 [AC_MSG_CHECKING([$1])
520 AC_MSG_RESULT([$][$2])
524 dnl FPTOOLS_GHC_VERSION(version)
525 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
526 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
528 dnl Test for version of installed ghc. Uses $GHC.
529 dnl [original version pinched from c2hs]
531 AC_DEFUN(FPTOOLS_GHC_VERSION,
532 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
533 ["${WithGhc-ghc}" --version > conftestghc 2>&1
534 cat conftestghc >&AC_FD_CC
535 #Useless Use Of cat award...
536 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
538 if test "[$]fptools_version_of_ghc" = ""
540 fptools_version_of_ghc='unknown'
542 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
543 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
544 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
546 if test "[$]fptools_version_of_ghc[_pl]" = ""
548 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
549 fptools_version_of_ghc[_pl]="0"
551 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
555 [$1]="[$]fptools_version_of_ghc[_all]"
557 [$1]="[$]fptools_version_of_ghc[_major]"
558 [$2]="[$]fptools_version_of_ghc[_minor]"
560 [$1]="[$]fptools_version_of_ghc[_major]"
561 [$2]="[$]fptools_version_of_ghc[_minor]"
562 [$3]="[$]fptools_version_of_ghc[_pl]"
564 [$1]="[$]fptools_version_of_ghc[_all]"
565 [$2]="[$]fptools_version_of_ghc[_major]"
566 [$3]="[$]fptools_version_of_ghc[_minor]"
567 [$4]="[$]fptools_version_of_ghc[_pl]"
573 dnl ** figure out the alignment restriction of a type
574 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
575 dnl so we can't call REQUIRE)
577 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
578 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
579 [changequote(<<, >>)dnl
580 dnl The name to #define.
581 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
582 dnl The cache variable name.
583 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
584 dnl The name of the corresponding size.
585 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
587 AC_MSG_CHECKING(alignment of $1)
588 AC_CACHE_VAL(AC_CV_NAME,
595 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
600 FILE *f=fopen("conftestval", "w");
602 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
605 AC_CV_NAME=`cat conftestval`,
606 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
607 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
608 AC_MSG_RESULT($AC_CV_NAME)
609 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
610 AC_PROVIDE($AC_TYPE_NAME)
611 undefine([AC_TYPE_NAME])dnl
612 undefine([AC_CV_NAME])dnl
613 undefine([AC_CV_SIZEOF_NAME])dnl
616 dnl ** Map an arithmetic C type to a Haskell type.
617 dnl Based on autconf's AC_CHECK_SIZEOF.
619 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
620 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
621 [changequote(<<, >>)dnl
622 dnl The name to #define.
623 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
624 dnl The cache variable name.
625 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
627 AC_MSG_CHECKING(Haskell type for $1)
628 AC_CACHE_VAL(AC_CV_NAME,
629 [AC_TRY_RUN([#include <stdio.h>
632 #ifdef HAVE_SYS_TYPES_H
633 # include <sys/types.h>
640 #ifdef HAVE_SYS_STAT_H
641 # include <sys/stat.h>
656 #ifdef HAVE_TERMIOS_H
657 # include <termios.h>
672 #ifdef HAVE_SYS_RESOURCE_H
673 # include <sys/resource.h>
679 FILE *f=fopen("conftestval", "w");
681 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
683 ((testing)(-1) < (testing)0) ? "Int" : "Word",
687 (sizeof(testing) > sizeof(double)) ? "LDouble" :
688 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
692 }], AC_CV_NAME=`cat conftestval`,
693 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
694 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
695 AC_MSG_RESULT($AC_CV_NAME)
696 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
697 undefine([AC_TYPE_NAME])dnl
698 undefine([AC_CV_NAME])dnl
701 dnl ** figure out whether C compiler supports 'long long's
702 dnl (Closely based on Andreas Zeller's macro for testing
703 dnl for this under C++)
705 dnl If the C compiler supports `long long' types,
706 dnl define `HAVE_LONG_LONG'.
708 AC_DEFUN(FPTOOLS_C_LONG_LONG,
710 AC_REQUIRE([AC_PROG_CC])
711 AC_MSG_CHECKING(whether ${CC} supports long long types)
712 AC_CACHE_VAL(fptools_cv_have_long_long,
716 AC_TRY_COMPILE(,[long long a;],
717 fptools_cv_have_long_long=yes,
718 fptools_cv_have_long_long=no)
721 AC_MSG_RESULT($fptools_cv_have_long_long)
722 if test "$fptools_cv_have_long_long" = yes; then
723 AC_DEFINE(HAVE_LONG_LONG)
727 dnl ** Obtain the value of a C constant.
728 dnl The value will be `(-1)' if the constant is undefined.
730 dnl This is set up so that the argument can be a shell variable.
732 AC_DEFUN(FPTOOLS_CHECK_CCONST,
734 eval "cv_name=ac_cv_cconst_$1"
735 AC_MSG_CHECKING(value of $1)
736 AC_CACHE_VAL($cv_name,
737 [AC_TRY_RUN([#include <stdio.h>
741 FILE *f=fopen("conftestval", "w");
743 fprintf(f, "%d\n", $1);
746 eval "$cv_name=`cat conftestval`",
748 eval "$cv_name=-1")])dnl
749 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
750 AC_MSG_RESULT($fptools_check_cconst_result)
751 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
752 unset fptools_check_cconst_result
755 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
758 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
759 [for ac_const_name in $1
761 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
766 dnl *** Can we open files in binary mode? ***
768 AC_DEFUN(FPTOOLS_O_BINARY,
770 AC_REQUIRE([AC_PROG_CC])
771 AC_MSG_CHECKING(whether we can open files in binary mode)
772 AC_CACHE_VAL(fptools_cv_have_o_binary,
781 fptools_cv_have_o_binary=yes,
782 fptools_cv_have_o_binary=no)
785 AC_MSG_RESULT($fptools_cv_have_o_binary)
786 if test "$fptools_cv_have_o_binary" = yes; then
787 AC_DEFINE(HAVE_O_BINARY)
791 dnl *** Helper function **
793 AC_DEFUN(FPTOOLS_IN_SCOPE,
794 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
798 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
800 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
802 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
806 cat > conftest.$ac_ext <<EOF
807 dnl This sometimes fails to find confdefs.h, for some reason.
808 dnl [#]line __oline__ "[$]0"
809 [#]line __oline__ "configure"
810 #include "confdefs.h"
812 int t() { return 0; }
814 if AC_TRY_EVAL(ac_link); then
819 ifelse([$4], , , [else
829 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
831 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
833 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
834 [AC_MSG_CHECKING([for $1])
835 AC_CACHE_VAL(ac_cv_flag_$1,
836 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
837 eval "ac_cv_flag_$1=yes",
838 eval "ac_cv_flag_$1=no"
841 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
851 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
853 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
854 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
856 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
858 AC_DEFINE_UNQUOTED($ac_tr_lib)
860 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
862 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
864 AC_DEFINE_UNQUOTED($ac_tr_lib)
870 dnl check for prototypes
872 AC_DEFUN([AC_C_PROTOTYPES],
873 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
882 ac_cv_prototypes=yes,
883 ac_cv_prototypes=no)])
884 if test "$ac_cv_prototypes" = yes; then
885 AC_DEFINE([HAVE_PROTOTYPES])
889 dnl ** Check which CATALOG file we have to use with DocBook SGML.
891 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
893 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
894 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
895 dnl is set to "no". JADE is the jade executable and STYLESHEET
896 dnl a DocBook style sheet.
898 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
899 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
901 cat > conftest.sgml << EOF
902 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
906 <Author><OtherName>Test</OtherName></Author>
907 <Address>Test</Address>
908 <PubDate>Test</PubDate>
910 <Sect1><Title>Test</Title>
917 fptools_cv_sgml_catalog=no
918 if test -z "$SGML_CATALOG_FILES" ; then
919 for fptools_catalog in $4; do
920 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
921 if AC_TRY_EVAL(ac_try); then
922 fptools_cv_sgml_catalog=[$]fptools_catalog
927 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
928 fptools_cv_sgml_catalog="yes"
932 if test $fptools_cv_sgml_catalog != "no"; then
933 $1=$fptools_cv_sgml_catalog
937 dnl ######################################################################
938 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
939 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
940 dnl Search for a library defining FUNC, if it's not already available.
941 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
943 dnl ######################################################################
945 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
947 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
948 [ac_func_search_save_LIBS="$LIBS"
950 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
951 test "$ac_cv_search_$2" = "no" && for i in $3; do
952 LIBS="-l$i $6 $ac_func_search_save_LIBS"
953 AC_TRY_LINK([$1], [$2()],
954 [ac_cv_search_$2="-l$i"
957 LIBS="$ac_func_search_save_LIBS"])
958 if test "$ac_cv_search_$2" != "no"; then
959 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
965 dnl ####################### -*- Mode: M4 -*- ###########################
966 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
968 dnl This file is free software; you can redistribute it and/or modify it
969 dnl under the terms of the GNU General Public License as published by
970 dnl the Free Software Foundation; either version 2 of the License, or
971 dnl (at your option) any later version.
973 dnl This file is distributed in the hope that it will be useful, but
974 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
975 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
976 dnl General Public License for more details.
978 dnl You should have received a copy of the GNU General Public License
979 dnl along with this file; if not, write to:
981 dnl Free Software Foundation, Inc.
984 dnl Boston, MA 02111-1307, USA.
985 dnl ####################################################################
988 dnl @synopsis FPTOOLS_CHECK_LIBM
990 dnl Search for math library (typically -lm).
992 dnl The variable LIBM (which is not an output variable by default) is
993 dnl set to a value which is suitable for use in a Makefile (for example,
994 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
996 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
998 # FPTOOLS_CHECK_LIBM - check for math library
999 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1000 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1004 # These system don't have libm
1007 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1008 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1011 AC_CHECK_LIB(m, main, LIBM="-lm")
1016 dnl ######################################################################
1017 dnl Some notes about the heavily changed OpenGL test below:
1018 dnl * Caching has been completely rewritten, but is still no perfect yet.
1019 dnl * Version detection for GL and GLU has been added.
1020 dnl ######################################################################
1022 dnl ########################### -*- Mode: M4 -*- #######################
1023 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1025 dnl This file is free software; you can redistribute it and/or modify it
1026 dnl under the terms of the GNU General Public License as published by
1027 dnl the Free Software Foundation; either version 2 of the License, or
1028 dnl (at your option) any later version.
1030 dnl This file is distributed in the hope that it will be useful, but
1031 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1032 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1033 dnl General Public License for more details.
1035 dnl You should have received a copy of the GNU General Public License
1036 dnl along with this file; if not, write to:
1038 dnl Free Software Foundation, Inc.
1041 dnl Boston, MA 02111-1307, USA.
1042 dnl ####################################################################
1044 dnl @synopsis FPTOOLS_HAVE_OPENGL
1046 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1047 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
1048 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
1050 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1051 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1054 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1055 dnl be missing) are added to the shell output variable "GL_LIBS", along
1056 dnl with any other libraries that are necessary to successfully link an
1057 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1058 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1061 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1062 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1063 dnl an OpenGL application.
1065 dnl The following shell variable (which are not output variables) are
1066 dnl also set to either "yes" or "no" (depending on which libraries were
1067 dnl found) to help you determine exactly what was found.
1074 dnl A complete little toy "Automake `make distcheck'" package of how to
1075 dnl use this macro is available at:
1077 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1079 dnl Please note that as the ac_opengl macro and the toy example evolves,
1080 dnl the version number increases, so you may have to adjust the above
1081 dnl URL accordingly.
1083 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1085 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1087 AC_REQUIRE([AC_PROG_CC])
1088 AC_REQUIRE([AC_PATH_X])
1089 AC_REQUIRE([AC_PATH_XTRA])
1090 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1092 dnl Check for Mesa first if we were asked to.
1095 Prefer Mesa over a vendor's native OpenGL library (default=no)
1097 use_Mesa=$enableval,
1100 if test x"$use_Mesa" = xyes; then
1101 GL_search_list="MesaGL GL opengl32"
1102 GLU_search_list="MesaGLU GLU glu32"
1103 GLX_search_list="MesaGLX GLX"
1105 GL_search_list="GL opengl32 MesaGL"
1106 GLU_search_list="GLU glu32 MesaGLU"
1107 GLX_search_list="GLX MesaGLX"
1113 dnl If we are running under X11 then add in the appropriate libraries.
1114 if test x"$no_x" != xyes; then
1115 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1117 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1118 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1120 GL_save_CPPFLAGS="$CPPFLAGS"
1121 CPPFLAGS="$GL_CFLAGS"
1123 GL_save_LIBS="$LIBS"
1126 dnl Including <GL/glut.h> instead of plain <GL/gl.h> avoids problems on
1127 dnl platforms like WinDoze where special headers like <windows.h> or
1128 dnl some macro trickery would be needed
1129 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1131 dnl TODO: The tests for GL features should better be cascaded and the
1132 dnl results should be cached. A new macro would be helpful here.
1134 AC_MSG_CHECKING(glTexSubImage1D)
1135 AC_TRY_LINK([#include <GL/glut.h>],
1136 [glTexSubImage1D(GL_TEXTURE_1D,0,0,2,GL_INTENSITY,GL_BYTE,(void*)0)],
1137 fptools_gl_texsubimage1d=yes,
1138 fptools_gl_texsubimage1d=no);
1139 AC_MSG_RESULT($fptools_gl_texsubimage1d)
1141 AC_MSG_CHECKING(glDrawRangeElements)
1142 AC_TRY_LINK([#include <GL/glut.h>],
1143 [glDrawRangeElements(GL_QUADS,0,0,0,GL_UNSIGNED_BYTE,(void*)0)],
1144 fptools_gl_drawrangeelements=yes,
1145 fptools_gl_drawrangeelements=no);
1146 AC_MSG_RESULT($fptools_gl_drawrangeelements)
1148 AC_MSG_CHECKING(glActiveTexture)
1149 AC_TRY_LINK([#include <GL/glut.h>],
1150 [glActiveTexture(GL_TEXTURE1)],
1151 fptools_gl_activetexture=yes,
1152 fptools_gl_activetexture=no);
1153 AC_MSG_RESULT($fptools_gl_activetexture)
1155 AC_MSG_CHECKING(glMultiDrawArrays)
1156 AC_TRY_LINK([#include <GL/glut.h>],
1157 [glMultiDrawArrays(GL_TRIANGLES, (GLint*)0, (GLsizei*)0, 0)],
1158 fptools_gl_multidrawarrays=yes,
1159 fptools_gl_multidrawarrays=no);
1160 AC_MSG_RESULT($fptools_gl_multidrawarrays)
1162 if test x"$fptools_gl_texsubimage1d" != xyes; then
1163 fptools_gl_version=1.0
1165 if test x"$fptools_gl_drawrangeelements" != xyes; then
1166 fptools_gl_version=1.1
1168 if test x"$fptools_gl_activetexture" != xyes; then
1169 fptools_gl_version=1.2
1171 if test x"$fptools_gl_multidrawarrays" != xyes; then
1172 fptools_gl_version=1.3
1174 fptools_gl_version=1.4
1179 echo "It looks like GL version ${fptools_gl_version}"
1181 dnl TODO: Cache the results of the tests for the imaging subset.
1183 AC_MSG_CHECKING(EXT_blend_color)
1184 AC_TRY_LINK([#include <GL/glut.h>],
1185 [glBlendColorEXT((GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0)],
1186 hopengl_EXT_blend_color=yes,
1187 hopengl_EXT_blend_color=no);
1188 AC_MSG_RESULT($hopengl_EXT_blend_color)
1190 AC_MSG_CHECKING(EXT_blend_minmax)
1191 AC_TRY_LINK([#include <GL/glut.h>],
1192 [glBlendEquationEXT(GL_FUNC_ADD_EXT)],
1193 hopengl_EXT_blend_minmax=yes,
1194 hopengl_EXT_blend_minmax=no);
1195 AC_MSG_RESULT($hopengl_EXT_blend_minmax)
1197 AC_MSG_CHECKING(EXT_blend_subtract)
1198 AC_TRY_LINK([#include <GL/glut.h>],
1199 [glBlendEquationEXT(GL_FUNC_SUBTRACT_EXT)],
1200 hopengl_EXT_blend_subtract=yes,
1201 hopengl_EXT_blend_subtract=no);
1202 AC_MSG_RESULT($hopengl_EXT_blend_subtract)
1204 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1206 dnl TODO: Cascade and cache...
1208 AC_MSG_CHECKING(gluGetString)
1209 AC_TRY_LINK([#include <GL/glut.h>],
1210 [gluGetString(GLU_EXTENSIONS)],
1211 fptools_glu_getstring=yes,
1212 fptools_glu_getstring=no);
1213 AC_MSG_RESULT($fptools_glu_getstring)
1215 AC_MSG_CHECKING(gluTessEndPolygon)
1216 AC_TRY_LINK([#include <GL/glut.h>],
1217 [gluTessEndPolygon((GLUtesselator*)0)],
1218 fptools_glu_tessendpolygon=yes,
1219 fptools_glu_tessendpolygon=no);
1220 AC_MSG_RESULT($fptools_glu_tessendpolygon)
1222 AC_MSG_CHECKING(gluUnProject4)
1223 AC_TRY_LINK([#include <GL/glut.h>],
1224 [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)],
1225 fptools_glu_unproject4=yes,
1226 fptools_glu_unproject4=no);
1227 AC_MSG_RESULT($fptools_glu_unproject4)
1229 if test x"$fptools_glu_getstring" != xyes; then
1230 fptools_glu_version=1.0
1232 if test x"$fptools_glu_tessendpolygon" != xyes; then
1233 fptools_glu_version=1.1
1235 if test x"$fptools_glu_unproject4" != xyes; then
1236 fptools_glu_version=1.2
1238 fptools_glu_version=1.3
1242 echo "It looks like GLU version ${fptools_glu_version}"
1244 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1245 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1247 if test -n "$LIBS"; then
1248 GL_LIBS="$LDFLAGS $LIBS"
1254 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1255 GL_CFLAGS="$mdl_cv_gl_cflags"
1257 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1258 GL_LIBS="$mdl_cv_gl_libs"
1261 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1262 dnl and we don't want to be global namespace polluters.
1265 LIBS="$GL_save_LIBS"
1266 CPPFLAGS="$GL_save_CPPFLAGS"
1274 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1275 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1276 dnl 'lex' is actually present along the user's PATH).
1278 AC_DEFUN(AC_PROG_LEX_STRICT,
1279 [AC_CHECK_PROG(LEX, flex, flex)
1282 AC_CHECK_PROG(LEX,lex,lex)
1283 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1288 dnl Check to see whether CC (gcc) supports a particular option.
1290 AC_DEFUN(FPTOOLS_CC_FLAG,
1292 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1293 [save_CFLAGS="$CFLAGS"
1296 AC_TRY_COMPILE(,[int main(){return(0);}],
1299 CFLAGS="$save_CFLAGS"
1301 if test "$ac_cv_cc_$2"x = "yesx"; then
1309 dnl Check to see whether 'struct msghdr' contains msg_control
1311 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1312 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1313 [AC_TRY_COMPILE([#include <sys/types.h>
1314 #include <sys/uio.h>
1315 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1316 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1317 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1318 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1320 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1324 dnl Check to see whether 'struct msghdr' contains msg_accrights
1326 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1327 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1328 [AC_TRY_COMPILE([#include <sys/types.h>
1329 #include <sys/uio.h>
1330 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1331 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1332 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1333 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1335 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl