1 dnl $Id: aclocal.m4,v 1.87 2001/11/07 20:13:26 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)
220 # 1.9 and later is required, assume that we can use
221 # the "-agc" options.
227 dnl What's the best way of doing context diffs?
229 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
231 AC_DEFUN(FPTOOLS_PROG_DIFF,
232 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
233 [echo foo > conftest1
235 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
236 fptools_cv_context_diffs='diff -C 1'
238 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
239 fptools_cv_context_diffs='diff -c1'
241 echo "Can't figure out how to do context diffs."
242 echo "Neither \`diff -C 1' nor \`diff -c1' works."
246 rm -f conftest1 conftest2
248 ContextDiffCmd=$fptools_cv_context_diffs
249 AC_SUBST(ContextDiffCmd)
253 dnl Check whether ld supports -x
255 AC_DEFUN(FPTOOLS_LD_X,
256 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
258 echo 'foo() {}' > conftest.c
259 ${CC-cc} -c conftest.c
260 if ${LdCmd} -r -x -o foo.o conftest.o; then
265 rm -rf conftest.c conftest.o foo.o
267 if test "$fptools_cv_ld_x" = yes; then
276 dnl Finding the Right Yacc
278 AC_DEFUN(FPTOOLS_PROG_YACCY,
280 if test "$YACC" = "yacc"; then
281 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
282 [AC_CHECK_PROG(WhatCmd, what, what, :)
283 $WhatCmd $YACC > conftest.out
284 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
285 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
286 if test -f /usr/lang/yacc; then
287 echo "I'm going to use /usr/lang/yacc instead"
288 ac_cv_prog_yacc=/usr/lang/yacc
290 echo "I'm assuming the worst...no parser generator at all"
293 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
294 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
295 echo "I'm assuming the worst...no parser generator at all"
298 ac_cv_prog_yacc=$YACC
303 ac_cv_prog_yacc=$YACC
305 YaccCmd=$ac_cv_prog_yacc
309 dnl *** Checking for ar and its arguments + whether we need ranlib.
311 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
312 dnl On Digital UNIX, we test for the -Z (compress) and
313 dnl -input (take list of files from external file) flags.
315 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
316 [AC_PATH_PROG(ArCmd,ar)
317 if test -z "$ArCmd"; then
318 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
321 if $ArCmd clqsZ conftest.a >/dev/null 2>/dev/null; then
324 elif $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
327 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
330 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
333 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
336 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
340 echo "I can't figure out how to use your $ArCmd"
344 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
346 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
347 ArSupportsInput='-input'
352 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
353 AC_SUBST(ArSupportsInput)
354 if test -z "$NeedRanLib"; then
356 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
364 dnl AC_SHEBANG_PERL - can we she-bang perl?
366 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
367 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
372 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
373 if test $? -ne 69; then
374 fptools_cv_shebang_perl=yes
376 fptools_cv_shebang_perl=no
382 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
383 dnl *Must* be called after AC_PROG_CC
385 AC_DEFUN(FPTOOLS_HAVE_GCC,
386 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
387 [if test -z "$GCC"; then
389 echo "You would be better off with gcc"
390 echo "Perhaps it is already installed, but not in your PATH?"
391 fptools_cv_have_gcc='no'
394 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' `"
395 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' `"
397 fptools_cv_have_gcc='yes'
398 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
399 fptools_cv_have_gcc='no'
401 echo "your gcc version appears to be ..."
403 echo "gcc prior to 2.0 and have never worked with ghc."
404 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
405 AC_MSG_ERROR([gcc 1.X has never been supported])
407 if test `eval $is_gcc_v3 2>/dev/null` = "1"; then
408 fptools_cv_have_gcc='no'
410 echo "your gcc version appears to be ..."
412 echo "gcc versions 3.0 and above are not yet supported."
413 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
414 AC_MSG_ERROR([gcc 3.0 and above is not currently supported])
418 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
422 dnl Small feature test for perl version. Assumes PerlCmd
423 dnl contains path to perl binary
425 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
426 [$PerlCmd -v >conftest.out 2>&1
427 if grep "version 5" conftest.out >/dev/null 2>&1; then
430 if grep "v5.6" conftest.out >/dev/null 2>&1; then
433 if grep "version 6" conftest.out >/dev/null 2>&1; then
436 echo "Your version of perl probably won't work."
444 dnl Getting at the right version of 'find'
445 dnl (i.e., not the MS util on a Win32 box).
447 AC_DEFUN(FPTOOLS_FIND_FIND,
449 AC_PATH_PROG(Find2Cmd, find)
450 $Find2Cmd --version > conftest.out 2>&1
451 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
452 # Encountered MS' find utility, which is not what we're after.
454 # HACK - AC_CHECK_PROG is useful here in that does let you reject
455 # an (absolute) entry in the path (Find2Cmd). It is not so useful
456 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
457 # absolute path eventually found. So, hack around this by inspecting
458 # what variables hold the abs. path & use them directly.
459 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
467 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
468 dnl values of the second argument to the result of running
469 dnl the commands given by the third. It does not cache its
470 dnl result, so it is suitable for checks which should be
473 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
474 [AC_MSG_CHECKING([$1])
476 AC_MSG_RESULT([$][$2])
480 dnl FPTOOLS_GHC_VERSION(version)
481 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
482 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
484 dnl Test for version of installed ghc. Uses $GHC.
485 dnl [original version pinched from c2hs]
487 AC_DEFUN(FPTOOLS_GHC_VERSION,
488 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
489 [${WithGhc-ghc} --version > conftestghc 2>&1
490 cat conftestghc >&AC_FD_CC
491 #Useless Use Of cat award...
492 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
494 if test "[$]fptools_version_of_ghc" = ""
496 fptools_version_of_ghc='unknown'
498 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
499 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
500 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
502 if test "[$]fptools_version_of_ghc[_pl]" = ""
504 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
505 fptools_version_of_ghc[_pl]="0"
507 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
511 [$1]="[$]fptools_version_of_ghc[_all]"
513 [$1]="[$]fptools_version_of_ghc[_major]"
514 [$2]="[$]fptools_version_of_ghc[_minor]"
516 [$1]="[$]fptools_version_of_ghc[_major]"
517 [$2]="[$]fptools_version_of_ghc[_minor]"
518 [$3]="[$]fptools_version_of_ghc[_pl]"
520 [$1]="[$]fptools_version_of_ghc[_all]"
521 [$2]="[$]fptools_version_of_ghc[_major]"
522 [$3]="[$]fptools_version_of_ghc[_minor]"
523 [$4]="[$]fptools_version_of_ghc[_pl]"
529 dnl ** figure out the alignment restriction of a type
530 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
531 dnl so we can't call REQUIRE)
533 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
534 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
535 [changequote(<<, >>)dnl
536 dnl The name to #define.
537 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
538 dnl The cache variable name.
539 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
540 dnl The name of the corresponding size.
541 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
543 AC_MSG_CHECKING(alignment of $1)
544 AC_CACHE_VAL(AC_CV_NAME,
551 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
556 FILE *f=fopen("conftestval", "w");
558 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
561 AC_CV_NAME=`cat conftestval`,
562 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
563 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
564 AC_MSG_RESULT($AC_CV_NAME)
565 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
566 AC_PROVIDE($AC_TYPE_NAME)
567 undefine([AC_TYPE_NAME])dnl
568 undefine([AC_CV_NAME])dnl
569 undefine([AC_CV_SIZEOF_NAME])dnl
572 dnl ** Map an arithmetic C type to a Haskell type.
573 dnl Based on autconf's AC_CHECK_SIZEOF.
575 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
576 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
577 [changequote(<<, >>)dnl
578 dnl The name to #define.
579 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
580 dnl The cache variable name.
581 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
583 AC_MSG_CHECKING(Haskell type for $1)
584 AC_CACHE_VAL(AC_CV_NAME,
585 [AC_TRY_RUN([#include <stdio.h>
600 FILE *f=fopen("conftestval", "w");
602 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
604 ((testing)(-1) < (testing)0) ? "Int" : "Word",
608 (sizeof(testing) > sizeof(double)) ? "LDouble" :
609 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
613 }], AC_CV_NAME=`cat conftestval`,
614 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
615 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
616 AC_MSG_RESULT($AC_CV_NAME)
617 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
618 undefine([AC_TYPE_NAME])dnl
619 undefine([AC_CV_NAME])dnl
622 dnl ** figure out whether C compiler supports 'long long's
623 dnl (Closely based on Andreas Zeller's macro for testing
624 dnl for this under C++)
626 dnl If the C compiler supports `long long' types,
627 dnl define `HAVE_LONG_LONG'.
629 AC_DEFUN(FPTOOLS_C_LONG_LONG,
631 AC_REQUIRE([AC_PROG_CC])
632 AC_MSG_CHECKING(whether ${CC} supports long long types)
633 AC_CACHE_VAL(fptools_cv_have_long_long,
637 AC_TRY_COMPILE(,[long long a;],
638 fptools_cv_have_long_long=yes,
639 fptools_cv_have_long_long=no)
642 AC_MSG_RESULT($fptools_cv_have_long_long)
643 if test "$fptools_cv_have_long_long" = yes; then
644 AC_DEFINE(HAVE_LONG_LONG)
648 dnl ** Obtain the value of a C constant.
649 dnl The value will be `(-1)' if the constant is undefined.
651 dnl This is set up so that the argument can be a shell variable.
653 AC_DEFUN(FPTOOLS_CHECK_CCONST,
655 eval "def_name=CCONST_$1"
656 eval "cv_name=ac_cv_cconst_$1"
657 AC_MSG_CHECKING(value of $1)
658 AC_CACHE_VAL($cv_name,
659 [AC_TRY_RUN([#include <stdio.h>
663 FILE *f=fopen("conftestval", "w");
665 fprintf(f, "%d\n", $1);
668 eval "$cv_name=`cat conftestval`",
670 eval "$cv_name=-1")])dnl
671 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
672 AC_MSG_RESULT($fptools_check_cconst_result)
673 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
674 unset fptools_check_cconst_result
677 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
680 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
681 [for ac_const_name in $1
683 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
688 dnl *** Can we open files in binary mode? ***
690 AC_DEFUN(FPTOOLS_O_BINARY,
692 AC_REQUIRE([AC_PROG_CC])
693 AC_MSG_CHECKING(whether we can open files in binary mode)
694 AC_CACHE_VAL(fptools_cv_have_o_binary,
703 fptools_cv_have_o_binary=yes,
704 fptools_cv_have_o_binary=no)
707 AC_MSG_RESULT($fptools_cv_have_o_binary)
708 if test "$fptools_cv_have_o_binary" = yes; then
709 AC_DEFINE(HAVE_O_BINARY)
713 dnl *** Which one comes first, .text or .data? ***
715 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
716 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
718 int f() { return 1; }
720 int main() { return ((char*)&f > (char*)&i); }
723 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
724 if test "$fptools_cv_code_bef_data" = yes; then
725 AC_DEFINE(CODE_BEFORE_DATA)
729 dnl *** Helper function **
731 AC_DEFUN(FPTOOLS_IN_SCOPE,
732 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
735 dnl *** What's the end-of-text-section marker called? ***
737 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
738 [AC_CACHE_CHECK([for end of text section marker],
739 [fptools_cv_end_of_text],
740 [fptools_cv_end_of_text=""
742 for i in data_start _data_start etext _etext __etext; do
743 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
744 if test "$fptools_end_of_text" = yes; then
745 fptools_cv_end_of_text=$i
750 if test "$not_done" = 1; then
751 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
752 if test "$fptools_end_of_text" = yes; then
753 fptools_cv_end_of_text="etext"
756 if test -n "$fptools_cv_end_of_text"; then
757 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
759 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
761 AC_CACHE_CHECK([for end of text section marker declaration],
762 [fptools_cv_end_of_text_decl],
763 [fptools_cv_end_of_text_decl=""
765 for i in data_start _data_start etext _etext __etext; do
766 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
767 if test "$fptools_end_of_text_decl" = yes; then
768 fptools_cv_end_of_text_decl=$i
773 if test "$not_done" = 1; then
774 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
775 if test "$fptools_end_of_text_decl" = yes; then
776 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
779 if test -n "$fptools_cv_end_of_text_decl"; then
780 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
782 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
786 dnl *** What's the end-of-data-section marker called? ***
788 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
789 [AC_CACHE_CHECK([for end of data section marker],
790 [fptools_cv_end_of_data],
791 [fptools_cv_end_of_data=""
793 for i in end _end __end; do
794 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
795 if test "$fptools_end_of_data" = yes; then
796 fptools_cv_end_of_data=$i
801 if test "$not_done" = 1; then
802 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
803 if test "$fptools_end_of_data" = yes; then
804 fptools_cv_end_of_data="end"
807 if test -n "$fptools_cv_end_of_data"; then
808 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
810 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
812 AC_CACHE_CHECK([for end of data section marker declaration],
813 [fptools_cv_end_of_data_decl],
814 [fptools_cv_end_of_data_decl=""
816 for i in end _end __end; do
817 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
818 if test "$fptools_end_of_data_decl" = yes; then
819 fptools_cv_end_of_data_decl=$i
824 if test "$not_done" = 1; then
825 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
826 if test "$fptools_end_of_data_decl" = yes; then
827 fptools_cv_end_of_data_decl="end asm(\"end\")"
830 if test -n "$fptools_cv_end_of_data_decl"; then
831 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
833 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
838 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
840 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
842 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
846 cat > conftest.$ac_ext <<EOF
847 dnl This sometimes fails to find confdefs.h, for some reason.
848 dnl [#]line __oline__ "[$]0"
849 [#]line __oline__ "configure"
850 #include "confdefs.h"
852 int t() { return 0; }
854 if AC_TRY_EVAL(ac_link); then
859 ifelse([$4], , , [else
869 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
871 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
873 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
874 [AC_MSG_CHECKING([for $1])
875 AC_CACHE_VAL(ac_cv_flag_$1,
876 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
877 eval "ac_cv_flag_$1=yes",
878 eval "ac_cv_flag_$1=no"
881 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
891 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
893 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
894 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
896 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
898 AC_DEFINE_UNQUOTED($ac_tr_lib)
900 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
902 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
904 AC_DEFINE_UNQUOTED($ac_tr_lib)
910 dnl check for prototypes
912 AC_DEFUN([AC_C_PROTOTYPES],
913 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
922 ac_cv_prototypes=yes,
923 ac_cv_prototypes=no)])
924 if test "$ac_cv_prototypes" = yes; then
925 AC_DEFINE([HAVE_PROTOTYPES])
929 dnl ** Check which CATALOG file we have to use with DocBook SGML.
931 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
933 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
934 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
935 dnl is set to "no". JADE is the jade executable and STYLESHEET
936 dnl a DocBook style sheet.
938 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
939 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
941 cat > conftest.sgml << EOF
942 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
946 <Author><OtherName>Test</OtherName></Author>
947 <Address>Test</Address>
948 <PubDate>Test</PubDate>
950 <Sect1><Title>Test</Title>
957 fptools_cv_sgml_catalog=no
958 for fptools_catalog in $4; do
959 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
960 if AC_TRY_EVAL(ac_try); then
961 fptools_cv_sgml_catalog=[$]fptools_catalog
967 if test $fptools_cv_sgml_catalog != "no"; then
968 $1=$fptools_cv_sgml_catalog
972 dnl ######################################################################
973 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
974 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
975 dnl Search for a library defining FUNC, if it's not already available.
976 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
978 dnl ######################################################################
980 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
982 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
983 [ac_func_search_save_LIBS="$LIBS"
985 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
986 test "$ac_cv_search_$2" = "no" && for i in $3; do
987 LIBS="-l$i $6 $ac_func_search_save_LIBS"
988 AC_TRY_LINK([$1], [$2()],
989 [ac_cv_search_$2="-l$i"
992 LIBS="$ac_func_search_save_LIBS"])
993 if test "$ac_cv_search_$2" != "no"; then
994 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1000 dnl ####################### -*- Mode: M4 -*- ###########################
1001 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1003 dnl This file is free software; you can redistribute it and/or modify it
1004 dnl under the terms of the GNU General Public License as published by
1005 dnl the Free Software Foundation; either version 2 of the License, or
1006 dnl (at your option) any later version.
1008 dnl This file is distributed in the hope that it will be useful, but
1009 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1010 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1011 dnl General Public License for more details.
1013 dnl You should have received a copy of the GNU General Public License
1014 dnl along with this file; if not, write to:
1016 dnl Free Software Foundation, Inc.
1019 dnl Boston, MA 02111-1307, USA.
1020 dnl ####################################################################
1023 dnl @synopsis FPTOOLS_CHECK_LIBM
1025 dnl Search for math library (typically -lm).
1027 dnl The variable LIBM (which is not an output variable by default) is
1028 dnl set to a value which is suitable for use in a Makefile (for example,
1029 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1031 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1033 # FPTOOLS_CHECK_LIBM - check for math library
1034 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1035 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1038 *-*-beos* | *-*-macosx*)
1039 # These system don't have libm
1042 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1043 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1046 AC_CHECK_LIB(m, main, LIBM="-lm")
1051 dnl ######################################################################
1052 dnl NOTE: Because of portability issues between different autoconf
1053 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1054 dnl Furthermore, caching has been completely rewritten.
1055 dnl ######################################################################
1057 dnl ########################### -*- Mode: M4 -*- #######################
1058 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1060 dnl This file is free software; you can redistribute it and/or modify it
1061 dnl under the terms of the GNU General Public License as published by
1062 dnl the Free Software Foundation; either version 2 of the License, or
1063 dnl (at your option) any later version.
1065 dnl This file is distributed in the hope that it will be useful, but
1066 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1067 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1068 dnl General Public License for more details.
1070 dnl You should have received a copy of the GNU General Public License
1071 dnl along with this file; if not, write to:
1073 dnl Free Software Foundation, Inc.
1076 dnl Boston, MA 02111-1307, USA.
1077 dnl ####################################################################
1079 dnl @synopsis FPTOOLS_HAVE_OPENGL
1081 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1082 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1083 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1085 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1086 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1089 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1090 dnl be missing) are added to the shell output variable "GL_LIBS", along
1091 dnl with any other libraries that are necessary to successfully link an
1092 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1093 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1096 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1097 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1098 dnl an OpenGL application.
1100 dnl The following shell variable (which are not output variables) are
1101 dnl also set to either "yes" or "no" (depending on which libraries were
1102 dnl found) to help you determine exactly what was found.
1109 dnl A complete little toy "Automake `make distcheck'" package of how to
1110 dnl use this macro is available at:
1112 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1114 dnl Please note that as the ac_opengl macro and the toy example evolves,
1115 dnl the version number increases, so you may have to adjust the above
1116 dnl URL accordingly.
1118 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1120 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1122 AC_REQUIRE([AC_PROG_CC])
1123 AC_REQUIRE([AC_PATH_X])
1124 AC_REQUIRE([AC_PATH_XTRA])
1125 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1127 dnl Check for Mesa first, unless we were asked not to.
1128 dnl AC_HELP_STRING([--with-Mesa],
1129 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1130 dnl with_Mesa_help_string)
1131 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1132 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1134 if test x"$use_Mesa" = xyes; then
1135 GL_search_list="MesaGL GL opengl32"
1136 GLU_search_list="MesaGLU GLU glu32"
1137 GLX_search_list="MesaGLX GLX"
1139 GL_search_list="GL opengl32 MesaGL"
1140 GLU_search_list="GLU glu32 MesaGLU"
1141 GLX_search_list="GLX MesaGLX"
1147 dnl If we are running under X11 then add in the appropriate libraries.
1148 if ! test x"$no_x" = xyes; then
1149 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1151 GL_CFLAGS="$X_CFLAGS"
1152 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1154 GL_save_CPPFLAGS="$CPPFLAGS"
1155 CPPFLAGS="$GL_CFLAGS"
1157 GL_save_LIBS="$LIBS"
1160 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1161 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1162 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1163 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1165 if test -n "$LIBS"; then
1172 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1173 GL_CFLAGS="$mdl_cv_gl_cflags"
1175 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1176 GL_LIBS="$mdl_cv_gl_libs"
1179 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1180 dnl and we don't want to be global namespace polluters.
1183 LIBS="$GL_save_LIBS"
1184 CPPFLAGS="$GL_save_CPPFLAGS"
1192 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1193 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1194 dnl 'lex' is actually present along the user's PATH).
1196 AC_DEFUN(AC_PROG_LEX_STRICT,
1197 [AC_CHECK_PROG(LEX, flex, flex)
1200 AC_CHECK_PROG(LEX,lex,lex)
1201 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1206 dnl Check to see whether CC (gcc) supports a particular option.
1208 AC_DEFUN(FPTOOLS_CC_FLAG,
1210 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1211 [save_CFLAGS="$CFLAGS"
1214 AC_TRY_COMPILE(,[int main(){return(0);}],
1217 CFLAGS="$save_CFLAGS"
1219 if test "$ac_cv_cc_$2"x = "yesx"; then