1 # Extra autoconf macros for the Glasgow fptools
3 # To be a good autoconf citizen, names of local macros have prefixed with FP_ to
4 # ensure we don't clash with any pre-supplied autoconf ones.
9 # Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise.
10 # Used by base package.
11 AC_DEFUN([FP_ALTZONE],
12 [AC_REQUIRE([AC_HEADER_TIME])dnl
13 AC_CHECK_HEADERS([sys/time.h])
14 AC_CHECK_DECLS([altzone], [], [],[#if TIME_WITH_SYS_TIME
15 # include <sys/time.h>
19 # include <sys/time.h>
27 dnl ** check for leading underscores in symbol names
29 dnl Test for determining whether symbol names have a leading
32 dnl We assume that they _haven't_ if anything goes wrong.
34 dnl Some nlist implementations seem to try to be compatible by ignoring
35 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
36 dnl to work around this by checking for *no* leading underscore first.
39 dnl Similarly on OpenBSD, but this test doesn't help. -- dons
41 AC_DEFUN(FPTOOLS_UNDERSCORE,
42 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
43 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
46 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
47 dnl but symbol table listings shows none. What is going on here?!?
49 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
50 dnl the underscoredness of that "platform"
51 changequote(<<, >>)dnl
54 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
56 i386-*2\.[[0-9]] | i386-*3\.[[0-3]] ) fptools_cv_lead_uscore='yes' ;;
57 *) fptools_cv_lead_uscore='no' ;;
59 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
60 *cygwin32) fptools_cv_lead_uscore='yes';;
61 *mingw32) fptools_cv_lead_uscore='yes';;
64 AC_TRY_RUN([#ifdef HAVE_NLIST_H
66 changequote(<<, >>)dnl
68 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
69 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
77 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
79 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
84 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
87 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
88 AC_SUBST(LeadingUnderscore)
89 case $LeadingUnderscore in
90 YES) AC_DEFINE(LEADING_UNDERSCORE);;
95 dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
96 dnl ACTION-IF-TRUE [, ACTION-IF-FALSE])
98 dnl compare versions field-wise (separator is '.')
99 dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
101 dnl quite shell-independant and SUSv2 compliant code
103 dnl NOTE: the loop could be unrolled within autoconf, but the
104 dnl macro code would be a) longer and b) harder to debug... ;)
106 AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
111 set -- [$]a; h1="[$]1"; shift 2>/dev/null; a="[$]*"
112 set -- [$]b; h2="[$]1"; shift 2>/dev/null; b="[$]*"
113 test -n "[$]h1" || h1=0; test -n "[$]h2" || h2=0
114 test [$]{h1} -eq [$]{h2} || break
116 test [$]{h1} [$2] [$]{h2}
118 then ifelse([$4],,[:],[
128 dnl Check for Greencard and version.
130 AC_DEFUN(FPTOOLS_GREENCARD,
132 AC_PATH_PROG(GreencardCmd,greencard)
133 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
135 [if test x"$GreencardCmd" != x; then
136 fptools_cv_greencard_version="`$GreencardCmd --version |
137 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
139 fptools_cv_greencard_version=""
143 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_greencard_version],-lt,$1,
144 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])dnl
145 GreencardVersion=$fptools_cv_greencard_version
146 AC_SUBST(GreencardVersion)
150 dnl Check for Happy and version. If we're building GHC, then we need
151 dnl at least Happy version 1.13. If there's no installed Happy, we look
152 dnl for a happy source tree and point the build system at that instead.
154 AC_DEFUN(FPTOOLS_HAPPY,
156 if test -d $srcdir/happy; then
157 SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
159 if test x"$UseSrcTreeHappy" = xYES; then
160 HappyCmd=$SrcTreeHappyCmd
162 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
164 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
166 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
167 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
168 elif test x"$HappyCmd" != x; then
169 fptools_cv_happy_version="`$HappyCmd -v |
170 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
172 fptools_cv_happy_version="";
176 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
177 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13],
178 [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
180 HappyVersion=$fptools_cv_happy_version;
181 AC_SUBST(HappyVersion)
185 dnl Check for Haddock and version. If there's no installed Haddock, we look
186 dnl for a haddock source tree and point the build system at that instead.
188 AC_DEFUN(FPTOOLS_HADDOCK,
190 if test -d $srcdir/haddock; then
191 SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
193 if test x"$UseSrcTreeHaddock" = xYES; then
194 HaddockCmd=$SrcTreeHaddockCmd
196 AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
198 dnl Darn, I forgot to make Haddock print out its version number when
199 dnl invoked with -v. We could try generating some HTML and grepping
200 dnl through that to find the version number, but I think we'll make
201 dnl do without it for now.
205 dnl Check for Alex and version. If we're building GHC, then we need
206 dnl at least Alex version 2.0. If there's no installed Alex, we look
207 dnl for a alex source tree and point the build system at that instead.
209 AC_DEFUN(FPTOOLS_ALEX,
211 if test -d $srcdir/alex; then
212 SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
214 if test x"$UseSrcTreeAlex" = xYES; then
215 AlexCmd=$SrcTreeAlexCmd
217 AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
219 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
221 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
222 fptools_cv_alex_version=`grep '^ProjectVersion[ ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
223 elif test x"$AlexCmd" != x; then
224 fptools_cv_alex_version="`$AlexCmd -v |
225 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
227 fptools_cv_alex_version="";
231 dnl if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
232 dnl FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0],
233 dnl [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl
235 AlexVersion=$fptools_cv_alex_version;
236 AC_SUBST(AlexVersion)
240 dnl What's the best way of doing context diffs?
242 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
244 AC_DEFUN(FPTOOLS_PROG_DIFF,
245 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
246 [echo foo > conftest1
248 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
249 fptools_cv_context_diffs='diff -C 1'
251 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
252 fptools_cv_context_diffs='diff -c1'
254 echo "Can't figure out how to do context diffs."
255 echo "Neither \`diff -C 1' nor \`diff -c1' works."
259 rm -f conftest1 conftest2
261 ContextDiffCmd=$fptools_cv_context_diffs
262 AC_SUBST(ContextDiffCmd)
266 dnl Check whether ld supports -x
268 AC_DEFUN(FPTOOLS_LD_X,
269 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
271 echo 'foo() {}' > conftest.c
272 ${CC-cc} -c conftest.c
273 if ${LdCmd} -r -x -o foo.o conftest.o; then
278 rm -rf conftest.c conftest.o foo.o
280 if test "$fptools_cv_ld_x" = yes; then
289 dnl *** Checking for ar and its arguments + whether we need ranlib.
291 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
292 dnl On Digital UNIX, we test for the -Z (compress) and
293 dnl -input (take list of files from external file) flags.
295 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
296 [AC_PATH_PROG(ArCmdRaw,ar)
297 if test -z "$ArCmdRaw"; then
298 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
301 dnl GNU ar needs special treatment: it appears to have problems with
302 dnl object files with the same name if you use the 's' modifier, but
303 dnl simple 'ar q' works fine, and doesn't need a separate ranlib.
304 if $ArCmdRaw --version | grep 'GNU' >/dev/null 2>/dev/null; then
307 elif $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
310 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
313 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
316 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
319 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
322 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
326 echo "I can't figure out how to use your $ArCmd"
330 case $HostPlatform in
332 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
334 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
337 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
339 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
340 ArSupportsInput='-input'
345 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
346 AC_SUBST(ArSupportsInput)
347 if test -z "$NeedRanLib"; then
349 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
357 dnl AC_SHEBANG_PERL - can we she-bang perl?
359 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
360 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
365 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
366 if test $? -ne 69; then
367 fptools_cv_shebang_perl=yes
369 fptools_cv_shebang_perl=no
375 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
376 dnl *Must* be called after AC_PROG_CC
378 AC_DEFUN(FPTOOLS_HAVE_GCC,
379 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
380 [if test -z "$GCC"; then
382 echo "You would be better off with gcc"
383 echo "Perhaps it is already installed, but not in your PATH?"
384 fptools_cv_have_gcc='no'
387 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' `"
389 fptools_cv_have_gcc='yes'
390 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
391 fptools_cv_have_gcc='no'
393 echo "your gcc version appears to be ..."
395 echo "gcc prior to 2.0 and have never worked with ghc."
396 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
397 AC_MSG_ERROR([gcc 1.X has never been supported])
401 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
406 dnl Some OSs (Mandrake Linux, in particular) configure GCC with
407 dnl -momit-leaf-frame-pointer on by default. If this is the case, we
408 dnl need to turn it off for mangling to work. The test is currently a bit
409 dnl crude, using only the version number of gcc.
411 AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
412 [AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
414 fptools_cv_gcc_needs_no_omit_lfptr='no'
415 FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
416 fptools_cv_gcc_needs_no_omit_lfptr='yes')
418 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
419 AC_DEFINE(HAVE_GCC_MNO_OMIT_LFPTR)
423 dnl Small feature test for perl version. Assumes PerlCmd
424 dnl contains path to perl binary
426 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
427 [$PerlCmd -v >conftest.out 2>&1
428 if grep "version 5" conftest.out >/dev/null 2>&1; then
431 if grep "v5.6" conftest.out >/dev/null 2>&1; then
434 if grep "v5.8" conftest.out >/dev/null 2>&1; then
437 if grep "version 6" conftest.out >/dev/null 2>&1; then
440 echo "Your version of perl probably won't work."
449 dnl Getting at the right version of 'find'
450 dnl (i.e., not the MS util on a Win32 box).
452 AC_DEFUN(FPTOOLS_FIND_FIND,
454 AC_PATH_PROG(Find2Cmd, find)
455 $Find2Cmd --version > conftest.out 2>&1
456 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
457 # Encountered MS' find utility, which is not what we're after.
459 # HACK - AC_CHECK_PROG is useful here in that does let you reject
460 # an (absolute) entry in the path (Find2Cmd). It is not so useful
461 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
462 # absolute path eventually found. So, hack around this by inspecting
463 # what variables hold the abs. path & use them directly.
464 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
472 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
473 dnl values of the second argument to the result of running
474 dnl the commands given by the third. It does not cache its
475 dnl result, so it is suitable for checks which should be
478 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
479 [AC_MSG_CHECKING([$1])
481 AC_MSG_RESULT([$][$2])
485 dnl FPTOOLS_GHC_VERSION(version)
486 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
487 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
489 dnl Test for version of installed ghc. Uses $GHC.
490 dnl [original version pinched from c2hs]
492 AC_DEFUN(FPTOOLS_GHC_VERSION,
493 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
494 ["${WithGhc-ghc}" --version > conftestghc 2>&1
495 cat conftestghc >&AC_FD_CC
496 #Useless Use Of cat award...
497 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
499 if test "[$]fptools_version_of_ghc" = ""
501 fptools_version_of_ghc='unknown'
503 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
504 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
505 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
507 if test "[$]fptools_version_of_ghc[_pl]" = ""
509 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
510 fptools_version_of_ghc[_pl]="0"
512 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
516 [$1]="[$]fptools_version_of_ghc[_all]"
518 [$1]="[$]fptools_version_of_ghc[_major]"
519 [$2]="[$]fptools_version_of_ghc[_minor]"
521 [$1]="[$]fptools_version_of_ghc[_major]"
522 [$2]="[$]fptools_version_of_ghc[_minor]"
523 [$3]="[$]fptools_version_of_ghc[_pl]"
525 [$1]="[$]fptools_version_of_ghc[_all]"
526 [$2]="[$]fptools_version_of_ghc[_major]"
527 [$3]="[$]fptools_version_of_ghc[_minor]"
528 [$4]="[$]fptools_version_of_ghc[_pl]"
534 dnl ** figure out the alignment restriction of a type
535 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
536 dnl so we can't call REQUIRE)
538 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
539 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
540 [changequote(<<, >>)dnl
541 dnl The name to #define.
542 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
543 dnl The cache variable name.
544 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
545 dnl The name of the corresponding size.
546 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
548 AC_MSG_CHECKING(alignment of $1)
549 AC_CACHE_VAL(AC_CV_NAME,
556 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
561 FILE *f=fopen("conftestval", "w");
563 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
566 AC_CV_NAME=`cat conftestval`,
567 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
568 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
569 AC_MSG_RESULT($AC_CV_NAME)
570 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
571 AC_PROVIDE($AC_TYPE_NAME)
572 undefine([AC_TYPE_NAME])dnl
573 undefine([AC_CV_NAME])dnl
574 undefine([AC_CV_SIZEOF_NAME])dnl
577 dnl ** Map an arithmetic C type to a Haskell type.
578 dnl Based on autconf's AC_CHECK_SIZEOF.
580 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
581 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
582 [changequote(<<, >>)dnl
583 dnl The name to #define.
584 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
585 dnl The cache variable name.
586 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
588 AC_MSG_CHECKING(Haskell type for $1)
589 AC_CACHE_VAL(AC_CV_NAME,
590 [AC_TRY_RUN([#include <stdio.h>
593 #ifdef HAVE_SYS_TYPES_H
594 # include <sys/types.h>
601 #ifdef HAVE_SYS_STAT_H
602 # include <sys/stat.h>
617 #ifdef HAVE_TERMIOS_H
618 # include <termios.h>
633 #ifdef HAVE_OPENGL_GL_H
634 # include <OpenGL/gl.h>
637 #ifdef HAVE_SYS_RESOURCE_H
638 # include <sys/resource.h>
644 FILE *f=fopen("conftestval", "w");
646 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
648 ((testing)(-1) < (testing)0) ? "Int" : "Word",
652 (sizeof(testing) > sizeof(double)) ? "LDouble" :
653 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
657 }], AC_CV_NAME=`cat conftestval`,
658 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
659 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
660 AC_MSG_RESULT($AC_CV_NAME)
661 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
662 undefine([AC_TYPE_NAME])dnl
663 undefine([AC_CV_NAME])dnl
667 dnl ** Obtain the value of a C constant.
668 dnl The value will be `(-1)' if the constant is undefined.
670 dnl This is set up so that the argument can be a shell variable.
672 AC_DEFUN(FPTOOLS_CHECK_CCONST,
674 eval "cv_name=ac_cv_cconst_$1"
675 AC_MSG_CHECKING(value of $1)
676 AC_CACHE_VAL($cv_name,
677 [AC_TRY_RUN([#include <stdio.h>
681 FILE *f=fopen("conftestval", "w");
683 fprintf(f, "%d\n", $1);
686 eval "$cv_name=`cat conftestval`",
688 eval "$cv_name=-1")])dnl
689 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
690 AC_MSG_RESULT($fptools_check_cconst_result)
691 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
692 unset fptools_check_cconst_result
695 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
698 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
699 [for ac_const_name in $1
701 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
706 dnl *** Can we open files in binary mode? ***
708 AC_DEFUN(FPTOOLS_O_BINARY,
710 AC_REQUIRE([AC_PROG_CC])
711 AC_MSG_CHECKING(whether we can open files in binary mode)
712 AC_CACHE_VAL(fptools_cv_have_o_binary,
721 fptools_cv_have_o_binary=yes,
722 fptools_cv_have_o_binary=no)
725 AC_MSG_RESULT($fptools_cv_have_o_binary)
726 if test "$fptools_cv_have_o_binary" = yes; then
727 AC_DEFINE(HAVE_O_BINARY)
731 dnl *** Helper function **
733 AC_DEFUN(FPTOOLS_IN_SCOPE,
734 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
738 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
740 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
742 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
746 cat > conftest.$ac_ext <<EOF
747 dnl This sometimes fails to find confdefs.h, for some reason.
748 dnl [#]line __oline__ "[$]0"
749 [#]line __oline__ "configure"
750 #include "confdefs.h"
752 int t() { return 0; }
754 if AC_TRY_EVAL(ac_link); then
759 ifelse([$4], , , [else
769 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
771 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
773 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
774 [AC_MSG_CHECKING([for $1])
775 AC_CACHE_VAL(ac_cv_flag_$1,
776 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
777 eval "ac_cv_flag_$1=yes",
778 eval "ac_cv_flag_$1=no"
781 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
791 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
793 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
794 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
796 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
798 AC_DEFINE_UNQUOTED($ac_tr_lib)
800 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
802 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
804 AC_DEFINE_UNQUOTED($ac_tr_lib)
810 dnl check for prototypes
812 AC_DEFUN([AC_C_PROTOTYPES],
813 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
822 ac_cv_prototypes=yes,
823 ac_cv_prototypes=no)])
824 if test "$ac_cv_prototypes" = yes; then
825 AC_DEFINE([HAVE_PROTOTYPES])
829 dnl ** Check which CATALOG file we have to use with DocBook SGML.
831 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
833 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
834 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
835 dnl is set to "no". JADE is the jade executable and STYLESHEET
836 dnl a DocBook style sheet.
838 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
839 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
841 cat > conftest.sgml << EOF
842 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
846 <Author><OtherName>Test</OtherName></Author>
847 <Address>Test</Address>
848 <PubDate>Test</PubDate>
850 <Sect1><Title>Test</Title>
857 fptools_cv_sgml_catalog=no
858 if test -z "$SGML_CATALOG_FILES" ; then
859 for fptools_catalog in $4; do
860 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
861 if AC_TRY_EVAL(ac_try); then
862 fptools_cv_sgml_catalog=[$]fptools_catalog
867 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
868 fptools_cv_sgml_catalog="yes"
872 if test $fptools_cv_sgml_catalog != "no"; then
873 $1=$fptools_cv_sgml_catalog
877 dnl ######################################################################
878 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
879 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
880 dnl Search for a library defining FUNC, if it's not already available.
881 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
883 dnl ######################################################################
885 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
887 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
888 [ac_func_search_save_LIBS="$LIBS"
890 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
891 test "$ac_cv_search_$2" = "no" && for i in $3; do
892 LIBS="-l$i $6 $ac_func_search_save_LIBS"
893 AC_TRY_LINK([$1], [$2()],
894 [ac_cv_search_$2="-l$i"
897 LIBS="$ac_func_search_save_LIBS"])
898 if test "$ac_cv_search_$2" != "no"; then
899 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
905 dnl ####################### -*- Mode: M4 -*- ###########################
906 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
908 dnl This file is free software; you can redistribute it and/or modify it
909 dnl under the terms of the GNU General Public License as published by
910 dnl the Free Software Foundation; either version 2 of the License, or
911 dnl (at your option) any later version.
913 dnl This file is distributed in the hope that it will be useful, but
914 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
915 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
916 dnl General Public License for more details.
918 dnl You should have received a copy of the GNU General Public License
919 dnl along with this file; if not, write to:
921 dnl Free Software Foundation, Inc.
924 dnl Boston, MA 02111-1307, USA.
925 dnl ####################################################################
928 dnl @synopsis FPTOOLS_CHECK_LIBM
930 dnl Search for math library (typically -lm).
932 dnl The variable LIBM (which is not an output variable by default) is
933 dnl set to a value which is suitable for use in a Makefile (for example,
934 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
936 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
938 # FPTOOLS_CHECK_LIBM - check for math library
939 AC_DEFUN(FPTOOLS_CHECK_LIBM,
940 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
944 # These system don't have libm
947 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
948 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
951 AC_CHECK_LIB(m, main, LIBM="-lm")
956 dnl ######################################################################
957 dnl Note: Caching has been completely rewritten, but is still no perfect yet.
958 dnl ######################################################################
960 dnl ########################### -*- Mode: M4 -*- #######################
961 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
963 dnl This file is free software; you can redistribute it and/or modify it
964 dnl under the terms of the GNU General Public License as published by
965 dnl the Free Software Foundation; either version 2 of the License, or
966 dnl (at your option) any later version.
968 dnl This file is distributed in the hope that it will be useful, but
969 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
970 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
971 dnl General Public License for more details.
973 dnl You should have received a copy of the GNU General Public License
974 dnl along with this file; if not, write to:
976 dnl Free Software Foundation, Inc.
979 dnl Boston, MA 02111-1307, USA.
980 dnl ####################################################################
982 dnl @synopsis FPTOOLS_HAVE_OPENGL
984 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
985 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
986 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
988 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
989 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
992 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
993 dnl be missing) are added to the shell output variable "GL_LIBS", along
994 dnl with any other libraries that are necessary to successfully link an
995 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
996 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
999 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1000 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1001 dnl an OpenGL application.
1003 dnl The following shell variable (which are not output variables) are
1004 dnl also set to either "yes" or "no" (depending on which libraries were
1005 dnl found) to help you determine exactly what was found.
1012 dnl A complete little toy "Automake `make distcheck'" package of how to
1013 dnl use this macro is available at:
1015 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1017 dnl Please note that as the ac_opengl macro and the toy example evolves,
1018 dnl the version number increases, so you may have to adjust the above
1019 dnl URL accordingly.
1021 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1023 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1025 AC_REQUIRE([AC_PROG_CC])
1026 AC_REQUIRE([AC_PATH_X])
1027 AC_REQUIRE([AC_PATH_XTRA])
1028 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1030 dnl Check for Mesa first if we were asked to.
1033 Prefer Mesa over a vendor's native OpenGL library (default=no)
1035 use_Mesa=$enableval,
1038 if test x"$use_Mesa" = xyes; then
1039 GL_search_list="MesaGL GL opengl32"
1040 GLU_search_list="MesaGLU GLU glu32"
1041 GLX_search_list="MesaGLX GLX"
1043 GL_search_list="GL opengl32 MesaGL"
1044 GLU_search_list="GLU glu32 MesaGLU"
1045 GLX_search_list="GLX MesaGLX"
1051 dnl If we are running under X11 then add in the appropriate libraries.
1052 if test x"$no_x" != xyes; then
1053 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1054 dnl and GL_X_LIBS/GLUT_X_LIBS.
1055 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1056 GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1057 GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1059 GL_save_CPPFLAGS="$CPPFLAGS"
1060 CPPFLAGS="$GL_CFLAGS"
1062 GL_save_LIBS="$LIBS"
1065 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1066 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1067 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1069 if test -n "$LIBS"; then
1070 GL_LIBS="$LDFLAGS $LIBS"
1078 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1080 if test -n "$LIBS"; then
1081 GLUT_LIBS="$LDFLAGS $LIBS"
1084 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1085 GL_CFLAGS="$mdl_cv_gl_cflags"
1087 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1088 GL_LIBS="$mdl_cv_gl_libs"
1090 AC_CACHE_CHECK([GLUT libs], mdl_cv_glut_libs, [mdl_cv_glut_libs="$GLUT_LIBS"])
1091 GLUT_LIBS="$mdl_cv_glut_libs"
1094 dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables
1095 dnl and we don't want to be global namespace polluters.
1099 LIBS="$GL_save_LIBS"
1100 CPPFLAGS="$GL_save_CPPFLAGS"
1109 dnl Check to see whether CC (gcc) supports a particular option.
1111 AC_DEFUN(FPTOOLS_CC_FLAG,
1113 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1114 [save_CFLAGS="$CFLAGS"
1117 AC_TRY_COMPILE(,[int main(){return(0);}],
1120 CFLAGS="$save_CFLAGS"
1122 if test "$ac_cv_cc_$2"x = "yesx"; then
1130 dnl Check to see whether 'struct msghdr' contains msg_control
1132 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1133 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1134 [AC_TRY_COMPILE([#include <sys/types.h>
1135 #include <sys/uio.h>
1136 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1137 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1138 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1139 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1141 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1145 dnl Check to see whether 'struct msghdr' contains msg_accrights
1147 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1148 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1149 [AC_TRY_COMPILE([#include <sys/types.h>
1150 #include <sys/uio.h>
1151 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1152 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1153 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1154 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1156 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl