1 dnl $Id: aclocal.m4,v 1.83 2001/09/20 14:08:13 sewardj 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;
85 re_compile_pattern("",0,&patbuf);
86 re_search_2 (&patbuf, "", 0, "",0, 0,0,0,0); ],
87 fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
88 if test "$fptools_cv_have_regex" = yes; then
97 dnl ** check for leading underscores in symbol names
99 dnl Test for determining whether symbol names have a leading
102 dnl We assume that they _haven't_ if anything goes wrong.
104 dnl Some nlist implementations seem to try to be compatible by ignoring
105 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
106 dnl to work around this by checking for *no* leading underscore first.
109 AC_DEFUN(FPTOOLS_UNDERSCORE,
110 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
111 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
114 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
115 dnl but symbol table listings shows none. What is going on here?!?
117 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
118 dnl the underscoredness of that "platform"
119 changequote(<<, >>)dnl
121 case $HostPlatform in
122 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
123 *cygwin32) fptools_cv_lead_uscore='yes';;
124 *mingw32) fptools_cv_lead_uscore='yes';;
127 AC_TRY_RUN([#ifdef HAVE_NLIST_H
129 changequote(<<, >>)dnl
131 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
132 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
140 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
142 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
147 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
150 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
151 AC_SUBST(LeadingUnderscore)
152 case $LeadingUnderscore in
153 YES) AC_DEFINE(LEADING_UNDERSCORE);;
158 dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
159 dnl ACTION-IF-TRUE [, ACTION-IF-FALSE])
161 dnl compare versions field-wise (separator is '.')
162 dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
164 dnl quite shell-independant and SUSv2 compliant code
166 dnl NOTE: the loop could be unrolled within autoconf, but the
167 dnl macro code would be a) longer and b) harder to debug... ;)
169 AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
174 set -- [$]a; h1="[$]1"; shift 2>/dev/null; a="[$]*"
175 set -- [$]b; h2="[$]1"; shift 2>/dev/null; b="[$]*"
176 test -n "[$]h1" || h1=0; test -n "[$]h2" || h2=0
177 test [$]{h1} -eq [$]{h2} || break
179 test [$]{h1} [$2] [$]{h2}
181 then ifelse([$4],,[:],[
191 dnl Check for Happy and version. If we're building GHC, then we need
192 dnl at least Happy version 1.9. If there's no installed Happy, we look
193 dnl for a happy source tree and point the build system at that instead.
195 AC_DEFUN(FPTOOLS_HAPPY,
197 if test -d $srcdir/happy; then
198 SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
200 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
201 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
203 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
204 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
205 elif test x"$HappyCmd" != x; then
206 fptools_cv_happy_version="`$HappyCmd -v |
207 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
209 fptools_cv_happy_version="";
213 if test -d $srcdir/ghc; then
214 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9],
215 [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])dnl
217 HappyVersion=$fptools_cv_happy_version;
218 AC_SUBST(HappyVersion)
222 dnl What's the best way of doing context diffs?
224 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
226 AC_DEFUN(FPTOOLS_PROG_DIFF,
227 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
228 [echo foo > conftest1
230 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
231 fptools_cv_context_diffs='diff -C 1'
233 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
234 fptools_cv_context_diffs='diff -c1'
236 echo "Can't figure out how to do context diffs."
237 echo "Neither \`diff -C 1' nor \`diff -c1' works."
241 rm -f conftest1 conftest2
243 ContextDiffCmd=$fptools_cv_context_diffs
244 AC_SUBST(ContextDiffCmd)
248 dnl Finding the Right Yacc
250 AC_DEFUN(FPTOOLS_PROG_YACCY,
252 if test "$YACC" = "yacc"; then
253 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
254 [AC_CHECK_PROG(WhatCmd, what, what, :)
255 $WhatCmd $YACC > conftest.out
256 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
257 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
258 if test -f /usr/lang/yacc; then
259 echo "I'm going to use /usr/lang/yacc instead"
260 ac_cv_prog_yacc=/usr/lang/yacc
262 echo "I'm assuming the worst...no parser generator at all"
265 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
266 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
267 echo "I'm assuming the worst...no parser generator at all"
270 ac_cv_prog_yacc=$YACC
275 ac_cv_prog_yacc=$YACC
277 YaccCmd=$ac_cv_prog_yacc
281 dnl *** Checking for ar and its arguments + whether we need ranlib.
283 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
284 dnl On Digital UNIX, we test for the -Z (compress) and
285 dnl -input (take list of files from external file) flags.
287 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
288 [AC_PATH_PROG(ArCmd,ar)
289 if test -z "$ArCmd"; then
290 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
293 if $ArCmd clqsZ conftest.a >/dev/null 2>/dev/null; then
296 elif $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
299 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
302 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
305 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
308 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
312 echo "I can't figure out how to use your $ArCmd"
316 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
318 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
319 ArSupportsInput='-input'
324 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
325 AC_SUBST(ArSupportsInput)
326 if test -z "$NeedRanLib"; then
328 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
336 dnl AC_SHEBANG_PERL - can we she-bang perl?
338 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
339 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
344 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
345 if test $? -ne 69; then
346 fptools_cv_shebang_perl=yes
348 fptools_cv_shebang_perl=no
354 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
355 dnl *Must* be called after AC_PROG_CC
357 AC_DEFUN(FPTOOLS_HAVE_GCC,
358 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
359 [if test -z "$GCC"; then
361 echo "You would be better off with gcc"
362 echo "Perhaps it is already installed, but not in your PATH?"
363 fptools_cv_have_gcc='no'
366 is_gcc_v1="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 2000 \\\>= \1 \\\* 1000 + \2/g' `"
367 is_gcc_v3="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 3000 \\\<= \1 \\\* 1000 + \2/g' `"
369 fptools_cv_have_gcc='yes'
370 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
371 fptools_cv_have_gcc='no'
373 echo "your gcc version appears to be ..."
375 echo "gcc prior to 2.0 and have never worked with ghc."
376 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
377 AC_MSG_ERROR([gcc 1.X has never been supported])
379 if test `eval $is_gcc_v3 2>/dev/null` = "1"; then
380 fptools_cv_have_gcc='no'
382 echo "your gcc version appears to be ..."
384 echo "gcc versions 3.0 and above are not yet supported."
385 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
386 AC_MSG_ERROR([gcc 3.0 and above is not currently supported])
390 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
394 dnl Small feature test for perl version. Assumes PerlCmd
395 dnl contains path to perl binary
397 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
398 [$PerlCmd -v >conftest.out 2>&1
399 if grep "version 5" conftest.out >/dev/null 2>&1; then
402 if grep "v5.6" conftest.out >/dev/null 2>&1; then
405 if grep "version 6" conftest.out >/dev/null 2>&1; then
408 echo "Your version of perl probably won't work."
416 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
417 dnl values of the second argument to the result of running
418 dnl the commands given by the third. It does not cache its
419 dnl result, so it is suitable for checks which should be
422 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
423 [AC_MSG_CHECKING([$1])
425 AC_MSG_RESULT([$][$2])
429 dnl FPTOOLS_GHC_VERSION(version)
430 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
431 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
433 dnl Test for version of installed ghc. Uses $GHC.
434 dnl [original version pinched from c2hs]
436 AC_DEFUN(FPTOOLS_GHC_VERSION,
437 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
438 [${WithGhc-ghc} --version > conftestghc 2>&1
439 cat conftestghc >&AC_FD_CC
440 #Useless Use Of cat award...
441 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
443 if test "[$]fptools_version_of_ghc" = ""
445 fptools_version_of_ghc='unknown'
447 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
448 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
449 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
451 if test "[$]fptools_version_of_ghc[_pl]" = ""
453 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
454 fptools_version_of_ghc[_pl]="0"
456 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
460 [$1]="[$]fptools_version_of_ghc[_all]"
462 [$1]="[$]fptools_version_of_ghc[_major]"
463 [$2]="[$]fptools_version_of_ghc[_minor]"
465 [$1]="[$]fptools_version_of_ghc[_major]"
466 [$2]="[$]fptools_version_of_ghc[_minor]"
467 [$3]="[$]fptools_version_of_ghc[_pl]"
469 [$1]="[$]fptools_version_of_ghc[_all]"
470 [$2]="[$]fptools_version_of_ghc[_major]"
471 [$3]="[$]fptools_version_of_ghc[_minor]"
472 [$4]="[$]fptools_version_of_ghc[_pl]"
478 dnl ** figure out the alignment restriction of a type
479 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
480 dnl so we can't call REQUIRE)
482 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
483 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
484 [changequote(<<, >>)dnl
485 dnl The name to #define.
486 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
487 dnl The cache variable name.
488 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
489 dnl The name of the corresponding size.
490 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
492 AC_MSG_CHECKING(alignment of $1)
493 AC_CACHE_VAL(AC_CV_NAME,
500 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
505 FILE *f=fopen("conftestval", "w");
507 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
510 AC_CV_NAME=`cat conftestval`,
511 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
512 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
513 AC_MSG_RESULT($AC_CV_NAME)
514 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
515 AC_PROVIDE($AC_TYPE_NAME)
516 undefine([AC_TYPE_NAME])dnl
517 undefine([AC_CV_NAME])dnl
518 undefine([AC_CV_SIZEOF_NAME])dnl
521 dnl ** Map an arithmetic C type to a Haskell type.
522 dnl Based on autconf's AC_CHECK_SIZEOF.
524 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
525 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
526 [changequote(<<, >>)dnl
527 dnl The name to #define.
528 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
529 dnl The cache variable name.
530 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
532 AC_MSG_CHECKING(Haskell type for $1)
533 AC_CACHE_VAL(AC_CV_NAME,
534 [AC_TRY_RUN([#include <stdio.h>
549 FILE *f=fopen("conftestval", "w");
551 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
553 ((testing)(-1) < (testing)0) ? "Int" : "Word",
557 (sizeof(testing) > sizeof(double)) ? "LDouble" :
558 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
562 }], AC_CV_NAME=`cat conftestval`,
563 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
564 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
565 AC_MSG_RESULT($AC_CV_NAME)
566 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
567 undefine([AC_TYPE_NAME])dnl
568 undefine([AC_CV_NAME])dnl
571 dnl ** figure out whether C compiler supports 'long long's
572 dnl (Closely based on Andreas Zeller's macro for testing
573 dnl for this under C++)
575 dnl If the C compiler supports `long long' types,
576 dnl define `HAVE_LONG_LONG'.
578 AC_DEFUN(FPTOOLS_C_LONG_LONG,
580 AC_REQUIRE([AC_PROG_CC])
581 AC_MSG_CHECKING(whether ${CC} supports long long types)
582 AC_CACHE_VAL(fptools_cv_have_long_long,
586 AC_TRY_COMPILE(,[long long a;],
587 fptools_cv_have_long_long=yes,
588 fptools_cv_have_long_long=no)
591 AC_MSG_RESULT($fptools_cv_have_long_long)
592 if test "$fptools_cv_have_long_long" = yes; then
593 AC_DEFINE(HAVE_LONG_LONG)
597 dnl ** Obtain the value of a C constant.
598 dnl The value will be `(-1)' if the constant is undefined.
600 dnl This is set up so that the argument can be a shell variable.
602 AC_DEFUN(FPTOOLS_CHECK_CCONST,
604 eval "def_name=CCONST_$1"
605 eval "cv_name=ac_cv_cconst_$1"
606 AC_MSG_CHECKING(value of $1)
607 AC_CACHE_VAL($cv_name,
608 [AC_TRY_RUN([#include <stdio.h>
612 FILE *f=fopen("conftestval", "w");
614 fprintf(f, "%d\n", $1);
617 eval "$cv_name=`cat conftestval`",
619 eval "$cv_name=-1")])dnl
620 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
621 AC_MSG_RESULT($fptools_check_cconst_result)
622 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
623 unset fptools_check_cconst_result
626 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
629 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
630 [for ac_const_name in $1
632 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
637 dnl *** Can we open files in binary mode? ***
639 AC_DEFUN(FPTOOLS_O_BINARY,
641 AC_REQUIRE([AC_PROG_CC])
642 AC_MSG_CHECKING(whether we can open files in binary mode)
643 AC_CACHE_VAL(fptools_cv_have_o_binary,
652 fptools_cv_have_o_binary=yes,
653 fptools_cv_have_o_binary=no)
656 AC_MSG_RESULT($fptools_cv_have_o_binary)
657 if test "$fptools_cv_have_o_binary" = yes; then
658 AC_DEFINE(HAVE_O_BINARY)
662 dnl *** Which one comes first, .text or .data? ***
664 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
665 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
667 int f() { return 1; }
669 int main() { return ((char*)&f > (char*)&i); }
672 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
673 if test "$fptools_cv_code_bef_data" = yes; then
674 AC_DEFINE(CODE_BEFORE_DATA)
678 dnl *** Helper function **
680 AC_DEFUN(FPTOOLS_IN_SCOPE,
681 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
684 dnl *** What's the end-of-text-section marker called? ***
686 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
687 [AC_CACHE_CHECK([for end of text section marker],
688 [fptools_cv_end_of_text],
689 [fptools_cv_end_of_text=""
691 for i in data_start _data_start etext _etext __etext; do
692 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
693 if test "$fptools_end_of_text" = yes; then
694 fptools_cv_end_of_text=$i
699 if test "$not_done" = 1; then
700 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
701 if test "$fptools_end_of_text" = yes; then
702 fptools_cv_end_of_text="etext"
705 if test -n "$fptools_cv_end_of_text"; then
706 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
708 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
710 AC_CACHE_CHECK([for end of text section marker declaration],
711 [fptools_cv_end_of_text_decl],
712 [fptools_cv_end_of_text_decl=""
714 for i in data_start _data_start etext _etext __etext; do
715 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
716 if test "$fptools_end_of_text_decl" = yes; then
717 fptools_cv_end_of_text_decl=$i
722 if test "$not_done" = 1; then
723 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
724 if test "$fptools_end_of_text_decl" = yes; then
725 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
728 if test -n "$fptools_cv_end_of_text_decl"; then
729 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
731 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
735 dnl *** What's the end-of-data-section marker called? ***
737 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
738 [AC_CACHE_CHECK([for end of data section marker],
739 [fptools_cv_end_of_data],
740 [fptools_cv_end_of_data=""
742 for i in end _end __end; do
743 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
744 if test "$fptools_end_of_data" = yes; then
745 fptools_cv_end_of_data=$i
750 if test "$not_done" = 1; then
751 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
752 if test "$fptools_end_of_data" = yes; then
753 fptools_cv_end_of_data="end"
756 if test -n "$fptools_cv_end_of_data"; then
757 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
759 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
761 AC_CACHE_CHECK([for end of data section marker declaration],
762 [fptools_cv_end_of_data_decl],
763 [fptools_cv_end_of_data_decl=""
765 for i in end _end __end; do
766 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
767 if test "$fptools_end_of_data_decl" = yes; then
768 fptools_cv_end_of_data_decl=$i
773 if test "$not_done" = 1; then
774 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
775 if test "$fptools_end_of_data_decl" = yes; then
776 fptools_cv_end_of_data_decl="end asm(\"end\")"
779 if test -n "$fptools_cv_end_of_data_decl"; then
780 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
782 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
787 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
789 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
791 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
795 cat > conftest.$ac_ext <<EOF
796 dnl This sometimes fails to find confdefs.h, for some reason.
797 dnl [#]line __oline__ "[$]0"
798 [#]line __oline__ "configure"
799 #include "confdefs.h"
801 int t() { return 0; }
803 if AC_TRY_EVAL(ac_link); then
808 ifelse([$4], , , [else
818 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
820 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
822 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
823 [AC_MSG_CHECKING([for $1])
824 AC_CACHE_VAL(ac_cv_flag_$1,
825 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
826 eval "ac_cv_flag_$1=yes",
827 eval "ac_cv_flag_$1=no"
830 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
840 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
842 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
843 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
845 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
847 AC_DEFINE_UNQUOTED($ac_tr_lib)
849 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
851 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
853 AC_DEFINE_UNQUOTED($ac_tr_lib)
859 dnl check for prototypes
861 AC_DEFUN([AC_C_PROTOTYPES],
862 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
871 ac_cv_prototypes=yes,
872 ac_cv_prototypes=no)])
873 if test "$ac_cv_prototypes" = yes; then
874 AC_DEFINE([HAVE_PROTOTYPES])
878 dnl ** Check which CATALOG file we have to use with DocBook SGML.
880 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
882 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
883 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
884 dnl is set to "no". JADE is the jade executable and STYLESHEET
885 dnl a DocBook style sheet.
887 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
888 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
890 cat > conftest.sgml << EOF
891 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
895 <Author><OtherName>Test</OtherName></Author>
896 <Address>Test</Address>
897 <PubDate>Test</PubDate>
899 <Sect1><Title>Test</Title>
906 fptools_cv_sgml_catalog=no
907 for fptools_catalog in $4; do
908 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
909 if AC_TRY_EVAL(ac_try); then
910 fptools_cv_sgml_catalog=[$]fptools_catalog
916 if test $fptools_cv_sgml_catalog != "no"; then
917 $1=$fptools_cv_sgml_catalog
921 dnl ######################################################################
922 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
923 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
924 dnl Search for a library defining FUNC, if it's not already available.
925 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
927 dnl ######################################################################
929 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
931 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
932 [ac_func_search_save_LIBS="$LIBS"
934 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
935 test "$ac_cv_search_$2" = "no" && for i in $3; do
936 LIBS="-l$i $6 $ac_func_search_save_LIBS"
937 AC_TRY_LINK([$1], [$2()],
938 [ac_cv_search_$2="-l$i"
941 LIBS="$ac_func_search_save_LIBS"])
942 if test "$ac_cv_search_$2" != "no"; then
943 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
949 dnl ####################### -*- Mode: M4 -*- ###########################
950 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
952 dnl This file is free software; you can redistribute it and/or modify it
953 dnl under the terms of the GNU General Public License as published by
954 dnl the Free Software Foundation; either version 2 of the License, or
955 dnl (at your option) any later version.
957 dnl This file is distributed in the hope that it will be useful, but
958 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
959 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
960 dnl General Public License for more details.
962 dnl You should have received a copy of the GNU General Public License
963 dnl along with this file; if not, write to:
965 dnl Free Software Foundation, Inc.
968 dnl Boston, MA 02111-1307, USA.
969 dnl ####################################################################
972 dnl @synopsis FPTOOLS_CHECK_LIBM
974 dnl Search for math library (typically -lm).
976 dnl The variable LIBM (which is not an output variable by default) is
977 dnl set to a value which is suitable for use in a Makefile (for example,
978 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
980 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
982 # FPTOOLS_CHECK_LIBM - check for math library
983 AC_DEFUN(FPTOOLS_CHECK_LIBM,
984 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
987 *-*-beos* | *-*-macosx*)
988 # These system don't have libm
991 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
992 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
995 AC_CHECK_LIB(m, main, LIBM="-lm")
1000 dnl ######################################################################
1001 dnl NOTE: Because of portability issues between different autoconf
1002 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1003 dnl Furthermore, caching has been completely rewritten.
1004 dnl ######################################################################
1006 dnl ########################### -*- Mode: M4 -*- #######################
1007 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1009 dnl This file is free software; you can redistribute it and/or modify it
1010 dnl under the terms of the GNU General Public License as published by
1011 dnl the Free Software Foundation; either version 2 of the License, or
1012 dnl (at your option) any later version.
1014 dnl This file is distributed in the hope that it will be useful, but
1015 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1016 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1017 dnl General Public License for more details.
1019 dnl You should have received a copy of the GNU General Public License
1020 dnl along with this file; if not, write to:
1022 dnl Free Software Foundation, Inc.
1025 dnl Boston, MA 02111-1307, USA.
1026 dnl ####################################################################
1028 dnl @synopsis FPTOOLS_HAVE_OPENGL
1030 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1031 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1032 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1034 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1035 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1038 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1039 dnl be missing) are added to the shell output variable "GL_LIBS", along
1040 dnl with any other libraries that are necessary to successfully link an
1041 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1042 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1045 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1046 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1047 dnl an OpenGL application.
1049 dnl The following shell variable (which are not output variables) are
1050 dnl also set to either "yes" or "no" (depending on which libraries were
1051 dnl found) to help you determine exactly what was found.
1058 dnl A complete little toy "Automake `make distcheck'" package of how to
1059 dnl use this macro is available at:
1061 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1063 dnl Please note that as the ac_opengl macro and the toy example evolves,
1064 dnl the version number increases, so you may have to adjust the above
1065 dnl URL accordingly.
1067 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1069 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1071 AC_REQUIRE([AC_PROG_CC])
1072 AC_REQUIRE([AC_PATH_X])
1073 AC_REQUIRE([AC_PATH_XTRA])
1074 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1076 dnl Check for Mesa first, unless we were asked not to.
1077 dnl AC_HELP_STRING([--with-Mesa],
1078 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1079 dnl with_Mesa_help_string)
1080 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1081 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1083 if test x"$use_Mesa" = xyes; then
1084 GL_search_list="MesaGL GL opengl32"
1085 GLU_search_list="MesaGLU GLU glu32"
1086 GLX_search_list="MesaGLX GLX"
1088 GL_search_list="GL opengl32 MesaGL"
1089 GLU_search_list="GLU glu32 MesaGLU"
1090 GLX_search_list="GLX MesaGLX"
1096 dnl If we are running under X11 then add in the appropriate libraries.
1097 if ! test x"$no_x" = xyes; then
1098 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1100 GL_CFLAGS="$X_CFLAGS"
1101 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1103 GL_save_CPPFLAGS="$CPPFLAGS"
1104 CPPFLAGS="$GL_CFLAGS"
1106 GL_save_LIBS="$LIBS"
1109 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1110 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1111 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1112 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1114 if test -n "$LIBS"; then
1121 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1122 GL_CFLAGS="$mdl_cv_gl_cflags"
1124 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1125 GL_LIBS="$mdl_cv_gl_libs"
1128 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1129 dnl and we don't want to be global namespace polluters.
1132 LIBS="$GL_save_LIBS"
1133 CPPFLAGS="$GL_save_CPPFLAGS"
1141 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1142 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1143 dnl 'lex' is actually present along the user's PATH).
1145 AC_DEFUN(AC_PROG_LEX_STRICT,
1146 [AC_CHECK_PROG(LEX, flex, flex)
1149 AC_CHECK_PROG(LEX,lex,lex)
1150 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1155 dnl Check to see whether CC (gcc) supports a particular option.
1157 AC_DEFUN(FPTOOLS_CC_FLAG,
1159 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1160 [save_CFLAGS="$CFLAGS"
1163 AC_TRY_COMPILE(,[int main(){return(0);}],
1166 CFLAGS="$save_CFLAGS"
1168 if test "$ac_cv_cc_$2"x = "yesx"; then