1 dnl $Id: aclocal.m4,v 1.122 2003/08/13 12:34:04 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 Greencard and version.
193 AC_DEFUN(FPTOOLS_GREENCARD,
195 AC_PATH_PROG(GreencardCmd,greencard)
196 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
198 [if test x"$GreencardCmd" != x; then
199 fptools_cv_greencard_version="`$GreencardCmd --version |
200 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
202 fptools_cv_greencard_version=""
206 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_greencard_version],-lt,$1,
207 [AC_MSG_ERROR([greencard 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 Check for Alex and version. If we're building GHC, then we need
269 dnl at least Alex version 2.0. If there's no installed Alex, we look
270 dnl for a alex source tree and point the build system at that instead.
272 AC_DEFUN(FPTOOLS_ALEX,
274 if test -d $srcdir/alex; then
275 SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
277 if test x"$UseSrcTreeAlex" = xYES; then
278 AlexCmd=$SrcTreeAlexCmd
280 AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
282 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
284 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
285 fptools_cv_alex_version=`grep '^ProjectVersion[ ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
286 elif test x"$AlexCmd" != x; then
287 fptools_cv_alex_version="`$AlexCmd -v |
288 grep 'Alex Version' | sed -e 's/Alex Version \([^ ]*\).*/\1/g'`" ;
290 fptools_cv_alex_version="";
294 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
295 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0],
296 [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl
298 AlexVersion=$fptools_cv_alex_version;
299 AC_SUBST(AlexVersion)
303 dnl What's the best way of doing context diffs?
305 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
307 AC_DEFUN(FPTOOLS_PROG_DIFF,
308 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
309 [echo foo > conftest1
311 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
312 fptools_cv_context_diffs='diff -C 1'
314 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
315 fptools_cv_context_diffs='diff -c1'
317 echo "Can't figure out how to do context diffs."
318 echo "Neither \`diff -C 1' nor \`diff -c1' works."
322 rm -f conftest1 conftest2
324 ContextDiffCmd=$fptools_cv_context_diffs
325 AC_SUBST(ContextDiffCmd)
329 dnl Check whether ld supports -x
331 AC_DEFUN(FPTOOLS_LD_X,
332 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
334 echo 'foo() {}' > conftest.c
335 ${CC-cc} -c conftest.c
336 if ${LdCmd} -r -x -o foo.o conftest.o; then
341 rm -rf conftest.c conftest.o foo.o
343 if test "$fptools_cv_ld_x" = yes; then
352 dnl Finding the Right Yacc
354 AC_DEFUN(FPTOOLS_PROG_YACCY,
356 if test "$YACC" = "yacc"; then
357 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
358 [AC_CHECK_PROG(WhatCmd, what, what, :)
359 $WhatCmd $YACC > conftest.out
360 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
361 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
362 if test -f /usr/lang/yacc; then
363 echo "I'm going to use /usr/lang/yacc instead"
364 ac_cv_prog_yacc=/usr/lang/yacc
366 echo "I'm assuming the worst...no parser generator at all"
369 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
370 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
371 echo "I'm assuming the worst...no parser generator at all"
374 ac_cv_prog_yacc=$YACC
379 ac_cv_prog_yacc=$YACC
381 YaccCmd=$ac_cv_prog_yacc
385 dnl *** Checking for ar and its arguments + whether we need ranlib.
387 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
388 dnl On Digital UNIX, we test for the -Z (compress) and
389 dnl -input (take list of files from external file) flags.
391 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
392 [AC_PATH_PROG(ArCmdRaw,ar)
393 if test -z "$ArCmdRaw"; then
394 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
397 dnl GNU ar needs special treatment: it appears to have problems with
398 dnl object files with the same name if you use the 's' modifier, but
399 dnl simple 'ar q' works fine, and doesn't need a separate ranlib.
400 if $ArCmdRaw --version | grep 'GNU' >/dev/null 2>/dev/null; then
403 elif $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
406 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
409 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
412 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
415 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
418 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
422 echo "I can't figure out how to use your $ArCmd"
426 case $HostPlatform in
428 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
430 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
433 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
435 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
436 ArSupportsInput='-input'
441 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
442 AC_SUBST(ArSupportsInput)
443 if test -z "$NeedRanLib"; then
445 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
453 dnl AC_SHEBANG_PERL - can we she-bang perl?
455 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
456 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
461 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
462 if test $? -ne 69; then
463 fptools_cv_shebang_perl=yes
465 fptools_cv_shebang_perl=no
471 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
472 dnl *Must* be called after AC_PROG_CC
474 AC_DEFUN(FPTOOLS_HAVE_GCC,
475 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
476 [if test -z "$GCC"; then
478 echo "You would be better off with gcc"
479 echo "Perhaps it is already installed, but not in your PATH?"
480 fptools_cv_have_gcc='no'
483 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' `"
485 fptools_cv_have_gcc='yes'
486 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
487 fptools_cv_have_gcc='no'
489 echo "your gcc version appears to be ..."
491 echo "gcc prior to 2.0 and have never worked with ghc."
492 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
493 AC_MSG_ERROR([gcc 1.X has never been supported])
497 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
502 dnl Some OSs (Mandrake Linux, in particular) configure GCC with
503 dnl -momit-leaf-frame-pointer on by default. If this is the case, we
504 dnl need to turn it off for mangling to work. The test is currently a bit
505 dnl crude, using only the version number of gcc.
507 AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
508 [AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
510 fptools_cv_gcc_needs_no_omit_lfptr='no'
511 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
512 fptools_cv_gcc_needs_no_omit_lfptr='yes')
514 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
515 AC_DEFINE(HAVE_GCC_MNO_OMIT_LFPTR)
519 dnl Small feature test for perl version. Assumes PerlCmd
520 dnl contains path to perl binary
522 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
523 [$PerlCmd -v >conftest.out 2>&1
524 if grep "version 5" conftest.out >/dev/null 2>&1; then
527 if grep "v5.6" conftest.out >/dev/null 2>&1; then
530 if grep "v5.8" conftest.out >/dev/null 2>&1; then
533 if grep "version 6" conftest.out >/dev/null 2>&1; then
536 echo "Your version of perl probably won't work."
545 dnl Getting at the right version of 'find'
546 dnl (i.e., not the MS util on a Win32 box).
548 AC_DEFUN(FPTOOLS_FIND_FIND,
550 AC_PATH_PROG(Find2Cmd, find)
551 $Find2Cmd --version > conftest.out 2>&1
552 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
553 # Encountered MS' find utility, which is not what we're after.
555 # HACK - AC_CHECK_PROG is useful here in that does let you reject
556 # an (absolute) entry in the path (Find2Cmd). It is not so useful
557 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
558 # absolute path eventually found. So, hack around this by inspecting
559 # what variables hold the abs. path & use them directly.
560 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
568 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
569 dnl values of the second argument to the result of running
570 dnl the commands given by the third. It does not cache its
571 dnl result, so it is suitable for checks which should be
574 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
575 [AC_MSG_CHECKING([$1])
577 AC_MSG_RESULT([$][$2])
581 dnl FPTOOLS_GHC_VERSION(version)
582 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
583 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
585 dnl Test for version of installed ghc. Uses $GHC.
586 dnl [original version pinched from c2hs]
588 AC_DEFUN(FPTOOLS_GHC_VERSION,
589 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
590 ["${WithGhc-ghc}" --version > conftestghc 2>&1
591 cat conftestghc >&AC_FD_CC
592 #Useless Use Of cat award...
593 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
595 if test "[$]fptools_version_of_ghc" = ""
597 fptools_version_of_ghc='unknown'
599 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
600 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
601 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
603 if test "[$]fptools_version_of_ghc[_pl]" = ""
605 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
606 fptools_version_of_ghc[_pl]="0"
608 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
612 [$1]="[$]fptools_version_of_ghc[_all]"
614 [$1]="[$]fptools_version_of_ghc[_major]"
615 [$2]="[$]fptools_version_of_ghc[_minor]"
617 [$1]="[$]fptools_version_of_ghc[_major]"
618 [$2]="[$]fptools_version_of_ghc[_minor]"
619 [$3]="[$]fptools_version_of_ghc[_pl]"
621 [$1]="[$]fptools_version_of_ghc[_all]"
622 [$2]="[$]fptools_version_of_ghc[_major]"
623 [$3]="[$]fptools_version_of_ghc[_minor]"
624 [$4]="[$]fptools_version_of_ghc[_pl]"
630 dnl ** figure out the alignment restriction of a type
631 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
632 dnl so we can't call REQUIRE)
634 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
635 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
636 [changequote(<<, >>)dnl
637 dnl The name to #define.
638 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
639 dnl The cache variable name.
640 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
641 dnl The name of the corresponding size.
642 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
644 AC_MSG_CHECKING(alignment of $1)
645 AC_CACHE_VAL(AC_CV_NAME,
652 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
657 FILE *f=fopen("conftestval", "w");
659 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
662 AC_CV_NAME=`cat conftestval`,
663 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
664 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
665 AC_MSG_RESULT($AC_CV_NAME)
666 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
667 AC_PROVIDE($AC_TYPE_NAME)
668 undefine([AC_TYPE_NAME])dnl
669 undefine([AC_CV_NAME])dnl
670 undefine([AC_CV_SIZEOF_NAME])dnl
673 dnl ** Map an arithmetic C type to a Haskell type.
674 dnl Based on autconf's AC_CHECK_SIZEOF.
676 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
677 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
678 [changequote(<<, >>)dnl
679 dnl The name to #define.
680 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
681 dnl The cache variable name.
682 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
684 AC_MSG_CHECKING(Haskell type for $1)
685 AC_CACHE_VAL(AC_CV_NAME,
686 [AC_TRY_RUN([#include <stdio.h>
689 #ifdef HAVE_SYS_TYPES_H
690 # include <sys/types.h>
697 #ifdef HAVE_SYS_STAT_H
698 # include <sys/stat.h>
713 #ifdef HAVE_TERMIOS_H
714 # include <termios.h>
729 #ifdef HAVE_OPENGL_GL_H
730 # include <OpenGL/gl.h>
733 #ifdef HAVE_SYS_RESOURCE_H
734 # include <sys/resource.h>
740 FILE *f=fopen("conftestval", "w");
742 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
744 ((testing)(-1) < (testing)0) ? "Int" : "Word",
748 (sizeof(testing) > sizeof(double)) ? "LDouble" :
749 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
753 }], AC_CV_NAME=`cat conftestval`,
754 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
755 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
756 AC_MSG_RESULT($AC_CV_NAME)
757 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
758 undefine([AC_TYPE_NAME])dnl
759 undefine([AC_CV_NAME])dnl
762 dnl ** figure out whether C compiler supports 'long long's
763 dnl (Closely based on Andreas Zeller's macro for testing
764 dnl for this under C++)
766 dnl If the C compiler supports `long long' types,
767 dnl define `HAVE_LONG_LONG'.
769 AC_DEFUN(FPTOOLS_C_LONG_LONG,
771 AC_REQUIRE([AC_PROG_CC])
772 AC_MSG_CHECKING(whether ${CC} supports long long types)
773 AC_CACHE_VAL(fptools_cv_have_long_long,
777 AC_TRY_COMPILE(,[long long a;],
778 fptools_cv_have_long_long=yes,
779 fptools_cv_have_long_long=no)
782 AC_MSG_RESULT($fptools_cv_have_long_long)
783 if test "$fptools_cv_have_long_long" = yes; then
784 AC_DEFINE(HAVE_LONG_LONG)
788 dnl ** Obtain the value of a C constant.
789 dnl The value will be `(-1)' if the constant is undefined.
791 dnl This is set up so that the argument can be a shell variable.
793 AC_DEFUN(FPTOOLS_CHECK_CCONST,
795 eval "cv_name=ac_cv_cconst_$1"
796 AC_MSG_CHECKING(value of $1)
797 AC_CACHE_VAL($cv_name,
798 [AC_TRY_RUN([#include <stdio.h>
802 FILE *f=fopen("conftestval", "w");
804 fprintf(f, "%d\n", $1);
807 eval "$cv_name=`cat conftestval`",
809 eval "$cv_name=-1")])dnl
810 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
811 AC_MSG_RESULT($fptools_check_cconst_result)
812 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
813 unset fptools_check_cconst_result
816 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
819 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
820 [for ac_const_name in $1
822 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
827 dnl *** Can we open files in binary mode? ***
829 AC_DEFUN(FPTOOLS_O_BINARY,
831 AC_REQUIRE([AC_PROG_CC])
832 AC_MSG_CHECKING(whether we can open files in binary mode)
833 AC_CACHE_VAL(fptools_cv_have_o_binary,
842 fptools_cv_have_o_binary=yes,
843 fptools_cv_have_o_binary=no)
846 AC_MSG_RESULT($fptools_cv_have_o_binary)
847 if test "$fptools_cv_have_o_binary" = yes; then
848 AC_DEFINE(HAVE_O_BINARY)
852 dnl *** Helper function **
854 AC_DEFUN(FPTOOLS_IN_SCOPE,
855 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
859 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
861 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
863 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
867 cat > conftest.$ac_ext <<EOF
868 dnl This sometimes fails to find confdefs.h, for some reason.
869 dnl [#]line __oline__ "[$]0"
870 [#]line __oline__ "configure"
871 #include "confdefs.h"
873 int t() { return 0; }
875 if AC_TRY_EVAL(ac_link); then
880 ifelse([$4], , , [else
890 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
892 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
894 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
895 [AC_MSG_CHECKING([for $1])
896 AC_CACHE_VAL(ac_cv_flag_$1,
897 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
898 eval "ac_cv_flag_$1=yes",
899 eval "ac_cv_flag_$1=no"
902 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
912 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
914 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
915 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
917 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
919 AC_DEFINE_UNQUOTED($ac_tr_lib)
921 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
923 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
925 AC_DEFINE_UNQUOTED($ac_tr_lib)
931 dnl check for prototypes
933 AC_DEFUN([AC_C_PROTOTYPES],
934 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
943 ac_cv_prototypes=yes,
944 ac_cv_prototypes=no)])
945 if test "$ac_cv_prototypes" = yes; then
946 AC_DEFINE([HAVE_PROTOTYPES])
950 dnl ** Check which CATALOG file we have to use with DocBook SGML.
952 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
954 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
955 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
956 dnl is set to "no". JADE is the jade executable and STYLESHEET
957 dnl a DocBook style sheet.
959 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
960 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
962 cat > conftest.sgml << EOF
963 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
967 <Author><OtherName>Test</OtherName></Author>
968 <Address>Test</Address>
969 <PubDate>Test</PubDate>
971 <Sect1><Title>Test</Title>
978 fptools_cv_sgml_catalog=no
979 if test -z "$SGML_CATALOG_FILES" ; then
980 for fptools_catalog in $4; do
981 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
982 if AC_TRY_EVAL(ac_try); then
983 fptools_cv_sgml_catalog=[$]fptools_catalog
988 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
989 fptools_cv_sgml_catalog="yes"
993 if test $fptools_cv_sgml_catalog != "no"; then
994 $1=$fptools_cv_sgml_catalog
998 dnl ######################################################################
999 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1000 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1001 dnl Search for a library defining FUNC, if it's not already available.
1002 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1004 dnl ######################################################################
1006 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1008 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1009 [ac_func_search_save_LIBS="$LIBS"
1010 ac_cv_search_$2="no"
1011 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1012 test "$ac_cv_search_$2" = "no" && for i in $3; do
1013 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1014 AC_TRY_LINK([$1], [$2()],
1015 [ac_cv_search_$2="-l$i"
1018 LIBS="$ac_func_search_save_LIBS"])
1019 if test "$ac_cv_search_$2" != "no"; then
1020 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1026 dnl ####################### -*- Mode: M4 -*- ###########################
1027 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1029 dnl This file is free software; you can redistribute it and/or modify it
1030 dnl under the terms of the GNU General Public License as published by
1031 dnl the Free Software Foundation; either version 2 of the License, or
1032 dnl (at your option) any later version.
1034 dnl This file is distributed in the hope that it will be useful, but
1035 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1036 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1037 dnl General Public License for more details.
1039 dnl You should have received a copy of the GNU General Public License
1040 dnl along with this file; if not, write to:
1042 dnl Free Software Foundation, Inc.
1045 dnl Boston, MA 02111-1307, USA.
1046 dnl ####################################################################
1049 dnl @synopsis FPTOOLS_CHECK_LIBM
1051 dnl Search for math library (typically -lm).
1053 dnl The variable LIBM (which is not an output variable by default) is
1054 dnl set to a value which is suitable for use in a Makefile (for example,
1055 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1057 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1059 # FPTOOLS_CHECK_LIBM - check for math library
1060 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1061 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1065 # These system don't have libm
1068 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1069 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1072 AC_CHECK_LIB(m, main, LIBM="-lm")
1077 dnl ######################################################################
1078 dnl Note: Caching has been completely rewritten, but is still no perfect yet.
1079 dnl ######################################################################
1081 dnl ########################### -*- Mode: M4 -*- #######################
1082 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1084 dnl This file is free software; you can redistribute it and/or modify it
1085 dnl under the terms of the GNU General Public License as published by
1086 dnl the Free Software Foundation; either version 2 of the License, or
1087 dnl (at your option) any later version.
1089 dnl This file is distributed in the hope that it will be useful, but
1090 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1091 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1092 dnl General Public License for more details.
1094 dnl You should have received a copy of the GNU General Public License
1095 dnl along with this file; if not, write to:
1097 dnl Free Software Foundation, Inc.
1100 dnl Boston, MA 02111-1307, USA.
1101 dnl ####################################################################
1103 dnl @synopsis FPTOOLS_HAVE_OPENGL
1105 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1106 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
1107 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
1109 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1110 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1113 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1114 dnl be missing) are added to the shell output variable "GL_LIBS", along
1115 dnl with any other libraries that are necessary to successfully link an
1116 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1117 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1120 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1121 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1122 dnl an OpenGL application.
1124 dnl The following shell variable (which are not output variables) are
1125 dnl also set to either "yes" or "no" (depending on which libraries were
1126 dnl found) to help you determine exactly what was found.
1133 dnl A complete little toy "Automake `make distcheck'" package of how to
1134 dnl use this macro is available at:
1136 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1138 dnl Please note that as the ac_opengl macro and the toy example evolves,
1139 dnl the version number increases, so you may have to adjust the above
1140 dnl URL accordingly.
1142 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1144 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1146 AC_REQUIRE([AC_PROG_CC])
1147 AC_REQUIRE([AC_PATH_X])
1148 AC_REQUIRE([AC_PATH_XTRA])
1149 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1151 dnl Check for Mesa first if we were asked to.
1154 Prefer Mesa over a vendor's native OpenGL library (default=no)
1156 use_Mesa=$enableval,
1159 if test x"$use_Mesa" = xyes; then
1160 GL_search_list="MesaGL GL opengl32"
1161 GLU_search_list="MesaGLU GLU glu32"
1162 GLX_search_list="MesaGLX GLX"
1164 GL_search_list="GL opengl32 MesaGL"
1165 GLU_search_list="GLU glu32 MesaGLU"
1166 GLX_search_list="GLX MesaGLX"
1172 dnl If we are running under X11 then add in the appropriate libraries.
1173 if test x"$no_x" != xyes; then
1174 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1175 dnl and GL_X_LIBS/GLUT_X_LIBS.
1176 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1177 GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1178 GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1180 GL_save_CPPFLAGS="$CPPFLAGS"
1181 CPPFLAGS="$GL_CFLAGS"
1183 GL_save_LIBS="$LIBS"
1186 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1187 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1188 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1190 if test -n "$LIBS"; then
1191 GL_LIBS="$LDFLAGS $LIBS"
1199 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1201 if test -n "$LIBS"; then
1202 GLUT_LIBS="$LDFLAGS $LIBS"
1205 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1206 GL_CFLAGS="$mdl_cv_gl_cflags"
1208 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1209 GL_LIBS="$mdl_cv_gl_libs"
1211 AC_CACHE_CHECK([GLUT libs], mdl_cv_glut_libs, [mdl_cv_glut_libs="$GLUT_LIBS"])
1212 GLUT_LIBS="$mdl_cv_glut_libs"
1215 dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables
1216 dnl and we don't want to be global namespace polluters.
1220 LIBS="$GL_save_LIBS"
1221 CPPFLAGS="$GL_save_CPPFLAGS"
1229 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1230 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1231 dnl 'lex' is actually present along the user's PATH).
1233 AC_DEFUN(AC_PROG_LEX_STRICT,
1234 [AC_CHECK_PROG(LEX, flex, flex)
1237 AC_CHECK_PROG(LEX,lex,lex)
1238 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1243 dnl Check to see whether CC (gcc) supports a particular option.
1245 AC_DEFUN(FPTOOLS_CC_FLAG,
1247 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1248 [save_CFLAGS="$CFLAGS"
1251 AC_TRY_COMPILE(,[int main(){return(0);}],
1254 CFLAGS="$save_CFLAGS"
1256 if test "$ac_cv_cc_$2"x = "yesx"; then
1264 dnl Check to see whether 'struct msghdr' contains msg_control
1266 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1267 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1268 [AC_TRY_COMPILE([#include <sys/types.h>
1269 #include <sys/uio.h>
1270 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1271 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1272 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1273 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1275 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1279 dnl Check to see whether 'struct msghdr' contains msg_accrights
1281 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1282 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1283 [AC_TRY_COMPILE([#include <sys/types.h>
1284 #include <sys/uio.h>
1285 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1286 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1287 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1288 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1290 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl