1 dnl $Id: aclocal.m4,v 1.116 2003/05/17 14:49:45 reid 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 Greencard and version.
193 AC_DEFUN(FPTOOLS_GREENCARD,
195 AC_PATH_PROG(GreencardCmd,green-card)
196 AC_CACHE_CHECK([for version of green-card], fptools_cv_greencard_version,
198 [if test x"$GreencardCmd" != x; then
199 fptools_cv_greencard_version="`$GreencardCmd --version |
200 grep 'version' | sed -e 's/green-card. version \([^ ]*\).*/\1/g'`"
202 fptools_cv_greencard_version=""
206 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_greencard_version],-lt,$1,
207 [AC_MSG_ERROR([green-card version $1 or later is required (found '$fptools_cv_greencard_version')])])dnl
208 GreencardVersion=$fptools_cv_greencard_version
209 AC_SUBST(GreencardVersion)
213 dnl Check for Happy and version. If we're building GHC, then we need
214 dnl at least Happy version 1.13. If there's no installed Happy, we look
215 dnl for a happy source tree and point the build system at that instead.
217 AC_DEFUN(FPTOOLS_HAPPY,
219 if test -d $srcdir/happy; then
220 SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
222 if test x"$UseSrcTreeHappy" = xYES; then
223 HappyCmd=$SrcTreeHappyCmd
225 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
227 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
229 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
230 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
231 elif test x"$HappyCmd" != x; then
232 fptools_cv_happy_version="`$HappyCmd -v |
233 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
235 fptools_cv_happy_version="";
239 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
240 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13],
241 [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
243 HappyVersion=$fptools_cv_happy_version;
244 AC_SUBST(HappyVersion)
248 dnl Check for Haddock and version. If there's no installed Haddock, we look
249 dnl for a haddock source tree and point the build system at that instead.
251 AC_DEFUN(FPTOOLS_HADDOCK,
253 if test -d $srcdir/haddock; then
254 SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
256 if test x"$UseSrcTreeHaddock" = xYES; then
257 HaddockCmd=$SrcTreeHaddockCmd
259 AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
261 dnl Darn, I forgot to make Haddock print out its version number when
262 dnl invoked with -v. We could try generating some HTML and grepping
263 dnl through that to find the version number, but I think we'll make
264 dnl do without it for now.
268 dnl What's the best way of doing context diffs?
270 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
272 AC_DEFUN(FPTOOLS_PROG_DIFF,
273 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
274 [echo foo > conftest1
276 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
277 fptools_cv_context_diffs='diff -C 1'
279 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
280 fptools_cv_context_diffs='diff -c1'
282 echo "Can't figure out how to do context diffs."
283 echo "Neither \`diff -C 1' nor \`diff -c1' works."
287 rm -f conftest1 conftest2
289 ContextDiffCmd=$fptools_cv_context_diffs
290 AC_SUBST(ContextDiffCmd)
294 dnl Check whether ld supports -x
296 AC_DEFUN(FPTOOLS_LD_X,
297 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
299 echo 'foo() {}' > conftest.c
300 ${CC-cc} -c conftest.c
301 if ${LdCmd} -r -x -o foo.o conftest.o; then
306 rm -rf conftest.c conftest.o foo.o
308 if test "$fptools_cv_ld_x" = yes; then
317 dnl Finding the Right Yacc
319 AC_DEFUN(FPTOOLS_PROG_YACCY,
321 if test "$YACC" = "yacc"; then
322 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
323 [AC_CHECK_PROG(WhatCmd, what, what, :)
324 $WhatCmd $YACC > conftest.out
325 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
326 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
327 if test -f /usr/lang/yacc; then
328 echo "I'm going to use /usr/lang/yacc instead"
329 ac_cv_prog_yacc=/usr/lang/yacc
331 echo "I'm assuming the worst...no parser generator at all"
334 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
335 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
336 echo "I'm assuming the worst...no parser generator at all"
339 ac_cv_prog_yacc=$YACC
344 ac_cv_prog_yacc=$YACC
346 YaccCmd=$ac_cv_prog_yacc
350 dnl *** Checking for ar and its arguments + whether we need ranlib.
352 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
353 dnl On Digital UNIX, we test for the -Z (compress) and
354 dnl -input (take list of files from external file) flags.
356 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
357 [AC_PATH_PROG(ArCmdRaw,ar)
358 if test -z "$ArCmdRaw"; then
359 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
362 dnl GNU ar needs special treatment: it appears to have problems with
363 dnl object files with the same name if you use the 's' modifier, but
364 dnl simple 'ar q' works fine, and doesn't need a separate ranlib.
365 if $ArCmdRaw --version | grep 'GNU' >/dev/null 2>/dev/null; then
368 elif $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
371 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
374 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
377 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
380 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
383 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
387 echo "I can't figure out how to use your $ArCmd"
391 case $HostPlatform in
393 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
395 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
398 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
400 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
401 ArSupportsInput='-input'
406 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
407 AC_SUBST(ArSupportsInput)
408 if test -z "$NeedRanLib"; then
410 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
418 dnl AC_SHEBANG_PERL - can we she-bang perl?
420 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
421 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
426 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
427 if test $? -ne 69; then
428 fptools_cv_shebang_perl=yes
430 fptools_cv_shebang_perl=no
436 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
437 dnl *Must* be called after AC_PROG_CC
439 AC_DEFUN(FPTOOLS_HAVE_GCC,
440 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
441 [if test -z "$GCC"; then
443 echo "You would be better off with gcc"
444 echo "Perhaps it is already installed, but not in your PATH?"
445 fptools_cv_have_gcc='no'
448 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' `"
450 fptools_cv_have_gcc='yes'
451 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
452 fptools_cv_have_gcc='no'
454 echo "your gcc version appears to be ..."
456 echo "gcc prior to 2.0 and have never worked with ghc."
457 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
458 AC_MSG_ERROR([gcc 1.X has never been supported])
462 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
467 dnl Some OSs (Mandrake Linux, in particular) configure GCC with
468 dnl -momit-leaf-frame-pointer on by default. If this is the case, we
469 dnl need to turn it off for mangling to work. The test is currently a bit
470 dnl crude, using only the version number of gcc.
472 AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
473 [AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
475 fptools_cv_gcc_needs_no_omit_lfptr='no'
476 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
477 fptools_cv_gcc_needs_no_omit_lfptr='yes')
479 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
480 AC_DEFINE(HAVE_GCC_MNO_OMIT_LFPTR)
484 dnl Small feature test for perl version. Assumes PerlCmd
485 dnl contains path to perl binary
487 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
488 [$PerlCmd -v >conftest.out 2>&1
489 if grep "version 5" conftest.out >/dev/null 2>&1; then
492 if grep "v5.6" conftest.out >/dev/null 2>&1; then
495 if grep "v5.8" conftest.out >/dev/null 2>&1; then
498 if grep "version 6" conftest.out >/dev/null 2>&1; then
501 echo "Your version of perl probably won't work."
510 dnl Getting at the right version of 'find'
511 dnl (i.e., not the MS util on a Win32 box).
513 AC_DEFUN(FPTOOLS_FIND_FIND,
515 AC_PATH_PROG(Find2Cmd, find)
516 $Find2Cmd --version > conftest.out 2>&1
517 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
518 # Encountered MS' find utility, which is not what we're after.
520 # HACK - AC_CHECK_PROG is useful here in that does let you reject
521 # an (absolute) entry in the path (Find2Cmd). It is not so useful
522 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
523 # absolute path eventually found. So, hack around this by inspecting
524 # what variables hold the abs. path & use them directly.
525 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
533 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
534 dnl values of the second argument to the result of running
535 dnl the commands given by the third. It does not cache its
536 dnl result, so it is suitable for checks which should be
539 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
540 [AC_MSG_CHECKING([$1])
542 AC_MSG_RESULT([$][$2])
546 dnl FPTOOLS_GHC_VERSION(version)
547 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
548 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
550 dnl Test for version of installed ghc. Uses $GHC.
551 dnl [original version pinched from c2hs]
553 AC_DEFUN(FPTOOLS_GHC_VERSION,
554 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
555 ["${WithGhc-ghc}" --version > conftestghc 2>&1
556 cat conftestghc >&AC_FD_CC
557 #Useless Use Of cat award...
558 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
560 if test "[$]fptools_version_of_ghc" = ""
562 fptools_version_of_ghc='unknown'
564 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
565 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
566 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
568 if test "[$]fptools_version_of_ghc[_pl]" = ""
570 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
571 fptools_version_of_ghc[_pl]="0"
573 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
577 [$1]="[$]fptools_version_of_ghc[_all]"
579 [$1]="[$]fptools_version_of_ghc[_major]"
580 [$2]="[$]fptools_version_of_ghc[_minor]"
582 [$1]="[$]fptools_version_of_ghc[_major]"
583 [$2]="[$]fptools_version_of_ghc[_minor]"
584 [$3]="[$]fptools_version_of_ghc[_pl]"
586 [$1]="[$]fptools_version_of_ghc[_all]"
587 [$2]="[$]fptools_version_of_ghc[_major]"
588 [$3]="[$]fptools_version_of_ghc[_minor]"
589 [$4]="[$]fptools_version_of_ghc[_pl]"
595 dnl ** figure out the alignment restriction of a type
596 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
597 dnl so we can't call REQUIRE)
599 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
600 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
601 [changequote(<<, >>)dnl
602 dnl The name to #define.
603 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
604 dnl The cache variable name.
605 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
606 dnl The name of the corresponding size.
607 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
609 AC_MSG_CHECKING(alignment of $1)
610 AC_CACHE_VAL(AC_CV_NAME,
617 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
622 FILE *f=fopen("conftestval", "w");
624 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
627 AC_CV_NAME=`cat conftestval`,
628 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
629 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
630 AC_MSG_RESULT($AC_CV_NAME)
631 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
632 AC_PROVIDE($AC_TYPE_NAME)
633 undefine([AC_TYPE_NAME])dnl
634 undefine([AC_CV_NAME])dnl
635 undefine([AC_CV_SIZEOF_NAME])dnl
638 dnl ** Map an arithmetic C type to a Haskell type.
639 dnl Based on autconf's AC_CHECK_SIZEOF.
641 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
642 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
643 [changequote(<<, >>)dnl
644 dnl The name to #define.
645 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
646 dnl The cache variable name.
647 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
649 AC_MSG_CHECKING(Haskell type for $1)
650 AC_CACHE_VAL(AC_CV_NAME,
651 [AC_TRY_RUN([#include <stdio.h>
654 #ifdef HAVE_SYS_TYPES_H
655 # include <sys/types.h>
662 #ifdef HAVE_SYS_STAT_H
663 # include <sys/stat.h>
678 #ifdef HAVE_TERMIOS_H
679 # include <termios.h>
694 #ifdef HAVE_SYS_RESOURCE_H
695 # include <sys/resource.h>
701 FILE *f=fopen("conftestval", "w");
703 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
705 ((testing)(-1) < (testing)0) ? "Int" : "Word",
709 (sizeof(testing) > sizeof(double)) ? "LDouble" :
710 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
714 }], AC_CV_NAME=`cat conftestval`,
715 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
716 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
717 AC_MSG_RESULT($AC_CV_NAME)
718 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
719 undefine([AC_TYPE_NAME])dnl
720 undefine([AC_CV_NAME])dnl
723 dnl ** figure out whether C compiler supports 'long long's
724 dnl (Closely based on Andreas Zeller's macro for testing
725 dnl for this under C++)
727 dnl If the C compiler supports `long long' types,
728 dnl define `HAVE_LONG_LONG'.
730 AC_DEFUN(FPTOOLS_C_LONG_LONG,
732 AC_REQUIRE([AC_PROG_CC])
733 AC_MSG_CHECKING(whether ${CC} supports long long types)
734 AC_CACHE_VAL(fptools_cv_have_long_long,
738 AC_TRY_COMPILE(,[long long a;],
739 fptools_cv_have_long_long=yes,
740 fptools_cv_have_long_long=no)
743 AC_MSG_RESULT($fptools_cv_have_long_long)
744 if test "$fptools_cv_have_long_long" = yes; then
745 AC_DEFINE(HAVE_LONG_LONG)
749 dnl ** Obtain the value of a C constant.
750 dnl The value will be `(-1)' if the constant is undefined.
752 dnl This is set up so that the argument can be a shell variable.
754 AC_DEFUN(FPTOOLS_CHECK_CCONST,
756 eval "cv_name=ac_cv_cconst_$1"
757 AC_MSG_CHECKING(value of $1)
758 AC_CACHE_VAL($cv_name,
759 [AC_TRY_RUN([#include <stdio.h>
763 FILE *f=fopen("conftestval", "w");
765 fprintf(f, "%d\n", $1);
768 eval "$cv_name=`cat conftestval`",
770 eval "$cv_name=-1")])dnl
771 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
772 AC_MSG_RESULT($fptools_check_cconst_result)
773 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
774 unset fptools_check_cconst_result
777 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
780 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
781 [for ac_const_name in $1
783 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
788 dnl *** Can we open files in binary mode? ***
790 AC_DEFUN(FPTOOLS_O_BINARY,
792 AC_REQUIRE([AC_PROG_CC])
793 AC_MSG_CHECKING(whether we can open files in binary mode)
794 AC_CACHE_VAL(fptools_cv_have_o_binary,
803 fptools_cv_have_o_binary=yes,
804 fptools_cv_have_o_binary=no)
807 AC_MSG_RESULT($fptools_cv_have_o_binary)
808 if test "$fptools_cv_have_o_binary" = yes; then
809 AC_DEFINE(HAVE_O_BINARY)
813 dnl *** Helper function **
815 AC_DEFUN(FPTOOLS_IN_SCOPE,
816 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
820 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
822 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
824 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
828 cat > conftest.$ac_ext <<EOF
829 dnl This sometimes fails to find confdefs.h, for some reason.
830 dnl [#]line __oline__ "[$]0"
831 [#]line __oline__ "configure"
832 #include "confdefs.h"
834 int t() { return 0; }
836 if AC_TRY_EVAL(ac_link); then
841 ifelse([$4], , , [else
851 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
853 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
855 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
856 [AC_MSG_CHECKING([for $1])
857 AC_CACHE_VAL(ac_cv_flag_$1,
858 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
859 eval "ac_cv_flag_$1=yes",
860 eval "ac_cv_flag_$1=no"
863 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
873 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
875 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
876 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
878 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
880 AC_DEFINE_UNQUOTED($ac_tr_lib)
882 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
884 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
886 AC_DEFINE_UNQUOTED($ac_tr_lib)
892 dnl check for prototypes
894 AC_DEFUN([AC_C_PROTOTYPES],
895 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
904 ac_cv_prototypes=yes,
905 ac_cv_prototypes=no)])
906 if test "$ac_cv_prototypes" = yes; then
907 AC_DEFINE([HAVE_PROTOTYPES])
911 dnl ** Check which CATALOG file we have to use with DocBook SGML.
913 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
915 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
916 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
917 dnl is set to "no". JADE is the jade executable and STYLESHEET
918 dnl a DocBook style sheet.
920 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
921 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
923 cat > conftest.sgml << EOF
924 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
928 <Author><OtherName>Test</OtherName></Author>
929 <Address>Test</Address>
930 <PubDate>Test</PubDate>
932 <Sect1><Title>Test</Title>
939 fptools_cv_sgml_catalog=no
940 if test -z "$SGML_CATALOG_FILES" ; then
941 for fptools_catalog in $4; do
942 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
943 if AC_TRY_EVAL(ac_try); then
944 fptools_cv_sgml_catalog=[$]fptools_catalog
949 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
950 fptools_cv_sgml_catalog="yes"
954 if test $fptools_cv_sgml_catalog != "no"; then
955 $1=$fptools_cv_sgml_catalog
959 dnl ######################################################################
960 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
961 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
962 dnl Search for a library defining FUNC, if it's not already available.
963 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
965 dnl ######################################################################
967 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
969 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
970 [ac_func_search_save_LIBS="$LIBS"
972 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
973 test "$ac_cv_search_$2" = "no" && for i in $3; do
974 LIBS="-l$i $6 $ac_func_search_save_LIBS"
975 AC_TRY_LINK([$1], [$2()],
976 [ac_cv_search_$2="-l$i"
979 LIBS="$ac_func_search_save_LIBS"])
980 if test "$ac_cv_search_$2" != "no"; then
981 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
987 dnl ####################### -*- Mode: M4 -*- ###########################
988 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
990 dnl This file is free software; you can redistribute it and/or modify it
991 dnl under the terms of the GNU General Public License as published by
992 dnl the Free Software Foundation; either version 2 of the License, or
993 dnl (at your option) any later version.
995 dnl This file is distributed in the hope that it will be useful, but
996 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
997 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
998 dnl General Public License for more details.
1000 dnl You should have received a copy of the GNU General Public License
1001 dnl along with this file; if not, write to:
1003 dnl Free Software Foundation, Inc.
1006 dnl Boston, MA 02111-1307, USA.
1007 dnl ####################################################################
1010 dnl @synopsis FPTOOLS_CHECK_LIBM
1012 dnl Search for math library (typically -lm).
1014 dnl The variable LIBM (which is not an output variable by default) is
1015 dnl set to a value which is suitable for use in a Makefile (for example,
1016 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1018 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1020 # FPTOOLS_CHECK_LIBM - check for math library
1021 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1022 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1026 # These system don't have libm
1029 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1030 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1033 AC_CHECK_LIB(m, main, LIBM="-lm")
1038 dnl ######################################################################
1039 dnl Some notes about the heavily changed OpenGL test below:
1040 dnl * Caching has been completely rewritten, but is still no perfect yet.
1041 dnl * Version detection for GL and GLU has been added.
1042 dnl ######################################################################
1044 dnl ########################### -*- Mode: M4 -*- #######################
1045 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1047 dnl This file is free software; you can redistribute it and/or modify it
1048 dnl under the terms of the GNU General Public License as published by
1049 dnl the Free Software Foundation; either version 2 of the License, or
1050 dnl (at your option) any later version.
1052 dnl This file is distributed in the hope that it will be useful, but
1053 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1054 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1055 dnl General Public License for more details.
1057 dnl You should have received a copy of the GNU General Public License
1058 dnl along with this file; if not, write to:
1060 dnl Free Software Foundation, Inc.
1063 dnl Boston, MA 02111-1307, USA.
1064 dnl ####################################################################
1066 dnl @synopsis FPTOOLS_HAVE_OPENGL
1068 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1069 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
1070 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
1072 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1073 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1076 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1077 dnl be missing) are added to the shell output variable "GL_LIBS", along
1078 dnl with any other libraries that are necessary to successfully link an
1079 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1080 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1083 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1084 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1085 dnl an OpenGL application.
1087 dnl The following shell variable (which are not output variables) are
1088 dnl also set to either "yes" or "no" (depending on which libraries were
1089 dnl found) to help you determine exactly what was found.
1096 dnl A complete little toy "Automake `make distcheck'" package of how to
1097 dnl use this macro is available at:
1099 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1101 dnl Please note that as the ac_opengl macro and the toy example evolves,
1102 dnl the version number increases, so you may have to adjust the above
1103 dnl URL accordingly.
1105 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1107 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1109 AC_REQUIRE([AC_PROG_CC])
1110 AC_REQUIRE([AC_PATH_X])
1111 AC_REQUIRE([AC_PATH_XTRA])
1112 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1114 dnl Check for Mesa first if we were asked to.
1117 Prefer Mesa over a vendor's native OpenGL library (default=no)
1119 use_Mesa=$enableval,
1122 if test x"$use_Mesa" = xyes; then
1123 GL_search_list="MesaGL GL opengl32"
1124 GLU_search_list="MesaGLU GLU glu32"
1125 GLX_search_list="MesaGLX GLX"
1127 GL_search_list="GL opengl32 MesaGL"
1128 GLU_search_list="GLU glu32 MesaGLU"
1129 GLX_search_list="GLX MesaGLX"
1135 dnl If we are running under X11 then add in the appropriate libraries.
1136 if test x"$no_x" != xyes; then
1137 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1139 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1140 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1142 GL_save_CPPFLAGS="$CPPFLAGS"
1143 CPPFLAGS="$GL_CFLAGS"
1145 GL_save_LIBS="$LIBS"
1148 dnl Including <GL/glut.h> instead of plain <GL/gl.h> avoids problems on
1149 dnl platforms like WinDoze where special headers like <windows.h> or
1150 dnl some macro trickery would be needed
1151 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1153 dnl TODO: The tests for GL features should better be cascaded and the
1154 dnl results should be cached. A new macro would be helpful here.
1156 AC_MSG_CHECKING(glTexSubImage1D)
1157 AC_TRY_LINK([#include <GL/glut.h>],
1158 [glTexSubImage1D(GL_TEXTURE_1D,0,0,2,GL_INTENSITY,GL_BYTE,(void*)0)],
1159 fptools_gl_texsubimage1d=yes,
1160 fptools_gl_texsubimage1d=no);
1161 AC_MSG_RESULT($fptools_gl_texsubimage1d)
1163 AC_MSG_CHECKING(glDrawRangeElements)
1164 AC_TRY_LINK([#include <GL/glut.h>],
1165 [glDrawRangeElements(GL_QUADS,0,0,0,GL_UNSIGNED_BYTE,(void*)0)],
1166 fptools_gl_drawrangeelements=yes,
1167 fptools_gl_drawrangeelements=no);
1168 AC_MSG_RESULT($fptools_gl_drawrangeelements)
1170 AC_MSG_CHECKING(glActiveTexture)
1171 AC_TRY_LINK([#include <GL/glut.h>],
1172 [glActiveTexture(GL_TEXTURE1)],
1173 fptools_gl_activetexture=yes,
1174 fptools_gl_activetexture=no);
1175 AC_MSG_RESULT($fptools_gl_activetexture)
1177 AC_MSG_CHECKING(glMultiDrawArrays)
1178 AC_TRY_LINK([#include <GL/glut.h>],
1179 [glMultiDrawArrays(GL_TRIANGLES, (GLint*)0, (GLsizei*)0, 0)],
1180 fptools_gl_multidrawarrays=yes,
1181 fptools_gl_multidrawarrays=no);
1182 AC_MSG_RESULT($fptools_gl_multidrawarrays)
1184 if test x"$fptools_gl_texsubimage1d" != xyes; then
1185 fptools_gl_version=1.0
1187 if test x"$fptools_gl_drawrangeelements" != xyes; then
1188 fptools_gl_version=1.1
1190 if test x"$fptools_gl_activetexture" != xyes; then
1191 fptools_gl_version=1.2
1193 if test x"$fptools_gl_multidrawarrays" != xyes; then
1194 fptools_gl_version=1.3
1196 fptools_gl_version=1.4
1201 echo "It looks like GL version ${fptools_gl_version}"
1203 dnl TODO: Cache the results of the tests for the imaging subset.
1205 AC_MSG_CHECKING(EXT_blend_color)
1206 AC_TRY_LINK([#include <GL/glut.h>],
1207 [glBlendColorEXT((GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0)],
1208 hopengl_EXT_blend_color=yes,
1209 hopengl_EXT_blend_color=no);
1210 AC_MSG_RESULT($hopengl_EXT_blend_color)
1212 AC_MSG_CHECKING(EXT_blend_minmax)
1213 AC_TRY_LINK([#include <GL/glut.h>],
1214 [glBlendEquationEXT(GL_FUNC_ADD_EXT)],
1215 hopengl_EXT_blend_minmax=yes,
1216 hopengl_EXT_blend_minmax=no);
1217 AC_MSG_RESULT($hopengl_EXT_blend_minmax)
1219 AC_MSG_CHECKING(EXT_blend_subtract)
1220 AC_TRY_LINK([#include <GL/glut.h>],
1221 [glBlendEquationEXT(GL_FUNC_SUBTRACT_EXT)],
1222 hopengl_EXT_blend_subtract=yes,
1223 hopengl_EXT_blend_subtract=no);
1224 AC_MSG_RESULT($hopengl_EXT_blend_subtract)
1226 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1228 dnl TODO: Cascade and cache...
1230 AC_MSG_CHECKING(gluGetString)
1231 AC_TRY_LINK([#include <GL/glut.h>],
1232 [gluGetString(GLU_EXTENSIONS)],
1233 fptools_glu_getstring=yes,
1234 fptools_glu_getstring=no);
1235 AC_MSG_RESULT($fptools_glu_getstring)
1237 AC_MSG_CHECKING(gluTessEndPolygon)
1238 AC_TRY_LINK([#include <GL/glut.h>],
1239 [gluTessEndPolygon((GLUtesselator*)0)],
1240 fptools_glu_tessendpolygon=yes,
1241 fptools_glu_tessendpolygon=no);
1242 AC_MSG_RESULT($fptools_glu_tessendpolygon)
1244 AC_MSG_CHECKING(gluUnProject4)
1245 AC_TRY_LINK([#include <GL/glut.h>],
1246 [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)],
1247 fptools_glu_unproject4=yes,
1248 fptools_glu_unproject4=no);
1249 AC_MSG_RESULT($fptools_glu_unproject4)
1251 if test x"$fptools_glu_getstring" != xyes; then
1252 fptools_glu_version=1.0
1254 if test x"$fptools_glu_tessendpolygon" != xyes; then
1255 fptools_glu_version=1.1
1257 if test x"$fptools_glu_unproject4" != xyes; then
1258 fptools_glu_version=1.2
1260 fptools_glu_version=1.3
1264 echo "It looks like GLU version ${fptools_glu_version}"
1266 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1267 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1269 if test -n "$LIBS"; then
1270 GL_LIBS="$LDFLAGS $LIBS"
1276 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1277 GL_CFLAGS="$mdl_cv_gl_cflags"
1279 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1280 GL_LIBS="$mdl_cv_gl_libs"
1283 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1284 dnl and we don't want to be global namespace polluters.
1287 LIBS="$GL_save_LIBS"
1288 CPPFLAGS="$GL_save_CPPFLAGS"
1296 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1297 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1298 dnl 'lex' is actually present along the user's PATH).
1300 AC_DEFUN(AC_PROG_LEX_STRICT,
1301 [AC_CHECK_PROG(LEX, flex, flex)
1304 AC_CHECK_PROG(LEX,lex,lex)
1305 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1310 dnl Check to see whether CC (gcc) supports a particular option.
1312 AC_DEFUN(FPTOOLS_CC_FLAG,
1314 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1315 [save_CFLAGS="$CFLAGS"
1318 AC_TRY_COMPILE(,[int main(){return(0);}],
1321 CFLAGS="$save_CFLAGS"
1323 if test "$ac_cv_cc_$2"x = "yesx"; then
1331 dnl Check to see whether 'struct msghdr' contains msg_control
1333 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1334 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1335 [AC_TRY_COMPILE([#include <sys/types.h>
1336 #include <sys/uio.h>
1337 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1338 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1339 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1340 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1342 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1346 dnl Check to see whether 'struct msghdr' contains msg_accrights
1348 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1349 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1350 [AC_TRY_COMPILE([#include <sys/types.h>
1351 #include <sys/uio.h>
1352 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1353 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1354 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1355 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1357 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl