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
666 dnl ** figure out whether C compiler supports 'long long's
667 dnl (Closely based on Andreas Zeller's macro for testing
668 dnl for this under C++)
670 dnl If the C compiler supports `long long' types,
671 dnl define `HAVE_LONG_LONG'.
673 AC_DEFUN(FPTOOLS_C_LONG_LONG,
675 AC_REQUIRE([AC_PROG_CC])
676 AC_MSG_CHECKING(whether ${CC} supports long long types)
677 AC_CACHE_VAL(fptools_cv_have_long_long,
681 AC_TRY_COMPILE(,[long long a;],
682 fptools_cv_have_long_long=yes,
683 fptools_cv_have_long_long=no)
686 AC_MSG_RESULT($fptools_cv_have_long_long)
687 if test "$fptools_cv_have_long_long" = yes; then
688 AC_DEFINE(HAVE_LONG_LONG)
692 dnl ** Obtain the value of a C constant.
693 dnl The value will be `(-1)' if the constant is undefined.
695 dnl This is set up so that the argument can be a shell variable.
697 AC_DEFUN(FPTOOLS_CHECK_CCONST,
699 eval "cv_name=ac_cv_cconst_$1"
700 AC_MSG_CHECKING(value of $1)
701 AC_CACHE_VAL($cv_name,
702 [AC_TRY_RUN([#include <stdio.h>
706 FILE *f=fopen("conftestval", "w");
708 fprintf(f, "%d\n", $1);
711 eval "$cv_name=`cat conftestval`",
713 eval "$cv_name=-1")])dnl
714 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
715 AC_MSG_RESULT($fptools_check_cconst_result)
716 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
717 unset fptools_check_cconst_result
720 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
723 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
724 [for ac_const_name in $1
726 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
731 dnl *** Can we open files in binary mode? ***
733 AC_DEFUN(FPTOOLS_O_BINARY,
735 AC_REQUIRE([AC_PROG_CC])
736 AC_MSG_CHECKING(whether we can open files in binary mode)
737 AC_CACHE_VAL(fptools_cv_have_o_binary,
746 fptools_cv_have_o_binary=yes,
747 fptools_cv_have_o_binary=no)
750 AC_MSG_RESULT($fptools_cv_have_o_binary)
751 if test "$fptools_cv_have_o_binary" = yes; then
752 AC_DEFINE(HAVE_O_BINARY)
756 dnl *** Helper function **
758 AC_DEFUN(FPTOOLS_IN_SCOPE,
759 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
763 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
765 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
767 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
771 cat > conftest.$ac_ext <<EOF
772 dnl This sometimes fails to find confdefs.h, for some reason.
773 dnl [#]line __oline__ "[$]0"
774 [#]line __oline__ "configure"
775 #include "confdefs.h"
777 int t() { return 0; }
779 if AC_TRY_EVAL(ac_link); then
784 ifelse([$4], , , [else
794 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
796 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
798 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
799 [AC_MSG_CHECKING([for $1])
800 AC_CACHE_VAL(ac_cv_flag_$1,
801 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
802 eval "ac_cv_flag_$1=yes",
803 eval "ac_cv_flag_$1=no"
806 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
816 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
818 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
819 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
821 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
823 AC_DEFINE_UNQUOTED($ac_tr_lib)
825 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
827 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
829 AC_DEFINE_UNQUOTED($ac_tr_lib)
835 dnl check for prototypes
837 AC_DEFUN([AC_C_PROTOTYPES],
838 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
847 ac_cv_prototypes=yes,
848 ac_cv_prototypes=no)])
849 if test "$ac_cv_prototypes" = yes; then
850 AC_DEFINE([HAVE_PROTOTYPES])
854 dnl ** Check which CATALOG file we have to use with DocBook SGML.
856 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
858 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
859 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
860 dnl is set to "no". JADE is the jade executable and STYLESHEET
861 dnl a DocBook style sheet.
863 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
864 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
866 cat > conftest.sgml << EOF
867 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
871 <Author><OtherName>Test</OtherName></Author>
872 <Address>Test</Address>
873 <PubDate>Test</PubDate>
875 <Sect1><Title>Test</Title>
882 fptools_cv_sgml_catalog=no
883 if test -z "$SGML_CATALOG_FILES" ; then
884 for fptools_catalog in $4; do
885 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
886 if AC_TRY_EVAL(ac_try); then
887 fptools_cv_sgml_catalog=[$]fptools_catalog
892 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
893 fptools_cv_sgml_catalog="yes"
897 if test $fptools_cv_sgml_catalog != "no"; then
898 $1=$fptools_cv_sgml_catalog
902 dnl ######################################################################
903 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
904 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
905 dnl Search for a library defining FUNC, if it's not already available.
906 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
908 dnl ######################################################################
910 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
912 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
913 [ac_func_search_save_LIBS="$LIBS"
915 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
916 test "$ac_cv_search_$2" = "no" && for i in $3; do
917 LIBS="-l$i $6 $ac_func_search_save_LIBS"
918 AC_TRY_LINK([$1], [$2()],
919 [ac_cv_search_$2="-l$i"
922 LIBS="$ac_func_search_save_LIBS"])
923 if test "$ac_cv_search_$2" != "no"; then
924 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
930 dnl ####################### -*- Mode: M4 -*- ###########################
931 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
933 dnl This file is free software; you can redistribute it and/or modify it
934 dnl under the terms of the GNU General Public License as published by
935 dnl the Free Software Foundation; either version 2 of the License, or
936 dnl (at your option) any later version.
938 dnl This file is distributed in the hope that it will be useful, but
939 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
940 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
941 dnl General Public License for more details.
943 dnl You should have received a copy of the GNU General Public License
944 dnl along with this file; if not, write to:
946 dnl Free Software Foundation, Inc.
949 dnl Boston, MA 02111-1307, USA.
950 dnl ####################################################################
953 dnl @synopsis FPTOOLS_CHECK_LIBM
955 dnl Search for math library (typically -lm).
957 dnl The variable LIBM (which is not an output variable by default) is
958 dnl set to a value which is suitable for use in a Makefile (for example,
959 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
961 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
963 # FPTOOLS_CHECK_LIBM - check for math library
964 AC_DEFUN(FPTOOLS_CHECK_LIBM,
965 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
969 # These system don't have libm
972 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
973 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
976 AC_CHECK_LIB(m, main, LIBM="-lm")
981 dnl ######################################################################
982 dnl Note: Caching has been completely rewritten, but is still no perfect yet.
983 dnl ######################################################################
985 dnl ########################### -*- Mode: M4 -*- #######################
986 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
988 dnl This file is free software; you can redistribute it and/or modify it
989 dnl under the terms of the GNU General Public License as published by
990 dnl the Free Software Foundation; either version 2 of the License, or
991 dnl (at your option) any later version.
993 dnl This file is distributed in the hope that it will be useful, but
994 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
995 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
996 dnl General Public License for more details.
998 dnl You should have received a copy of the GNU General Public License
999 dnl along with this file; if not, write to:
1001 dnl Free Software Foundation, Inc.
1004 dnl Boston, MA 02111-1307, USA.
1005 dnl ####################################################################
1007 dnl @synopsis FPTOOLS_HAVE_OPENGL
1009 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1010 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
1011 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
1013 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1014 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1017 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1018 dnl be missing) are added to the shell output variable "GL_LIBS", along
1019 dnl with any other libraries that are necessary to successfully link an
1020 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1021 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1024 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1025 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1026 dnl an OpenGL application.
1028 dnl The following shell variable (which are not output variables) are
1029 dnl also set to either "yes" or "no" (depending on which libraries were
1030 dnl found) to help you determine exactly what was found.
1037 dnl A complete little toy "Automake `make distcheck'" package of how to
1038 dnl use this macro is available at:
1040 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1042 dnl Please note that as the ac_opengl macro and the toy example evolves,
1043 dnl the version number increases, so you may have to adjust the above
1044 dnl URL accordingly.
1046 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1048 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1050 AC_REQUIRE([AC_PROG_CC])
1051 AC_REQUIRE([AC_PATH_X])
1052 AC_REQUIRE([AC_PATH_XTRA])
1053 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1055 dnl Check for Mesa first if we were asked to.
1058 Prefer Mesa over a vendor's native OpenGL library (default=no)
1060 use_Mesa=$enableval,
1063 if test x"$use_Mesa" = xyes; then
1064 GL_search_list="MesaGL GL opengl32"
1065 GLU_search_list="MesaGLU GLU glu32"
1066 GLX_search_list="MesaGLX GLX"
1068 GL_search_list="GL opengl32 MesaGL"
1069 GLU_search_list="GLU glu32 MesaGLU"
1070 GLX_search_list="GLX MesaGLX"
1076 dnl If we are running under X11 then add in the appropriate libraries.
1077 if test x"$no_x" != xyes; then
1078 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1079 dnl and GL_X_LIBS/GLUT_X_LIBS.
1080 GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1081 GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1082 GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1084 GL_save_CPPFLAGS="$CPPFLAGS"
1085 CPPFLAGS="$GL_CFLAGS"
1087 GL_save_LIBS="$LIBS"
1090 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1091 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1092 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1094 if test -n "$LIBS"; then
1095 GL_LIBS="$LDFLAGS $LIBS"
1103 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
1105 if test -n "$LIBS"; then
1106 GLUT_LIBS="$LDFLAGS $LIBS"
1109 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1110 GL_CFLAGS="$mdl_cv_gl_cflags"
1112 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1113 GL_LIBS="$mdl_cv_gl_libs"
1115 AC_CACHE_CHECK([GLUT libs], mdl_cv_glut_libs, [mdl_cv_glut_libs="$GLUT_LIBS"])
1116 GLUT_LIBS="$mdl_cv_glut_libs"
1119 dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables
1120 dnl and we don't want to be global namespace polluters.
1124 LIBS="$GL_save_LIBS"
1125 CPPFLAGS="$GL_save_CPPFLAGS"
1134 dnl Check to see whether CC (gcc) supports a particular option.
1136 AC_DEFUN(FPTOOLS_CC_FLAG,
1138 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1139 [save_CFLAGS="$CFLAGS"
1142 AC_TRY_COMPILE(,[int main(){return(0);}],
1145 CFLAGS="$save_CFLAGS"
1147 if test "$ac_cv_cc_$2"x = "yesx"; then
1155 dnl Check to see whether 'struct msghdr' contains msg_control
1157 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1158 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1159 [AC_TRY_COMPILE([#include <sys/types.h>
1160 #include <sys/uio.h>
1161 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1162 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1163 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1164 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1166 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1170 dnl Check to see whether 'struct msghdr' contains msg_accrights
1172 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1173 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1174 [AC_TRY_COMPILE([#include <sys/types.h>
1175 #include <sys/uio.h>
1176 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1177 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1178 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1179 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1181 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl