1 dnl $Id: aclocal.m4,v 1.82 2001/07/23 22:52:33 ken 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 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' `"
368 if test `eval $cmd_string 2>/dev/null` != "1"; then
370 echo "I'm not sure if your version of gcc will work,"
371 echo "but it's worth a shot, eh?"
373 fptools_cv_have_gcc='yes'
376 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
380 dnl Small feature test for perl version. Assumes PerlCmd
381 dnl contains path to perl binary
383 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
384 [$PerlCmd -v >conftest.out 2>&1
385 if grep "version 5" conftest.out >/dev/null 2>&1; then
388 if grep "v5.6" conftest.out >/dev/null 2>&1; then
391 if grep "version 6" conftest.out >/dev/null 2>&1; then
394 echo "Your version of perl probably won't work."
402 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
403 dnl values of the second argument to the result of running
404 dnl the commands given by the third. It does not cache its
405 dnl result, so it is suitable for checks which should be
408 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
409 [AC_MSG_CHECKING([$1])
411 AC_MSG_RESULT([$][$2])
415 dnl FPTOOLS_GHC_VERSION(version)
416 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
417 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
419 dnl Test for version of installed ghc. Uses $GHC.
420 dnl [original version pinched from c2hs]
422 AC_DEFUN(FPTOOLS_GHC_VERSION,
423 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
424 [${WithGhc-ghc} --version > conftestghc 2>&1
425 cat conftestghc >&AC_FD_CC
426 #Useless Use Of cat award...
427 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
429 if test "[$]fptools_version_of_ghc" = ""
431 fptools_version_of_ghc='unknown'
433 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
434 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
435 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
437 if test "[$]fptools_version_of_ghc[_pl]" = ""
439 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
440 fptools_version_of_ghc[_pl]="0"
442 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
446 [$1]="[$]fptools_version_of_ghc[_all]"
448 [$1]="[$]fptools_version_of_ghc[_major]"
449 [$2]="[$]fptools_version_of_ghc[_minor]"
451 [$1]="[$]fptools_version_of_ghc[_major]"
452 [$2]="[$]fptools_version_of_ghc[_minor]"
453 [$3]="[$]fptools_version_of_ghc[_pl]"
455 [$1]="[$]fptools_version_of_ghc[_all]"
456 [$2]="[$]fptools_version_of_ghc[_major]"
457 [$3]="[$]fptools_version_of_ghc[_minor]"
458 [$4]="[$]fptools_version_of_ghc[_pl]"
464 dnl ** figure out the alignment restriction of a type
465 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
466 dnl so we can't call REQUIRE)
468 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
469 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
470 [changequote(<<, >>)dnl
471 dnl The name to #define.
472 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
473 dnl The cache variable name.
474 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
475 dnl The name of the corresponding size.
476 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
478 AC_MSG_CHECKING(alignment of $1)
479 AC_CACHE_VAL(AC_CV_NAME,
486 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
491 FILE *f=fopen("conftestval", "w");
493 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
496 AC_CV_NAME=`cat conftestval`,
497 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
498 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
499 AC_MSG_RESULT($AC_CV_NAME)
500 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
501 AC_PROVIDE($AC_TYPE_NAME)
502 undefine([AC_TYPE_NAME])dnl
503 undefine([AC_CV_NAME])dnl
504 undefine([AC_CV_SIZEOF_NAME])dnl
507 dnl ** Map an arithmetic C type to a Haskell type.
508 dnl Based on autconf's AC_CHECK_SIZEOF.
510 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
511 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
512 [changequote(<<, >>)dnl
513 dnl The name to #define.
514 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
515 dnl The cache variable name.
516 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
518 AC_MSG_CHECKING(Haskell type for $1)
519 AC_CACHE_VAL(AC_CV_NAME,
520 [AC_TRY_RUN([#include <stdio.h>
535 FILE *f=fopen("conftestval", "w");
537 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
539 ((testing)(-1) < (testing)0) ? "Int" : "Word",
543 (sizeof(testing) > sizeof(double)) ? "LDouble" :
544 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
548 }], AC_CV_NAME=`cat conftestval`,
549 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
550 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
551 AC_MSG_RESULT($AC_CV_NAME)
552 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
553 undefine([AC_TYPE_NAME])dnl
554 undefine([AC_CV_NAME])dnl
557 dnl ** figure out whether C compiler supports 'long long's
558 dnl (Closely based on Andreas Zeller's macro for testing
559 dnl for this under C++)
561 dnl If the C compiler supports `long long' types,
562 dnl define `HAVE_LONG_LONG'.
564 AC_DEFUN(FPTOOLS_C_LONG_LONG,
566 AC_REQUIRE([AC_PROG_CC])
567 AC_MSG_CHECKING(whether ${CC} supports long long types)
568 AC_CACHE_VAL(fptools_cv_have_long_long,
572 AC_TRY_COMPILE(,[long long a;],
573 fptools_cv_have_long_long=yes,
574 fptools_cv_have_long_long=no)
577 AC_MSG_RESULT($fptools_cv_have_long_long)
578 if test "$fptools_cv_have_long_long" = yes; then
579 AC_DEFINE(HAVE_LONG_LONG)
583 dnl ** Obtain the value of a C constant.
584 dnl The value will be `(-1)' if the constant is undefined.
586 dnl This is set up so that the argument can be a shell variable.
588 AC_DEFUN(FPTOOLS_CHECK_CCONST,
590 eval "def_name=CCONST_$1"
591 eval "cv_name=ac_cv_cconst_$1"
592 AC_MSG_CHECKING(value of $1)
593 AC_CACHE_VAL($cv_name,
594 [AC_TRY_RUN([#include <stdio.h>
598 FILE *f=fopen("conftestval", "w");
600 fprintf(f, "%d\n", $1);
603 eval "$cv_name=`cat conftestval`",
605 eval "$cv_name=-1")])dnl
606 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
607 AC_MSG_RESULT($fptools_check_cconst_result)
608 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
609 unset fptools_check_cconst_result
612 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
615 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
616 [for ac_const_name in $1
618 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
623 dnl *** Can we open files in binary mode? ***
625 AC_DEFUN(FPTOOLS_O_BINARY,
627 AC_REQUIRE([AC_PROG_CC])
628 AC_MSG_CHECKING(whether we can open files in binary mode)
629 AC_CACHE_VAL(fptools_cv_have_o_binary,
638 fptools_cv_have_o_binary=yes,
639 fptools_cv_have_o_binary=no)
642 AC_MSG_RESULT($fptools_cv_have_o_binary)
643 if test "$fptools_cv_have_o_binary" = yes; then
644 AC_DEFINE(HAVE_O_BINARY)
648 dnl *** Which one comes first, .text or .data? ***
650 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
651 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
653 int f() { return 1; }
655 int main() { return ((char*)&f > (char*)&i); }
658 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
659 if test "$fptools_cv_code_bef_data" = yes; then
660 AC_DEFINE(CODE_BEFORE_DATA)
664 dnl *** Helper function **
666 AC_DEFUN(FPTOOLS_IN_SCOPE,
667 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
670 dnl *** What's the end-of-text-section marker called? ***
672 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
673 [AC_CACHE_CHECK([for end of text section marker],
674 [fptools_cv_end_of_text],
675 [fptools_cv_end_of_text=""
677 for i in data_start _data_start etext _etext __etext; do
678 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
679 if test "$fptools_end_of_text" = yes; then
680 fptools_cv_end_of_text=$i
685 if test "$not_done" = 1; then
686 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
687 if test "$fptools_end_of_text" = yes; then
688 fptools_cv_end_of_text="etext"
691 if test -n "$fptools_cv_end_of_text"; then
692 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
694 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
696 AC_CACHE_CHECK([for end of text section marker declaration],
697 [fptools_cv_end_of_text_decl],
698 [fptools_cv_end_of_text_decl=""
700 for i in data_start _data_start etext _etext __etext; do
701 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
702 if test "$fptools_end_of_text_decl" = yes; then
703 fptools_cv_end_of_text_decl=$i
708 if test "$not_done" = 1; then
709 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
710 if test "$fptools_end_of_text_decl" = yes; then
711 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
714 if test -n "$fptools_cv_end_of_text_decl"; then
715 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
717 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
721 dnl *** What's the end-of-data-section marker called? ***
723 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
724 [AC_CACHE_CHECK([for end of data section marker],
725 [fptools_cv_end_of_data],
726 [fptools_cv_end_of_data=""
728 for i in end _end __end; do
729 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
730 if test "$fptools_end_of_data" = yes; then
731 fptools_cv_end_of_data=$i
736 if test "$not_done" = 1; then
737 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
738 if test "$fptools_end_of_data" = yes; then
739 fptools_cv_end_of_data="end"
742 if test -n "$fptools_cv_end_of_data"; then
743 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
745 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
747 AC_CACHE_CHECK([for end of data section marker declaration],
748 [fptools_cv_end_of_data_decl],
749 [fptools_cv_end_of_data_decl=""
751 for i in end _end __end; do
752 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
753 if test "$fptools_end_of_data_decl" = yes; then
754 fptools_cv_end_of_data_decl=$i
759 if test "$not_done" = 1; then
760 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
761 if test "$fptools_end_of_data_decl" = yes; then
762 fptools_cv_end_of_data_decl="end asm(\"end\")"
765 if test -n "$fptools_cv_end_of_data_decl"; then
766 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
768 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
773 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
775 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
777 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
781 cat > conftest.$ac_ext <<EOF
782 dnl This sometimes fails to find confdefs.h, for some reason.
783 dnl [#]line __oline__ "[$]0"
784 [#]line __oline__ "configure"
785 #include "confdefs.h"
787 int t() { return 0; }
789 if AC_TRY_EVAL(ac_link); then
794 ifelse([$4], , , [else
804 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
806 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
808 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
809 [AC_MSG_CHECKING([for $1])
810 AC_CACHE_VAL(ac_cv_flag_$1,
811 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
812 eval "ac_cv_flag_$1=yes",
813 eval "ac_cv_flag_$1=no"
816 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
826 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
828 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
829 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
831 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
833 AC_DEFINE_UNQUOTED($ac_tr_lib)
835 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
837 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
839 AC_DEFINE_UNQUOTED($ac_tr_lib)
845 dnl check for prototypes
847 AC_DEFUN([AC_C_PROTOTYPES],
848 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
857 ac_cv_prototypes=yes,
858 ac_cv_prototypes=no)])
859 if test "$ac_cv_prototypes" = yes; then
860 AC_DEFINE([HAVE_PROTOTYPES])
864 dnl ** Check which CATALOG file we have to use with DocBook SGML.
866 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
868 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
869 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
870 dnl is set to "no". JADE is the jade executable and STYLESHEET
871 dnl a DocBook style sheet.
873 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
874 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
876 cat > conftest.sgml << EOF
877 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
881 <Author><OtherName>Test</OtherName></Author>
882 <Address>Test</Address>
883 <PubDate>Test</PubDate>
885 <Sect1><Title>Test</Title>
892 fptools_cv_sgml_catalog=no
893 for fptools_catalog in $4; do
894 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
895 if AC_TRY_EVAL(ac_try); then
896 fptools_cv_sgml_catalog=[$]fptools_catalog
902 if test $fptools_cv_sgml_catalog != "no"; then
903 $1=$fptools_cv_sgml_catalog
907 dnl ######################################################################
908 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
909 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
910 dnl Search for a library defining FUNC, if it's not already available.
911 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
913 dnl ######################################################################
915 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
917 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
918 [ac_func_search_save_LIBS="$LIBS"
920 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
921 test "$ac_cv_search_$2" = "no" && for i in $3; do
922 LIBS="-l$i $6 $ac_func_search_save_LIBS"
923 AC_TRY_LINK([$1], [$2()],
924 [ac_cv_search_$2="-l$i"
927 LIBS="$ac_func_search_save_LIBS"])
928 if test "$ac_cv_search_$2" != "no"; then
929 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
935 dnl ####################### -*- Mode: M4 -*- ###########################
936 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
938 dnl This file is free software; you can redistribute it and/or modify it
939 dnl under the terms of the GNU General Public License as published by
940 dnl the Free Software Foundation; either version 2 of the License, or
941 dnl (at your option) any later version.
943 dnl This file is distributed in the hope that it will be useful, but
944 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
945 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
946 dnl General Public License for more details.
948 dnl You should have received a copy of the GNU General Public License
949 dnl along with this file; if not, write to:
951 dnl Free Software Foundation, Inc.
954 dnl Boston, MA 02111-1307, USA.
955 dnl ####################################################################
958 dnl @synopsis FPTOOLS_CHECK_LIBM
960 dnl Search for math library (typically -lm).
962 dnl The variable LIBM (which is not an output variable by default) is
963 dnl set to a value which is suitable for use in a Makefile (for example,
964 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
966 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
968 # FPTOOLS_CHECK_LIBM - check for math library
969 AC_DEFUN(FPTOOLS_CHECK_LIBM,
970 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
973 *-*-beos* | *-*-macosx*)
974 # These system don't have libm
977 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
978 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
981 AC_CHECK_LIB(m, main, LIBM="-lm")
986 dnl ######################################################################
987 dnl NOTE: Because of portability issues between different autoconf
988 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
989 dnl Furthermore, caching has been completely rewritten.
990 dnl ######################################################################
992 dnl ########################### -*- Mode: M4 -*- #######################
993 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
995 dnl This file is free software; you can redistribute it and/or modify it
996 dnl under the terms of the GNU General Public License as published by
997 dnl the Free Software Foundation; either version 2 of the License, or
998 dnl (at your option) any later version.
1000 dnl This file is distributed in the hope that it will be useful, but
1001 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1002 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1003 dnl General Public License for more details.
1005 dnl You should have received a copy of the GNU General Public License
1006 dnl along with this file; if not, write to:
1008 dnl Free Software Foundation, Inc.
1011 dnl Boston, MA 02111-1307, USA.
1012 dnl ####################################################################
1014 dnl @synopsis FPTOOLS_HAVE_OPENGL
1016 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1017 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1018 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1020 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1021 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1024 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1025 dnl be missing) are added to the shell output variable "GL_LIBS", along
1026 dnl with any other libraries that are necessary to successfully link an
1027 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1028 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1031 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1032 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1033 dnl an OpenGL application.
1035 dnl The following shell variable (which are not output variables) are
1036 dnl also set to either "yes" or "no" (depending on which libraries were
1037 dnl found) to help you determine exactly what was found.
1044 dnl A complete little toy "Automake `make distcheck'" package of how to
1045 dnl use this macro is available at:
1047 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1049 dnl Please note that as the ac_opengl macro and the toy example evolves,
1050 dnl the version number increases, so you may have to adjust the above
1051 dnl URL accordingly.
1053 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1055 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1057 AC_REQUIRE([AC_PROG_CC])
1058 AC_REQUIRE([AC_PATH_X])
1059 AC_REQUIRE([AC_PATH_XTRA])
1060 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1062 dnl Check for Mesa first, unless we were asked not to.
1063 dnl AC_HELP_STRING([--with-Mesa],
1064 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1065 dnl with_Mesa_help_string)
1066 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1067 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1069 if test x"$use_Mesa" = xyes; then
1070 GL_search_list="MesaGL GL opengl32"
1071 GLU_search_list="MesaGLU GLU glu32"
1072 GLX_search_list="MesaGLX GLX"
1074 GL_search_list="GL opengl32 MesaGL"
1075 GLU_search_list="GLU glu32 MesaGLU"
1076 GLX_search_list="GLX MesaGLX"
1082 dnl If we are running under X11 then add in the appropriate libraries.
1083 if ! test x"$no_x" = xyes; then
1084 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1086 GL_CFLAGS="$X_CFLAGS"
1087 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1089 GL_save_CPPFLAGS="$CPPFLAGS"
1090 CPPFLAGS="$GL_CFLAGS"
1092 GL_save_LIBS="$LIBS"
1095 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1096 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1097 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1098 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1100 if test -n "$LIBS"; then
1107 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1108 GL_CFLAGS="$mdl_cv_gl_cflags"
1110 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1111 GL_LIBS="$mdl_cv_gl_libs"
1114 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1115 dnl and we don't want to be global namespace polluters.
1118 LIBS="$GL_save_LIBS"
1119 CPPFLAGS="$GL_save_CPPFLAGS"
1127 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1128 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1129 dnl 'lex' is actually present along the user's PATH).
1131 AC_DEFUN(AC_PROG_LEX_STRICT,
1132 [AC_CHECK_PROG(LEX, flex, flex)
1135 AC_CHECK_PROG(LEX,lex,lex)
1136 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1141 dnl Check to see whether CC (gcc) supports a particular option.
1143 AC_DEFUN(FPTOOLS_CC_FLAG,
1145 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1146 [save_CFLAGS="$CFLAGS"
1149 AC_TRY_COMPILE(,[int main(){return(0);}],
1152 CFLAGS="$save_CFLAGS"
1154 if test "$ac_cv_cc_$2"x = "yesx"; then