1 dnl $Id: aclocal.m4,v 1.99 2002/04/10 09:41:16 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
93 AC_SUBST(HaveGNURegex)
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 if test x"$UseSrcTreeHappy" = xYES; then
201 HappyCmd=$SrcTreeHappyCmd
203 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
205 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
207 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
208 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
209 elif test x"$HappyCmd" != x; then
210 fptools_cv_happy_version="`$HappyCmd -v |
211 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
213 fptools_cv_happy_version="";
217 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
218 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9],
219 [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])dnl
221 HappyVersion=$fptools_cv_happy_version;
222 AC_SUBST(HappyVersion)
224 # 1.9 and later is required, assume that we can use
225 # the "-agc" options.
228 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-gt,[1.11],
235 dnl What's the best way of doing context diffs?
237 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
239 AC_DEFUN(FPTOOLS_PROG_DIFF,
240 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
241 [echo foo > conftest1
243 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
244 fptools_cv_context_diffs='diff -C 1'
246 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
247 fptools_cv_context_diffs='diff -c1'
249 echo "Can't figure out how to do context diffs."
250 echo "Neither \`diff -C 1' nor \`diff -c1' works."
254 rm -f conftest1 conftest2
256 ContextDiffCmd=$fptools_cv_context_diffs
257 AC_SUBST(ContextDiffCmd)
261 dnl Check whether ld supports -x
263 AC_DEFUN(FPTOOLS_LD_X,
264 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
266 echo 'foo() {}' > conftest.c
267 ${CC-cc} -c conftest.c
268 if ${LdCmd} -r -x -o foo.o conftest.o; then
273 rm -rf conftest.c conftest.o foo.o
275 if test "$fptools_cv_ld_x" = yes; then
284 dnl Finding the Right Yacc
286 AC_DEFUN(FPTOOLS_PROG_YACCY,
288 if test "$YACC" = "yacc"; then
289 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
290 [AC_CHECK_PROG(WhatCmd, what, what, :)
291 $WhatCmd $YACC > conftest.out
292 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
293 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
294 if test -f /usr/lang/yacc; then
295 echo "I'm going to use /usr/lang/yacc instead"
296 ac_cv_prog_yacc=/usr/lang/yacc
298 echo "I'm assuming the worst...no parser generator at all"
301 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
302 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
303 echo "I'm assuming the worst...no parser generator at all"
306 ac_cv_prog_yacc=$YACC
311 ac_cv_prog_yacc=$YACC
313 YaccCmd=$ac_cv_prog_yacc
317 dnl *** Checking for ar and its arguments + whether we need ranlib.
319 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
320 dnl On Digital UNIX, we test for the -Z (compress) and
321 dnl -input (take list of files from external file) flags.
323 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
324 [AC_PATH_PROG(ArCmdRaw,ar)
325 if test -z "$ArCmdRaw"; then
326 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
329 if $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
332 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
335 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
338 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
341 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
344 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
348 echo "I can't figure out how to use your $ArCmd"
352 case $HostPlatform in
354 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
356 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
359 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
361 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
362 ArSupportsInput='-input'
367 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
368 AC_SUBST(ArSupportsInput)
369 if test -z "$NeedRanLib"; then
371 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
379 dnl AC_SHEBANG_PERL - can we she-bang perl?
381 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
382 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
387 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
388 if test $? -ne 69; then
389 fptools_cv_shebang_perl=yes
391 fptools_cv_shebang_perl=no
397 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
398 dnl *Must* be called after AC_PROG_CC
400 AC_DEFUN(FPTOOLS_HAVE_GCC,
401 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
402 [if test -z "$GCC"; then
404 echo "You would be better off with gcc"
405 echo "Perhaps it is already installed, but not in your PATH?"
406 fptools_cv_have_gcc='no'
409 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' `"
411 fptools_cv_have_gcc='yes'
412 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
413 fptools_cv_have_gcc='no'
415 echo "your gcc version appears to be ..."
417 echo "gcc prior to 2.0 and have never worked with ghc."
418 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
419 AC_MSG_ERROR([gcc 1.X has never been supported])
423 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
427 dnl Small feature test for perl version. Assumes PerlCmd
428 dnl contains path to perl binary
430 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
431 [$PerlCmd -v >conftest.out 2>&1
432 if grep "version 5" conftest.out >/dev/null 2>&1; then
435 if grep "v5.6" conftest.out >/dev/null 2>&1; then
438 if grep "version 6" conftest.out >/dev/null 2>&1; then
441 echo "Your version of perl probably won't work."
449 dnl Getting at the right version of 'find'
450 dnl (i.e., not the MS util on a Win32 box).
452 AC_DEFUN(FPTOOLS_FIND_FIND,
454 AC_PATH_PROG(Find2Cmd, find)
455 $Find2Cmd --version > conftest.out 2>&1
456 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
457 # Encountered MS' find utility, which is not what we're after.
459 # HACK - AC_CHECK_PROG is useful here in that does let you reject
460 # an (absolute) entry in the path (Find2Cmd). It is not so useful
461 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
462 # absolute path eventually found. So, hack around this by inspecting
463 # what variables hold the abs. path & use them directly.
464 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
472 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
473 dnl values of the second argument to the result of running
474 dnl the commands given by the third. It does not cache its
475 dnl result, so it is suitable for checks which should be
478 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
479 [AC_MSG_CHECKING([$1])
481 AC_MSG_RESULT([$][$2])
485 dnl FPTOOLS_GHC_VERSION(version)
486 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
487 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
489 dnl Test for version of installed ghc. Uses $GHC.
490 dnl [original version pinched from c2hs]
492 AC_DEFUN(FPTOOLS_GHC_VERSION,
493 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
494 ["${WithGhc-ghc}" --version > conftestghc 2>&1
495 cat conftestghc >&AC_FD_CC
496 #Useless Use Of cat award...
497 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
499 if test "[$]fptools_version_of_ghc" = ""
501 fptools_version_of_ghc='unknown'
503 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
504 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
505 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
507 if test "[$]fptools_version_of_ghc[_pl]" = ""
509 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
510 fptools_version_of_ghc[_pl]="0"
512 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
516 [$1]="[$]fptools_version_of_ghc[_all]"
518 [$1]="[$]fptools_version_of_ghc[_major]"
519 [$2]="[$]fptools_version_of_ghc[_minor]"
521 [$1]="[$]fptools_version_of_ghc[_major]"
522 [$2]="[$]fptools_version_of_ghc[_minor]"
523 [$3]="[$]fptools_version_of_ghc[_pl]"
525 [$1]="[$]fptools_version_of_ghc[_all]"
526 [$2]="[$]fptools_version_of_ghc[_major]"
527 [$3]="[$]fptools_version_of_ghc[_minor]"
528 [$4]="[$]fptools_version_of_ghc[_pl]"
534 dnl ** figure out the alignment restriction of a type
535 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
536 dnl so we can't call REQUIRE)
538 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
539 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
540 [changequote(<<, >>)dnl
541 dnl The name to #define.
542 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
543 dnl The cache variable name.
544 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
545 dnl The name of the corresponding size.
546 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
548 AC_MSG_CHECKING(alignment of $1)
549 AC_CACHE_VAL(AC_CV_NAME,
556 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
561 FILE *f=fopen("conftestval", "w");
563 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
566 AC_CV_NAME=`cat conftestval`,
567 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
568 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
569 AC_MSG_RESULT($AC_CV_NAME)
570 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
571 AC_PROVIDE($AC_TYPE_NAME)
572 undefine([AC_TYPE_NAME])dnl
573 undefine([AC_CV_NAME])dnl
574 undefine([AC_CV_SIZEOF_NAME])dnl
577 dnl ** Map an arithmetic C type to a Haskell type.
578 dnl Based on autconf's AC_CHECK_SIZEOF.
580 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
581 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
582 [changequote(<<, >>)dnl
583 dnl The name to #define.
584 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
585 dnl The cache variable name.
586 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
588 AC_MSG_CHECKING(Haskell type for $1)
589 AC_CACHE_VAL(AC_CV_NAME,
590 [AC_TRY_RUN([#include <stdio.h>
593 #ifdef HAVE_SYS_TYPES_H
594 # include <sys/types.h>
601 #ifdef HAVE_SYS_STAT_H
602 # include <sys/stat.h>
617 #ifdef HAVE_TERMIOS_H
618 # include <termios.h>
636 FILE *f=fopen("conftestval", "w");
638 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
640 ((testing)(-1) < (testing)0) ? "Int" : "Word",
644 (sizeof(testing) > sizeof(double)) ? "LDouble" :
645 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
649 }], AC_CV_NAME=`cat conftestval`,
650 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
651 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
652 AC_MSG_RESULT($AC_CV_NAME)
653 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
654 undefine([AC_TYPE_NAME])dnl
655 undefine([AC_CV_NAME])dnl
658 dnl ** figure out whether C compiler supports 'long long's
659 dnl (Closely based on Andreas Zeller's macro for testing
660 dnl for this under C++)
662 dnl If the C compiler supports `long long' types,
663 dnl define `HAVE_LONG_LONG'.
665 AC_DEFUN(FPTOOLS_C_LONG_LONG,
667 AC_REQUIRE([AC_PROG_CC])
668 AC_MSG_CHECKING(whether ${CC} supports long long types)
669 AC_CACHE_VAL(fptools_cv_have_long_long,
673 AC_TRY_COMPILE(,[long long a;],
674 fptools_cv_have_long_long=yes,
675 fptools_cv_have_long_long=no)
678 AC_MSG_RESULT($fptools_cv_have_long_long)
679 if test "$fptools_cv_have_long_long" = yes; then
680 AC_DEFINE(HAVE_LONG_LONG)
684 dnl ** Obtain the value of a C constant.
685 dnl The value will be `(-1)' if the constant is undefined.
687 dnl This is set up so that the argument can be a shell variable.
689 AC_DEFUN(FPTOOLS_CHECK_CCONST,
691 eval "def_name=CCONST_$1"
692 eval "cv_name=ac_cv_cconst_$1"
693 AC_MSG_CHECKING(value of $1)
694 AC_CACHE_VAL($cv_name,
695 [AC_TRY_RUN([#include <stdio.h>
699 FILE *f=fopen("conftestval", "w");
701 fprintf(f, "%d\n", $1);
704 eval "$cv_name=`cat conftestval`",
706 eval "$cv_name=-1")])dnl
707 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
708 AC_MSG_RESULT($fptools_check_cconst_result)
709 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
710 unset fptools_check_cconst_result
713 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
716 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
717 [for ac_const_name in $1
719 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
724 dnl *** Can we open files in binary mode? ***
726 AC_DEFUN(FPTOOLS_O_BINARY,
728 AC_REQUIRE([AC_PROG_CC])
729 AC_MSG_CHECKING(whether we can open files in binary mode)
730 AC_CACHE_VAL(fptools_cv_have_o_binary,
739 fptools_cv_have_o_binary=yes,
740 fptools_cv_have_o_binary=no)
743 AC_MSG_RESULT($fptools_cv_have_o_binary)
744 if test "$fptools_cv_have_o_binary" = yes; then
745 AC_DEFINE(HAVE_O_BINARY)
749 dnl *** Which one comes first, .text or .data? ***
751 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
752 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
754 int f() { return 1; }
756 int main() { return ((char*)&f > (char*)&i); }
759 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
760 if test "$fptools_cv_code_bef_data" = yes; then
761 AC_DEFINE(CODE_BEFORE_DATA)
765 dnl *** Helper function **
767 AC_DEFUN(FPTOOLS_IN_SCOPE,
768 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
771 dnl *** What's the end-of-text-section marker called? ***
773 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
774 [AC_CACHE_CHECK([for end of text section marker],
775 [fptools_cv_end_of_text],
776 [fptools_cv_end_of_text=""
778 for i in data_start _data_start etext _etext __etext; do
779 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
780 if test "$fptools_end_of_text" = yes; then
781 fptools_cv_end_of_text=$i
786 if test "$not_done" = 1; then
787 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
788 if test "$fptools_end_of_text" = yes; then
789 fptools_cv_end_of_text="etext"
792 if test -n "$fptools_cv_end_of_text"; then
793 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
795 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
797 AC_CACHE_CHECK([for end of text section marker declaration],
798 [fptools_cv_end_of_text_decl],
799 [fptools_cv_end_of_text_decl=""
801 for i in data_start _data_start etext _etext __etext; do
802 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
803 if test "$fptools_end_of_text_decl" = yes; then
804 fptools_cv_end_of_text_decl=$i
809 if test "$not_done" = 1; then
810 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
811 if test "$fptools_end_of_text_decl" = yes; then
812 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
815 if test -n "$fptools_cv_end_of_text_decl"; then
816 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
818 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
822 dnl *** What's the end-of-data-section marker called? ***
824 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
825 [AC_CACHE_CHECK([for end of data section marker],
826 [fptools_cv_end_of_data],
827 [fptools_cv_end_of_data=""
829 for i in end _end __end; do
830 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
831 if test "$fptools_end_of_data" = yes; then
832 fptools_cv_end_of_data=$i
837 if test "$not_done" = 1; then
838 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
839 if test "$fptools_end_of_data" = yes; then
840 fptools_cv_end_of_data="end"
843 if test -n "$fptools_cv_end_of_data"; then
844 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
846 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
848 AC_CACHE_CHECK([for end of data section marker declaration],
849 [fptools_cv_end_of_data_decl],
850 [fptools_cv_end_of_data_decl=""
852 for i in end _end __end; do
853 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
854 if test "$fptools_end_of_data_decl" = yes; then
855 fptools_cv_end_of_data_decl=$i
860 if test "$not_done" = 1; then
861 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
862 if test "$fptools_end_of_data_decl" = yes; then
863 fptools_cv_end_of_data_decl="end asm(\"end\")"
866 if test -n "$fptools_cv_end_of_data_decl"; then
867 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
869 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
874 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
876 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
878 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
882 cat > conftest.$ac_ext <<EOF
883 dnl This sometimes fails to find confdefs.h, for some reason.
884 dnl [#]line __oline__ "[$]0"
885 [#]line __oline__ "configure"
886 #include "confdefs.h"
888 int t() { return 0; }
890 if AC_TRY_EVAL(ac_link); then
895 ifelse([$4], , , [else
905 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
907 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
909 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
910 [AC_MSG_CHECKING([for $1])
911 AC_CACHE_VAL(ac_cv_flag_$1,
912 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
913 eval "ac_cv_flag_$1=yes",
914 eval "ac_cv_flag_$1=no"
917 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
927 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
929 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
930 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
932 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
934 AC_DEFINE_UNQUOTED($ac_tr_lib)
936 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
938 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
940 AC_DEFINE_UNQUOTED($ac_tr_lib)
946 dnl check for prototypes
948 AC_DEFUN([AC_C_PROTOTYPES],
949 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
958 ac_cv_prototypes=yes,
959 ac_cv_prototypes=no)])
960 if test "$ac_cv_prototypes" = yes; then
961 AC_DEFINE([HAVE_PROTOTYPES])
965 dnl ** Check which CATALOG file we have to use with DocBook SGML.
967 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
969 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
970 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
971 dnl is set to "no". JADE is the jade executable and STYLESHEET
972 dnl a DocBook style sheet.
974 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
975 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
977 cat > conftest.sgml << EOF
978 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
982 <Author><OtherName>Test</OtherName></Author>
983 <Address>Test</Address>
984 <PubDate>Test</PubDate>
986 <Sect1><Title>Test</Title>
993 fptools_cv_sgml_catalog=no
994 if test -z "$SGML_CATALOG_FILES" ; then
995 for fptools_catalog in $4; do
996 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
997 if AC_TRY_EVAL(ac_try); then
998 fptools_cv_sgml_catalog=[$]fptools_catalog
1003 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
1004 fptools_cv_sgml_catalog="yes"
1008 if test $fptools_cv_sgml_catalog != "no"; then
1009 $1=$fptools_cv_sgml_catalog
1013 dnl ######################################################################
1014 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1015 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1016 dnl Search for a library defining FUNC, if it's not already available.
1017 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1019 dnl ######################################################################
1021 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1023 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1024 [ac_func_search_save_LIBS="$LIBS"
1025 ac_cv_search_$2="no"
1026 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1027 test "$ac_cv_search_$2" = "no" && for i in $3; do
1028 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1029 AC_TRY_LINK([$1], [$2()],
1030 [ac_cv_search_$2="-l$i"
1033 LIBS="$ac_func_search_save_LIBS"])
1034 if test "$ac_cv_search_$2" != "no"; then
1035 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1041 dnl ####################### -*- Mode: M4 -*- ###########################
1042 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1044 dnl This file is free software; you can redistribute it and/or modify it
1045 dnl under the terms of the GNU General Public License as published by
1046 dnl the Free Software Foundation; either version 2 of the License, or
1047 dnl (at your option) any later version.
1049 dnl This file is distributed in the hope that it will be useful, but
1050 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1051 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1052 dnl General Public License for more details.
1054 dnl You should have received a copy of the GNU General Public License
1055 dnl along with this file; if not, write to:
1057 dnl Free Software Foundation, Inc.
1060 dnl Boston, MA 02111-1307, USA.
1061 dnl ####################################################################
1064 dnl @synopsis FPTOOLS_CHECK_LIBM
1066 dnl Search for math library (typically -lm).
1068 dnl The variable LIBM (which is not an output variable by default) is
1069 dnl set to a value which is suitable for use in a Makefile (for example,
1070 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1072 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1074 # FPTOOLS_CHECK_LIBM - check for math library
1075 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1076 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1080 # These system don't have libm
1083 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1084 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1087 AC_CHECK_LIB(m, main, LIBM="-lm")
1092 dnl ######################################################################
1093 dnl NOTE: Because of portability issues between different autoconf
1094 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1095 dnl Furthermore, caching has been completely rewritten.
1096 dnl ######################################################################
1098 dnl ########################### -*- Mode: M4 -*- #######################
1099 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1101 dnl This file is free software; you can redistribute it and/or modify it
1102 dnl under the terms of the GNU General Public License as published by
1103 dnl the Free Software Foundation; either version 2 of the License, or
1104 dnl (at your option) any later version.
1106 dnl This file is distributed in the hope that it will be useful, but
1107 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1108 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1109 dnl General Public License for more details.
1111 dnl You should have received a copy of the GNU General Public License
1112 dnl along with this file; if not, write to:
1114 dnl Free Software Foundation, Inc.
1117 dnl Boston, MA 02111-1307, USA.
1118 dnl ####################################################################
1120 dnl @synopsis FPTOOLS_HAVE_OPENGL
1122 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1123 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1124 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1126 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1127 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1130 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1131 dnl be missing) are added to the shell output variable "GL_LIBS", along
1132 dnl with any other libraries that are necessary to successfully link an
1133 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1134 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1137 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1138 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1139 dnl an OpenGL application.
1141 dnl The following shell variable (which are not output variables) are
1142 dnl also set to either "yes" or "no" (depending on which libraries were
1143 dnl found) to help you determine exactly what was found.
1150 dnl A complete little toy "Automake `make distcheck'" package of how to
1151 dnl use this macro is available at:
1153 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1155 dnl Please note that as the ac_opengl macro and the toy example evolves,
1156 dnl the version number increases, so you may have to adjust the above
1157 dnl URL accordingly.
1159 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1161 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1163 AC_REQUIRE([AC_PROG_CC])
1164 AC_REQUIRE([AC_PATH_X])
1165 AC_REQUIRE([AC_PATH_XTRA])
1166 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1168 dnl Check for Mesa first, unless we were asked not to.
1169 dnl AC_HELP_STRING([--with-Mesa],
1170 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1171 dnl with_Mesa_help_string)
1172 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1173 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=no)], use_Mesa=$enableval, use_Mesa=no)
1175 if test x"$use_Mesa" = xyes; then
1176 GL_search_list="MesaGL GL opengl32"
1177 GLU_search_list="MesaGLU GLU glu32"
1178 GLX_search_list="MesaGLX GLX"
1180 GL_search_list="GL opengl32 MesaGL"
1181 GLU_search_list="GLU glu32 MesaGLU"
1182 GLX_search_list="GLX MesaGLX"
1188 dnl If we are running under X11 then add in the appropriate libraries.
1189 if ! test x"$no_x" = xyes; then
1190 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1192 GL_CFLAGS="$X_CFLAGS"
1193 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1195 GL_save_CPPFLAGS="$CPPFLAGS"
1196 CPPFLAGS="$GL_CFLAGS"
1198 GL_save_LIBS="$LIBS"
1201 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1202 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1203 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
1204 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1206 if test -n "$LIBS"; then
1213 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1214 GL_CFLAGS="$mdl_cv_gl_cflags"
1216 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1217 GL_LIBS="$mdl_cv_gl_libs"
1220 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1221 dnl and we don't want to be global namespace polluters.
1224 LIBS="$GL_save_LIBS"
1225 CPPFLAGS="$GL_save_CPPFLAGS"
1233 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1234 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1235 dnl 'lex' is actually present along the user's PATH).
1237 AC_DEFUN(AC_PROG_LEX_STRICT,
1238 [AC_CHECK_PROG(LEX, flex, flex)
1241 AC_CHECK_PROG(LEX,lex,lex)
1242 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1247 dnl Check to see whether CC (gcc) supports a particular option.
1249 AC_DEFUN(FPTOOLS_CC_FLAG,
1251 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1252 [save_CFLAGS="$CFLAGS"
1255 AC_TRY_COMPILE(,[int main(){return(0);}],
1258 CFLAGS="$save_CFLAGS"
1260 if test "$ac_cv_cc_$2"x = "yesx"; then