1 # Extra autoconf macros for the Glasgow fptools
3 # To be a good autoconf citizen, names of local macros have prefixed with FP_ to
4 # ensure we don't clash with any pre-supplied autoconf ones.
9 # Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise.
10 # Used by base package.
11 AC_DEFUN([FP_ALTZONE],
12 [AC_REQUIRE([AC_HEADER_TIME])dnl
13 AC_CHECK_HEADERS([sys/time.h])
14 AC_CHECK_DECLS([altzone], [], [],[#if TIME_WITH_SYS_TIME
15 # include <sys/time.h>
19 # include <sys/time.h>
27 dnl ** check for leading underscores in symbol names
29 dnl Test for determining whether symbol names have a leading
32 dnl We assume that they _haven't_ if anything goes wrong.
34 dnl Some nlist implementations seem to try to be compatible by ignoring
35 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
36 dnl to work around this by checking for *no* leading underscore first.
39 dnl Similarly on OpenBSD, but this test doesn't help. -- dons
41 AC_DEFUN(FPTOOLS_UNDERSCORE,
42 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
43 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
46 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
47 dnl but symbol table listings shows none. What is going on here?!?
49 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
50 dnl the underscoredness of that "platform"
51 changequote(<<, >>)dnl
54 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
56 i386-*2\.[[0-9]] | i386-*3\.[[0-3]] ) fptools_cv_lead_uscore='yes' ;;
57 *) fptools_cv_lead_uscore='no' ;;
59 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
60 *cygwin32) fptools_cv_lead_uscore='yes';;
61 *mingw32) fptools_cv_lead_uscore='yes';;
64 AC_TRY_RUN([#ifdef HAVE_NLIST_H
66 changequote(<<, >>)dnl
68 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
69 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
77 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
79 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
84 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
87 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
88 AC_SUBST(LeadingUnderscore)
89 case $LeadingUnderscore in
90 YES) AC_DEFINE(LEADING_UNDERSCORE);;
95 dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
96 dnl ACTION-IF-TRUE [, ACTION-IF-FALSE])
98 dnl compare versions field-wise (separator is '.')
99 dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
101 dnl quite shell-independant and SUSv2 compliant code
103 dnl NOTE: the loop could be unrolled within autoconf, but the
104 dnl macro code would be a) longer and b) harder to debug... ;)
106 AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
111 set -- [$]a; h1="[$]1"; shift 2>/dev/null; a="[$]*"
112 set -- [$]b; h2="[$]1"; shift 2>/dev/null; b="[$]*"
113 test -n "[$]h1" || h1=0; test -n "[$]h2" || h2=0
114 test [$]{h1} -eq [$]{h2} || break
116 test [$]{h1} [$2] [$]{h2}
118 then ifelse([$4],,[:],[
128 dnl Check for Greencard and version.
130 AC_DEFUN(FPTOOLS_GREENCARD,
132 AC_PATH_PROG(GreencardCmd,greencard)
133 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
135 [if test x"$GreencardCmd" != x; then
136 fptools_cv_greencard_version="`$GreencardCmd --version |
137 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
139 fptools_cv_greencard_version=""
143 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_greencard_version],-lt,$1,
144 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])dnl
145 GreencardVersion=$fptools_cv_greencard_version
146 AC_SUBST(GreencardVersion)
150 dnl Check for Happy and version. If we're building GHC, then we need
151 dnl at least Happy version 1.13. If there's no installed Happy, we look
152 dnl for a happy source tree and point the build system at that instead.
154 AC_DEFUN(FPTOOLS_HAPPY,
156 if test -d $srcdir/happy; then
157 SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
159 if test x"$UseSrcTreeHappy" = xYES; then
160 HappyCmd=$SrcTreeHappyCmd
162 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
164 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
166 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
167 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
168 elif test x"$HappyCmd" != x; then
169 fptools_cv_happy_version="`$HappyCmd -v |
170 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
172 fptools_cv_happy_version="";
176 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
177 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13],
178 [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
180 HappyVersion=$fptools_cv_happy_version;
181 AC_SUBST(HappyVersion)
185 dnl Check for Haddock and version. If there's no installed Haddock, we look
186 dnl for a haddock source tree and point the build system at that instead.
188 AC_DEFUN(FPTOOLS_HADDOCK,
190 if test -d $srcdir/haddock; then
191 SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
193 if test x"$UseSrcTreeHaddock" = xYES; then
194 HaddockCmd=$SrcTreeHaddockCmd
196 AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
198 dnl Darn, I forgot to make Haddock print out its version number when
199 dnl invoked with -v. We could try generating some HTML and grepping
200 dnl through that to find the version number, but I think we'll make
201 dnl do without it for now.
205 dnl Check for Alex and version. If we're building GHC, then we need
206 dnl at least Alex version 2.0. If there's no installed Alex, we look
207 dnl for a alex source tree and point the build system at that instead.
209 AC_DEFUN(FPTOOLS_ALEX,
211 if test -d $srcdir/alex; then
212 SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
214 if test x"$UseSrcTreeAlex" = xYES; then
215 AlexCmd=$SrcTreeAlexCmd
217 AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
219 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
221 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
222 fptools_cv_alex_version=`grep '^ProjectVersion[ ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
223 elif test x"$AlexCmd" != x; then
224 fptools_cv_alex_version="`$AlexCmd -v |
225 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
227 fptools_cv_alex_version="";
231 dnl if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
232 dnl FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0],
233 dnl [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl
235 AlexVersion=$fptools_cv_alex_version;
236 AC_SUBST(AlexVersion)
240 dnl What's the best way of doing context diffs?
242 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
244 AC_DEFUN(FPTOOLS_PROG_DIFF,
245 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
246 [echo foo > conftest1
248 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
249 fptools_cv_context_diffs='diff -C 1'
251 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
252 fptools_cv_context_diffs='diff -c1'
254 echo "Can't figure out how to do context diffs."
255 echo "Neither \`diff -C 1' nor \`diff -c1' works."
259 rm -f conftest1 conftest2
261 ContextDiffCmd=$fptools_cv_context_diffs
262 AC_SUBST(ContextDiffCmd)
266 dnl Check whether ld supports -x
268 AC_DEFUN(FPTOOLS_LD_X,
269 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
271 echo 'foo() {}' > conftest.c
272 ${CC-cc} -c conftest.c
273 if ${LdCmd} -r -x -o foo.o conftest.o; then
278 rm -rf conftest.c conftest.o foo.o
280 if test "$fptools_cv_ld_x" = yes; then
289 dnl Finding the Right Yacc
291 AC_DEFUN(FPTOOLS_PROG_YACCY,
293 if test "$YACC" = "yacc"; then
294 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
295 [AC_CHECK_PROG(WhatCmd, what, what, :)
296 $WhatCmd $YACC > conftest.out
297 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
298 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
299 if test -f /usr/lang/yacc; then
300 echo "I'm going to use /usr/lang/yacc instead"
301 ac_cv_prog_yacc=/usr/lang/yacc
303 echo "I'm assuming the worst...no parser generator at all"
306 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
307 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
308 echo "I'm assuming the worst...no parser generator at all"
311 ac_cv_prog_yacc=$YACC
316 ac_cv_prog_yacc=$YACC
318 YaccCmd=$ac_cv_prog_yacc
322 dnl *** Checking for ar and its arguments + whether we need ranlib.
324 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
325 dnl On Digital UNIX, we test for the -Z (compress) and
326 dnl -input (take list of files from external file) flags.
328 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
329 [AC_PATH_PROG(ArCmdRaw,ar)
330 if test -z "$ArCmdRaw"; then
331 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
334 dnl GNU ar needs special treatment: it appears to have problems with
335 dnl object files with the same name if you use the 's' modifier, but
336 dnl simple 'ar q' works fine, and doesn't need a separate ranlib.
337 if $ArCmdRaw --version | grep 'GNU' >/dev/null 2>/dev/null; then
340 elif $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
343 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
346 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
349 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
352 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
355 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
359 echo "I can't figure out how to use your $ArCmd"
363 case $HostPlatform in
365 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
367 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
370 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
372 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
373 ArSupportsInput='-input'
378 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
379 AC_SUBST(ArSupportsInput)
380 if test -z "$NeedRanLib"; then
382 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
390 dnl AC_SHEBANG_PERL - can we she-bang perl?
392 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
393 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
398 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
399 if test $? -ne 69; then
400 fptools_cv_shebang_perl=yes
402 fptools_cv_shebang_perl=no
408 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
409 dnl *Must* be called after AC_PROG_CC
411 AC_DEFUN(FPTOOLS_HAVE_GCC,
412 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
413 [if test -z "$GCC"; then
415 echo "You would be better off with gcc"
416 echo "Perhaps it is already installed, but not in your PATH?"
417 fptools_cv_have_gcc='no'
420 gcc_version_str="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1\.\2/g' `"
422 fptools_cv_have_gcc='yes'
423 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
424 fptools_cv_have_gcc='no'
426 echo "your gcc version appears to be ..."
428 echo "gcc prior to 2.0 and have never worked with ghc."
429 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
430 AC_MSG_ERROR([gcc 1.X has never been supported])
434 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
439 dnl Some OSs (Mandrake Linux, in particular) configure GCC with
440 dnl -momit-leaf-frame-pointer on by default. If this is the case, we
441 dnl need to turn it off for mangling to work. The test is currently a bit
442 dnl crude, using only the version number of gcc.
444 AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
445 [AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
447 fptools_cv_gcc_needs_no_omit_lfptr='no'
448 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
449 fptools_cv_gcc_needs_no_omit_lfptr='yes')
451 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
452 AC_DEFINE(HAVE_GCC_MNO_OMIT_LFPTR)
456 dnl Small feature test for perl version. Assumes PerlCmd
457 dnl contains path to perl binary
459 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
460 [$PerlCmd -v >conftest.out 2>&1
461 if grep "version 5" conftest.out >/dev/null 2>&1; then
464 if grep "v5.6" conftest.out >/dev/null 2>&1; then
467 if grep "v5.8" conftest.out >/dev/null 2>&1; then
470 if grep "version 6" conftest.out >/dev/null 2>&1; then
473 echo "Your version of perl probably won't work."
482 dnl Getting at the right version of 'find'
483 dnl (i.e., not the MS util on a Win32 box).
485 AC_DEFUN(FPTOOLS_FIND_FIND,
487 AC_PATH_PROG(Find2Cmd, find)
488 $Find2Cmd --version > conftest.out 2>&1
489 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
490 # Encountered MS' find utility, which is not what we're after.
492 # HACK - AC_CHECK_PROG is useful here in that does let you reject
493 # an (absolute) entry in the path (Find2Cmd). It is not so useful
494 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
495 # absolute path eventually found. So, hack around this by inspecting
496 # what variables hold the abs. path & use them directly.
497 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
505 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
506 dnl values of the second argument to the result of running
507 dnl the commands given by the third. It does not cache its
508 dnl result, so it is suitable for checks which should be
511 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
512 [AC_MSG_CHECKING([$1])
514 AC_MSG_RESULT([$][$2])
518 dnl FPTOOLS_GHC_VERSION(version)
519 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
520 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
522 dnl Test for version of installed ghc. Uses $GHC.
523 dnl [original version pinched from c2hs]
525 AC_DEFUN(FPTOOLS_GHC_VERSION,
526 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
527 ["${WithGhc-ghc}" --version > conftestghc 2>&1
528 cat conftestghc >&AC_FD_CC
529 #Useless Use Of cat award...
530 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
532 if test "[$]fptools_version_of_ghc" = ""
534 fptools_version_of_ghc='unknown'
536 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
537 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
538 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
540 if test "[$]fptools_version_of_ghc[_pl]" = ""
542 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
543 fptools_version_of_ghc[_pl]="0"
545 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
549 [$1]="[$]fptools_version_of_ghc[_all]"
551 [$1]="[$]fptools_version_of_ghc[_major]"
552 [$2]="[$]fptools_version_of_ghc[_minor]"
554 [$1]="[$]fptools_version_of_ghc[_major]"
555 [$2]="[$]fptools_version_of_ghc[_minor]"
556 [$3]="[$]fptools_version_of_ghc[_pl]"
558 [$1]="[$]fptools_version_of_ghc[_all]"
559 [$2]="[$]fptools_version_of_ghc[_major]"
560 [$3]="[$]fptools_version_of_ghc[_minor]"
561 [$4]="[$]fptools_version_of_ghc[_pl]"
567 dnl ** figure out the alignment restriction of a type
568 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
569 dnl so we can't call REQUIRE)
571 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
572 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
573 [changequote(<<, >>)dnl
574 dnl The name to #define.
575 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
576 dnl The cache variable name.
577 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
578 dnl The name of the corresponding size.
579 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
581 AC_MSG_CHECKING(alignment of $1)
582 AC_CACHE_VAL(AC_CV_NAME,
589 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
594 FILE *f=fopen("conftestval", "w");
596 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
599 AC_CV_NAME=`cat conftestval`,
600 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
601 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
602 AC_MSG_RESULT($AC_CV_NAME)
603 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
604 AC_PROVIDE($AC_TYPE_NAME)
605 undefine([AC_TYPE_NAME])dnl
606 undefine([AC_CV_NAME])dnl
607 undefine([AC_CV_SIZEOF_NAME])dnl
610 dnl ** Map an arithmetic C type to a Haskell type.
611 dnl Based on autconf's AC_CHECK_SIZEOF.
613 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
614 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
615 [changequote(<<, >>)dnl
616 dnl The name to #define.
617 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
618 dnl The cache variable name.
619 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
621 AC_MSG_CHECKING(Haskell type for $1)
622 AC_CACHE_VAL(AC_CV_NAME,
623 [AC_TRY_RUN([#include <stdio.h>
626 #ifdef HAVE_SYS_TYPES_H
627 # include <sys/types.h>
634 #ifdef HAVE_SYS_STAT_H
635 # include <sys/stat.h>
650 #ifdef HAVE_TERMIOS_H
651 # include <termios.h>
666 #ifdef HAVE_OPENGL_GL_H
667 # include <OpenGL/gl.h>
670 #ifdef HAVE_SYS_RESOURCE_H
671 # include <sys/resource.h>
677 FILE *f=fopen("conftestval", "w");
679 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
681 ((testing)(-1) < (testing)0) ? "Int" : "Word",
685 (sizeof(testing) > sizeof(double)) ? "LDouble" :
686 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
690 }], AC_CV_NAME=`cat conftestval`,
691 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
692 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
693 AC_MSG_RESULT($AC_CV_NAME)
694 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
695 undefine([AC_TYPE_NAME])dnl
696 undefine([AC_CV_NAME])dnl
699 dnl ** figure out whether C compiler supports 'long long's
700 dnl (Closely based on Andreas Zeller's macro for testing
701 dnl for this under C++)
703 dnl If the C compiler supports `long long' types,
704 dnl define `HAVE_LONG_LONG'.
706 AC_DEFUN(FPTOOLS_C_LONG_LONG,
708 AC_REQUIRE([AC_PROG_CC])
709 AC_MSG_CHECKING(whether ${CC} supports long long types)
710 AC_CACHE_VAL(fptools_cv_have_long_long,
714 AC_TRY_COMPILE(,[long long a;],
715 fptools_cv_have_long_long=yes,
716 fptools_cv_have_long_long=no)
719 AC_MSG_RESULT($fptools_cv_have_long_long)
720 if test "$fptools_cv_have_long_long" = yes; then
721 AC_DEFINE(HAVE_LONG_LONG)
725 dnl ** Obtain the value of a C constant.
726 dnl The value will be `(-1)' if the constant is undefined.
728 dnl This is set up so that the argument can be a shell variable.
730 AC_DEFUN(FPTOOLS_CHECK_CCONST,
732 eval "cv_name=ac_cv_cconst_$1"
733 AC_MSG_CHECKING(value of $1)
734 AC_CACHE_VAL($cv_name,
735 [AC_TRY_RUN([#include <stdio.h>
739 FILE *f=fopen("conftestval", "w");
741 fprintf(f, "%d\n", $1);
744 eval "$cv_name=`cat conftestval`",
746 eval "$cv_name=-1")])dnl
747 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
748 AC_MSG_RESULT($fptools_check_cconst_result)
749 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
750 unset fptools_check_cconst_result
753 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
756 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
757 [for ac_const_name in $1
759 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
764 dnl *** Can we open files in binary mode? ***
766 AC_DEFUN(FPTOOLS_O_BINARY,
768 AC_REQUIRE([AC_PROG_CC])
769 AC_MSG_CHECKING(whether we can open files in binary mode)
770 AC_CACHE_VAL(fptools_cv_have_o_binary,
779 fptools_cv_have_o_binary=yes,
780 fptools_cv_have_o_binary=no)
783 AC_MSG_RESULT($fptools_cv_have_o_binary)
784 if test "$fptools_cv_have_o_binary" = yes; then
785 AC_DEFINE(HAVE_O_BINARY)
789 dnl *** Helper function **
791 AC_DEFUN(FPTOOLS_IN_SCOPE,
792 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
796 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
798 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
800 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
804 cat > conftest.$ac_ext <<EOF
805 dnl This sometimes fails to find confdefs.h, for some reason.
806 dnl [#]line __oline__ "[$]0"
807 [#]line __oline__ "configure"
808 #include "confdefs.h"
810 int t() { return 0; }
812 if AC_TRY_EVAL(ac_link); then
817 ifelse([$4], , , [else
827 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
829 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
831 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
832 [AC_MSG_CHECKING([for $1])
833 AC_CACHE_VAL(ac_cv_flag_$1,
834 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
835 eval "ac_cv_flag_$1=yes",
836 eval "ac_cv_flag_$1=no"
839 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
849 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
851 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
852 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
854 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
856 AC_DEFINE_UNQUOTED($ac_tr_lib)
858 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
860 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
862 AC_DEFINE_UNQUOTED($ac_tr_lib)
868 dnl check for prototypes
870 AC_DEFUN([AC_C_PROTOTYPES],
871 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
880 ac_cv_prototypes=yes,
881 ac_cv_prototypes=no)])
882 if test "$ac_cv_prototypes" = yes; then
883 AC_DEFINE([HAVE_PROTOTYPES])
887 dnl ** Check which CATALOG file we have to use with DocBook SGML.
889 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
891 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
892 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
893 dnl is set to "no". JADE is the jade executable and STYLESHEET
894 dnl a DocBook style sheet.
896 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
897 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
899 cat > conftest.sgml << EOF
900 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
904 <Author><OtherName>Test</OtherName></Author>
905 <Address>Test</Address>
906 <PubDate>Test</PubDate>
908 <Sect1><Title>Test</Title>
915 fptools_cv_sgml_catalog=no
916 if test -z "$SGML_CATALOG_FILES" ; then
917 for fptools_catalog in $4; do
918 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
919 if AC_TRY_EVAL(ac_try); then
920 fptools_cv_sgml_catalog=[$]fptools_catalog
925 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
926 fptools_cv_sgml_catalog="yes"
930 if test $fptools_cv_sgml_catalog != "no"; then
931 $1=$fptools_cv_sgml_catalog
935 dnl ######################################################################
936 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
937 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
938 dnl Search for a library defining FUNC, if it's not already available.
939 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
941 dnl ######################################################################
943 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
945 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
946 [ac_func_search_save_LIBS="$LIBS"
948 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
949 test "$ac_cv_search_$2" = "no" && for i in $3; do
950 LIBS="-l$i $6 $ac_func_search_save_LIBS"
951 AC_TRY_LINK([$1], [$2()],
952 [ac_cv_search_$2="-l$i"
955 LIBS="$ac_func_search_save_LIBS"])
956 if test "$ac_cv_search_$2" != "no"; then
957 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
963 dnl ####################### -*- Mode: M4 -*- ###########################
964 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
966 dnl This file is free software; you can redistribute it and/or modify it
967 dnl under the terms of the GNU General Public License as published by
968 dnl the Free Software Foundation; either version 2 of the License, or
969 dnl (at your option) any later version.
971 dnl This file is distributed in the hope that it will be useful, but
972 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
973 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
974 dnl General Public License for more details.
976 dnl You should have received a copy of the GNU General Public License
977 dnl along with this file; if not, write to:
979 dnl Free Software Foundation, Inc.
982 dnl Boston, MA 02111-1307, USA.
983 dnl ####################################################################
986 dnl @synopsis FPTOOLS_CHECK_LIBM
988 dnl Search for math library (typically -lm).
990 dnl The variable LIBM (which is not an output variable by default) is
991 dnl set to a value which is suitable for use in a Makefile (for example,
992 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
994 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
996 # FPTOOLS_CHECK_LIBM - check for math library
997 AC_DEFUN(FPTOOLS_CHECK_LIBM,
998 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1002 # These system don't have libm
1005 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1006 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1009 AC_CHECK_LIB(m, main, LIBM="-lm")
1014 dnl ######################################################################
1015 dnl Note: Caching has been completely rewritten, but is still no perfect yet.
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
1112 dnl and GL_X_LIBS/GLUT_X_LIBS.
1113 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1114 GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1115 GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1117 GL_save_CPPFLAGS="$CPPFLAGS"
1118 CPPFLAGS="$GL_CFLAGS"
1120 GL_save_LIBS="$LIBS"
1123 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1124 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1125 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1127 if test -n "$LIBS"; then
1128 GL_LIBS="$LDFLAGS $LIBS"
1136 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1138 if test -n "$LIBS"; then
1139 GLUT_LIBS="$LDFLAGS $LIBS"
1142 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1143 GL_CFLAGS="$mdl_cv_gl_cflags"
1145 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1146 GL_LIBS="$mdl_cv_gl_libs"
1148 AC_CACHE_CHECK([GLUT libs], mdl_cv_glut_libs, [mdl_cv_glut_libs="$GLUT_LIBS"])
1149 GLUT_LIBS="$mdl_cv_glut_libs"
1152 dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables
1153 dnl and we don't want to be global namespace polluters.
1157 LIBS="$GL_save_LIBS"
1158 CPPFLAGS="$GL_save_CPPFLAGS"
1166 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1167 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1168 dnl 'lex' is actually present along the user's PATH).
1170 AC_DEFUN(AC_PROG_LEX_STRICT,
1171 [AC_CHECK_PROG(LEX, flex, flex)
1174 AC_CHECK_PROG(LEX,lex,lex)
1175 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1180 dnl Check to see whether CC (gcc) supports a particular option.
1182 AC_DEFUN(FPTOOLS_CC_FLAG,
1184 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1185 [save_CFLAGS="$CFLAGS"
1188 AC_TRY_COMPILE(,[int main(){return(0);}],
1191 CFLAGS="$save_CFLAGS"
1193 if test "$ac_cv_cc_$2"x = "yesx"; then
1201 dnl Check to see whether 'struct msghdr' contains msg_control
1203 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1204 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1205 [AC_TRY_COMPILE([#include <sys/types.h>
1206 #include <sys/uio.h>
1207 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1208 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1209 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1210 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1212 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1216 dnl Check to see whether 'struct msghdr' contains msg_accrights
1218 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1219 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1220 [AC_TRY_COMPILE([#include <sys/types.h>
1221 #include <sys/uio.h>
1222 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1223 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1224 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1225 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1227 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl