1 dnl Extra autoconf macros for the Glasgow fptools
3 dnl To be a good autoconf citizen, names of local macros have
4 dnl prefixed with FPTOOLS_ to ensure we don't clash
5 dnl with any pre-supplied autoconf ones.
8 dnl Is timezone around? (in a header file)
10 AC_DEFUN(FPTOOLS_HAVE_TIMEZONE,
11 [AC_CACHE_CHECK([timezone], fptools_cv_have_timezone,
12 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
13 # include <sys/time.h>
17 # include <sys/time.h>
22 ], [return timezone;],
23 fptools_cv_have_timezone=yes, fptools_cv_have_timezone=no)])
24 if test "$fptools_cv_have_timezone" = yes; then
25 AC_DEFINE(HAVE_TIMEZONE)
30 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
33 AC_DEFUN(FPTOOLS_TYPE_TIMEZONE,
34 [AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone,
35 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
36 # include <sys/time.h>
40 # include <sys/time.h>
46 extern time_t timezone;
48 [int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
49 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
52 dnl *** Is altzone available? ***
54 AC_DEFUN(FPTOOLS_ALTZONE,
55 [AC_CACHE_CHECK([altzone], fptools_cv_altzone,
56 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
57 # include <sys/time.h>
61 # include <sys/time.h>
67 fptools_cv_altzone=yes, fptools_cv_altzone=no)])
68 if test "$fptools_cv_altzone" = yes; then
69 AC_DEFINE(HAVE_ALTZONE)
74 dnl *** Does libc contain GNU regex? ***
76 AC_DEFUN(FPTOOLS_REGEX_IN_LIBC,
77 [AC_CACHE_CHECK([for GNU regex in libc], fptools_cv_have_regex,
78 [AC_TRY_LINK([#if HAVE_UNISTD_H
82 ],[ struct re_pattern_buffer patbuf;
83 re_compile_pattern("",0,&patbuf);
84 re_search_2 (&patbuf, "", 0, "",0, 0,0,0,0); ],
85 fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
86 if test "$fptools_cv_have_regex" = yes; then
91 AC_SUBST(HaveGNURegex)
95 dnl ** check for leading underscores in symbol names
97 dnl Test for determining whether symbol names have a leading
100 dnl We assume that they _haven't_ if anything goes wrong.
102 dnl Some nlist implementations seem to try to be compatible by ignoring
103 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
104 dnl to work around this by checking for *no* leading underscore first.
107 dnl Similarly on OpenBSD, but this test doesn't help. -- dons
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 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
124 i386-*2\.[[0-9]] | i386-*3\.[[0-3]] ) fptools_cv_lead_uscore='yes' ;;
125 *) fptools_cv_lead_uscore='no' ;;
127 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
128 *cygwin32) fptools_cv_lead_uscore='yes';;
129 *mingw32) fptools_cv_lead_uscore='yes';;
132 AC_TRY_RUN([#ifdef HAVE_NLIST_H
134 changequote(<<, >>)dnl
136 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
137 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
145 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
147 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
152 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
155 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
156 AC_SUBST(LeadingUnderscore)
157 case $LeadingUnderscore in
158 YES) AC_DEFINE(LEADING_UNDERSCORE);;
163 dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
164 dnl ACTION-IF-TRUE [, ACTION-IF-FALSE])
166 dnl compare versions field-wise (separator is '.')
167 dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
169 dnl quite shell-independant and SUSv2 compliant code
171 dnl NOTE: the loop could be unrolled within autoconf, but the
172 dnl macro code would be a) longer and b) harder to debug... ;)
174 AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
179 set -- [$]a; h1="[$]1"; shift 2>/dev/null; a="[$]*"
180 set -- [$]b; h2="[$]1"; shift 2>/dev/null; b="[$]*"
181 test -n "[$]h1" || h1=0; test -n "[$]h2" || h2=0
182 test [$]{h1} -eq [$]{h2} || break
184 test [$]{h1} [$2] [$]{h2}
186 then ifelse([$4],,[:],[
196 dnl Check for Greencard and version.
198 AC_DEFUN(FPTOOLS_GREENCARD,
200 AC_PATH_PROG(GreencardCmd,greencard)
201 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
203 [if test x"$GreencardCmd" != x; then
204 fptools_cv_greencard_version="`$GreencardCmd --version |
205 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
207 fptools_cv_greencard_version=""
211 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_greencard_version],-lt,$1,
212 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])dnl
213 GreencardVersion=$fptools_cv_greencard_version
214 AC_SUBST(GreencardVersion)
218 dnl Check for Happy and version. If we're building GHC, then we need
219 dnl at least Happy version 1.13. If there's no installed Happy, we look
220 dnl for a happy source tree and point the build system at that instead.
222 AC_DEFUN(FPTOOLS_HAPPY,
224 if test -d $srcdir/happy; then
225 SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
227 if test x"$UseSrcTreeHappy" = xYES; then
228 HappyCmd=$SrcTreeHappyCmd
230 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
232 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
234 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
235 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
236 elif test x"$HappyCmd" != x; then
237 fptools_cv_happy_version="`$HappyCmd -v |
238 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
240 fptools_cv_happy_version="";
244 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
245 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13],
246 [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
248 HappyVersion=$fptools_cv_happy_version;
249 AC_SUBST(HappyVersion)
253 dnl Check for Haddock and version. If there's no installed Haddock, we look
254 dnl for a haddock source tree and point the build system at that instead.
256 AC_DEFUN(FPTOOLS_HADDOCK,
258 if test -d $srcdir/haddock; then
259 SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
261 if test x"$UseSrcTreeHaddock" = xYES; then
262 HaddockCmd=$SrcTreeHaddockCmd
264 AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
266 dnl Darn, I forgot to make Haddock print out its version number when
267 dnl invoked with -v. We could try generating some HTML and grepping
268 dnl through that to find the version number, but I think we'll make
269 dnl do without it for now.
273 dnl Check for Alex and version. If we're building GHC, then we need
274 dnl at least Alex version 2.0. If there's no installed Alex, we look
275 dnl for a alex source tree and point the build system at that instead.
277 AC_DEFUN(FPTOOLS_ALEX,
279 if test -d $srcdir/alex; then
280 SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
282 if test x"$UseSrcTreeAlex" = xYES; then
283 AlexCmd=$SrcTreeAlexCmd
285 AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
287 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
289 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
290 fptools_cv_alex_version=`grep '^ProjectVersion[ ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
291 elif test x"$AlexCmd" != x; then
292 fptools_cv_alex_version="`$AlexCmd -v |
293 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
295 fptools_cv_alex_version="";
299 dnl if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
300 dnl FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0],
301 dnl [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl
303 AlexVersion=$fptools_cv_alex_version;
304 AC_SUBST(AlexVersion)
308 dnl What's the best way of doing context diffs?
310 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
312 AC_DEFUN(FPTOOLS_PROG_DIFF,
313 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
314 [echo foo > conftest1
316 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
317 fptools_cv_context_diffs='diff -C 1'
319 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
320 fptools_cv_context_diffs='diff -c1'
322 echo "Can't figure out how to do context diffs."
323 echo "Neither \`diff -C 1' nor \`diff -c1' works."
327 rm -f conftest1 conftest2
329 ContextDiffCmd=$fptools_cv_context_diffs
330 AC_SUBST(ContextDiffCmd)
334 dnl Check whether ld supports -x
336 AC_DEFUN(FPTOOLS_LD_X,
337 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
339 echo 'foo() {}' > conftest.c
340 ${CC-cc} -c conftest.c
341 if ${LdCmd} -r -x -o foo.o conftest.o; then
346 rm -rf conftest.c conftest.o foo.o
348 if test "$fptools_cv_ld_x" = yes; then
357 dnl Finding the Right Yacc
359 AC_DEFUN(FPTOOLS_PROG_YACCY,
361 if test "$YACC" = "yacc"; then
362 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
363 [AC_CHECK_PROG(WhatCmd, what, what, :)
364 $WhatCmd $YACC > conftest.out
365 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
366 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
367 if test -f /usr/lang/yacc; then
368 echo "I'm going to use /usr/lang/yacc instead"
369 ac_cv_prog_yacc=/usr/lang/yacc
371 echo "I'm assuming the worst...no parser generator at all"
374 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
375 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
376 echo "I'm assuming the worst...no parser generator at all"
379 ac_cv_prog_yacc=$YACC
384 ac_cv_prog_yacc=$YACC
386 YaccCmd=$ac_cv_prog_yacc
390 dnl *** Checking for ar and its arguments + whether we need ranlib.
392 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
393 dnl On Digital UNIX, we test for the -Z (compress) and
394 dnl -input (take list of files from external file) flags.
396 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
397 [AC_PATH_PROG(ArCmdRaw,ar)
398 if test -z "$ArCmdRaw"; then
399 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
402 dnl GNU ar needs special treatment: it appears to have problems with
403 dnl object files with the same name if you use the 's' modifier, but
404 dnl simple 'ar q' works fine, and doesn't need a separate ranlib.
405 if $ArCmdRaw --version | grep 'GNU' >/dev/null 2>/dev/null; then
408 elif $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
411 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
414 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
417 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
420 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
423 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
427 echo "I can't figure out how to use your $ArCmd"
431 case $HostPlatform in
433 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
435 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
438 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
440 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
441 ArSupportsInput='-input'
446 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
447 AC_SUBST(ArSupportsInput)
448 if test -z "$NeedRanLib"; then
450 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
458 dnl AC_SHEBANG_PERL - can we she-bang perl?
460 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
461 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
466 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
467 if test $? -ne 69; then
468 fptools_cv_shebang_perl=yes
470 fptools_cv_shebang_perl=no
476 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
477 dnl *Must* be called after AC_PROG_CC
479 AC_DEFUN(FPTOOLS_HAVE_GCC,
480 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
481 [if test -z "$GCC"; then
483 echo "You would be better off with gcc"
484 echo "Perhaps it is already installed, but not in your PATH?"
485 fptools_cv_have_gcc='no'
488 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' `"
490 fptools_cv_have_gcc='yes'
491 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
492 fptools_cv_have_gcc='no'
494 echo "your gcc version appears to be ..."
496 echo "gcc prior to 2.0 and have never worked with ghc."
497 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
498 AC_MSG_ERROR([gcc 1.X has never been supported])
502 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
507 dnl Some OSs (Mandrake Linux, in particular) configure GCC with
508 dnl -momit-leaf-frame-pointer on by default. If this is the case, we
509 dnl need to turn it off for mangling to work. The test is currently a bit
510 dnl crude, using only the version number of gcc.
512 AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
513 [AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
515 fptools_cv_gcc_needs_no_omit_lfptr='no'
516 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
517 fptools_cv_gcc_needs_no_omit_lfptr='yes')
519 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
520 AC_DEFINE(HAVE_GCC_MNO_OMIT_LFPTR)
524 dnl Small feature test for perl version. Assumes PerlCmd
525 dnl contains path to perl binary
527 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
528 [$PerlCmd -v >conftest.out 2>&1
529 if grep "version 5" conftest.out >/dev/null 2>&1; then
532 if grep "v5.6" conftest.out >/dev/null 2>&1; then
535 if grep "v5.8" conftest.out >/dev/null 2>&1; then
538 if grep "version 6" conftest.out >/dev/null 2>&1; then
541 echo "Your version of perl probably won't work."
550 dnl Getting at the right version of 'find'
551 dnl (i.e., not the MS util on a Win32 box).
553 AC_DEFUN(FPTOOLS_FIND_FIND,
555 AC_PATH_PROG(Find2Cmd, find)
556 $Find2Cmd --version > conftest.out 2>&1
557 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
558 # Encountered MS' find utility, which is not what we're after.
560 # HACK - AC_CHECK_PROG is useful here in that does let you reject
561 # an (absolute) entry in the path (Find2Cmd). It is not so useful
562 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
563 # absolute path eventually found. So, hack around this by inspecting
564 # what variables hold the abs. path & use them directly.
565 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
573 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
574 dnl values of the second argument to the result of running
575 dnl the commands given by the third. It does not cache its
576 dnl result, so it is suitable for checks which should be
579 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
580 [AC_MSG_CHECKING([$1])
582 AC_MSG_RESULT([$][$2])
586 dnl FPTOOLS_GHC_VERSION(version)
587 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
588 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
590 dnl Test for version of installed ghc. Uses $GHC.
591 dnl [original version pinched from c2hs]
593 AC_DEFUN(FPTOOLS_GHC_VERSION,
594 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
595 ["${WithGhc-ghc}" --version > conftestghc 2>&1
596 cat conftestghc >&AC_FD_CC
597 #Useless Use Of cat award...
598 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
600 if test "[$]fptools_version_of_ghc" = ""
602 fptools_version_of_ghc='unknown'
604 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
605 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
606 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
608 if test "[$]fptools_version_of_ghc[_pl]" = ""
610 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
611 fptools_version_of_ghc[_pl]="0"
613 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
617 [$1]="[$]fptools_version_of_ghc[_all]"
619 [$1]="[$]fptools_version_of_ghc[_major]"
620 [$2]="[$]fptools_version_of_ghc[_minor]"
622 [$1]="[$]fptools_version_of_ghc[_major]"
623 [$2]="[$]fptools_version_of_ghc[_minor]"
624 [$3]="[$]fptools_version_of_ghc[_pl]"
626 [$1]="[$]fptools_version_of_ghc[_all]"
627 [$2]="[$]fptools_version_of_ghc[_major]"
628 [$3]="[$]fptools_version_of_ghc[_minor]"
629 [$4]="[$]fptools_version_of_ghc[_pl]"
635 dnl ** figure out the alignment restriction of a type
636 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
637 dnl so we can't call REQUIRE)
639 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
640 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
641 [changequote(<<, >>)dnl
642 dnl The name to #define.
643 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
644 dnl The cache variable name.
645 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
646 dnl The name of the corresponding size.
647 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
649 AC_MSG_CHECKING(alignment of $1)
650 AC_CACHE_VAL(AC_CV_NAME,
657 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
662 FILE *f=fopen("conftestval", "w");
664 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
667 AC_CV_NAME=`cat conftestval`,
668 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
669 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
670 AC_MSG_RESULT($AC_CV_NAME)
671 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
672 AC_PROVIDE($AC_TYPE_NAME)
673 undefine([AC_TYPE_NAME])dnl
674 undefine([AC_CV_NAME])dnl
675 undefine([AC_CV_SIZEOF_NAME])dnl
678 dnl ** Map an arithmetic C type to a Haskell type.
679 dnl Based on autconf's AC_CHECK_SIZEOF.
681 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
682 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
683 [changequote(<<, >>)dnl
684 dnl The name to #define.
685 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
686 dnl The cache variable name.
687 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
689 AC_MSG_CHECKING(Haskell type for $1)
690 AC_CACHE_VAL(AC_CV_NAME,
691 [AC_TRY_RUN([#include <stdio.h>
694 #ifdef HAVE_SYS_TYPES_H
695 # include <sys/types.h>
702 #ifdef HAVE_SYS_STAT_H
703 # include <sys/stat.h>
718 #ifdef HAVE_TERMIOS_H
719 # include <termios.h>
734 #ifdef HAVE_OPENGL_GL_H
735 # include <OpenGL/gl.h>
738 #ifdef HAVE_SYS_RESOURCE_H
739 # include <sys/resource.h>
745 FILE *f=fopen("conftestval", "w");
747 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
749 ((testing)(-1) < (testing)0) ? "Int" : "Word",
753 (sizeof(testing) > sizeof(double)) ? "LDouble" :
754 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
758 }], AC_CV_NAME=`cat conftestval`,
759 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
760 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
761 AC_MSG_RESULT($AC_CV_NAME)
762 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
763 undefine([AC_TYPE_NAME])dnl
764 undefine([AC_CV_NAME])dnl
767 dnl ** figure out whether C compiler supports 'long long's
768 dnl (Closely based on Andreas Zeller's macro for testing
769 dnl for this under C++)
771 dnl If the C compiler supports `long long' types,
772 dnl define `HAVE_LONG_LONG'.
774 AC_DEFUN(FPTOOLS_C_LONG_LONG,
776 AC_REQUIRE([AC_PROG_CC])
777 AC_MSG_CHECKING(whether ${CC} supports long long types)
778 AC_CACHE_VAL(fptools_cv_have_long_long,
782 AC_TRY_COMPILE(,[long long a;],
783 fptools_cv_have_long_long=yes,
784 fptools_cv_have_long_long=no)
787 AC_MSG_RESULT($fptools_cv_have_long_long)
788 if test "$fptools_cv_have_long_long" = yes; then
789 AC_DEFINE(HAVE_LONG_LONG)
793 dnl ** Obtain the value of a C constant.
794 dnl The value will be `(-1)' if the constant is undefined.
796 dnl This is set up so that the argument can be a shell variable.
798 AC_DEFUN(FPTOOLS_CHECK_CCONST,
800 eval "cv_name=ac_cv_cconst_$1"
801 AC_MSG_CHECKING(value of $1)
802 AC_CACHE_VAL($cv_name,
803 [AC_TRY_RUN([#include <stdio.h>
807 FILE *f=fopen("conftestval", "w");
809 fprintf(f, "%d\n", $1);
812 eval "$cv_name=`cat conftestval`",
814 eval "$cv_name=-1")])dnl
815 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
816 AC_MSG_RESULT($fptools_check_cconst_result)
817 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
818 unset fptools_check_cconst_result
821 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
824 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
825 [for ac_const_name in $1
827 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
832 dnl *** Can we open files in binary mode? ***
834 AC_DEFUN(FPTOOLS_O_BINARY,
836 AC_REQUIRE([AC_PROG_CC])
837 AC_MSG_CHECKING(whether we can open files in binary mode)
838 AC_CACHE_VAL(fptools_cv_have_o_binary,
847 fptools_cv_have_o_binary=yes,
848 fptools_cv_have_o_binary=no)
851 AC_MSG_RESULT($fptools_cv_have_o_binary)
852 if test "$fptools_cv_have_o_binary" = yes; then
853 AC_DEFINE(HAVE_O_BINARY)
857 dnl *** Helper function **
859 AC_DEFUN(FPTOOLS_IN_SCOPE,
860 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
864 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
866 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
868 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
872 cat > conftest.$ac_ext <<EOF
873 dnl This sometimes fails to find confdefs.h, for some reason.
874 dnl [#]line __oline__ "[$]0"
875 [#]line __oline__ "configure"
876 #include "confdefs.h"
878 int t() { return 0; }
880 if AC_TRY_EVAL(ac_link); then
885 ifelse([$4], , , [else
895 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
897 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
899 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
900 [AC_MSG_CHECKING([for $1])
901 AC_CACHE_VAL(ac_cv_flag_$1,
902 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
903 eval "ac_cv_flag_$1=yes",
904 eval "ac_cv_flag_$1=no"
907 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
917 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
919 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
920 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
922 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
924 AC_DEFINE_UNQUOTED($ac_tr_lib)
926 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
928 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
930 AC_DEFINE_UNQUOTED($ac_tr_lib)
936 dnl check for prototypes
938 AC_DEFUN([AC_C_PROTOTYPES],
939 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
948 ac_cv_prototypes=yes,
949 ac_cv_prototypes=no)])
950 if test "$ac_cv_prototypes" = yes; then
951 AC_DEFINE([HAVE_PROTOTYPES])
955 dnl ** Check which CATALOG file we have to use with DocBook SGML.
957 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
959 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
960 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
961 dnl is set to "no". JADE is the jade executable and STYLESHEET
962 dnl a DocBook style sheet.
964 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
965 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
967 cat > conftest.sgml << EOF
968 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
972 <Author><OtherName>Test</OtherName></Author>
973 <Address>Test</Address>
974 <PubDate>Test</PubDate>
976 <Sect1><Title>Test</Title>
983 fptools_cv_sgml_catalog=no
984 if test -z "$SGML_CATALOG_FILES" ; then
985 for fptools_catalog in $4; do
986 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
987 if AC_TRY_EVAL(ac_try); then
988 fptools_cv_sgml_catalog=[$]fptools_catalog
993 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
994 fptools_cv_sgml_catalog="yes"
998 if test $fptools_cv_sgml_catalog != "no"; then
999 $1=$fptools_cv_sgml_catalog
1003 dnl ######################################################################
1004 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1005 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1006 dnl Search for a library defining FUNC, if it's not already available.
1007 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1009 dnl ######################################################################
1011 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1013 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1014 [ac_func_search_save_LIBS="$LIBS"
1015 ac_cv_search_$2="no"
1016 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1017 test "$ac_cv_search_$2" = "no" && for i in $3; do
1018 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1019 AC_TRY_LINK([$1], [$2()],
1020 [ac_cv_search_$2="-l$i"
1023 LIBS="$ac_func_search_save_LIBS"])
1024 if test "$ac_cv_search_$2" != "no"; then
1025 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1031 dnl ####################### -*- Mode: M4 -*- ###########################
1032 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1034 dnl This file is free software; you can redistribute it and/or modify it
1035 dnl under the terms of the GNU General Public License as published by
1036 dnl the Free Software Foundation; either version 2 of the License, or
1037 dnl (at your option) any later version.
1039 dnl This file is distributed in the hope that it will be useful, but
1040 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1041 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1042 dnl General Public License for more details.
1044 dnl You should have received a copy of the GNU General Public License
1045 dnl along with this file; if not, write to:
1047 dnl Free Software Foundation, Inc.
1050 dnl Boston, MA 02111-1307, USA.
1051 dnl ####################################################################
1054 dnl @synopsis FPTOOLS_CHECK_LIBM
1056 dnl Search for math library (typically -lm).
1058 dnl The variable LIBM (which is not an output variable by default) is
1059 dnl set to a value which is suitable for use in a Makefile (for example,
1060 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1062 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1064 # FPTOOLS_CHECK_LIBM - check for math library
1065 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1066 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1070 # These system don't have libm
1073 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1074 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1077 AC_CHECK_LIB(m, main, LIBM="-lm")
1082 dnl ######################################################################
1083 dnl Note: Caching has been completely rewritten, but is still no perfect yet.
1084 dnl ######################################################################
1086 dnl ########################### -*- Mode: M4 -*- #######################
1087 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1089 dnl This file is free software; you can redistribute it and/or modify it
1090 dnl under the terms of the GNU General Public License as published by
1091 dnl the Free Software Foundation; either version 2 of the License, or
1092 dnl (at your option) any later version.
1094 dnl This file is distributed in the hope that it will be useful, but
1095 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1096 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1097 dnl General Public License for more details.
1099 dnl You should have received a copy of the GNU General Public License
1100 dnl along with this file; if not, write to:
1102 dnl Free Software Foundation, Inc.
1105 dnl Boston, MA 02111-1307, USA.
1106 dnl ####################################################################
1108 dnl @synopsis FPTOOLS_HAVE_OPENGL
1110 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1111 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
1112 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
1114 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1115 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1118 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1119 dnl be missing) are added to the shell output variable "GL_LIBS", along
1120 dnl with any other libraries that are necessary to successfully link an
1121 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1122 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1125 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1126 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1127 dnl an OpenGL application.
1129 dnl The following shell variable (which are not output variables) are
1130 dnl also set to either "yes" or "no" (depending on which libraries were
1131 dnl found) to help you determine exactly what was found.
1138 dnl A complete little toy "Automake `make distcheck'" package of how to
1139 dnl use this macro is available at:
1141 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1143 dnl Please note that as the ac_opengl macro and the toy example evolves,
1144 dnl the version number increases, so you may have to adjust the above
1145 dnl URL accordingly.
1147 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1149 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1151 AC_REQUIRE([AC_PROG_CC])
1152 AC_REQUIRE([AC_PATH_X])
1153 AC_REQUIRE([AC_PATH_XTRA])
1154 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1156 dnl Check for Mesa first if we were asked to.
1159 Prefer Mesa over a vendor's native OpenGL library (default=no)
1161 use_Mesa=$enableval,
1164 if test x"$use_Mesa" = xyes; then
1165 GL_search_list="MesaGL GL opengl32"
1166 GLU_search_list="MesaGLU GLU glu32"
1167 GLX_search_list="MesaGLX GLX"
1169 GL_search_list="GL opengl32 MesaGL"
1170 GLU_search_list="GLU glu32 MesaGLU"
1171 GLX_search_list="GLX MesaGLX"
1177 dnl If we are running under X11 then add in the appropriate libraries.
1178 if test x"$no_x" != xyes; then
1179 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1180 dnl and GL_X_LIBS/GLUT_X_LIBS.
1181 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1182 GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1183 GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1185 GL_save_CPPFLAGS="$CPPFLAGS"
1186 CPPFLAGS="$GL_CFLAGS"
1188 GL_save_LIBS="$LIBS"
1191 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1192 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1193 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1195 if test -n "$LIBS"; then
1196 GL_LIBS="$LDFLAGS $LIBS"
1204 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1206 if test -n "$LIBS"; then
1207 GLUT_LIBS="$LDFLAGS $LIBS"
1210 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1211 GL_CFLAGS="$mdl_cv_gl_cflags"
1213 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1214 GL_LIBS="$mdl_cv_gl_libs"
1216 AC_CACHE_CHECK([GLUT libs], mdl_cv_glut_libs, [mdl_cv_glut_libs="$GLUT_LIBS"])
1217 GLUT_LIBS="$mdl_cv_glut_libs"
1220 dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables
1221 dnl and we don't want to be global namespace polluters.
1225 LIBS="$GL_save_LIBS"
1226 CPPFLAGS="$GL_save_CPPFLAGS"
1234 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1235 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1236 dnl 'lex' is actually present along the user's PATH).
1238 AC_DEFUN(AC_PROG_LEX_STRICT,
1239 [AC_CHECK_PROG(LEX, flex, flex)
1242 AC_CHECK_PROG(LEX,lex,lex)
1243 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1248 dnl Check to see whether CC (gcc) supports a particular option.
1250 AC_DEFUN(FPTOOLS_CC_FLAG,
1252 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1253 [save_CFLAGS="$CFLAGS"
1256 AC_TRY_COMPILE(,[int main(){return(0);}],
1259 CFLAGS="$save_CFLAGS"
1261 if test "$ac_cv_cc_$2"x = "yesx"; then
1269 dnl Check to see whether 'struct msghdr' contains msg_control
1271 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1272 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1273 [AC_TRY_COMPILE([#include <sys/types.h>
1274 #include <sys/uio.h>
1275 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1276 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1277 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1278 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1280 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1284 dnl Check to see whether 'struct msghdr' contains msg_accrights
1286 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1287 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1288 [AC_TRY_COMPILE([#include <sys/types.h>
1289 #include <sys/uio.h>
1290 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1291 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1292 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1293 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1295 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl