1 dnl $Id: aclocal.m4,v 1.56 2000/09/10 17:39:26 panne Exp $
3 dnl Extra autoconf macros for the Glasgow fptools
5 dnl To be a good autoconf citizen, names of local macros have
6 dnl prefixed with FPTOOLS_ to ensure we don't clash
7 dnl with any pre-supplied autoconf ones.
10 dnl Is timezone around? (in a header file)
12 AC_DEFUN(FPTOOLS_HAVE_TIMEZONE,
13 [AC_CACHE_CHECK([timezone], fptools_cv_have_timezone,
14 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
15 # include <sys/time.h>
19 # include <sys/time.h>
24 ], [return timezone;],
25 fptools_cv_have_timezone=yes, fptools_cv_have_timezone=no)])
26 if test "$fptools_cv_have_timezone" = yes; then
27 AC_DEFINE(HAVE_TIMEZONE)
32 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
35 AC_DEFUN(FPTOOLS_TYPE_TIMEZONE,
36 [AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone,
37 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
38 # include <sys/time.h>
42 # include <sys/time.h>
48 extern time_t timezone;
50 [int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
51 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
54 dnl *** Is altzone available? ***
56 AC_DEFUN(FPTOOLS_ALTZONE,
57 [AC_CACHE_CHECK([altzone], fptools_cv_altzone,
58 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
59 # include <sys/time.h>
63 # include <sys/time.h>
69 fptools_cv_altzone=yes, fptools_cv_altzone=no)])
70 if test "$fptools_cv_altzone" = yes; then
71 AC_DEFINE(HAVE_ALTZONE)
76 dnl *** Does libc contain GNU regex? ***
78 AC_DEFUN(FPTOOLS_REGEX_IN_LIBC,
79 [AC_CACHE_CHECK([for GNU regex in libc], fptools_cv_have_regex,
80 [AC_TRY_LINK([#if HAVE_UNISTD_H
84 ],[ struct re_pattern_buffer patbuf; re_compile_pattern("",0,&patbuf); ],
85 fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
86 if test "$fptools_cv_have_regex" = yes; then
95 dnl ** check for leading underscores in symbol names
97 dnl Test for determining whether symbol names have a leading
100 dnl We assume that they _haven't_ if anything goes wrong.
102 dnl Some nlist implementations seem to try to be compatible by ignoring
103 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
104 dnl to work around this by checking for *no* leading underscore first.
107 AC_DEFUN(FPTOOLS_UNDERSCORE,
108 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
109 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
112 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
113 dnl but symbol table listings shows none. What is going on here?!?
115 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
116 dnl the underscoredness of that "platform"
117 changequote(<<, >>)dnl
119 case $HostPlatform in
120 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
121 *cygwin32) fptools_cv_lead_uscore='yes';;
122 *mingw32) fptools_cv_lead_uscore='yes';;
125 AC_TRY_RUN([#ifdef HAVE_NLIST_H
127 changequote(<<, >>)dnl
129 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
130 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
138 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
140 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
145 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
148 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
149 AC_SUBST(LeadingUnderscore)
150 case $LeadingUnderscore in
151 YES) AC_DEFINE(LEADING_UNDERSCORE);;
156 dnl Check for Happy and version. If we're building GHC, then we need
157 dnl at least Happy version 1.6. If there's no installed Happy, we look
158 dnl for a happy source tree and point the build system at that instead.
160 dnl ToDo: when we reset HappyCmd to the source tree, autoconf doesn't
161 dnl seems to insert it in the cache file. sigh.
163 AC_DEFUN(FPTOOLS_HAPPY,
164 [AC_PATH_PROG(HappyCmd,happy)
165 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
166 [if test x"$HappyCmd" != x; then
167 fptools_cv_happy_version="`$HappyCmd -v |
169 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
170 elif test -d $srcdir/happy; then
171 HappyCmd=$hardtop/happy/src/happy-inplace;
172 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
173 echo -n "using happy from the source tree... ";
175 fptools_cv_happy_version="";
178 if expr "$fptools_cv_happy_version" "<" 1.6 > /dev/null 2>&1; then
179 if test -d $srcdir/ghc; then
181 echo "Happy version 1.6 or later is required to compile GHC."
186 HappyVersion=$fptools_cv_happy_version;
187 AC_SUBST(HappyVersion)
191 dnl What's the best way of doing context diffs?
193 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
195 AC_DEFUN(FPTOOLS_PROG_DIFF,
196 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
197 [echo foo > conftest1
199 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
200 fptools_cv_context_diffs='diff -C 1'
202 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
203 fptools_cv_context_diffs='diff -c1'
205 echo "Can't figure out how to do context diffs."
206 echo "Neither \`diff -C 1' nor \`diff -c1' works."
210 rm -f conftest1 conftest2
212 ContextDiffCmd=$fptools_cv_context_diffs
213 AC_SUBST(ContextDiffCmd)
217 dnl Finding the Right Yacc
219 AC_DEFUN(FPTOOLS_PROG_YACCY,
221 if test "$YACC" = "yacc"; then
222 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
223 [AC_CHECK_PROG(WhatCmd, what, what, :)
224 $WhatCmd $YACC > conftest.out
225 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
226 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
227 if test -f /usr/lang/yacc; then
228 echo "I'm going to use /usr/lang/yacc instead"
229 ac_cv_prog_yacc=/usr/lang/yacc
231 echo "I'm assuming the worst...no parser generator at all"
234 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
235 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
236 echo "I'm assuming the worst...no parser generator at all"
239 ac_cv_prog_yacc=$YACC
244 ac_cv_prog_yacc=$YACC
246 YaccCmd=$ac_cv_prog_yacc
250 dnl *** Checking for ar and its arguments + whether we need ranlib.
252 dnl ArCmd and RANLIB are AC_SUBST'ed
254 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
255 [AC_PATH_PROG(ArCmd,ar)
256 if test -z "$ArCmd"; then
257 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
260 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
263 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
266 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
269 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
272 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
276 echo "I can't figure out how to use your $ArCmd"
280 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
282 if test -z "$NeedRanLib"; then
284 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
292 dnl AC_SHEBANG_PERL - can we she-bang perl?
294 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
295 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
300 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
301 if test $? -ne 69; then
302 fptools_cv_shebang_perl=yes
304 fptools_cv_shebang_perl=no
310 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
311 dnl *Must* be called after AC_PROG_CC
313 AC_DEFUN(FPTOOLS_HAVE_GCC,
314 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
315 [if test -z "$GCC"; then
317 echo "You would be better off with gcc"
318 echo "Perhaps it is already installed, but not in your PATH?"
319 fptools_cv_have_gcc='no'
322 cmd_string="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 20 \\\< \1 \\\* 10 + \2/g' `"
324 if test `eval $cmd_string 2>/dev/null` != "1"; then
326 echo "I'm not sure if your version of gcc will work,"
327 echo "but it's worth a shot, eh?"
329 fptools_cv_have_gcc='yes'
332 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
336 dnl Small feature test for perl version. Assumes PerlCmd
337 dnl contains path to perl binary
339 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
340 [$PerlCmd -v >conftest.out 2>&1
341 if grep "version 5" conftest.out >/dev/null 2>&1; then
344 if grep "version 6" conftest.out >/dev/null 2>&1; then
347 echo "Your version of perl probably won't work."
354 dnl FPTOOLS_GHC_VERSION(version)
355 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
356 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
358 dnl Test for version of installed ghc. Uses $GHC.
359 dnl [original version pinched from c2hs]
361 AC_DEFUN(FPTOOLS_GHC_VERSION,
362 [define([FPTOOLS_CV_GHC_VERSION], [fptools_cv_ghc_version])dnl
363 AC_CACHE_CHECK([version of ghc], FPTOOLS_CV_GHC_VERSION, [dnl
364 ${GHC-ghc} --version > conftestghc 2>&1
365 cat conftestghc >&AC_FD_CC
366 dnl `Useless Use Of cat' award...
367 changequote(<<, >>)dnl
368 FPTOOLS_CV_GHC_VERSION=`cat conftestghc | sed -n -e 's/, patchlevel *\([0-9]\)/.\1/;s/.* version \([0-9.]\+\).*/\1/p'`
371 if test "[$]FPTOOLS_CV_GHC_VERSION" = ""
373 FPTOOLS_CV_GHC_VERSION='unknown'
375 changequote(<<, >>)dnl
376 FPTOOLS_CV_GHC_VERSION<<_major>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^\([0-9]\).*/\1/'`
377 FPTOOLS_CV_GHC_VERSION<<_minor>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^[0-9]\.\([0-9]*\).*/\1/'`
378 FPTOOLS_CV_GHC_VERSION<<_pl>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -n -e 's/^[0-9]\.[0-9]*\.\([0-9]*\)/\1/p'`
380 if test "[$]FPTOOLS_CV_GHC_VERSION[_pl]" = ""
382 FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor]"
383 FPTOOLS_CV_GHC_VERSION[_pl]="0"
385 FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor].[$]FPTOOLS_CV_GHC_VERSION[_pl]"
388 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
390 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
391 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
393 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
394 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
395 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
397 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
398 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
399 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
400 [$4]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
401 ], [AC_MSG_ERROR([wrong number of arguments to [$0]])])dnl
402 undefine([FPTOOLS_CV_GHC_VERSION])dnl
406 dnl ** figure out the alignment restriction of a type
407 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
408 dnl so we can't call REQUIRE)
410 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
411 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
412 [changequote(<<, >>)dnl
413 dnl The name to #define.
414 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
415 dnl The cache variable name.
416 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
417 dnl The name of the corresponding size.
418 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
420 AC_MSG_CHECKING(alignment of $1)
421 AC_CACHE_VAL(AC_CV_NAME,
428 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
433 FILE *f=fopen("conftestval", "w");
435 fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
438 AC_CV_NAME=`cat conftestval`,
439 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
440 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
441 AC_MSG_RESULT($AC_CV_NAME)
442 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
443 AC_PROVIDE($AC_TYPE_NAME)
444 undefine([AC_TYPE_NAME])dnl
445 undefine([AC_CV_NAME])dnl
446 undefine([AC_CV_SIZEOF_NAME])dnl
449 dnl ** Map an arithmetic C type to a Haskell type.
450 dnl Based on autconf's AC_CHECK_SIZEOF.
452 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
453 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
454 [changequote(<<, >>)dnl
455 dnl The name to #define.
456 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
457 dnl The cache variable name.
458 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
460 AC_MSG_CHECKING(Haskell type for $1)
461 AC_CACHE_VAL(AC_CV_NAME,
462 [AC_TRY_RUN([#include <stdio.h>
477 FILE *f=fopen("conftestval", "w");
479 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
481 ((testing)(-1) < (testing)0) ? "Int" : "Word",
485 (sizeof(testing) > sizeof(double)) ? "LDouble" :
486 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
490 }], AC_CV_NAME=`cat conftestval`,
491 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
492 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
493 AC_MSG_RESULT($AC_CV_NAME)
494 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
495 undefine([AC_TYPE_NAME])dnl
496 undefine([AC_CV_NAME])dnl
499 dnl ** figure out whether C compiler supports 'long long's
500 dnl (Closely based on Andreas Zeller's macro for testing
501 dnl for this under C++)
503 dnl If the C compiler supports `long long' types,
504 dnl define `HAVE_LONG_LONG'.
506 AC_DEFUN(FPTOOLS_C_LONG_LONG,
508 AC_REQUIRE([AC_PROG_CC])
509 AC_MSG_CHECKING(whether ${CC} supports long long types)
510 AC_CACHE_VAL(fptools_cv_have_long_long,
514 AC_TRY_COMPILE(,[long long a;],
515 fptools_cv_have_long_long=yes,
516 fptools_cv_have_long_long=no)
519 AC_MSG_RESULT($fptools_cv_have_long_long)
520 if test "$fptools_cv_have_long_long" = yes; then
521 AC_DEFINE(HAVE_LONG_LONG)
525 dnl *** Can we open files in binary mode? ***
527 AC_DEFUN(FPTOOLS_O_BINARY,
529 AC_REQUIRE([AC_PROG_CC])
530 AC_MSG_CHECKING(whether we can open files in binary mode)
531 AC_CACHE_VAL(fptools_cv_have_o_binary,
540 fptools_cv_have_o_binary=yes,
541 fptools_cv_have_o_binary=no)
544 AC_MSG_RESULT($fptools_cv_have_o_binary)
545 if test "$fptools_cv_have_o_binary" = yes; then
546 AC_DEFINE(HAVE_O_BINARY)
550 dnl *** Which one comes first, .text or .data? ***
552 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
553 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
555 int f() { return 1; }
557 int main() { return ((char*)&f > (char*)&i); }
560 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
561 if test "$fptools_cv_code_bef_data" = yes; then
562 AC_DEFINE(CODE_BEFORE_DATA)
566 dnl *** Helper function **
568 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
570 dnl *** What's the end-of-text-section marker called? ***
572 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
573 [AC_MSG_CHECKING([for end of text section marker])
575 for i in data_start _data_start etext _etext __etext; do
576 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
577 if test "$fptools_end_of_text" = yes; then
578 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
579 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
584 if test "$not_done" = 1; then
585 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
586 if test "$fptools_end_of_text" = yes; then
587 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
588 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
590 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
591 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
594 AC_MSG_RESULT([$]fptools_cv_end_of_text)
597 dnl *** What's the end-of-data-section marker called? ***
599 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
600 [AC_MSG_CHECKING([for end of data section marker])
602 for i in end _end __end; do
603 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
604 if test "$fptools_end_of_data" = yes; then
605 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
606 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
611 if test "$not_done" = 1; then
612 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
613 if test "$fptools_end_of_data" = yes; then
614 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
615 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
617 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
618 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
621 AC_MSG_RESULT([$]fptools_cv_end_of_data)
626 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
628 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
630 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
634 cat > conftest.$ac_ext <<EOF
635 dnl This sometimes fails to find confdefs.h, for some reason.
636 dnl [#]line __oline__ "[$]0"
637 [#]line __oline__ "configure"
638 #include "confdefs.h"
640 int t() { return 0; }
642 if AC_TRY_EVAL(ac_link); then
647 ifelse([$4], , , [else
657 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
659 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
661 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
662 [AC_MSG_CHECKING([for $1])
663 AC_CACHE_VAL(ac_cv_flag_$1,
664 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
665 eval "ac_cv_flag_$1=yes",
666 eval "ac_cv_flag_$1=no"
669 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
679 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
681 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
682 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
684 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
686 AC_DEFINE_UNQUOTED($ac_tr_lib)
688 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
690 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
692 AC_DEFINE_UNQUOTED($ac_tr_lib)
698 dnl check for prototypes
700 AC_DEFUN(AC_C_PROTOTYPES,
701 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
710 ac_cv_prototypes=yes,
711 ac_cv_prototypes=no)])
712 if test "$ac_cv_prototypes" = yes; then
713 AC_DEFINE(HAVE_PROTOTYPES)
717 dnl ** Check which CATALOG file we have to use with DocBook SGML.
719 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
721 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
722 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
723 dnl is set to "no". JADE is the jade executable and STYLESHEET
724 dnl a DocBook style sheet.
726 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
727 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
729 cat > conftest.sgml << EOF
730 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
734 <Author><OtherName>Test</OtherName></Author>
735 <Address>Test</Address>
736 <PubDate>Test</PubDate>
738 <Sect1><Title>Test</Title>
745 fptools_cv_sgml_catalog=no
746 for fptools_catalog in $4; do
747 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
748 if AC_TRY_EVAL(ac_try); then
749 fptools_cv_sgml_catalog=[$]fptools_catalog
755 if test $fptools_cv_sgml_catalog != "no"; then
756 $1=$fptools_cv_sgml_catalog
760 dnl ######################################################################
761 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
762 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
763 dnl Search for a library defining FUNC, if it's not already available.
764 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
766 dnl ######################################################################
768 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
770 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
771 [ac_func_search_save_LIBS="$LIBS"
773 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
774 test "$ac_cv_search_$2" = "no" && for i in $3; do
775 LIBS="-l$i $6 $ac_func_search_save_LIBS"
776 AC_TRY_LINK([$1], [$2()],
777 [ac_cv_search_$2="-l$i"
780 LIBS="$ac_func_search_save_LIBS"])
781 if test "$ac_cv_search_$2" != "no"; then
782 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
788 dnl ####################### -*- Mode: M4 -*- ###########################
789 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
791 dnl This file is free software; you can redistribute it and/or modify it
792 dnl under the terms of the GNU General Public License as published by
793 dnl the Free Software Foundation; either version 2 of the License, or
794 dnl (at your option) any later version.
796 dnl This file is distributed in the hope that it will be useful, but
797 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
798 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
799 dnl General Public License for more details.
801 dnl You should have received a copy of the GNU General Public License
802 dnl along with this file; if not, write to:
804 dnl Free Software Foundation, Inc.
807 dnl Boston, MA 02111-1307, USA.
808 dnl ####################################################################
811 dnl @synopsis FPTOOLS_CHECK_LIBM
813 dnl Search for math library (typically -lm).
815 dnl The variable LIBM (which is not an output variable by default) is
816 dnl set to a value which is suitable for use in a Makefile (for example,
817 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
819 dnl @version 0.01 $Id: aclocal.m4,v 1.56 2000/09/10 17:39:26 panne Exp $
820 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
822 # FPTOOLS_CHECK_LIBM - check for math library
823 AC_DEFUN(FPTOOLS_CHECK_LIBM,
824 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
827 *-*-beos* | *-*-cygwin*)
828 # These system don't have libm
831 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
832 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
835 AC_CHECK_LIB(m, main, LIBM="-lm")
840 dnl ######################################################################
841 dnl NOTE: Because of portability issues between different autoconf
842 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
843 dnl Furthermore, caching has been completely rewritten.
844 dnl ######################################################################
846 dnl ########################### -*- Mode: M4 -*- #######################
847 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
849 dnl This file is free software; you can redistribute it and/or modify it
850 dnl under the terms of the GNU General Public License as published by
851 dnl the Free Software Foundation; either version 2 of the License, or
852 dnl (at your option) any later version.
854 dnl This file is distributed in the hope that it will be useful, but
855 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
856 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
857 dnl General Public License for more details.
859 dnl You should have received a copy of the GNU General Public License
860 dnl along with this file; if not, write to:
862 dnl Free Software Foundation, Inc.
865 dnl Boston, MA 02111-1307, USA.
866 dnl ####################################################################
868 dnl @synopsis FPTOOLS_HAVE_OPENGL
870 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
871 dnl OpenGL) before a vendor's version of OpenGL, unless we were
872 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
874 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
875 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
878 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
879 dnl be missing) are added to the shell output variable "GL_LIBS", along
880 dnl with any other libraries that are necessary to successfully link an
881 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
882 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
885 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
886 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
887 dnl an OpenGL application.
889 dnl The following shell variable (which are not output variables) are
890 dnl also set to either "yes" or "no" (depending on which libraries were
891 dnl found) to help you determine exactly what was found.
898 dnl A complete little toy "Automake `make distcheck'" package of how to
899 dnl use this macro is available at:
901 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
903 dnl Please note that as the ac_opengl macro and the toy example evolves,
904 dnl the version number increases, so you may have to adjust the above
907 dnl @version 0.01 $Id: aclocal.m4,v 1.56 2000/09/10 17:39:26 panne Exp $
908 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
910 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
912 AC_REQUIRE([AC_PROG_CC])
913 AC_REQUIRE([AC_PATH_X])
914 AC_REQUIRE([AC_PATH_XTRA])
915 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
917 dnl Check for Mesa first, unless we were asked not to.
918 dnl AC_HELP_STRING([--with-Mesa],
919 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
920 dnl with_Mesa_help_string)
921 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
922 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
924 if test x"$use_Mesa" = xyes; then
925 GL_search_list="MesaGL GL opengl32"
926 GLU_search_list="MesaGLU GLU glu32"
927 GLX_search_list="MesaGLX GLX"
929 GL_search_list="GL opengl32 MesaGL"
930 GLU_search_list="GLU glu32 MesaGLU"
931 GLX_search_list="GLX MesaGLX"
937 dnl If we are running under X11 then add in the appropriate libraries.
938 if ! test x"$no_x" = xyes; then
939 dnl Add everything we need to compile and link X programs to GL_CFLAGS
941 GL_CFLAGS="$X_CFLAGS"
942 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
944 GL_save_CPPFLAGS="$CPPFLAGS"
945 CPPFLAGS="$GL_CFLAGS"
950 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
951 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
952 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
953 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
955 if test -n "$LIBS"; then
962 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
963 GL_CFLAGS="$mdl_cv_gl_cflags"
965 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
966 GL_LIBS="$mdl_cv_gl_libs"
969 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
970 dnl and we don't want to be global namespace polluters.
974 CPPFLAGS="$GL_save_CPPFLAGS"