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 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
10 # NB: NeXTStep thinks diff'ing a file against itself is "trouble".
11 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest
12 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
13 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
17 for fp_var in '-C 1' '-c1'
19 if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
20 fp_cv_context_diff="diff $fp_var"
24 if test x"$fp_cv_context_diff" = xno; then
25 AC_MSG_ERROR([cannot figure out how to do context diffs])
27 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
28 ])# FP_PROG_CONTEXT_DIFF
33 # Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise.
34 # Used by base package.
35 AC_DEFUN([FP_DECL_ALTZONE],
36 [AC_REQUIRE([AC_HEADER_TIME])dnl
37 AC_CHECK_HEADERS([sys/time.h])
38 AC_CHECK_DECLS([altzone], [], [],[#if TIME_WITH_SYS_TIME
39 # include <sys/time.h>
43 # include <sys/time.h>
51 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
52 # ---------------------------------------------------------
53 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
54 # compilation. Execute IF-FAILS when unable to determine the value. Works for
55 # cross-compilation, too.
56 # Note: We are lazy and use an internal autoconf macro, but it is supported in
57 # autoconf versions 2.50 up to the actual 2.57, so there is little risk.
58 AC_DEFUN([FP_COMPUTE_INT],
59 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
63 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
64 # ------------------------------------------------------------------
65 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
66 # given type. Defines ALIGNMENT_TYPE.
67 AC_DEFUN([FP_CHECK_ALIGNMENT],
68 [AS_LITERAL_IF([$1], [],
69 [AC_FATAL([$0: requires literal arguments])])dnl
70 AC_CHECK_TYPE([$1], [], [], [$3])
71 AC_CACHE_CHECK([alignment of $1], AS_TR_SH([fp_cv_alignment_$1]),
72 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
73 FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
74 [AS_TR_SH([fp_cv_alignment_$1])],
75 [AC_INCLUDES_DEFAULT([$3])],
76 [AC_MSG_FAILURE([cannot compute alignment ($1), 77])])
78 AS_TR_SH([fp_cv_alignment_$1])=0
80 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $AS_TR_SH([fp_cv_alignment_$1]),
81 [The alignment of a `$1'.])
82 ])# FP_CHECK_ALIGNMENT
85 dnl ** check for leading underscores in symbol names
87 dnl Test for determining whether symbol names have a leading
90 dnl We assume that they _haven't_ if anything goes wrong.
92 dnl Some nlist implementations seem to try to be compatible by ignoring
93 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
94 dnl to work around this by checking for *no* leading underscore first.
97 dnl Similarly on OpenBSD, but this test doesn't help. -- dons
99 AC_DEFUN(FPTOOLS_UNDERSCORE,
100 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
101 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
104 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
105 dnl but symbol table listings shows none. What is going on here?!?
107 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
108 dnl the underscoredness of that "platform"
109 changequote(<<, >>)dnl
111 case $HostPlatform in
112 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
114 i386-*2\.[[0-9]] | i386-*3\.[[0-3]] ) fptools_cv_lead_uscore='yes' ;;
115 *) fptools_cv_lead_uscore='no' ;;
117 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
118 *cygwin32) fptools_cv_lead_uscore='yes';;
119 *mingw32) fptools_cv_lead_uscore='yes';;
122 AC_TRY_RUN([#ifdef HAVE_NLIST_H
124 changequote(<<, >>)dnl
126 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
127 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
135 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
137 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
142 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
145 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
146 AC_SUBST(LeadingUnderscore)
147 case $LeadingUnderscore in
148 YES) AC_DEFINE(LEADING_UNDERSCORE);;
153 dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
154 dnl ACTION-IF-TRUE [, ACTION-IF-FALSE])
156 dnl compare versions field-wise (separator is '.')
157 dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
159 dnl quite shell-independant and SUSv2 compliant code
161 dnl NOTE: the loop could be unrolled within autoconf, but the
162 dnl macro code would be a) longer and b) harder to debug... ;)
164 AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
169 set -- [$]a; h1="[$]1"; shift 2>/dev/null; a="[$]*"
170 set -- [$]b; h2="[$]1"; shift 2>/dev/null; b="[$]*"
171 test -n "[$]h1" || h1=0; test -n "[$]h2" || h2=0
172 test [$]{h1} -eq [$]{h2} || break
174 test [$]{h1} [$2] [$]{h2}
176 then ifelse([$4],,[:],[
186 dnl Check for Greencard and version.
188 AC_DEFUN(FPTOOLS_GREENCARD,
190 AC_PATH_PROG(GreencardCmd,greencard)
191 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
193 [if test x"$GreencardCmd" != x; then
194 fptools_cv_greencard_version="`$GreencardCmd --version |
195 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
197 fptools_cv_greencard_version=""
201 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_greencard_version],-lt,$1,
202 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])dnl
203 GreencardVersion=$fptools_cv_greencard_version
204 AC_SUBST(GreencardVersion)
208 dnl Check for Happy and version. If we're building GHC, then we need
209 dnl at least Happy version 1.13. If there's no installed Happy, we look
210 dnl for a happy source tree and point the build system at that instead.
212 AC_DEFUN(FPTOOLS_HAPPY,
214 if test -d $srcdir/happy; then
215 SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
217 if test x"$UseSrcTreeHappy" = xYES; then
218 HappyCmd=$SrcTreeHappyCmd
220 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
222 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
224 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
225 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
226 elif test x"$HappyCmd" != x; then
227 fptools_cv_happy_version="`$HappyCmd -v |
228 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
230 fptools_cv_happy_version="";
234 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
235 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13],
236 [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
238 HappyVersion=$fptools_cv_happy_version;
239 AC_SUBST(HappyVersion)
243 dnl Check for Haddock and version. If there's no installed Haddock, we look
244 dnl for a haddock source tree and point the build system at that instead.
246 AC_DEFUN(FPTOOLS_HADDOCK,
248 if test -d $srcdir/haddock; then
249 SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
251 if test x"$UseSrcTreeHaddock" = xYES; then
252 HaddockCmd=$SrcTreeHaddockCmd
254 AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
256 dnl Darn, I forgot to make Haddock print out its version number when
257 dnl invoked with -v. We could try generating some HTML and grepping
258 dnl through that to find the version number, but I think we'll make
259 dnl do without it for now.
263 dnl Check for Alex and version. If we're building GHC, then we need
264 dnl at least Alex version 2.0. If there's no installed Alex, we look
265 dnl for a alex source tree and point the build system at that instead.
267 AC_DEFUN(FPTOOLS_ALEX,
269 if test -d $srcdir/alex; then
270 SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
272 if test x"$UseSrcTreeAlex" = xYES; then
273 AlexCmd=$SrcTreeAlexCmd
275 AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
277 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
279 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
280 fptools_cv_alex_version=`grep '^ProjectVersion[ ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
281 elif test x"$AlexCmd" != x; then
282 fptools_cv_alex_version="`$AlexCmd -v |
283 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
285 fptools_cv_alex_version="";
289 dnl if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
290 dnl FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0],
291 dnl [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl
293 AlexVersion=$fptools_cv_alex_version;
294 AC_SUBST(AlexVersion)
299 dnl Check whether ld supports -x
301 AC_DEFUN(FPTOOLS_LD_X,
302 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
304 echo 'foo() {}' > conftest.c
305 ${CC-cc} -c conftest.c
306 if ${LdCmd} -r -x -o foo.o conftest.o; then
311 rm -rf conftest.c conftest.o foo.o
313 if test "$fptools_cv_ld_x" = yes; then
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 ** Map an arithmetic C type to a Haskell type.
568 dnl Based on autconf's AC_CHECK_SIZEOF.
570 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
571 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
572 [changequote(<<, >>)dnl
573 dnl The name to #define.
574 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
575 dnl The cache variable name.
576 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
578 AC_MSG_CHECKING(Haskell type for $1)
579 AC_CACHE_VAL(AC_CV_NAME,
580 [AC_TRY_RUN([#include <stdio.h>
583 #ifdef HAVE_SYS_TYPES_H
584 # include <sys/types.h>
591 #ifdef HAVE_SYS_STAT_H
592 # include <sys/stat.h>
607 #ifdef HAVE_TERMIOS_H
608 # include <termios.h>
623 #ifdef HAVE_OPENGL_GL_H
624 # include <OpenGL/gl.h>
627 #ifdef HAVE_SYS_RESOURCE_H
628 # include <sys/resource.h>
634 FILE *f=fopen("conftestval", "w");
636 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
638 ((testing)(-1) < (testing)0) ? "Int" : "Word",
642 (sizeof(testing) > sizeof(double)) ? "LDouble" :
643 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
647 }], AC_CV_NAME=`cat conftestval`,
648 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
649 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
650 AC_MSG_RESULT($AC_CV_NAME)
651 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
652 undefine([AC_TYPE_NAME])dnl
653 undefine([AC_CV_NAME])dnl
657 dnl ** Obtain the value of a C constant.
658 dnl The value will be `(-1)' if the constant is undefined.
660 dnl This is set up so that the argument can be a shell variable.
662 AC_DEFUN(FPTOOLS_CHECK_CCONST,
664 eval "cv_name=ac_cv_cconst_$1"
665 AC_MSG_CHECKING(value of $1)
666 AC_CACHE_VAL($cv_name,
667 [AC_TRY_RUN([#include <stdio.h>
671 FILE *f=fopen("conftestval", "w");
673 fprintf(f, "%d\n", $1);
676 eval "$cv_name=`cat conftestval`",
678 eval "$cv_name=-1")])dnl
679 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
680 AC_MSG_RESULT($fptools_check_cconst_result)
681 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
682 unset fptools_check_cconst_result
685 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
688 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
689 [for ac_const_name in $1
691 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
696 dnl *** Can we open files in binary mode? ***
698 AC_DEFUN(FPTOOLS_O_BINARY,
700 AC_REQUIRE([AC_PROG_CC])
701 AC_MSG_CHECKING(whether we can open files in binary mode)
702 AC_CACHE_VAL(fptools_cv_have_o_binary,
711 fptools_cv_have_o_binary=yes,
712 fptools_cv_have_o_binary=no)
715 AC_MSG_RESULT($fptools_cv_have_o_binary)
716 if test "$fptools_cv_have_o_binary" = yes; then
717 AC_DEFINE(HAVE_O_BINARY)
722 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
724 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
726 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
730 cat > conftest.$ac_ext <<EOF
731 dnl This sometimes fails to find confdefs.h, for some reason.
732 dnl [#]line __oline__ "[$]0"
733 [#]line __oline__ "configure"
734 #include "confdefs.h"
736 int t() { return 0; }
738 if AC_TRY_EVAL(ac_link); then
743 ifelse([$4], , , [else
753 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
755 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
757 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
758 [AC_MSG_CHECKING([for $1])
759 AC_CACHE_VAL(ac_cv_flag_$1,
760 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
761 eval "ac_cv_flag_$1=yes",
762 eval "ac_cv_flag_$1=no"
765 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
775 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
777 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
778 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
780 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
782 AC_DEFINE_UNQUOTED($ac_tr_lib)
784 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
786 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
788 AC_DEFINE_UNQUOTED($ac_tr_lib)
795 dnl ** Check which CATALOG file we have to use with DocBook SGML.
797 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
799 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
800 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
801 dnl is set to "no". JADE is the jade executable and STYLESHEET
802 dnl a DocBook style sheet.
804 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
805 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
807 cat > conftest.sgml << EOF
808 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
812 <Author><OtherName>Test</OtherName></Author>
813 <Address>Test</Address>
814 <PubDate>Test</PubDate>
816 <Sect1><Title>Test</Title>
823 fptools_cv_sgml_catalog=no
824 if test -z "$SGML_CATALOG_FILES" ; then
825 for fptools_catalog in $4; do
826 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
827 if AC_TRY_EVAL(ac_try); then
828 fptools_cv_sgml_catalog=[$]fptools_catalog
833 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
834 fptools_cv_sgml_catalog="yes"
838 if test $fptools_cv_sgml_catalog != "no"; then
839 $1=$fptools_cv_sgml_catalog
843 dnl ######################################################################
844 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
845 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
846 dnl Search for a library defining FUNC, if it's not already available.
847 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
849 dnl ######################################################################
851 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
853 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
854 [ac_func_search_save_LIBS="$LIBS"
856 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
857 test "$ac_cv_search_$2" = "no" && for i in $3; do
858 LIBS="-l$i $6 $ac_func_search_save_LIBS"
859 AC_TRY_LINK([$1], [$2()],
860 [ac_cv_search_$2="-l$i"
863 LIBS="$ac_func_search_save_LIBS"])
864 if test "$ac_cv_search_$2" != "no"; then
865 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
871 dnl ####################### -*- Mode: M4 -*- ###########################
872 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
874 dnl This file is free software; you can redistribute it and/or modify it
875 dnl under the terms of the GNU General Public License as published by
876 dnl the Free Software Foundation; either version 2 of the License, or
877 dnl (at your option) any later version.
879 dnl This file is distributed in the hope that it will be useful, but
880 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
881 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
882 dnl General Public License for more details.
884 dnl You should have received a copy of the GNU General Public License
885 dnl along with this file; if not, write to:
887 dnl Free Software Foundation, Inc.
890 dnl Boston, MA 02111-1307, USA.
891 dnl ####################################################################
894 dnl @synopsis FPTOOLS_CHECK_LIBM
896 dnl Search for math library (typically -lm).
898 dnl The variable LIBM (which is not an output variable by default) is
899 dnl set to a value which is suitable for use in a Makefile (for example,
900 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
902 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
904 # FPTOOLS_CHECK_LIBM - check for math library
905 AC_DEFUN(FPTOOLS_CHECK_LIBM,
906 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
910 # These system don't have libm
913 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
914 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
917 AC_CHECK_LIB(m, main, LIBM="-lm")
922 dnl ######################################################################
923 dnl Note: Caching has been completely rewritten, but is still no perfect yet.
924 dnl ######################################################################
926 dnl ########################### -*- Mode: M4 -*- #######################
927 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
929 dnl This file is free software; you can redistribute it and/or modify it
930 dnl under the terms of the GNU General Public License as published by
931 dnl the Free Software Foundation; either version 2 of the License, or
932 dnl (at your option) any later version.
934 dnl This file is distributed in the hope that it will be useful, but
935 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
936 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
937 dnl General Public License for more details.
939 dnl You should have received a copy of the GNU General Public License
940 dnl along with this file; if not, write to:
942 dnl Free Software Foundation, Inc.
945 dnl Boston, MA 02111-1307, USA.
946 dnl ####################################################################
948 dnl @synopsis FPTOOLS_HAVE_OPENGL
950 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
951 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
952 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
954 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
955 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
958 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
959 dnl be missing) are added to the shell output variable "GL_LIBS", along
960 dnl with any other libraries that are necessary to successfully link an
961 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
962 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
965 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
966 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
967 dnl an OpenGL application.
969 dnl The following shell variable (which are not output variables) are
970 dnl also set to either "yes" or "no" (depending on which libraries were
971 dnl found) to help you determine exactly what was found.
978 dnl A complete little toy "Automake `make distcheck'" package of how to
979 dnl use this macro is available at:
981 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
983 dnl Please note that as the ac_opengl macro and the toy example evolves,
984 dnl the version number increases, so you may have to adjust the above
987 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
989 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
991 AC_REQUIRE([AC_PROG_CC])
992 AC_REQUIRE([AC_PATH_X])
993 AC_REQUIRE([AC_PATH_XTRA])
994 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
996 dnl Check for Mesa first if we were asked to.
999 Prefer Mesa over a vendor's native OpenGL library (default=no)
1001 use_Mesa=$enableval,
1004 if test x"$use_Mesa" = xyes; then
1005 GL_search_list="MesaGL GL opengl32"
1006 GLU_search_list="MesaGLU GLU glu32"
1007 GLX_search_list="MesaGLX GLX"
1009 GL_search_list="GL opengl32 MesaGL"
1010 GLU_search_list="GLU glu32 MesaGLU"
1011 GLX_search_list="GLX MesaGLX"
1017 dnl If we are running under X11 then add in the appropriate libraries.
1018 if test x"$no_x" != xyes; then
1019 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1020 dnl and GL_X_LIBS/GLUT_X_LIBS.
1021 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1022 GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1023 GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1025 GL_save_CPPFLAGS="$CPPFLAGS"
1026 CPPFLAGS="$GL_CFLAGS"
1028 GL_save_LIBS="$LIBS"
1031 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1032 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1033 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1035 if test -n "$LIBS"; then
1036 GL_LIBS="$LDFLAGS $LIBS"
1044 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1046 if test -n "$LIBS"; then
1047 GLUT_LIBS="$LDFLAGS $LIBS"
1050 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1051 GL_CFLAGS="$mdl_cv_gl_cflags"
1053 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1054 GL_LIBS="$mdl_cv_gl_libs"
1056 AC_CACHE_CHECK([GLUT libs], mdl_cv_glut_libs, [mdl_cv_glut_libs="$GLUT_LIBS"])
1057 GLUT_LIBS="$mdl_cv_glut_libs"
1060 dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables
1061 dnl and we don't want to be global namespace polluters.
1065 LIBS="$GL_save_LIBS"
1066 CPPFLAGS="$GL_save_CPPFLAGS"
1075 dnl Check to see whether CC (gcc) supports a particular option.
1077 AC_DEFUN(FPTOOLS_CC_FLAG,
1079 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1080 [save_CFLAGS="$CFLAGS"
1083 AC_TRY_COMPILE(,[int main(){return(0);}],
1086 CFLAGS="$save_CFLAGS"
1088 if test "$ac_cv_cc_$2"x = "yesx"; then
1096 dnl Check to see whether 'struct msghdr' contains msg_control
1098 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1099 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1100 [AC_TRY_COMPILE([#include <sys/types.h>
1101 #include <sys/uio.h>
1102 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1103 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1104 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1105 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1107 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1111 dnl Check to see whether 'struct msghdr' contains msg_accrights
1113 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1114 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1115 [AC_TRY_COMPILE([#include <sys/types.h>
1116 #include <sys/uio.h>
1117 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1118 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1119 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1120 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1122 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl