1 dnl $Id: aclocal.m4,v 1.81 2001/07/19 22:08:07 sof 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 and RANLIB are AC_SUBST'ed
285 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
286 [AC_PATH_PROG(ArCmd,ar)
287 if test -z "$ArCmd"; then
288 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
291 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
294 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
297 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
300 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
303 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
307 echo "I can't figure out how to use your $ArCmd"
311 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
313 if test -z "$NeedRanLib"; then
315 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
323 dnl AC_SHEBANG_PERL - can we she-bang perl?
325 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
326 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
331 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
332 if test $? -ne 69; then
333 fptools_cv_shebang_perl=yes
335 fptools_cv_shebang_perl=no
341 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
342 dnl *Must* be called after AC_PROG_CC
344 AC_DEFUN(FPTOOLS_HAVE_GCC,
345 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
346 [if test -z "$GCC"; then
348 echo "You would be better off with gcc"
349 echo "Perhaps it is already installed, but not in your PATH?"
350 fptools_cv_have_gcc='no'
353 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' `"
355 if test `eval $cmd_string 2>/dev/null` != "1"; then
357 echo "I'm not sure if your version of gcc will work,"
358 echo "but it's worth a shot, eh?"
360 fptools_cv_have_gcc='yes'
363 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
367 dnl Small feature test for perl version. Assumes PerlCmd
368 dnl contains path to perl binary
370 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
371 [$PerlCmd -v >conftest.out 2>&1
372 if grep "version 5" conftest.out >/dev/null 2>&1; then
375 if grep "v5.6" conftest.out >/dev/null 2>&1; then
378 if grep "version 6" conftest.out >/dev/null 2>&1; then
381 echo "Your version of perl probably won't work."
389 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
390 dnl values of the second argument to the result of running
391 dnl the commands given by the third. It does not cache its
392 dnl result, so it is suitable for checks which should be
395 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
396 [AC_MSG_CHECKING([$1])
398 AC_MSG_RESULT([$][$2])
402 dnl FPTOOLS_GHC_VERSION(version)
403 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
404 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
406 dnl Test for version of installed ghc. Uses $GHC.
407 dnl [original version pinched from c2hs]
409 AC_DEFUN(FPTOOLS_GHC_VERSION,
410 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
411 [${WithGhc-ghc} --version > conftestghc 2>&1
412 cat conftestghc >&AC_FD_CC
413 #Useless Use Of cat award...
414 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
416 if test "[$]fptools_version_of_ghc" = ""
418 fptools_version_of_ghc='unknown'
420 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
421 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
422 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
424 if test "[$]fptools_version_of_ghc[_pl]" = ""
426 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
427 fptools_version_of_ghc[_pl]="0"
429 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
433 [$1]="[$]fptools_version_of_ghc[_all]"
435 [$1]="[$]fptools_version_of_ghc[_major]"
436 [$2]="[$]fptools_version_of_ghc[_minor]"
438 [$1]="[$]fptools_version_of_ghc[_major]"
439 [$2]="[$]fptools_version_of_ghc[_minor]"
440 [$3]="[$]fptools_version_of_ghc[_pl]"
442 [$1]="[$]fptools_version_of_ghc[_all]"
443 [$2]="[$]fptools_version_of_ghc[_major]"
444 [$3]="[$]fptools_version_of_ghc[_minor]"
445 [$4]="[$]fptools_version_of_ghc[_pl]"
451 dnl ** figure out the alignment restriction of a type
452 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
453 dnl so we can't call REQUIRE)
455 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
456 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
457 [changequote(<<, >>)dnl
458 dnl The name to #define.
459 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
460 dnl The cache variable name.
461 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
462 dnl The name of the corresponding size.
463 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
465 AC_MSG_CHECKING(alignment of $1)
466 AC_CACHE_VAL(AC_CV_NAME,
473 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
478 FILE *f=fopen("conftestval", "w");
480 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
483 AC_CV_NAME=`cat conftestval`,
484 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
485 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
486 AC_MSG_RESULT($AC_CV_NAME)
487 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
488 AC_PROVIDE($AC_TYPE_NAME)
489 undefine([AC_TYPE_NAME])dnl
490 undefine([AC_CV_NAME])dnl
491 undefine([AC_CV_SIZEOF_NAME])dnl
494 dnl ** Map an arithmetic C type to a Haskell type.
495 dnl Based on autconf's AC_CHECK_SIZEOF.
497 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
498 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
499 [changequote(<<, >>)dnl
500 dnl The name to #define.
501 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
502 dnl The cache variable name.
503 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
505 AC_MSG_CHECKING(Haskell type for $1)
506 AC_CACHE_VAL(AC_CV_NAME,
507 [AC_TRY_RUN([#include <stdio.h>
522 FILE *f=fopen("conftestval", "w");
524 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
526 ((testing)(-1) < (testing)0) ? "Int" : "Word",
530 (sizeof(testing) > sizeof(double)) ? "LDouble" :
531 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
535 }], AC_CV_NAME=`cat conftestval`,
536 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
537 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
538 AC_MSG_RESULT($AC_CV_NAME)
539 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
540 undefine([AC_TYPE_NAME])dnl
541 undefine([AC_CV_NAME])dnl
544 dnl ** figure out whether C compiler supports 'long long's
545 dnl (Closely based on Andreas Zeller's macro for testing
546 dnl for this under C++)
548 dnl If the C compiler supports `long long' types,
549 dnl define `HAVE_LONG_LONG'.
551 AC_DEFUN(FPTOOLS_C_LONG_LONG,
553 AC_REQUIRE([AC_PROG_CC])
554 AC_MSG_CHECKING(whether ${CC} supports long long types)
555 AC_CACHE_VAL(fptools_cv_have_long_long,
559 AC_TRY_COMPILE(,[long long a;],
560 fptools_cv_have_long_long=yes,
561 fptools_cv_have_long_long=no)
564 AC_MSG_RESULT($fptools_cv_have_long_long)
565 if test "$fptools_cv_have_long_long" = yes; then
566 AC_DEFINE(HAVE_LONG_LONG)
570 dnl ** Obtain the value of a C constant.
571 dnl The value will be `(-1)' if the constant is undefined.
573 dnl This is set up so that the argument can be a shell variable.
575 AC_DEFUN(FPTOOLS_CHECK_CCONST,
577 eval "def_name=CCONST_$1"
578 eval "cv_name=ac_cv_cconst_$1"
579 AC_MSG_CHECKING(value of $1)
580 AC_CACHE_VAL($cv_name,
581 [AC_TRY_RUN([#include <stdio.h>
585 FILE *f=fopen("conftestval", "w");
587 fprintf(f, "%d\n", $1);
590 eval "$cv_name=`cat conftestval`",
592 eval "$cv_name=-1")])dnl
593 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
594 AC_MSG_RESULT($fptools_check_cconst_result)
595 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
596 unset fptools_check_cconst_result
599 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
602 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
603 [for ac_const_name in $1
605 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
610 dnl *** Can we open files in binary mode? ***
612 AC_DEFUN(FPTOOLS_O_BINARY,
614 AC_REQUIRE([AC_PROG_CC])
615 AC_MSG_CHECKING(whether we can open files in binary mode)
616 AC_CACHE_VAL(fptools_cv_have_o_binary,
625 fptools_cv_have_o_binary=yes,
626 fptools_cv_have_o_binary=no)
629 AC_MSG_RESULT($fptools_cv_have_o_binary)
630 if test "$fptools_cv_have_o_binary" = yes; then
631 AC_DEFINE(HAVE_O_BINARY)
635 dnl *** Which one comes first, .text or .data? ***
637 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
638 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
640 int f() { return 1; }
642 int main() { return ((char*)&f > (char*)&i); }
645 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
646 if test "$fptools_cv_code_bef_data" = yes; then
647 AC_DEFINE(CODE_BEFORE_DATA)
651 dnl *** Helper function **
653 AC_DEFUN(FPTOOLS_IN_SCOPE,
654 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
657 dnl *** What's the end-of-text-section marker called? ***
659 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
660 [AC_CACHE_CHECK([for end of text section marker],
661 [fptools_cv_end_of_text],
662 [fptools_cv_end_of_text=""
664 for i in data_start _data_start etext _etext __etext; do
665 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
666 if test "$fptools_end_of_text" = yes; then
667 fptools_cv_end_of_text=$i
672 if test "$not_done" = 1; then
673 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
674 if test "$fptools_end_of_text" = yes; then
675 fptools_cv_end_of_text="etext"
678 if test -n "$fptools_cv_end_of_text"; then
679 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
681 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
683 AC_CACHE_CHECK([for end of text section marker declaration],
684 [fptools_cv_end_of_text_decl],
685 [fptools_cv_end_of_text_decl=""
687 for i in data_start _data_start etext _etext __etext; do
688 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
689 if test "$fptools_end_of_text_decl" = yes; then
690 fptools_cv_end_of_text_decl=$i
695 if test "$not_done" = 1; then
696 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
697 if test "$fptools_end_of_text_decl" = yes; then
698 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
701 if test -n "$fptools_cv_end_of_text_decl"; then
702 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
704 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
708 dnl *** What's the end-of-data-section marker called? ***
710 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
711 [AC_CACHE_CHECK([for end of data section marker],
712 [fptools_cv_end_of_data],
713 [fptools_cv_end_of_data=""
715 for i in end _end __end; do
716 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
717 if test "$fptools_end_of_data" = yes; then
718 fptools_cv_end_of_data=$i
723 if test "$not_done" = 1; then
724 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
725 if test "$fptools_end_of_data" = yes; then
726 fptools_cv_end_of_data="end"
729 if test -n "$fptools_cv_end_of_data"; then
730 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
732 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
734 AC_CACHE_CHECK([for end of data section marker declaration],
735 [fptools_cv_end_of_data_decl],
736 [fptools_cv_end_of_data_decl=""
738 for i in end _end __end; do
739 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
740 if test "$fptools_end_of_data_decl" = yes; then
741 fptools_cv_end_of_data_decl=$i
746 if test "$not_done" = 1; then
747 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
748 if test "$fptools_end_of_data_decl" = yes; then
749 fptools_cv_end_of_data_decl="end asm(\"end\")"
752 if test -n "$fptools_cv_end_of_data_decl"; then
753 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
755 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
760 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
762 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
764 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
768 cat > conftest.$ac_ext <<EOF
769 dnl This sometimes fails to find confdefs.h, for some reason.
770 dnl [#]line __oline__ "[$]0"
771 [#]line __oline__ "configure"
772 #include "confdefs.h"
774 int t() { return 0; }
776 if AC_TRY_EVAL(ac_link); then
781 ifelse([$4], , , [else
791 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
793 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
795 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
796 [AC_MSG_CHECKING([for $1])
797 AC_CACHE_VAL(ac_cv_flag_$1,
798 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
799 eval "ac_cv_flag_$1=yes",
800 eval "ac_cv_flag_$1=no"
803 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
813 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
815 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
816 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
818 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
820 AC_DEFINE_UNQUOTED($ac_tr_lib)
822 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
824 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
826 AC_DEFINE_UNQUOTED($ac_tr_lib)
832 dnl check for prototypes
834 AC_DEFUN([AC_C_PROTOTYPES],
835 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
844 ac_cv_prototypes=yes,
845 ac_cv_prototypes=no)])
846 if test "$ac_cv_prototypes" = yes; then
847 AC_DEFINE([HAVE_PROTOTYPES])
851 dnl ** Check which CATALOG file we have to use with DocBook SGML.
853 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
855 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
856 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
857 dnl is set to "no". JADE is the jade executable and STYLESHEET
858 dnl a DocBook style sheet.
860 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
861 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
863 cat > conftest.sgml << EOF
864 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
868 <Author><OtherName>Test</OtherName></Author>
869 <Address>Test</Address>
870 <PubDate>Test</PubDate>
872 <Sect1><Title>Test</Title>
879 fptools_cv_sgml_catalog=no
880 for fptools_catalog in $4; do
881 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
882 if AC_TRY_EVAL(ac_try); then
883 fptools_cv_sgml_catalog=[$]fptools_catalog
889 if test $fptools_cv_sgml_catalog != "no"; then
890 $1=$fptools_cv_sgml_catalog
894 dnl ######################################################################
895 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
896 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
897 dnl Search for a library defining FUNC, if it's not already available.
898 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
900 dnl ######################################################################
902 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
904 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
905 [ac_func_search_save_LIBS="$LIBS"
907 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
908 test "$ac_cv_search_$2" = "no" && for i in $3; do
909 LIBS="-l$i $6 $ac_func_search_save_LIBS"
910 AC_TRY_LINK([$1], [$2()],
911 [ac_cv_search_$2="-l$i"
914 LIBS="$ac_func_search_save_LIBS"])
915 if test "$ac_cv_search_$2" != "no"; then
916 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
922 dnl ####################### -*- Mode: M4 -*- ###########################
923 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
925 dnl This file is free software; you can redistribute it and/or modify it
926 dnl under the terms of the GNU General Public License as published by
927 dnl the Free Software Foundation; either version 2 of the License, or
928 dnl (at your option) any later version.
930 dnl This file is distributed in the hope that it will be useful, but
931 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
932 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
933 dnl General Public License for more details.
935 dnl You should have received a copy of the GNU General Public License
936 dnl along with this file; if not, write to:
938 dnl Free Software Foundation, Inc.
941 dnl Boston, MA 02111-1307, USA.
942 dnl ####################################################################
945 dnl @synopsis FPTOOLS_CHECK_LIBM
947 dnl Search for math library (typically -lm).
949 dnl The variable LIBM (which is not an output variable by default) is
950 dnl set to a value which is suitable for use in a Makefile (for example,
951 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
953 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
955 # FPTOOLS_CHECK_LIBM - check for math library
956 AC_DEFUN(FPTOOLS_CHECK_LIBM,
957 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
960 *-*-beos* | *-*-macosx*)
961 # These system don't have libm
964 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
965 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
968 AC_CHECK_LIB(m, main, LIBM="-lm")
973 dnl ######################################################################
974 dnl NOTE: Because of portability issues between different autoconf
975 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
976 dnl Furthermore, caching has been completely rewritten.
977 dnl ######################################################################
979 dnl ########################### -*- Mode: M4 -*- #######################
980 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
982 dnl This file is free software; you can redistribute it and/or modify it
983 dnl under the terms of the GNU General Public License as published by
984 dnl the Free Software Foundation; either version 2 of the License, or
985 dnl (at your option) any later version.
987 dnl This file is distributed in the hope that it will be useful, but
988 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
989 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
990 dnl General Public License for more details.
992 dnl You should have received a copy of the GNU General Public License
993 dnl along with this file; if not, write to:
995 dnl Free Software Foundation, Inc.
998 dnl Boston, MA 02111-1307, USA.
999 dnl ####################################################################
1001 dnl @synopsis FPTOOLS_HAVE_OPENGL
1003 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1004 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1005 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1007 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1008 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1011 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1012 dnl be missing) are added to the shell output variable "GL_LIBS", along
1013 dnl with any other libraries that are necessary to successfully link an
1014 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1015 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1018 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1019 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1020 dnl an OpenGL application.
1022 dnl The following shell variable (which are not output variables) are
1023 dnl also set to either "yes" or "no" (depending on which libraries were
1024 dnl found) to help you determine exactly what was found.
1031 dnl A complete little toy "Automake `make distcheck'" package of how to
1032 dnl use this macro is available at:
1034 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1036 dnl Please note that as the ac_opengl macro and the toy example evolves,
1037 dnl the version number increases, so you may have to adjust the above
1038 dnl URL accordingly.
1040 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1042 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1044 AC_REQUIRE([AC_PROG_CC])
1045 AC_REQUIRE([AC_PATH_X])
1046 AC_REQUIRE([AC_PATH_XTRA])
1047 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1049 dnl Check for Mesa first, unless we were asked not to.
1050 dnl AC_HELP_STRING([--with-Mesa],
1051 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1052 dnl with_Mesa_help_string)
1053 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1054 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1056 if test x"$use_Mesa" = xyes; then
1057 GL_search_list="MesaGL GL opengl32"
1058 GLU_search_list="MesaGLU GLU glu32"
1059 GLX_search_list="MesaGLX GLX"
1061 GL_search_list="GL opengl32 MesaGL"
1062 GLU_search_list="GLU glu32 MesaGLU"
1063 GLX_search_list="GLX MesaGLX"
1069 dnl If we are running under X11 then add in the appropriate libraries.
1070 if ! test x"$no_x" = xyes; then
1071 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1073 GL_CFLAGS="$X_CFLAGS"
1074 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1076 GL_save_CPPFLAGS="$CPPFLAGS"
1077 CPPFLAGS="$GL_CFLAGS"
1079 GL_save_LIBS="$LIBS"
1082 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1083 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1084 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1085 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1087 if test -n "$LIBS"; then
1094 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1095 GL_CFLAGS="$mdl_cv_gl_cflags"
1097 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1098 GL_LIBS="$mdl_cv_gl_libs"
1101 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1102 dnl and we don't want to be global namespace polluters.
1105 LIBS="$GL_save_LIBS"
1106 CPPFLAGS="$GL_save_CPPFLAGS"
1114 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1115 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1116 dnl 'lex' is actually present along the user's PATH).
1118 AC_DEFUN(AC_PROG_LEX_STRICT,
1119 [AC_CHECK_PROG(LEX, flex, flex)
1122 AC_CHECK_PROG(LEX,lex,lex)
1123 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1128 dnl Check to see whether CC (gcc) supports a particular option.
1130 AC_DEFUN(FPTOOLS_CC_FLAG,
1132 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1133 [save_CFLAGS="$CFLAGS"
1136 AC_TRY_COMPILE(,[int main(){return(0);}],
1139 CFLAGS="$save_CFLAGS"
1141 if test "$ac_cv_cc_$2"x = "yesx"; then