1 dnl $Id: aclocal.m4,v 1.88 2001/12/05 17:21:43 simonmar 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)
220 # 1.9 and later is required, assume that we can use
221 # the "-agc" options.
224 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-gt,[1.11],
231 dnl What's the best way of doing context diffs?
233 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
235 AC_DEFUN(FPTOOLS_PROG_DIFF,
236 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
237 [echo foo > conftest1
239 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
240 fptools_cv_context_diffs='diff -C 1'
242 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
243 fptools_cv_context_diffs='diff -c1'
245 echo "Can't figure out how to do context diffs."
246 echo "Neither \`diff -C 1' nor \`diff -c1' works."
250 rm -f conftest1 conftest2
252 ContextDiffCmd=$fptools_cv_context_diffs
253 AC_SUBST(ContextDiffCmd)
257 dnl Check whether ld supports -x
259 AC_DEFUN(FPTOOLS_LD_X,
260 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
262 echo 'foo() {}' > conftest.c
263 ${CC-cc} -c conftest.c
264 if ${LdCmd} -r -x -o foo.o conftest.o; then
269 rm -rf conftest.c conftest.o foo.o
271 if test "$fptools_cv_ld_x" = yes; then
280 dnl Finding the Right Yacc
282 AC_DEFUN(FPTOOLS_PROG_YACCY,
284 if test "$YACC" = "yacc"; then
285 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
286 [AC_CHECK_PROG(WhatCmd, what, what, :)
287 $WhatCmd $YACC > conftest.out
288 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
289 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
290 if test -f /usr/lang/yacc; then
291 echo "I'm going to use /usr/lang/yacc instead"
292 ac_cv_prog_yacc=/usr/lang/yacc
294 echo "I'm assuming the worst...no parser generator at all"
297 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
298 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
299 echo "I'm assuming the worst...no parser generator at all"
302 ac_cv_prog_yacc=$YACC
307 ac_cv_prog_yacc=$YACC
309 YaccCmd=$ac_cv_prog_yacc
313 dnl *** Checking for ar and its arguments + whether we need ranlib.
315 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
316 dnl On Digital UNIX, we test for the -Z (compress) and
317 dnl -input (take list of files from external file) flags.
319 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
320 [AC_PATH_PROG(ArCmd,ar)
321 if test -z "$ArCmd"; then
322 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
325 if $ArCmd clqsZ conftest.a >/dev/null 2>/dev/null; then
328 elif $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
331 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
334 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
337 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
340 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
344 echo "I can't figure out how to use your $ArCmd"
348 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
350 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
351 ArSupportsInput='-input'
356 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
357 AC_SUBST(ArSupportsInput)
358 if test -z "$NeedRanLib"; then
360 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
368 dnl AC_SHEBANG_PERL - can we she-bang perl?
370 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
371 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
376 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
377 if test $? -ne 69; then
378 fptools_cv_shebang_perl=yes
380 fptools_cv_shebang_perl=no
386 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
387 dnl *Must* be called after AC_PROG_CC
389 AC_DEFUN(FPTOOLS_HAVE_GCC,
390 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
391 [if test -z "$GCC"; then
393 echo "You would be better off with gcc"
394 echo "Perhaps it is already installed, but not in your PATH?"
395 fptools_cv_have_gcc='no'
398 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' `"
399 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' `"
401 fptools_cv_have_gcc='yes'
402 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
403 fptools_cv_have_gcc='no'
405 echo "your gcc version appears to be ..."
407 echo "gcc prior to 2.0 and have never worked with ghc."
408 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
409 AC_MSG_ERROR([gcc 1.X has never been supported])
411 if test `eval $is_gcc_v3 2>/dev/null` = "1"; then
412 fptools_cv_have_gcc='no'
414 echo "your gcc version appears to be ..."
416 echo "gcc versions 3.0 and above are not yet supported."
417 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
418 AC_MSG_ERROR([gcc 3.0 and above is not currently supported])
422 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
426 dnl Small feature test for perl version. Assumes PerlCmd
427 dnl contains path to perl binary
429 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
430 [$PerlCmd -v >conftest.out 2>&1
431 if grep "version 5" conftest.out >/dev/null 2>&1; then
434 if grep "v5.6" conftest.out >/dev/null 2>&1; then
437 if grep "version 6" conftest.out >/dev/null 2>&1; then
440 echo "Your version of perl probably won't work."
448 dnl Getting at the right version of 'find'
449 dnl (i.e., not the MS util on a Win32 box).
451 AC_DEFUN(FPTOOLS_FIND_FIND,
453 AC_PATH_PROG(Find2Cmd, find)
454 $Find2Cmd --version > conftest.out 2>&1
455 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
456 # Encountered MS' find utility, which is not what we're after.
458 # HACK - AC_CHECK_PROG is useful here in that does let you reject
459 # an (absolute) entry in the path (Find2Cmd). It is not so useful
460 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
461 # absolute path eventually found. So, hack around this by inspecting
462 # what variables hold the abs. path & use them directly.
463 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
471 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
472 dnl values of the second argument to the result of running
473 dnl the commands given by the third. It does not cache its
474 dnl result, so it is suitable for checks which should be
477 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
478 [AC_MSG_CHECKING([$1])
480 AC_MSG_RESULT([$][$2])
484 dnl FPTOOLS_GHC_VERSION(version)
485 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
486 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
488 dnl Test for version of installed ghc. Uses $GHC.
489 dnl [original version pinched from c2hs]
491 AC_DEFUN(FPTOOLS_GHC_VERSION,
492 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
493 [${WithGhc-ghc} --version > conftestghc 2>&1
494 cat conftestghc >&AC_FD_CC
495 #Useless Use Of cat award...
496 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
498 if test "[$]fptools_version_of_ghc" = ""
500 fptools_version_of_ghc='unknown'
502 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
503 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
504 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
506 if test "[$]fptools_version_of_ghc[_pl]" = ""
508 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
509 fptools_version_of_ghc[_pl]="0"
511 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
515 [$1]="[$]fptools_version_of_ghc[_all]"
517 [$1]="[$]fptools_version_of_ghc[_major]"
518 [$2]="[$]fptools_version_of_ghc[_minor]"
520 [$1]="[$]fptools_version_of_ghc[_major]"
521 [$2]="[$]fptools_version_of_ghc[_minor]"
522 [$3]="[$]fptools_version_of_ghc[_pl]"
524 [$1]="[$]fptools_version_of_ghc[_all]"
525 [$2]="[$]fptools_version_of_ghc[_major]"
526 [$3]="[$]fptools_version_of_ghc[_minor]"
527 [$4]="[$]fptools_version_of_ghc[_pl]"
533 dnl ** figure out the alignment restriction of a type
534 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
535 dnl so we can't call REQUIRE)
537 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
538 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
539 [changequote(<<, >>)dnl
540 dnl The name to #define.
541 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
542 dnl The cache variable name.
543 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
544 dnl The name of the corresponding size.
545 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
547 AC_MSG_CHECKING(alignment of $1)
548 AC_CACHE_VAL(AC_CV_NAME,
555 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
560 FILE *f=fopen("conftestval", "w");
562 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
565 AC_CV_NAME=`cat conftestval`,
566 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
567 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
568 AC_MSG_RESULT($AC_CV_NAME)
569 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
570 AC_PROVIDE($AC_TYPE_NAME)
571 undefine([AC_TYPE_NAME])dnl
572 undefine([AC_CV_NAME])dnl
573 undefine([AC_CV_SIZEOF_NAME])dnl
576 dnl ** Map an arithmetic C type to a Haskell type.
577 dnl Based on autconf's AC_CHECK_SIZEOF.
579 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
580 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
581 [changequote(<<, >>)dnl
582 dnl The name to #define.
583 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
584 dnl The cache variable name.
585 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
587 AC_MSG_CHECKING(Haskell type for $1)
588 AC_CACHE_VAL(AC_CV_NAME,
589 [AC_TRY_RUN([#include <stdio.h>
604 FILE *f=fopen("conftestval", "w");
606 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
608 ((testing)(-1) < (testing)0) ? "Int" : "Word",
612 (sizeof(testing) > sizeof(double)) ? "LDouble" :
613 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
617 }], AC_CV_NAME=`cat conftestval`,
618 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
619 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
620 AC_MSG_RESULT($AC_CV_NAME)
621 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
622 undefine([AC_TYPE_NAME])dnl
623 undefine([AC_CV_NAME])dnl
626 dnl ** figure out whether C compiler supports 'long long's
627 dnl (Closely based on Andreas Zeller's macro for testing
628 dnl for this under C++)
630 dnl If the C compiler supports `long long' types,
631 dnl define `HAVE_LONG_LONG'.
633 AC_DEFUN(FPTOOLS_C_LONG_LONG,
635 AC_REQUIRE([AC_PROG_CC])
636 AC_MSG_CHECKING(whether ${CC} supports long long types)
637 AC_CACHE_VAL(fptools_cv_have_long_long,
641 AC_TRY_COMPILE(,[long long a;],
642 fptools_cv_have_long_long=yes,
643 fptools_cv_have_long_long=no)
646 AC_MSG_RESULT($fptools_cv_have_long_long)
647 if test "$fptools_cv_have_long_long" = yes; then
648 AC_DEFINE(HAVE_LONG_LONG)
652 dnl ** Obtain the value of a C constant.
653 dnl The value will be `(-1)' if the constant is undefined.
655 dnl This is set up so that the argument can be a shell variable.
657 AC_DEFUN(FPTOOLS_CHECK_CCONST,
659 eval "def_name=CCONST_$1"
660 eval "cv_name=ac_cv_cconst_$1"
661 AC_MSG_CHECKING(value of $1)
662 AC_CACHE_VAL($cv_name,
663 [AC_TRY_RUN([#include <stdio.h>
667 FILE *f=fopen("conftestval", "w");
669 fprintf(f, "%d\n", $1);
672 eval "$cv_name=`cat conftestval`",
674 eval "$cv_name=-1")])dnl
675 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
676 AC_MSG_RESULT($fptools_check_cconst_result)
677 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
678 unset fptools_check_cconst_result
681 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
684 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
685 [for ac_const_name in $1
687 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
692 dnl *** Can we open files in binary mode? ***
694 AC_DEFUN(FPTOOLS_O_BINARY,
696 AC_REQUIRE([AC_PROG_CC])
697 AC_MSG_CHECKING(whether we can open files in binary mode)
698 AC_CACHE_VAL(fptools_cv_have_o_binary,
707 fptools_cv_have_o_binary=yes,
708 fptools_cv_have_o_binary=no)
711 AC_MSG_RESULT($fptools_cv_have_o_binary)
712 if test "$fptools_cv_have_o_binary" = yes; then
713 AC_DEFINE(HAVE_O_BINARY)
717 dnl *** Which one comes first, .text or .data? ***
719 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
720 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
722 int f() { return 1; }
724 int main() { return ((char*)&f > (char*)&i); }
727 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
728 if test "$fptools_cv_code_bef_data" = yes; then
729 AC_DEFINE(CODE_BEFORE_DATA)
733 dnl *** Helper function **
735 AC_DEFUN(FPTOOLS_IN_SCOPE,
736 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
739 dnl *** What's the end-of-text-section marker called? ***
741 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
742 [AC_CACHE_CHECK([for end of text section marker],
743 [fptools_cv_end_of_text],
744 [fptools_cv_end_of_text=""
746 for i in data_start _data_start etext _etext __etext; do
747 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
748 if test "$fptools_end_of_text" = yes; then
749 fptools_cv_end_of_text=$i
754 if test "$not_done" = 1; then
755 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
756 if test "$fptools_end_of_text" = yes; then
757 fptools_cv_end_of_text="etext"
760 if test -n "$fptools_cv_end_of_text"; then
761 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
763 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
765 AC_CACHE_CHECK([for end of text section marker declaration],
766 [fptools_cv_end_of_text_decl],
767 [fptools_cv_end_of_text_decl=""
769 for i in data_start _data_start etext _etext __etext; do
770 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
771 if test "$fptools_end_of_text_decl" = yes; then
772 fptools_cv_end_of_text_decl=$i
777 if test "$not_done" = 1; then
778 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
779 if test "$fptools_end_of_text_decl" = yes; then
780 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
783 if test -n "$fptools_cv_end_of_text_decl"; then
784 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
786 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
790 dnl *** What's the end-of-data-section marker called? ***
792 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
793 [AC_CACHE_CHECK([for end of data section marker],
794 [fptools_cv_end_of_data],
795 [fptools_cv_end_of_data=""
797 for i in end _end __end; do
798 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
799 if test "$fptools_end_of_data" = yes; then
800 fptools_cv_end_of_data=$i
805 if test "$not_done" = 1; then
806 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
807 if test "$fptools_end_of_data" = yes; then
808 fptools_cv_end_of_data="end"
811 if test -n "$fptools_cv_end_of_data"; then
812 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
814 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
816 AC_CACHE_CHECK([for end of data section marker declaration],
817 [fptools_cv_end_of_data_decl],
818 [fptools_cv_end_of_data_decl=""
820 for i in end _end __end; do
821 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
822 if test "$fptools_end_of_data_decl" = yes; then
823 fptools_cv_end_of_data_decl=$i
828 if test "$not_done" = 1; then
829 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
830 if test "$fptools_end_of_data_decl" = yes; then
831 fptools_cv_end_of_data_decl="end asm(\"end\")"
834 if test -n "$fptools_cv_end_of_data_decl"; then
835 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
837 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
842 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
844 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
846 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
850 cat > conftest.$ac_ext <<EOF
851 dnl This sometimes fails to find confdefs.h, for some reason.
852 dnl [#]line __oline__ "[$]0"
853 [#]line __oline__ "configure"
854 #include "confdefs.h"
856 int t() { return 0; }
858 if AC_TRY_EVAL(ac_link); then
863 ifelse([$4], , , [else
873 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
875 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
877 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
878 [AC_MSG_CHECKING([for $1])
879 AC_CACHE_VAL(ac_cv_flag_$1,
880 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
881 eval "ac_cv_flag_$1=yes",
882 eval "ac_cv_flag_$1=no"
885 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
895 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
897 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
898 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
900 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
902 AC_DEFINE_UNQUOTED($ac_tr_lib)
904 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
906 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
908 AC_DEFINE_UNQUOTED($ac_tr_lib)
914 dnl check for prototypes
916 AC_DEFUN([AC_C_PROTOTYPES],
917 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
926 ac_cv_prototypes=yes,
927 ac_cv_prototypes=no)])
928 if test "$ac_cv_prototypes" = yes; then
929 AC_DEFINE([HAVE_PROTOTYPES])
933 dnl ** Check which CATALOG file we have to use with DocBook SGML.
935 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
937 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
938 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
939 dnl is set to "no". JADE is the jade executable and STYLESHEET
940 dnl a DocBook style sheet.
942 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
943 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
945 cat > conftest.sgml << EOF
946 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
950 <Author><OtherName>Test</OtherName></Author>
951 <Address>Test</Address>
952 <PubDate>Test</PubDate>
954 <Sect1><Title>Test</Title>
961 fptools_cv_sgml_catalog=no
962 for fptools_catalog in $4; do
963 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
964 if AC_TRY_EVAL(ac_try); then
965 fptools_cv_sgml_catalog=[$]fptools_catalog
971 if test $fptools_cv_sgml_catalog != "no"; then
972 $1=$fptools_cv_sgml_catalog
976 dnl ######################################################################
977 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
978 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
979 dnl Search for a library defining FUNC, if it's not already available.
980 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
982 dnl ######################################################################
984 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
986 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
987 [ac_func_search_save_LIBS="$LIBS"
989 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
990 test "$ac_cv_search_$2" = "no" && for i in $3; do
991 LIBS="-l$i $6 $ac_func_search_save_LIBS"
992 AC_TRY_LINK([$1], [$2()],
993 [ac_cv_search_$2="-l$i"
996 LIBS="$ac_func_search_save_LIBS"])
997 if test "$ac_cv_search_$2" != "no"; then
998 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1004 dnl ####################### -*- Mode: M4 -*- ###########################
1005 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1007 dnl This file is free software; you can redistribute it and/or modify it
1008 dnl under the terms of the GNU General Public License as published by
1009 dnl the Free Software Foundation; either version 2 of the License, or
1010 dnl (at your option) any later version.
1012 dnl This file is distributed in the hope that it will be useful, but
1013 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1014 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1015 dnl General Public License for more details.
1017 dnl You should have received a copy of the GNU General Public License
1018 dnl along with this file; if not, write to:
1020 dnl Free Software Foundation, Inc.
1023 dnl Boston, MA 02111-1307, USA.
1024 dnl ####################################################################
1027 dnl @synopsis FPTOOLS_CHECK_LIBM
1029 dnl Search for math library (typically -lm).
1031 dnl The variable LIBM (which is not an output variable by default) is
1032 dnl set to a value which is suitable for use in a Makefile (for example,
1033 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1035 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1037 # FPTOOLS_CHECK_LIBM - check for math library
1038 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1039 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1042 *-*-beos* | *-*-macosx*)
1043 # These system don't have libm
1046 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1047 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1050 AC_CHECK_LIB(m, main, LIBM="-lm")
1055 dnl ######################################################################
1056 dnl NOTE: Because of portability issues between different autoconf
1057 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1058 dnl Furthermore, caching has been completely rewritten.
1059 dnl ######################################################################
1061 dnl ########################### -*- Mode: M4 -*- #######################
1062 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1064 dnl This file is free software; you can redistribute it and/or modify it
1065 dnl under the terms of the GNU General Public License as published by
1066 dnl the Free Software Foundation; either version 2 of the License, or
1067 dnl (at your option) any later version.
1069 dnl This file is distributed in the hope that it will be useful, but
1070 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1071 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1072 dnl General Public License for more details.
1074 dnl You should have received a copy of the GNU General Public License
1075 dnl along with this file; if not, write to:
1077 dnl Free Software Foundation, Inc.
1080 dnl Boston, MA 02111-1307, USA.
1081 dnl ####################################################################
1083 dnl @synopsis FPTOOLS_HAVE_OPENGL
1085 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1086 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1087 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1089 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1090 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1093 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1094 dnl be missing) are added to the shell output variable "GL_LIBS", along
1095 dnl with any other libraries that are necessary to successfully link an
1096 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1097 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1100 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1101 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1102 dnl an OpenGL application.
1104 dnl The following shell variable (which are not output variables) are
1105 dnl also set to either "yes" or "no" (depending on which libraries were
1106 dnl found) to help you determine exactly what was found.
1113 dnl A complete little toy "Automake `make distcheck'" package of how to
1114 dnl use this macro is available at:
1116 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1118 dnl Please note that as the ac_opengl macro and the toy example evolves,
1119 dnl the version number increases, so you may have to adjust the above
1120 dnl URL accordingly.
1122 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1124 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1126 AC_REQUIRE([AC_PROG_CC])
1127 AC_REQUIRE([AC_PATH_X])
1128 AC_REQUIRE([AC_PATH_XTRA])
1129 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1131 dnl Check for Mesa first, unless we were asked not to.
1132 dnl AC_HELP_STRING([--with-Mesa],
1133 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1134 dnl with_Mesa_help_string)
1135 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1136 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1138 if test x"$use_Mesa" = xyes; then
1139 GL_search_list="MesaGL GL opengl32"
1140 GLU_search_list="MesaGLU GLU glu32"
1141 GLX_search_list="MesaGLX GLX"
1143 GL_search_list="GL opengl32 MesaGL"
1144 GLU_search_list="GLU glu32 MesaGLU"
1145 GLX_search_list="GLX MesaGLX"
1151 dnl If we are running under X11 then add in the appropriate libraries.
1152 if ! test x"$no_x" = xyes; then
1153 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1155 GL_CFLAGS="$X_CFLAGS"
1156 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1158 GL_save_CPPFLAGS="$CPPFLAGS"
1159 CPPFLAGS="$GL_CFLAGS"
1161 GL_save_LIBS="$LIBS"
1164 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1165 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1166 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1167 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1169 if test -n "$LIBS"; then
1176 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1177 GL_CFLAGS="$mdl_cv_gl_cflags"
1179 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1180 GL_LIBS="$mdl_cv_gl_libs"
1183 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1184 dnl and we don't want to be global namespace polluters.
1187 LIBS="$GL_save_LIBS"
1188 CPPFLAGS="$GL_save_CPPFLAGS"
1196 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1197 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1198 dnl 'lex' is actually present along the user's PATH).
1200 AC_DEFUN(AC_PROG_LEX_STRICT,
1201 [AC_CHECK_PROG(LEX, flex, flex)
1204 AC_CHECK_PROG(LEX,lex,lex)
1205 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1210 dnl Check to see whether CC (gcc) supports a particular option.
1212 AC_DEFUN(FPTOOLS_CC_FLAG,
1214 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1215 [save_CFLAGS="$CFLAGS"
1218 AC_TRY_COMPILE(,[int main(){return(0);}],
1221 CFLAGS="$save_CFLAGS"
1223 if test "$ac_cv_cc_$2"x = "yesx"; then