1 dnl $Id: aclocal.m4,v 1.85 2001/10/13 20:26:13 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, 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 Getting at the right version of 'find'
417 dnl (i.e., not the MS util on a Win32 box).
419 AC_DEFUN(FPTOOLS_FIND_FIND,
421 AC_PATH_PROG(Find2Cmd, find)
422 $Find2Cmd --version > conftest.out 2>&1
423 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
424 # Encountered MS' find utility, which is not what we're after.
426 # HACK - AC_CHECK_PROG is useful here in that does let you reject
427 # an (absolute) entry in the path (Find2Cmd). It is not so useful
428 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
429 # absolute path eventually found. So, hack around this by inspecting
430 # what variables hold the abs. path & use them directly.
431 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
439 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
440 dnl values of the second argument to the result of running
441 dnl the commands given by the third. It does not cache its
442 dnl result, so it is suitable for checks which should be
445 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
446 [AC_MSG_CHECKING([$1])
448 AC_MSG_RESULT([$][$2])
452 dnl FPTOOLS_GHC_VERSION(version)
453 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
454 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
456 dnl Test for version of installed ghc. Uses $GHC.
457 dnl [original version pinched from c2hs]
459 AC_DEFUN(FPTOOLS_GHC_VERSION,
460 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
461 [${WithGhc-ghc} --version > conftestghc 2>&1
462 cat conftestghc >&AC_FD_CC
463 #Useless Use Of cat award...
464 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
466 if test "[$]fptools_version_of_ghc" = ""
468 fptools_version_of_ghc='unknown'
470 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
471 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
472 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
474 if test "[$]fptools_version_of_ghc[_pl]" = ""
476 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
477 fptools_version_of_ghc[_pl]="0"
479 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
483 [$1]="[$]fptools_version_of_ghc[_all]"
485 [$1]="[$]fptools_version_of_ghc[_major]"
486 [$2]="[$]fptools_version_of_ghc[_minor]"
488 [$1]="[$]fptools_version_of_ghc[_major]"
489 [$2]="[$]fptools_version_of_ghc[_minor]"
490 [$3]="[$]fptools_version_of_ghc[_pl]"
492 [$1]="[$]fptools_version_of_ghc[_all]"
493 [$2]="[$]fptools_version_of_ghc[_major]"
494 [$3]="[$]fptools_version_of_ghc[_minor]"
495 [$4]="[$]fptools_version_of_ghc[_pl]"
501 dnl ** figure out the alignment restriction of a type
502 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
503 dnl so we can't call REQUIRE)
505 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
506 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
507 [changequote(<<, >>)dnl
508 dnl The name to #define.
509 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
510 dnl The cache variable name.
511 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
512 dnl The name of the corresponding size.
513 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
515 AC_MSG_CHECKING(alignment of $1)
516 AC_CACHE_VAL(AC_CV_NAME,
523 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
528 FILE *f=fopen("conftestval", "w");
530 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
533 AC_CV_NAME=`cat conftestval`,
534 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
535 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
536 AC_MSG_RESULT($AC_CV_NAME)
537 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
538 AC_PROVIDE($AC_TYPE_NAME)
539 undefine([AC_TYPE_NAME])dnl
540 undefine([AC_CV_NAME])dnl
541 undefine([AC_CV_SIZEOF_NAME])dnl
544 dnl ** Map an arithmetic C type to a Haskell type.
545 dnl Based on autconf's AC_CHECK_SIZEOF.
547 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
548 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
549 [changequote(<<, >>)dnl
550 dnl The name to #define.
551 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
552 dnl The cache variable name.
553 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
555 AC_MSG_CHECKING(Haskell type for $1)
556 AC_CACHE_VAL(AC_CV_NAME,
557 [AC_TRY_RUN([#include <stdio.h>
572 FILE *f=fopen("conftestval", "w");
574 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
576 ((testing)(-1) < (testing)0) ? "Int" : "Word",
580 (sizeof(testing) > sizeof(double)) ? "LDouble" :
581 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
585 }], AC_CV_NAME=`cat conftestval`,
586 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
587 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
588 AC_MSG_RESULT($AC_CV_NAME)
589 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
590 undefine([AC_TYPE_NAME])dnl
591 undefine([AC_CV_NAME])dnl
594 dnl ** figure out whether C compiler supports 'long long's
595 dnl (Closely based on Andreas Zeller's macro for testing
596 dnl for this under C++)
598 dnl If the C compiler supports `long long' types,
599 dnl define `HAVE_LONG_LONG'.
601 AC_DEFUN(FPTOOLS_C_LONG_LONG,
603 AC_REQUIRE([AC_PROG_CC])
604 AC_MSG_CHECKING(whether ${CC} supports long long types)
605 AC_CACHE_VAL(fptools_cv_have_long_long,
609 AC_TRY_COMPILE(,[long long a;],
610 fptools_cv_have_long_long=yes,
611 fptools_cv_have_long_long=no)
614 AC_MSG_RESULT($fptools_cv_have_long_long)
615 if test "$fptools_cv_have_long_long" = yes; then
616 AC_DEFINE(HAVE_LONG_LONG)
620 dnl ** Obtain the value of a C constant.
621 dnl The value will be `(-1)' if the constant is undefined.
623 dnl This is set up so that the argument can be a shell variable.
625 AC_DEFUN(FPTOOLS_CHECK_CCONST,
627 eval "def_name=CCONST_$1"
628 eval "cv_name=ac_cv_cconst_$1"
629 AC_MSG_CHECKING(value of $1)
630 AC_CACHE_VAL($cv_name,
631 [AC_TRY_RUN([#include <stdio.h>
635 FILE *f=fopen("conftestval", "w");
637 fprintf(f, "%d\n", $1);
640 eval "$cv_name=`cat conftestval`",
642 eval "$cv_name=-1")])dnl
643 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
644 AC_MSG_RESULT($fptools_check_cconst_result)
645 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
646 unset fptools_check_cconst_result
649 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
652 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
653 [for ac_const_name in $1
655 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
660 dnl *** Can we open files in binary mode? ***
662 AC_DEFUN(FPTOOLS_O_BINARY,
664 AC_REQUIRE([AC_PROG_CC])
665 AC_MSG_CHECKING(whether we can open files in binary mode)
666 AC_CACHE_VAL(fptools_cv_have_o_binary,
675 fptools_cv_have_o_binary=yes,
676 fptools_cv_have_o_binary=no)
679 AC_MSG_RESULT($fptools_cv_have_o_binary)
680 if test "$fptools_cv_have_o_binary" = yes; then
681 AC_DEFINE(HAVE_O_BINARY)
685 dnl *** Which one comes first, .text or .data? ***
687 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
688 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
690 int f() { return 1; }
692 int main() { return ((char*)&f > (char*)&i); }
695 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
696 if test "$fptools_cv_code_bef_data" = yes; then
697 AC_DEFINE(CODE_BEFORE_DATA)
701 dnl *** Helper function **
703 AC_DEFUN(FPTOOLS_IN_SCOPE,
704 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
707 dnl *** What's the end-of-text-section marker called? ***
709 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
710 [AC_CACHE_CHECK([for end of text section marker],
711 [fptools_cv_end_of_text],
712 [fptools_cv_end_of_text=""
714 for i in data_start _data_start etext _etext __etext; do
715 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
716 if test "$fptools_end_of_text" = yes; then
717 fptools_cv_end_of_text=$i
722 if test "$not_done" = 1; then
723 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
724 if test "$fptools_end_of_text" = yes; then
725 fptools_cv_end_of_text="etext"
728 if test -n "$fptools_cv_end_of_text"; then
729 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
731 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
733 AC_CACHE_CHECK([for end of text section marker declaration],
734 [fptools_cv_end_of_text_decl],
735 [fptools_cv_end_of_text_decl=""
737 for i in data_start _data_start etext _etext __etext; do
738 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
739 if test "$fptools_end_of_text_decl" = yes; then
740 fptools_cv_end_of_text_decl=$i
745 if test "$not_done" = 1; then
746 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
747 if test "$fptools_end_of_text_decl" = yes; then
748 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
751 if test -n "$fptools_cv_end_of_text_decl"; then
752 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
754 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
758 dnl *** What's the end-of-data-section marker called? ***
760 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
761 [AC_CACHE_CHECK([for end of data section marker],
762 [fptools_cv_end_of_data],
763 [fptools_cv_end_of_data=""
765 for i in end _end __end; do
766 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
767 if test "$fptools_end_of_data" = yes; then
768 fptools_cv_end_of_data=$i
773 if test "$not_done" = 1; then
774 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
775 if test "$fptools_end_of_data" = yes; then
776 fptools_cv_end_of_data="end"
779 if test -n "$fptools_cv_end_of_data"; then
780 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
782 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
784 AC_CACHE_CHECK([for end of data section marker declaration],
785 [fptools_cv_end_of_data_decl],
786 [fptools_cv_end_of_data_decl=""
788 for i in end _end __end; do
789 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
790 if test "$fptools_end_of_data_decl" = yes; then
791 fptools_cv_end_of_data_decl=$i
796 if test "$not_done" = 1; then
797 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
798 if test "$fptools_end_of_data_decl" = yes; then
799 fptools_cv_end_of_data_decl="end asm(\"end\")"
802 if test -n "$fptools_cv_end_of_data_decl"; then
803 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
805 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
810 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
812 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
814 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
818 cat > conftest.$ac_ext <<EOF
819 dnl This sometimes fails to find confdefs.h, for some reason.
820 dnl [#]line __oline__ "[$]0"
821 [#]line __oline__ "configure"
822 #include "confdefs.h"
824 int t() { return 0; }
826 if AC_TRY_EVAL(ac_link); then
831 ifelse([$4], , , [else
841 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
843 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
845 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
846 [AC_MSG_CHECKING([for $1])
847 AC_CACHE_VAL(ac_cv_flag_$1,
848 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
849 eval "ac_cv_flag_$1=yes",
850 eval "ac_cv_flag_$1=no"
853 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
863 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
865 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
866 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
868 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
870 AC_DEFINE_UNQUOTED($ac_tr_lib)
872 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
874 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
876 AC_DEFINE_UNQUOTED($ac_tr_lib)
882 dnl check for prototypes
884 AC_DEFUN([AC_C_PROTOTYPES],
885 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
894 ac_cv_prototypes=yes,
895 ac_cv_prototypes=no)])
896 if test "$ac_cv_prototypes" = yes; then
897 AC_DEFINE([HAVE_PROTOTYPES])
901 dnl ** Check which CATALOG file we have to use with DocBook SGML.
903 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
905 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
906 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
907 dnl is set to "no". JADE is the jade executable and STYLESHEET
908 dnl a DocBook style sheet.
910 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
911 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
913 cat > conftest.sgml << EOF
914 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
918 <Author><OtherName>Test</OtherName></Author>
919 <Address>Test</Address>
920 <PubDate>Test</PubDate>
922 <Sect1><Title>Test</Title>
929 fptools_cv_sgml_catalog=no
930 for fptools_catalog in $4; do
931 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
932 if AC_TRY_EVAL(ac_try); then
933 fptools_cv_sgml_catalog=[$]fptools_catalog
939 if test $fptools_cv_sgml_catalog != "no"; then
940 $1=$fptools_cv_sgml_catalog
944 dnl ######################################################################
945 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
946 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
947 dnl Search for a library defining FUNC, if it's not already available.
948 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
950 dnl ######################################################################
952 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
954 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
955 [ac_func_search_save_LIBS="$LIBS"
957 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
958 test "$ac_cv_search_$2" = "no" && for i in $3; do
959 LIBS="-l$i $6 $ac_func_search_save_LIBS"
960 AC_TRY_LINK([$1], [$2()],
961 [ac_cv_search_$2="-l$i"
964 LIBS="$ac_func_search_save_LIBS"])
965 if test "$ac_cv_search_$2" != "no"; then
966 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
972 dnl ####################### -*- Mode: M4 -*- ###########################
973 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
975 dnl This file is free software; you can redistribute it and/or modify it
976 dnl under the terms of the GNU General Public License as published by
977 dnl the Free Software Foundation; either version 2 of the License, or
978 dnl (at your option) any later version.
980 dnl This file is distributed in the hope that it will be useful, but
981 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
982 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
983 dnl General Public License for more details.
985 dnl You should have received a copy of the GNU General Public License
986 dnl along with this file; if not, write to:
988 dnl Free Software Foundation, Inc.
991 dnl Boston, MA 02111-1307, USA.
992 dnl ####################################################################
995 dnl @synopsis FPTOOLS_CHECK_LIBM
997 dnl Search for math library (typically -lm).
999 dnl The variable LIBM (which is not an output variable by default) is
1000 dnl set to a value which is suitable for use in a Makefile (for example,
1001 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1003 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1005 # FPTOOLS_CHECK_LIBM - check for math library
1006 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1007 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1010 *-*-beos* | *-*-macosx*)
1011 # These system don't have libm
1014 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1015 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1018 AC_CHECK_LIB(m, main, LIBM="-lm")
1023 dnl ######################################################################
1024 dnl NOTE: Because of portability issues between different autoconf
1025 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1026 dnl Furthermore, caching has been completely rewritten.
1027 dnl ######################################################################
1029 dnl ########################### -*- Mode: M4 -*- #######################
1030 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1032 dnl This file is free software; you can redistribute it and/or modify it
1033 dnl under the terms of the GNU General Public License as published by
1034 dnl the Free Software Foundation; either version 2 of the License, or
1035 dnl (at your option) any later version.
1037 dnl This file is distributed in the hope that it will be useful, but
1038 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1039 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1040 dnl General Public License for more details.
1042 dnl You should have received a copy of the GNU General Public License
1043 dnl along with this file; if not, write to:
1045 dnl Free Software Foundation, Inc.
1048 dnl Boston, MA 02111-1307, USA.
1049 dnl ####################################################################
1051 dnl @synopsis FPTOOLS_HAVE_OPENGL
1053 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1054 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1055 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1057 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1058 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1061 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1062 dnl be missing) are added to the shell output variable "GL_LIBS", along
1063 dnl with any other libraries that are necessary to successfully link an
1064 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1065 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1068 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1069 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1070 dnl an OpenGL application.
1072 dnl The following shell variable (which are not output variables) are
1073 dnl also set to either "yes" or "no" (depending on which libraries were
1074 dnl found) to help you determine exactly what was found.
1081 dnl A complete little toy "Automake `make distcheck'" package of how to
1082 dnl use this macro is available at:
1084 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1086 dnl Please note that as the ac_opengl macro and the toy example evolves,
1087 dnl the version number increases, so you may have to adjust the above
1088 dnl URL accordingly.
1090 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1092 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1094 AC_REQUIRE([AC_PROG_CC])
1095 AC_REQUIRE([AC_PATH_X])
1096 AC_REQUIRE([AC_PATH_XTRA])
1097 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1099 dnl Check for Mesa first, unless we were asked not to.
1100 dnl AC_HELP_STRING([--with-Mesa],
1101 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1102 dnl with_Mesa_help_string)
1103 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1104 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1106 if test x"$use_Mesa" = xyes; then
1107 GL_search_list="MesaGL GL opengl32"
1108 GLU_search_list="MesaGLU GLU glu32"
1109 GLX_search_list="MesaGLX GLX"
1111 GL_search_list="GL opengl32 MesaGL"
1112 GLU_search_list="GLU glu32 MesaGLU"
1113 GLX_search_list="GLX MesaGLX"
1119 dnl If we are running under X11 then add in the appropriate libraries.
1120 if ! test x"$no_x" = xyes; then
1121 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1123 GL_CFLAGS="$X_CFLAGS"
1124 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1126 GL_save_CPPFLAGS="$CPPFLAGS"
1127 CPPFLAGS="$GL_CFLAGS"
1129 GL_save_LIBS="$LIBS"
1132 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1133 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1134 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1135 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1137 if test -n "$LIBS"; then
1144 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1145 GL_CFLAGS="$mdl_cv_gl_cflags"
1147 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1148 GL_LIBS="$mdl_cv_gl_libs"
1151 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1152 dnl and we don't want to be global namespace polluters.
1155 LIBS="$GL_save_LIBS"
1156 CPPFLAGS="$GL_save_CPPFLAGS"
1164 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1165 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1166 dnl 'lex' is actually present along the user's PATH).
1168 AC_DEFUN(AC_PROG_LEX_STRICT,
1169 [AC_CHECK_PROG(LEX, flex, flex)
1172 AC_CHECK_PROG(LEX,lex,lex)
1173 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1178 dnl Check to see whether CC (gcc) supports a particular option.
1180 AC_DEFUN(FPTOOLS_CC_FLAG,
1182 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1183 [save_CFLAGS="$CFLAGS"
1186 AC_TRY_COMPILE(,[int main(){return(0);}],
1189 CFLAGS="$save_CFLAGS"
1191 if test "$ac_cv_cc_$2"x = "yesx"; then