1 dnl $Id: aclocal.m4,v 1.114 2003/03/21 10:59:20 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>
675 FILE *f=fopen("conftestval", "w");
677 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
679 ((testing)(-1) < (testing)0) ? "Int" : "Word",
683 (sizeof(testing) > sizeof(double)) ? "LDouble" :
684 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
688 }], AC_CV_NAME=`cat conftestval`,
689 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
690 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
691 AC_MSG_RESULT($AC_CV_NAME)
692 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
693 undefine([AC_TYPE_NAME])dnl
694 undefine([AC_CV_NAME])dnl
697 dnl ** figure out whether C compiler supports 'long long's
698 dnl (Closely based on Andreas Zeller's macro for testing
699 dnl for this under C++)
701 dnl If the C compiler supports `long long' types,
702 dnl define `HAVE_LONG_LONG'.
704 AC_DEFUN(FPTOOLS_C_LONG_LONG,
706 AC_REQUIRE([AC_PROG_CC])
707 AC_MSG_CHECKING(whether ${CC} supports long long types)
708 AC_CACHE_VAL(fptools_cv_have_long_long,
712 AC_TRY_COMPILE(,[long long a;],
713 fptools_cv_have_long_long=yes,
714 fptools_cv_have_long_long=no)
717 AC_MSG_RESULT($fptools_cv_have_long_long)
718 if test "$fptools_cv_have_long_long" = yes; then
719 AC_DEFINE(HAVE_LONG_LONG)
723 dnl ** Obtain the value of a C constant.
724 dnl The value will be `(-1)' if the constant is undefined.
726 dnl This is set up so that the argument can be a shell variable.
728 AC_DEFUN(FPTOOLS_CHECK_CCONST,
730 eval "cv_name=ac_cv_cconst_$1"
731 AC_MSG_CHECKING(value of $1)
732 AC_CACHE_VAL($cv_name,
733 [AC_TRY_RUN([#include <stdio.h>
737 FILE *f=fopen("conftestval", "w");
739 fprintf(f, "%d\n", $1);
742 eval "$cv_name=`cat conftestval`",
744 eval "$cv_name=-1")])dnl
745 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
746 AC_MSG_RESULT($fptools_check_cconst_result)
747 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
748 unset fptools_check_cconst_result
751 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
754 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
755 [for ac_const_name in $1
757 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
762 dnl *** Can we open files in binary mode? ***
764 AC_DEFUN(FPTOOLS_O_BINARY,
766 AC_REQUIRE([AC_PROG_CC])
767 AC_MSG_CHECKING(whether we can open files in binary mode)
768 AC_CACHE_VAL(fptools_cv_have_o_binary,
777 fptools_cv_have_o_binary=yes,
778 fptools_cv_have_o_binary=no)
781 AC_MSG_RESULT($fptools_cv_have_o_binary)
782 if test "$fptools_cv_have_o_binary" = yes; then
783 AC_DEFINE(HAVE_O_BINARY)
787 dnl *** Helper function **
789 AC_DEFUN(FPTOOLS_IN_SCOPE,
790 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
794 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
796 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
798 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
802 cat > conftest.$ac_ext <<EOF
803 dnl This sometimes fails to find confdefs.h, for some reason.
804 dnl [#]line __oline__ "[$]0"
805 [#]line __oline__ "configure"
806 #include "confdefs.h"
808 int t() { return 0; }
810 if AC_TRY_EVAL(ac_link); then
815 ifelse([$4], , , [else
825 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
827 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
829 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
830 [AC_MSG_CHECKING([for $1])
831 AC_CACHE_VAL(ac_cv_flag_$1,
832 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
833 eval "ac_cv_flag_$1=yes",
834 eval "ac_cv_flag_$1=no"
837 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
847 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
849 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
850 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
852 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
854 AC_DEFINE_UNQUOTED($ac_tr_lib)
856 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
858 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
860 AC_DEFINE_UNQUOTED($ac_tr_lib)
866 dnl check for prototypes
868 AC_DEFUN([AC_C_PROTOTYPES],
869 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
878 ac_cv_prototypes=yes,
879 ac_cv_prototypes=no)])
880 if test "$ac_cv_prototypes" = yes; then
881 AC_DEFINE([HAVE_PROTOTYPES])
885 dnl ** Check which CATALOG file we have to use with DocBook SGML.
887 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
889 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
890 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
891 dnl is set to "no". JADE is the jade executable and STYLESHEET
892 dnl a DocBook style sheet.
894 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
895 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
897 cat > conftest.sgml << EOF
898 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
902 <Author><OtherName>Test</OtherName></Author>
903 <Address>Test</Address>
904 <PubDate>Test</PubDate>
906 <Sect1><Title>Test</Title>
913 fptools_cv_sgml_catalog=no
914 if test -z "$SGML_CATALOG_FILES" ; then
915 for fptools_catalog in $4; do
916 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
917 if AC_TRY_EVAL(ac_try); then
918 fptools_cv_sgml_catalog=[$]fptools_catalog
923 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
924 fptools_cv_sgml_catalog="yes"
928 if test $fptools_cv_sgml_catalog != "no"; then
929 $1=$fptools_cv_sgml_catalog
933 dnl ######################################################################
934 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
935 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
936 dnl Search for a library defining FUNC, if it's not already available.
937 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
939 dnl ######################################################################
941 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
943 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
944 [ac_func_search_save_LIBS="$LIBS"
946 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
947 test "$ac_cv_search_$2" = "no" && for i in $3; do
948 LIBS="-l$i $6 $ac_func_search_save_LIBS"
949 AC_TRY_LINK([$1], [$2()],
950 [ac_cv_search_$2="-l$i"
953 LIBS="$ac_func_search_save_LIBS"])
954 if test "$ac_cv_search_$2" != "no"; then
955 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
961 dnl ####################### -*- Mode: M4 -*- ###########################
962 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
964 dnl This file is free software; you can redistribute it and/or modify it
965 dnl under the terms of the GNU General Public License as published by
966 dnl the Free Software Foundation; either version 2 of the License, or
967 dnl (at your option) any later version.
969 dnl This file is distributed in the hope that it will be useful, but
970 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
971 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
972 dnl General Public License for more details.
974 dnl You should have received a copy of the GNU General Public License
975 dnl along with this file; if not, write to:
977 dnl Free Software Foundation, Inc.
980 dnl Boston, MA 02111-1307, USA.
981 dnl ####################################################################
984 dnl @synopsis FPTOOLS_CHECK_LIBM
986 dnl Search for math library (typically -lm).
988 dnl The variable LIBM (which is not an output variable by default) is
989 dnl set to a value which is suitable for use in a Makefile (for example,
990 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
992 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
994 # FPTOOLS_CHECK_LIBM - check for math library
995 AC_DEFUN(FPTOOLS_CHECK_LIBM,
996 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1000 # These system don't have libm
1003 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1004 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1007 AC_CHECK_LIB(m, main, LIBM="-lm")
1012 dnl ######################################################################
1013 dnl Some notes about the heavily changed OpenGL test below:
1014 dnl * Caching has been completely rewritten, but is still no perfect yet.
1015 dnl * Version detection for GL and GLU has been added.
1016 dnl ######################################################################
1018 dnl ########################### -*- Mode: M4 -*- #######################
1019 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1021 dnl This file is free software; you can redistribute it and/or modify it
1022 dnl under the terms of the GNU General Public License as published by
1023 dnl the Free Software Foundation; either version 2 of the License, or
1024 dnl (at your option) any later version.
1026 dnl This file is distributed in the hope that it will be useful, but
1027 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1028 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1029 dnl General Public License for more details.
1031 dnl You should have received a copy of the GNU General Public License
1032 dnl along with this file; if not, write to:
1034 dnl Free Software Foundation, Inc.
1037 dnl Boston, MA 02111-1307, USA.
1038 dnl ####################################################################
1040 dnl @synopsis FPTOOLS_HAVE_OPENGL
1042 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1043 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
1044 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
1046 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1047 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1050 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1051 dnl be missing) are added to the shell output variable "GL_LIBS", along
1052 dnl with any other libraries that are necessary to successfully link an
1053 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1054 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1057 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1058 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1059 dnl an OpenGL application.
1061 dnl The following shell variable (which are not output variables) are
1062 dnl also set to either "yes" or "no" (depending on which libraries were
1063 dnl found) to help you determine exactly what was found.
1070 dnl A complete little toy "Automake `make distcheck'" package of how to
1071 dnl use this macro is available at:
1073 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1075 dnl Please note that as the ac_opengl macro and the toy example evolves,
1076 dnl the version number increases, so you may have to adjust the above
1077 dnl URL accordingly.
1079 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1081 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1083 AC_REQUIRE([AC_PROG_CC])
1084 AC_REQUIRE([AC_PATH_X])
1085 AC_REQUIRE([AC_PATH_XTRA])
1086 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1088 dnl Check for Mesa first if we were asked to.
1091 Prefer Mesa over a vendor's native OpenGL library (default=no)
1093 use_Mesa=$enableval,
1096 if test x"$use_Mesa" = xyes; then
1097 GL_search_list="MesaGL GL opengl32"
1098 GLU_search_list="MesaGLU GLU glu32"
1099 GLX_search_list="MesaGLX GLX"
1101 GL_search_list="GL opengl32 MesaGL"
1102 GLU_search_list="GLU glu32 MesaGLU"
1103 GLX_search_list="GLX MesaGLX"
1109 dnl If we are running under X11 then add in the appropriate libraries.
1110 if test x"$no_x" != xyes; then
1111 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1113 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1114 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1116 GL_save_CPPFLAGS="$CPPFLAGS"
1117 CPPFLAGS="$GL_CFLAGS"
1119 GL_save_LIBS="$LIBS"
1122 dnl Including <GL/glut.h> instead of plain <GL/gl.h> avoids problems on
1123 dnl platforms like WinDoze where special headers like <windows.h> or
1124 dnl some macro trickery would be needed
1125 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1127 dnl TODO: The tests for GL features should better be cascaded and the
1128 dnl results should be cached. A new macro would be helpful here.
1130 AC_MSG_CHECKING(glTexSubImage1D)
1131 AC_TRY_LINK([#include <GL/glut.h>],
1132 [glTexSubImage1D(GL_TEXTURE_1D,0,0,2,GL_INTENSITY,GL_BYTE,(void*)0)],
1133 fptools_gl_texsubimage1d=yes,
1134 fptools_gl_texsubimage1d=no);
1135 AC_MSG_RESULT($fptools_gl_texsubimage1d)
1137 AC_MSG_CHECKING(glDrawRangeElements)
1138 AC_TRY_LINK([#include <GL/glut.h>],
1139 [glDrawRangeElements(GL_QUADS,0,0,0,GL_UNSIGNED_BYTE,(void*)0)],
1140 fptools_gl_drawrangeelements=yes,
1141 fptools_gl_drawrangeelements=no);
1142 AC_MSG_RESULT($fptools_gl_drawrangeelements)
1144 AC_MSG_CHECKING(glActiveTexture)
1145 AC_TRY_LINK([#include <GL/glut.h>],
1146 [glActiveTexture(GL_TEXTURE1)],
1147 fptools_gl_activetexture=yes,
1148 fptools_gl_activetexture=no);
1149 AC_MSG_RESULT($fptools_gl_activetexture)
1151 AC_MSG_CHECKING(glMultiDrawArrays)
1152 AC_TRY_LINK([#include <GL/glut.h>],
1153 [glMultiDrawArrays(GL_TRIANGLES, (GLint*)0, (GLsizei*)0, 0)],
1154 fptools_gl_multidrawarrays=yes,
1155 fptools_gl_multidrawarrays=no);
1156 AC_MSG_RESULT($fptools_gl_multidrawarrays)
1158 if test x"$fptools_gl_texsubimage1d" != xyes; then
1159 fptools_gl_version=1.0
1161 if test x"$fptools_gl_drawrangeelements" != xyes; then
1162 fptools_gl_version=1.1
1164 if test x"$fptools_gl_activetexture" != xyes; then
1165 fptools_gl_version=1.2
1167 if test x"$fptools_gl_multidrawarrays" != xyes; then
1168 fptools_gl_version=1.3
1170 fptools_gl_version=1.4
1175 echo "It looks like GL version ${fptools_gl_version}"
1177 dnl TODO: Cache the results of the tests for the imaging subset.
1179 AC_MSG_CHECKING(EXT_blend_color)
1180 AC_TRY_LINK([#include <GL/glut.h>],
1181 [glBlendColorEXT((GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0)],
1182 hopengl_EXT_blend_color=yes,
1183 hopengl_EXT_blend_color=no);
1184 AC_MSG_RESULT($hopengl_EXT_blend_color)
1186 AC_MSG_CHECKING(EXT_blend_minmax)
1187 AC_TRY_LINK([#include <GL/glut.h>],
1188 [glBlendEquationEXT(GL_FUNC_ADD_EXT)],
1189 hopengl_EXT_blend_minmax=yes,
1190 hopengl_EXT_blend_minmax=no);
1191 AC_MSG_RESULT($hopengl_EXT_blend_minmax)
1193 AC_MSG_CHECKING(EXT_blend_subtract)
1194 AC_TRY_LINK([#include <GL/glut.h>],
1195 [glBlendEquationEXT(GL_FUNC_SUBTRACT_EXT)],
1196 hopengl_EXT_blend_subtract=yes,
1197 hopengl_EXT_blend_subtract=no);
1198 AC_MSG_RESULT($hopengl_EXT_blend_subtract)
1200 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1202 dnl TODO: Cascade and cache...
1204 AC_MSG_CHECKING(gluGetString)
1205 AC_TRY_LINK([#include <GL/glut.h>],
1206 [gluGetString(GLU_EXTENSIONS)],
1207 fptools_glu_getstring=yes,
1208 fptools_glu_getstring=no);
1209 AC_MSG_RESULT($fptools_glu_getstring)
1211 AC_MSG_CHECKING(gluTessEndPolygon)
1212 AC_TRY_LINK([#include <GL/glut.h>],
1213 [gluTessEndPolygon((GLUtesselator*)0)],
1214 fptools_glu_tessendpolygon=yes,
1215 fptools_glu_tessendpolygon=no);
1216 AC_MSG_RESULT($fptools_glu_tessendpolygon)
1218 AC_MSG_CHECKING(gluUnProject4)
1219 AC_TRY_LINK([#include <GL/glut.h>],
1220 [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)],
1221 fptools_glu_unproject4=yes,
1222 fptools_glu_unproject4=no);
1223 AC_MSG_RESULT($fptools_glu_unproject4)
1225 if test x"$fptools_glu_getstring" != xyes; then
1226 fptools_glu_version=1.0
1228 if test x"$fptools_glu_tessendpolygon" != xyes; then
1229 fptools_glu_version=1.1
1231 if test x"$fptools_glu_unproject4" != xyes; then
1232 fptools_glu_version=1.2
1234 fptools_glu_version=1.3
1238 echo "It looks like GLU version ${fptools_glu_version}"
1240 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1241 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1243 if test -n "$LIBS"; then
1244 GL_LIBS="$LDFLAGS $LIBS"
1250 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1251 GL_CFLAGS="$mdl_cv_gl_cflags"
1253 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1254 GL_LIBS="$mdl_cv_gl_libs"
1257 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1258 dnl and we don't want to be global namespace polluters.
1261 LIBS="$GL_save_LIBS"
1262 CPPFLAGS="$GL_save_CPPFLAGS"
1270 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1271 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1272 dnl 'lex' is actually present along the user's PATH).
1274 AC_DEFUN(AC_PROG_LEX_STRICT,
1275 [AC_CHECK_PROG(LEX, flex, flex)
1278 AC_CHECK_PROG(LEX,lex,lex)
1279 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1284 dnl Check to see whether CC (gcc) supports a particular option.
1286 AC_DEFUN(FPTOOLS_CC_FLAG,
1288 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1289 [save_CFLAGS="$CFLAGS"
1292 AC_TRY_COMPILE(,[int main(){return(0);}],
1295 CFLAGS="$save_CFLAGS"
1297 if test "$ac_cv_cc_$2"x = "yesx"; then
1305 dnl Check to see whether 'struct msghdr' contains msg_control
1307 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1308 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1309 [AC_TRY_COMPILE([#include <sys/types.h>
1310 #include <sys/uio.h>
1311 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1312 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1313 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1314 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1316 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1320 dnl Check to see whether 'struct msghdr' contains msg_accrights
1322 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1323 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1324 [AC_TRY_COMPILE([#include <sys/types.h>
1325 #include <sys/uio.h>
1326 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1327 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1328 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1329 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1331 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl