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.
7 # FP_EVAL_STDERR(COMMAND)
8 # ------------------------
9 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
10 # into the file conftest.err and the exit status in the variable fp_status.
11 AC_DEFUN([FP_EVAL_STDERR],
12 [{ (eval $1) 2>conftest.er1
14 grep -v '^ *+' conftest.er1 >conftest.err
16 (exit $fp_status); }[]dnl
20 # FP_CHECK_FLAG(FLAG, [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED])
21 # -----------------------------------------------------------------------
22 # Check to see whether the compiler for the current language supports a
25 # Implementation note: When given an unkown option, GCC issues an warning on
26 # stderr only, but returns an exit value of 0 nevertheless. Consequently we have
27 # to check stderr *and* the exit value.
30 AC_DEFUN(FP_CHECK_FLAG,
31 [AC_LANG_COMPILER_REQUIRE()dnl
32 AC_LANG_CASE([C], [fp_compiler="$CC" m4_pushdef([fp_Flags], [CFLAGS])],
33 [C++], [fp_compiler="$CXX" m4_pushdef([fp_Flags], [CXXFLAGS])],
34 [Fortran 77], [fp_compiler="$F77" m4_pushdef([fp_Flags], [FFLAGS])])
35 m4_pushdef([fp_Cache], [fp_cv_[]fp_Flags[]AS_TR_SH([$1])])[]dnl
36 AC_CACHE_CHECK([whether $fp_compiler accepts $1], [fp_Cache],
37 [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
38 fp_save_flags="$fp_Flags"
39 fp_Flags="$fp_Flags $1"
41 if FP_EVAL_STDERR([$ac_compile conftest.$ac_ext]) >/dev/null; then
42 test -s conftest.err || fp_Cache=yes
44 fp_Flags="$fp_save_flags"
45 rm -f conftest.err conftest.$ac_ext])
46 AS_IF([test $fp_Cache = yes], [$2], [$3])[]dnl
47 m4_popdef([fp_Cache])[]dnl
48 m4_popdef([fp_Flags])[]dnl
52 # FP_PROG_CONTEXT_DIFF
53 # --------------------
54 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
56 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
58 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
59 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
60 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
64 for fp_var in '-C 1' '-c1'
66 if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
67 fp_cv_context_diff="diff $fp_var"
71 if test x"$fp_cv_context_diff" = xno; then
72 AC_MSG_ERROR([cannot figure out how to do context diffs])
74 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
75 ])# FP_PROG_CONTEXT_DIFF
80 # Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise.
82 # Used by base package.
83 AC_DEFUN([FP_DECL_ALTZONE],
84 [AC_REQUIRE([AC_HEADER_TIME])dnl
85 AC_CHECK_HEADERS([sys/time.h])
86 AC_CHECK_DECLS([altzone], [], [],[#if TIME_WITH_SYS_TIME
87 # include <sys/time.h>
91 # include <sys/time.h>
99 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
100 # ---------------------------------------------------------
101 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
102 # compilation. Execute IF-FAILS when unable to determine the value. Works for
103 # cross-compilation, too.
105 # Implementation note: We are lazy and use an internal autoconf macro, but it
106 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
108 AC_DEFUN([FP_COMPUTE_INT],
109 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
113 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
114 # ------------------------------------------------------------------
115 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
116 # given type. Defines ALIGNMENT_TYPE.
117 AC_DEFUN([FP_CHECK_ALIGNMENT],
118 [AS_LITERAL_IF([$1], [],
119 [AC_FATAL([$0: requires literal arguments])])[]dnl
120 AC_CHECK_TYPE([$1], [], [], [$3])
121 AC_CACHE_CHECK([alignment of $1], AS_TR_SH([fp_cv_alignment_$1]),
122 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
123 FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
124 [AS_TR_SH([fp_cv_alignment_$1])],
125 [AC_INCLUDES_DEFAULT([$3])],
126 [AC_MSG_ERROR([cannot compute alignment ($1)
127 See `config.log' for more details.], [77])])
129 AS_TR_SH([fp_cv_alignment_$1])=0
131 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $AS_TR_SH([fp_cv_alignment_$1]),
132 [The alignment of a `$1'.])
133 ])# FP_CHECK_ALIGNMENT
136 dnl ** check for leading underscores in symbol names
138 dnl Test for determining whether symbol names have a leading
141 dnl We assume that they _haven't_ if anything goes wrong.
143 dnl Some nlist implementations seem to try to be compatible by ignoring
144 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
145 dnl to work around this by checking for *no* leading underscore first.
148 dnl Similarly on OpenBSD, but this test doesn't help. -- dons
150 AC_DEFUN(FPTOOLS_UNDERSCORE,
151 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
152 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
155 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
156 dnl but symbol table listings shows none. What is going on here?!?
158 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
159 dnl the underscoredness of that "platform"
160 changequote(<<, >>)dnl
162 case $HostPlatform in
163 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
165 i386-*2\.[[0-9]] | i386-*3\.[[0-3]] ) fptools_cv_lead_uscore='yes' ;;
166 *) fptools_cv_lead_uscore='no' ;;
168 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
169 *cygwin32) fptools_cv_lead_uscore='yes';;
170 *mingw32) fptools_cv_lead_uscore='yes';;
173 AC_TRY_RUN([#ifdef HAVE_NLIST_H
175 changequote(<<, >>)dnl
177 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
178 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
186 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
188 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
193 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
196 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
197 AC_SUBST(LeadingUnderscore)
198 case $LeadingUnderscore in
199 YES) AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.]);;
204 dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
205 dnl ACTION-IF-TRUE [, ACTION-IF-FALSE])
207 dnl compare versions field-wise (separator is '.')
208 dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
210 dnl quite shell-independant and SUSv2 compliant code
212 dnl NOTE: the loop could be unrolled within autoconf, but the
213 dnl macro code would be a) longer and b) harder to debug... ;)
215 AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
220 set -- [$]a; h1="[$]1"; shift 2>/dev/null; a="[$]*"
221 set -- [$]b; h2="[$]1"; shift 2>/dev/null; b="[$]*"
222 test -n "[$]h1" || h1=0; test -n "[$]h2" || h2=0
223 test [$]{h1} -eq [$]{h2} || break
225 test [$]{h1} [$2] [$]{h2}
227 then ifelse([$4],,[:],[
237 dnl Check for Greencard and version.
239 AC_DEFUN(FPTOOLS_GREENCARD,
241 AC_PATH_PROG(GreencardCmd,greencard)
242 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
244 [if test x"$GreencardCmd" != x; then
245 fptools_cv_greencard_version="`$GreencardCmd --version |
246 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
248 fptools_cv_greencard_version=""
252 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_greencard_version],-lt,$1,
253 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])dnl
254 GreencardVersion=$fptools_cv_greencard_version
255 AC_SUBST(GreencardVersion)
259 dnl Check for Happy and version. If we're building GHC, then we need
260 dnl at least Happy version 1.13. If there's no installed Happy, we look
261 dnl for a happy source tree and point the build system at that instead.
263 AC_DEFUN(FPTOOLS_HAPPY,
265 if test -d $srcdir/happy; then
266 SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
268 if test x"$UseSrcTreeHappy" = xYES; then
269 HappyCmd=$SrcTreeHappyCmd
271 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
273 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
275 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
276 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
277 elif test x"$HappyCmd" != x; then
278 fptools_cv_happy_version="`$HappyCmd -v |
279 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
281 fptools_cv_happy_version="";
285 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
286 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13],
287 [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
289 HappyVersion=$fptools_cv_happy_version;
290 AC_SUBST(HappyVersion)
294 dnl Check for Haddock and version. If there's no installed Haddock, we look
295 dnl for a haddock source tree and point the build system at that instead.
297 AC_DEFUN(FPTOOLS_HADDOCK,
299 if test -d $srcdir/haddock; then
300 SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
302 if test x"$UseSrcTreeHaddock" = xYES; then
303 HaddockCmd=$SrcTreeHaddockCmd
305 AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
307 dnl Darn, I forgot to make Haddock print out its version number when
308 dnl invoked with -v. We could try generating some HTML and grepping
309 dnl through that to find the version number, but I think we'll make
310 dnl do without it for now.
314 dnl Check for Alex and version. If we're building GHC, then we need
315 dnl at least Alex version 2.0. If there's no installed Alex, we look
316 dnl for a alex source tree and point the build system at that instead.
318 AC_DEFUN(FPTOOLS_ALEX,
320 if test -d $srcdir/alex; then
321 SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
323 if test x"$UseSrcTreeAlex" = xYES; then
324 AlexCmd=$SrcTreeAlexCmd
326 AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
328 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
330 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
331 fptools_cv_alex_version=`grep '^ProjectVersion[ ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
332 elif test x"$AlexCmd" != x; then
333 fptools_cv_alex_version="`$AlexCmd -v |
334 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
336 fptools_cv_alex_version="";
340 dnl if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
341 dnl FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0],
342 dnl [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl
344 AlexVersion=$fptools_cv_alex_version;
345 AC_SUBST(AlexVersion)
350 dnl Check whether ld supports -x
352 AC_DEFUN(FPTOOLS_LD_X,
353 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
355 echo 'foo() {}' > conftest.c
356 ${CC-cc} -c conftest.c
357 if ${LdCmd} -r -x -o foo.o conftest.o; then
362 rm -rf conftest.c conftest.o foo.o
364 if test "$fptools_cv_ld_x" = yes; then
373 dnl *** Checking for ar and its arguments + whether we need ranlib.
375 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
376 dnl On Digital UNIX, we test for the -Z (compress) and
377 dnl -input (take list of files from external file) flags.
379 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
380 [AC_PATH_PROG(ArCmdRaw,ar)
381 if test -z "$ArCmdRaw"; then
382 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
385 dnl GNU ar needs special treatment: it appears to have problems with
386 dnl object files with the same name if you use the 's' modifier, but
387 dnl simple 'ar q' works fine, and doesn't need a separate ranlib.
388 if $ArCmdRaw --version | grep 'GNU' >/dev/null 2>/dev/null; then
391 elif $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
394 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
397 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
400 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
403 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
406 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
410 echo "I can't figure out how to use your $ArCmd"
414 case $HostPlatform in
416 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
418 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
421 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
423 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
424 ArSupportsInput='-input'
429 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
430 AC_SUBST(ArSupportsInput)
431 if test -z "$NeedRanLib"; then
433 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
441 dnl AC_SHEBANG_PERL - can we she-bang perl?
443 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
444 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
449 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
450 if test $? -ne 69; then
451 fptools_cv_shebang_perl=yes
453 fptools_cv_shebang_perl=no
459 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
460 dnl *Must* be called after AC_PROG_CC
462 AC_DEFUN(FPTOOLS_HAVE_GCC,
463 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
464 [if test -z "$GCC"; then
466 echo "You would be better off with gcc"
467 echo "Perhaps it is already installed, but not in your PATH?"
468 fptools_cv_have_gcc='no'
471 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' `"
473 fptools_cv_have_gcc='yes'
474 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
475 fptools_cv_have_gcc='no'
477 echo "your gcc version appears to be ..."
479 echo "gcc prior to 2.0 and have never worked with ghc."
480 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
481 AC_MSG_ERROR([gcc 1.X has never been supported])
485 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
490 dnl Some OSs (Mandrake Linux, in particular) configure GCC with
491 dnl -momit-leaf-frame-pointer on by default. If this is the case, we
492 dnl need to turn it off for mangling to work. The test is currently a bit
493 dnl crude, using only the version number of gcc.
495 AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
496 [AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
498 fptools_cv_gcc_needs_no_omit_lfptr='no'
499 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
500 fptools_cv_gcc_needs_no_omit_lfptr='yes')
502 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
503 AC_DEFINE([HAVE_GCC_MNO_OMIT_LFPTR], [1], [Define to 1 if gcc supports -mno-omit-leaf-frame-pointer.])
507 dnl Small feature test for perl version. Assumes PerlCmd
508 dnl contains path to perl binary
510 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
511 [$PerlCmd -v >conftest.out 2>&1
512 if grep "version 5" conftest.out >/dev/null 2>&1; then
515 if grep "v5.6" conftest.out >/dev/null 2>&1; then
518 if grep "v5.8" conftest.out >/dev/null 2>&1; then
521 if grep "version 6" conftest.out >/dev/null 2>&1; then
524 echo "Your version of perl probably won't work."
533 dnl Getting at the right version of 'find'
534 dnl (i.e., not the MS util on a Win32 box).
536 AC_DEFUN(FPTOOLS_FIND_FIND,
538 AC_PATH_PROG(Find2Cmd, find)
539 $Find2Cmd --version > conftest.out 2>&1
540 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
541 # Encountered MS' find utility, which is not what we're after.
543 # HACK - AC_CHECK_PROG is useful here in that does let you reject
544 # an (absolute) entry in the path (Find2Cmd). It is not so useful
545 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
546 # absolute path eventually found. So, hack around this by inspecting
547 # what variables hold the abs. path & use them directly.
548 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
556 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
557 dnl values of the second argument to the result of running
558 dnl the commands given by the third. It does not cache its
559 dnl result, so it is suitable for checks which should be
562 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
563 [AC_MSG_CHECKING([$1])
565 AC_MSG_RESULT([$][$2])
569 dnl FPTOOLS_GHC_VERSION(version)
570 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
571 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
573 dnl Test for version of installed ghc. Uses $GHC.
574 dnl [original version pinched from c2hs]
576 AC_DEFUN(FPTOOLS_GHC_VERSION,
577 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
578 ["${WithGhc-ghc}" --version > conftestghc 2>&1
579 cat conftestghc >&AC_FD_CC
580 #Useless Use Of cat award...
581 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
583 if test "[$]fptools_version_of_ghc" = ""
585 fptools_version_of_ghc='unknown'
587 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
588 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
589 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
591 if test "[$]fptools_version_of_ghc[_pl]" = ""
593 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
594 fptools_version_of_ghc[_pl]="0"
596 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
600 [$1]="[$]fptools_version_of_ghc[_all]"
602 [$1]="[$]fptools_version_of_ghc[_major]"
603 [$2]="[$]fptools_version_of_ghc[_minor]"
605 [$1]="[$]fptools_version_of_ghc[_major]"
606 [$2]="[$]fptools_version_of_ghc[_minor]"
607 [$3]="[$]fptools_version_of_ghc[_pl]"
609 [$1]="[$]fptools_version_of_ghc[_all]"
610 [$2]="[$]fptools_version_of_ghc[_major]"
611 [$3]="[$]fptools_version_of_ghc[_minor]"
612 [$4]="[$]fptools_version_of_ghc[_pl]"
618 dnl ** Map an arithmetic C type to a Haskell type.
619 dnl Based on autconf's AC_CHECK_SIZEOF.
621 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
622 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
623 [changequote(<<, >>)dnl
624 dnl The name to #define.
625 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
626 dnl The cache variable name.
627 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
629 AC_MSG_CHECKING(Haskell type for $1)
630 AC_CACHE_VAL(AC_CV_NAME,
631 [AC_TRY_RUN([#include <stdio.h>
634 #ifdef HAVE_SYS_TYPES_H
635 # include <sys/types.h>
642 #ifdef HAVE_SYS_STAT_H
643 # include <sys/stat.h>
658 #ifdef HAVE_TERMIOS_H
659 # include <termios.h>
674 #ifdef HAVE_OPENGL_GL_H
675 # include <OpenGL/gl.h>
678 #ifdef HAVE_SYS_RESOURCE_H
679 # include <sys/resource.h>
685 FILE *f=fopen("conftestval", "w");
687 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
689 ((testing)(-1) < (testing)0) ? "Int" : "Word",
693 (sizeof(testing) > sizeof(double)) ? "LDouble" :
694 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
698 }], AC_CV_NAME=`cat conftestval`,
699 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
700 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
701 AC_MSG_RESULT($AC_CV_NAME)
702 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1])
703 undefine([AC_TYPE_NAME])dnl
704 undefine([AC_CV_NAME])dnl
708 dnl ** Obtain the value of a C constant.
709 dnl The value will be `(-1)' if the constant is undefined.
711 dnl This is set up so that the argument can be a shell variable.
713 AC_DEFUN(FPTOOLS_CHECK_CCONST,
715 eval "cv_name=ac_cv_cconst_$1"
716 AC_MSG_CHECKING(value of $1)
717 AC_CACHE_VAL($cv_name,
718 [AC_TRY_RUN([#include <stdio.h>
722 FILE *f=fopen("conftestval", "w");
724 fprintf(f, "%d\n", $1);
727 eval "$cv_name=`cat conftestval`",
729 eval "$cv_name=-1")])dnl
730 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
731 AC_MSG_RESULT($fptools_check_cconst_result)
732 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result, [The value of $1.])
733 unset fptools_check_cconst_result
737 # FP_CHECK_CCONSTS_TEMPLATE(CONST...)
738 # -----------------------------------
739 m4_define([FP_CHECK_CCONSTS_TEMPLATE],
740 [AC_FOREACH([FP_Const], [$1],
741 [AH_TEMPLATE(AS_TR_CPP(CCONST_[]FP_Const),
742 [The value of ]FP_Const[.])])[]dnl
743 ])# FP_CHECK_CCONSTS_TEMPLATE
746 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
749 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
750 [FP_CHECK_CCONSTS_TEMPLATE([$1])dnl
751 for ac_const_name in $1
753 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
758 dnl *** Can we open files in binary mode? ***
760 AC_DEFUN(FPTOOLS_O_BINARY,
762 AC_REQUIRE([AC_PROG_CC])
763 AC_MSG_CHECKING(whether we can open files in binary mode)
764 AC_CACHE_VAL(fptools_cv_have_o_binary,
773 fptools_cv_have_o_binary=yes,
774 fptools_cv_have_o_binary=no)
777 AC_MSG_RESULT($fptools_cv_have_o_binary)
778 if test "$fptools_cv_have_o_binary" = yes; then
779 AC_DEFINE([HAVE_O_BINARY], [1], [Define to 1 if fcntl.h defines O_BINARY.])
784 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
786 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
788 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
792 cat > conftest.$ac_ext <<EOF
793 dnl This sometimes fails to find confdefs.h, for some reason.
794 dnl [#]line __oline__ "[$]0"
795 [#]line __oline__ "configure"
796 #include "confdefs.h"
798 int t() { return 0; }
800 if AC_TRY_EVAL(ac_link); then
805 ifelse([$4], , , [else
815 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
817 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
819 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
820 [AC_MSG_CHECKING([for $1])
821 AC_CACHE_VAL(ac_cv_flag_$1,
822 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
823 eval "ac_cv_flag_$1=yes",
824 eval "ac_cv_flag_$1=no"
827 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
837 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
839 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
840 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
842 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
844 AC_DEFINE_UNQUOTED($ac_tr_lib)
846 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
848 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
850 AC_DEFINE_UNQUOTED($ac_tr_lib)
857 dnl ** Check which CATALOG file we have to use with DocBook SGML.
859 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
861 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
862 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
863 dnl is set to "no". JADE is the jade executable and STYLESHEET
864 dnl a DocBook style sheet.
866 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
867 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
869 cat > conftest.sgml << EOF
870 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
874 <Author><OtherName>Test</OtherName></Author>
875 <Address>Test</Address>
876 <PubDate>Test</PubDate>
878 <Sect1><Title>Test</Title>
885 fptools_cv_sgml_catalog=no
886 if test -z "$SGML_CATALOG_FILES" ; then
887 for fptools_catalog in $4; do
888 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
889 if AC_TRY_EVAL(ac_try); then
890 fptools_cv_sgml_catalog=[$]fptools_catalog
895 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
896 fptools_cv_sgml_catalog="yes"
900 if test $fptools_cv_sgml_catalog != "no"; then
901 $1=$fptools_cv_sgml_catalog
905 dnl ######################################################################
906 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
907 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
908 dnl Search for a library defining FUNC, if it's not already available.
909 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
911 dnl ######################################################################
913 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
915 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
916 [ac_func_search_save_LIBS="$LIBS"
918 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
919 test "$ac_cv_search_$2" = "no" && for i in $3; do
920 LIBS="-l$i $6 $ac_func_search_save_LIBS"
921 AC_TRY_LINK([$1], [$2()],
922 [ac_cv_search_$2="-l$i"
925 LIBS="$ac_func_search_save_LIBS"])
926 if test "$ac_cv_search_$2" != "no"; then
927 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
933 dnl ####################### -*- Mode: M4 -*- ###########################
934 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
936 dnl This file is free software; you can redistribute it and/or modify it
937 dnl under the terms of the GNU General Public License as published by
938 dnl the Free Software Foundation; either version 2 of the License, or
939 dnl (at your option) any later version.
941 dnl This file is distributed in the hope that it will be useful, but
942 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
943 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
944 dnl General Public License for more details.
946 dnl You should have received a copy of the GNU General Public License
947 dnl along with this file; if not, write to:
949 dnl Free Software Foundation, Inc.
952 dnl Boston, MA 02111-1307, USA.
953 dnl ####################################################################
956 dnl @synopsis FPTOOLS_CHECK_LIBM
958 dnl Search for math library (typically -lm).
960 dnl The variable LIBM (which is not an output variable by default) is
961 dnl set to a value which is suitable for use in a Makefile (for example,
962 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
964 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
966 # FPTOOLS_CHECK_LIBM - check for math library
967 AC_DEFUN(FPTOOLS_CHECK_LIBM,
968 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
972 # These system don't have libm
975 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
976 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
979 AC_CHECK_LIB(m, main, LIBM="-lm")
984 dnl ######################################################################
985 dnl Note: Caching has been completely rewritten, but is still no perfect yet.
986 dnl ######################################################################
988 dnl ########################### -*- Mode: M4 -*- #######################
989 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
991 dnl This file is free software; you can redistribute it and/or modify it
992 dnl under the terms of the GNU General Public License as published by
993 dnl the Free Software Foundation; either version 2 of the License, or
994 dnl (at your option) any later version.
996 dnl This file is distributed in the hope that it will be useful, but
997 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
998 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
999 dnl General Public License for more details.
1001 dnl You should have received a copy of the GNU General Public License
1002 dnl along with this file; if not, write to:
1004 dnl Free Software Foundation, Inc.
1007 dnl Boston, MA 02111-1307, USA.
1008 dnl ####################################################################
1010 dnl @synopsis FPTOOLS_HAVE_OPENGL
1012 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1013 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
1014 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
1016 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1017 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1020 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1021 dnl be missing) are added to the shell output variable "GL_LIBS", along
1022 dnl with any other libraries that are necessary to successfully link an
1023 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1024 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1027 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1028 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1029 dnl an OpenGL application.
1031 dnl The following shell variable (which are not output variables) are
1032 dnl also set to either "yes" or "no" (depending on which libraries were
1033 dnl found) to help you determine exactly what was found.
1040 dnl A complete little toy "Automake `make distcheck'" package of how to
1041 dnl use this macro is available at:
1043 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1045 dnl Please note that as the ac_opengl macro and the toy example evolves,
1046 dnl the version number increases, so you may have to adjust the above
1047 dnl URL accordingly.
1049 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1051 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1053 AC_REQUIRE([AC_PROG_CC])
1054 AC_REQUIRE([AC_PATH_X])
1055 AC_REQUIRE([AC_PATH_XTRA])
1056 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1058 dnl Check for Mesa first if we were asked to.
1061 Prefer Mesa over a vendor's native OpenGL library (default=no)
1063 use_Mesa=$enableval,
1066 if test x"$use_Mesa" = xyes; then
1067 GL_search_list="MesaGL GL opengl32"
1068 GLU_search_list="MesaGLU GLU glu32"
1069 GLX_search_list="MesaGLX GLX"
1071 GL_search_list="GL opengl32 MesaGL"
1072 GLU_search_list="GLU glu32 MesaGLU"
1073 GLX_search_list="GLX MesaGLX"
1079 dnl If we are running under X11 then add in the appropriate libraries.
1080 if test x"$no_x" != xyes; then
1081 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1082 dnl and GL_X_LIBS/GLUT_X_LIBS.
1083 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1084 GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1085 GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1087 GL_save_CPPFLAGS="$CPPFLAGS"
1088 CPPFLAGS="$GL_CFLAGS"
1090 GL_save_LIBS="$LIBS"
1093 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1094 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1095 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1097 if test -n "$LIBS"; then
1098 GL_LIBS="$LDFLAGS $LIBS"
1106 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1108 if test -n "$LIBS"; then
1109 GLUT_LIBS="$LDFLAGS $LIBS"
1112 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1113 GL_CFLAGS="$mdl_cv_gl_cflags"
1115 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1116 GL_LIBS="$mdl_cv_gl_libs"
1118 AC_CACHE_CHECK([GLUT libs], mdl_cv_glut_libs, [mdl_cv_glut_libs="$GLUT_LIBS"])
1119 GLUT_LIBS="$mdl_cv_glut_libs"
1122 dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables
1123 dnl and we don't want to be global namespace polluters.
1127 LIBS="$GL_save_LIBS"
1128 CPPFLAGS="$GL_save_CPPFLAGS"