1 dnl $Id: aclocal.m4,v 1.105 2002/07/15 16:43:34 panne 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.13. 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.13],
219 [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
221 HappyVersion=$fptools_cv_happy_version;
222 AC_SUBST(HappyVersion)
226 dnl What's the best way of doing context diffs?
228 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
230 AC_DEFUN(FPTOOLS_PROG_DIFF,
231 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
232 [echo foo > conftest1
234 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
235 fptools_cv_context_diffs='diff -C 1'
237 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
238 fptools_cv_context_diffs='diff -c1'
240 echo "Can't figure out how to do context diffs."
241 echo "Neither \`diff -C 1' nor \`diff -c1' works."
245 rm -f conftest1 conftest2
247 ContextDiffCmd=$fptools_cv_context_diffs
248 AC_SUBST(ContextDiffCmd)
252 dnl Check whether ld supports -x
254 AC_DEFUN(FPTOOLS_LD_X,
255 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
257 echo 'foo() {}' > conftest.c
258 ${CC-cc} -c conftest.c
259 if ${LdCmd} -r -x -o foo.o conftest.o; then
264 rm -rf conftest.c conftest.o foo.o
266 if test "$fptools_cv_ld_x" = yes; then
275 dnl Finding the Right Yacc
277 AC_DEFUN(FPTOOLS_PROG_YACCY,
279 if test "$YACC" = "yacc"; then
280 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
281 [AC_CHECK_PROG(WhatCmd, what, what, :)
282 $WhatCmd $YACC > conftest.out
283 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
284 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
285 if test -f /usr/lang/yacc; then
286 echo "I'm going to use /usr/lang/yacc instead"
287 ac_cv_prog_yacc=/usr/lang/yacc
289 echo "I'm assuming the worst...no parser generator at all"
292 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
293 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
294 echo "I'm assuming the worst...no parser generator at all"
297 ac_cv_prog_yacc=$YACC
302 ac_cv_prog_yacc=$YACC
304 YaccCmd=$ac_cv_prog_yacc
308 dnl *** Checking for ar and its arguments + whether we need ranlib.
310 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
311 dnl On Digital UNIX, we test for the -Z (compress) and
312 dnl -input (take list of files from external file) flags.
314 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
315 [AC_PATH_PROG(ArCmdRaw,ar)
316 if test -z "$ArCmdRaw"; then
317 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
320 if $ArCmdRaw clqsZ conftest.a >/dev/null 2>/dev/null; then
323 elif $ArCmdRaw clqs conftest.a >/dev/null 2>/dev/null; then
326 elif $ArCmdRaw cqs conftest.a >/dev/null 2>/dev/null; then
329 elif $ArCmdRaw clq conftest.a >/dev/null 2>/dev/null; then
332 elif $ArCmdRaw cq conftest.a >/dev/null 2>/dev/null; then
335 elif $ArCmdRaw cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
339 echo "I can't figure out how to use your $ArCmd"
343 case $HostPlatform in
345 ArCmd="`cygpath -w ${ArCmdRaw} | sed -e 's@\\\\@/@g' ` ${ArCmdArgs}"
347 *) ArCmd="${ArCmdRaw} ${ArCmdArgs}"
350 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
352 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
353 ArSupportsInput='-input'
358 test -n "$ArSupportsInput" && test -n "$verbose" && echo " setting ArSupportsInput to $ArSupportsInput"
359 AC_SUBST(ArSupportsInput)
360 if test -z "$NeedRanLib"; then
362 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
370 dnl AC_SHEBANG_PERL - can we she-bang perl?
372 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
373 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
378 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
379 if test $? -ne 69; then
380 fptools_cv_shebang_perl=yes
382 fptools_cv_shebang_perl=no
388 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
389 dnl *Must* be called after AC_PROG_CC
391 AC_DEFUN(FPTOOLS_HAVE_GCC,
392 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
393 [if test -z "$GCC"; then
395 echo "You would be better off with gcc"
396 echo "Perhaps it is already installed, but not in your PATH?"
397 fptools_cv_have_gcc='no'
400 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' `"
402 fptools_cv_have_gcc='yes'
403 if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
404 fptools_cv_have_gcc='no'
406 echo "your gcc version appears to be ..."
408 echo "gcc prior to 2.0 and have never worked with ghc."
409 echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
410 AC_MSG_ERROR([gcc 1.X has never been supported])
414 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
418 dnl Small feature test for perl version. Assumes PerlCmd
419 dnl contains path to perl binary
421 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
422 [$PerlCmd -v >conftest.out 2>&1
423 if grep "version 5" conftest.out >/dev/null 2>&1; then
426 if grep "v5.6" conftest.out >/dev/null 2>&1; then
429 if grep "version 6" conftest.out >/dev/null 2>&1; then
432 echo "Your version of perl probably won't work."
440 dnl Getting at the right version of 'find'
441 dnl (i.e., not the MS util on a Win32 box).
443 AC_DEFUN(FPTOOLS_FIND_FIND,
445 AC_PATH_PROG(Find2Cmd, find)
446 $Find2Cmd --version > conftest.out 2>&1
447 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
448 # Encountered MS' find utility, which is not what we're after.
450 # HACK - AC_CHECK_PROG is useful here in that does let you reject
451 # an (absolute) entry in the path (Find2Cmd). It is not so useful
452 # in that it doesn't let you (AFAIU) set VARIABLE equal to the
453 # absolute path eventually found. So, hack around this by inspecting
454 # what variables hold the abs. path & use them directly.
455 AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
463 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
464 dnl values of the second argument to the result of running
465 dnl the commands given by the third. It does not cache its
466 dnl result, so it is suitable for checks which should be
469 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
470 [AC_MSG_CHECKING([$1])
472 AC_MSG_RESULT([$][$2])
476 dnl FPTOOLS_GHC_VERSION(version)
477 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
478 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
480 dnl Test for version of installed ghc. Uses $GHC.
481 dnl [original version pinched from c2hs]
483 AC_DEFUN(FPTOOLS_GHC_VERSION,
484 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
485 ["${WithGhc-ghc}" --version > conftestghc 2>&1
486 cat conftestghc >&AC_FD_CC
487 #Useless Use Of cat award...
488 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
490 if test "[$]fptools_version_of_ghc" = ""
492 fptools_version_of_ghc='unknown'
494 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
495 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
496 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
498 if test "[$]fptools_version_of_ghc[_pl]" = ""
500 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
501 fptools_version_of_ghc[_pl]="0"
503 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
507 [$1]="[$]fptools_version_of_ghc[_all]"
509 [$1]="[$]fptools_version_of_ghc[_major]"
510 [$2]="[$]fptools_version_of_ghc[_minor]"
512 [$1]="[$]fptools_version_of_ghc[_major]"
513 [$2]="[$]fptools_version_of_ghc[_minor]"
514 [$3]="[$]fptools_version_of_ghc[_pl]"
516 [$1]="[$]fptools_version_of_ghc[_all]"
517 [$2]="[$]fptools_version_of_ghc[_major]"
518 [$3]="[$]fptools_version_of_ghc[_minor]"
519 [$4]="[$]fptools_version_of_ghc[_pl]"
525 dnl ** figure out the alignment restriction of a type
526 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
527 dnl so we can't call REQUIRE)
529 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
530 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
531 [changequote(<<, >>)dnl
532 dnl The name to #define.
533 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
534 dnl The cache variable name.
535 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
536 dnl The name of the corresponding size.
537 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
539 AC_MSG_CHECKING(alignment of $1)
540 AC_CACHE_VAL(AC_CV_NAME,
547 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
552 FILE *f=fopen("conftestval", "w");
554 fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
557 AC_CV_NAME=`cat conftestval`,
558 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
559 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
560 AC_MSG_RESULT($AC_CV_NAME)
561 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
562 AC_PROVIDE($AC_TYPE_NAME)
563 undefine([AC_TYPE_NAME])dnl
564 undefine([AC_CV_NAME])dnl
565 undefine([AC_CV_SIZEOF_NAME])dnl
568 dnl ** Map an arithmetic C type to a Haskell type.
569 dnl Based on autconf's AC_CHECK_SIZEOF.
571 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
572 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
573 [changequote(<<, >>)dnl
574 dnl The name to #define.
575 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
576 dnl The cache variable name.
577 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
579 AC_MSG_CHECKING(Haskell type for $1)
580 AC_CACHE_VAL(AC_CV_NAME,
581 [AC_TRY_RUN([#include <stdio.h>
584 #ifdef HAVE_SYS_TYPES_H
585 # include <sys/types.h>
592 #ifdef HAVE_SYS_STAT_H
593 # include <sys/stat.h>
608 #ifdef HAVE_TERMIOS_H
609 # include <termios.h>
627 FILE *f=fopen("conftestval", "w");
629 if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
631 ((testing)(-1) < (testing)0) ? "Int" : "Word",
635 (sizeof(testing) > sizeof(double)) ? "LDouble" :
636 (sizeof(testing) == sizeof(double)) ? "Double" : "Float");
640 }], AC_CV_NAME=`cat conftestval`,
641 ifelse([$2], , AC_CV_NAME=NotReallyAType, AC_CV_NAME=$2),
642 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
643 AC_MSG_RESULT($AC_CV_NAME)
644 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
645 undefine([AC_TYPE_NAME])dnl
646 undefine([AC_CV_NAME])dnl
649 dnl ** figure out whether C compiler supports 'long long's
650 dnl (Closely based on Andreas Zeller's macro for testing
651 dnl for this under C++)
653 dnl If the C compiler supports `long long' types,
654 dnl define `HAVE_LONG_LONG'.
656 AC_DEFUN(FPTOOLS_C_LONG_LONG,
658 AC_REQUIRE([AC_PROG_CC])
659 AC_MSG_CHECKING(whether ${CC} supports long long types)
660 AC_CACHE_VAL(fptools_cv_have_long_long,
664 AC_TRY_COMPILE(,[long long a;],
665 fptools_cv_have_long_long=yes,
666 fptools_cv_have_long_long=no)
669 AC_MSG_RESULT($fptools_cv_have_long_long)
670 if test "$fptools_cv_have_long_long" = yes; then
671 AC_DEFINE(HAVE_LONG_LONG)
675 dnl ** Obtain the value of a C constant.
676 dnl The value will be `(-1)' if the constant is undefined.
678 dnl This is set up so that the argument can be a shell variable.
680 AC_DEFUN(FPTOOLS_CHECK_CCONST,
682 eval "def_name=CCONST_$1"
683 eval "cv_name=ac_cv_cconst_$1"
684 AC_MSG_CHECKING(value of $1)
685 AC_CACHE_VAL($cv_name,
686 [AC_TRY_RUN([#include <stdio.h>
690 FILE *f=fopen("conftestval", "w");
692 fprintf(f, "%d\n", $1);
695 eval "$cv_name=`cat conftestval`",
697 eval "$cv_name=-1")])dnl
698 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
699 AC_MSG_RESULT($fptools_check_cconst_result)
700 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
701 unset fptools_check_cconst_result
704 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with
707 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
708 [for ac_const_name in $1
710 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
715 dnl *** Can we open files in binary mode? ***
717 AC_DEFUN(FPTOOLS_O_BINARY,
719 AC_REQUIRE([AC_PROG_CC])
720 AC_MSG_CHECKING(whether we can open files in binary mode)
721 AC_CACHE_VAL(fptools_cv_have_o_binary,
730 fptools_cv_have_o_binary=yes,
731 fptools_cv_have_o_binary=no)
734 AC_MSG_RESULT($fptools_cv_have_o_binary)
735 if test "$fptools_cv_have_o_binary" = yes; then
736 AC_DEFINE(HAVE_O_BINARY)
740 dnl *** Which one comes first, .text or .data? ***
742 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
743 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
745 int f() { return 1; }
747 int main() { return ((char*)&f > (char*)&i); }
750 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
751 if test "$fptools_cv_code_bef_data" = yes; then
752 AC_DEFINE(CODE_BEFORE_DATA)
756 dnl *** Helper function **
758 AC_DEFUN(FPTOOLS_IN_SCOPE,
759 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
762 dnl *** What's the end-of-text-section marker called? ***
764 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
765 [AC_CACHE_CHECK([for end of text section marker],
766 [fptools_cv_end_of_text],
767 [fptools_cv_end_of_text=""
769 for i in data_start _data_start etext _etext __etext; do
770 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
771 if test "$fptools_end_of_text" = yes; then
772 fptools_cv_end_of_text=$i
777 if test "$not_done" = 1; then
778 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
779 if test "$fptools_end_of_text" = yes; then
780 fptools_cv_end_of_text="etext"
783 if test -n "$fptools_cv_end_of_text"; then
784 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
786 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
788 AC_CACHE_CHECK([for end of text section marker declaration],
789 [fptools_cv_end_of_text_decl],
790 [fptools_cv_end_of_text_decl=""
792 for i in data_start _data_start etext _etext __etext; do
793 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
794 if test "$fptools_end_of_text_decl" = yes; then
795 fptools_cv_end_of_text_decl=$i
800 if test "$not_done" = 1; then
801 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
802 if test "$fptools_end_of_text_decl" = yes; then
803 fptools_cv_end_of_text_decl="etext asm(\"etext\")"
806 if test -n "$fptools_cv_end_of_text_decl"; then
807 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
809 AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
813 dnl *** What's the end-of-data-section marker called? ***
815 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
816 [AC_CACHE_CHECK([for end of data section marker],
817 [fptools_cv_end_of_data],
818 [fptools_cv_end_of_data=""
820 for i in end _end __end; do
821 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
822 if test "$fptools_end_of_data" = yes; then
823 fptools_cv_end_of_data=$i
828 if test "$not_done" = 1; then
829 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
830 if test "$fptools_end_of_data" = yes; then
831 fptools_cv_end_of_data="end"
834 if test -n "$fptools_cv_end_of_data"; then
835 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
837 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
839 AC_CACHE_CHECK([for end of data section marker declaration],
840 [fptools_cv_end_of_data_decl],
841 [fptools_cv_end_of_data_decl=""
843 for i in end _end __end; do
844 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
845 if test "$fptools_end_of_data_decl" = yes; then
846 fptools_cv_end_of_data_decl=$i
851 if test "$not_done" = 1; then
852 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
853 if test "$fptools_end_of_data_decl" = yes; then
854 fptools_cv_end_of_data_decl="end asm(\"end\")"
857 if test -n "$fptools_cv_end_of_data_decl"; then
858 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
860 AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
865 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
867 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
869 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
873 cat > conftest.$ac_ext <<EOF
874 dnl This sometimes fails to find confdefs.h, for some reason.
875 dnl [#]line __oline__ "[$]0"
876 [#]line __oline__ "configure"
877 #include "confdefs.h"
879 int t() { return 0; }
881 if AC_TRY_EVAL(ac_link); then
886 ifelse([$4], , , [else
896 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
898 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
900 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
901 [AC_MSG_CHECKING([for $1])
902 AC_CACHE_VAL(ac_cv_flag_$1,
903 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
904 eval "ac_cv_flag_$1=yes",
905 eval "ac_cv_flag_$1=no"
908 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
918 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
920 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
921 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
923 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
925 AC_DEFINE_UNQUOTED($ac_tr_lib)
927 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
929 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
931 AC_DEFINE_UNQUOTED($ac_tr_lib)
937 dnl check for prototypes
939 AC_DEFUN([AC_C_PROTOTYPES],
940 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
949 ac_cv_prototypes=yes,
950 ac_cv_prototypes=no)])
951 if test "$ac_cv_prototypes" = yes; then
952 AC_DEFINE([HAVE_PROTOTYPES])
956 dnl ** Check which CATALOG file we have to use with DocBook SGML.
958 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
960 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
961 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
962 dnl is set to "no". JADE is the jade executable and STYLESHEET
963 dnl a DocBook style sheet.
965 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
966 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
968 cat > conftest.sgml << EOF
969 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
973 <Author><OtherName>Test</OtherName></Author>
974 <Address>Test</Address>
975 <PubDate>Test</PubDate>
977 <Sect1><Title>Test</Title>
984 fptools_cv_sgml_catalog=no
985 if test -z "$SGML_CATALOG_FILES" ; then
986 for fptools_catalog in $4; do
987 ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
988 if AC_TRY_EVAL(ac_try); then
989 fptools_cv_sgml_catalog=[$]fptools_catalog
994 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
995 fptools_cv_sgml_catalog="yes"
999 if test $fptools_cv_sgml_catalog != "no"; then
1000 $1=$fptools_cv_sgml_catalog
1004 dnl ######################################################################
1005 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1006 dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1007 dnl Search for a library defining FUNC, if it's not already available.
1008 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1010 dnl ######################################################################
1012 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1014 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1015 [ac_func_search_save_LIBS="$LIBS"
1016 ac_cv_search_$2="no"
1017 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1018 test "$ac_cv_search_$2" = "no" && for i in $3; do
1019 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1020 AC_TRY_LINK([$1], [$2()],
1021 [ac_cv_search_$2="-l$i"
1024 LIBS="$ac_func_search_save_LIBS"])
1025 if test "$ac_cv_search_$2" != "no"; then
1026 test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1032 dnl ####################### -*- Mode: M4 -*- ###########################
1033 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1035 dnl This file is free software; you can redistribute it and/or modify it
1036 dnl under the terms of the GNU General Public License as published by
1037 dnl the Free Software Foundation; either version 2 of the License, or
1038 dnl (at your option) any later version.
1040 dnl This file is distributed in the hope that it will be useful, but
1041 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1042 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1043 dnl General Public License for more details.
1045 dnl You should have received a copy of the GNU General Public License
1046 dnl along with this file; if not, write to:
1048 dnl Free Software Foundation, Inc.
1051 dnl Boston, MA 02111-1307, USA.
1052 dnl ####################################################################
1055 dnl @synopsis FPTOOLS_CHECK_LIBM
1057 dnl Search for math library (typically -lm).
1059 dnl The variable LIBM (which is not an output variable by default) is
1060 dnl set to a value which is suitable for use in a Makefile (for example,
1061 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1063 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1065 # FPTOOLS_CHECK_LIBM - check for math library
1066 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1067 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1071 # These system don't have libm
1074 AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1075 AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1078 AC_CHECK_LIB(m, main, LIBM="-lm")
1083 dnl ######################################################################
1084 dnl NOTE: Because of portability issues between different autoconf
1085 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1086 dnl Furthermore, caching has been completely rewritten.
1087 dnl ######################################################################
1089 dnl ########################### -*- Mode: M4 -*- #######################
1090 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1092 dnl This file is free software; you can redistribute it and/or modify it
1093 dnl under the terms of the GNU General Public License as published by
1094 dnl the Free Software Foundation; either version 2 of the License, or
1095 dnl (at your option) any later version.
1097 dnl This file is distributed in the hope that it will be useful, but
1098 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1099 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1100 dnl General Public License for more details.
1102 dnl You should have received a copy of the GNU General Public License
1103 dnl along with this file; if not, write to:
1105 dnl Free Software Foundation, Inc.
1108 dnl Boston, MA 02111-1307, USA.
1109 dnl ####################################################################
1111 dnl @synopsis FPTOOLS_HAVE_OPENGL
1113 dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
1114 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1115 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1117 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1118 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1121 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1122 dnl be missing) are added to the shell output variable "GL_LIBS", along
1123 dnl with any other libraries that are necessary to successfully link an
1124 dnl OpenGL application (e.g. the X11 libraries). Care has been taken to
1125 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1128 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1129 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1130 dnl an OpenGL application.
1132 dnl The following shell variable (which are not output variables) are
1133 dnl also set to either "yes" or "no" (depending on which libraries were
1134 dnl found) to help you determine exactly what was found.
1141 dnl A complete little toy "Automake `make distcheck'" package of how to
1142 dnl use this macro is available at:
1144 dnl ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1146 dnl Please note that as the ac_opengl macro and the toy example evolves,
1147 dnl the version number increases, so you may have to adjust the above
1148 dnl URL accordingly.
1150 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1152 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1154 AC_REQUIRE([AC_PROG_CC])
1155 AC_REQUIRE([AC_PATH_X])
1156 AC_REQUIRE([AC_PATH_XTRA])
1157 AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1159 dnl Check for Mesa first, unless we were asked not to.
1160 dnl AC_HELP_STRING([--with-Mesa],
1161 dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1162 dnl with_Mesa_help_string)
1163 dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1164 AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=no)], use_Mesa=$enableval, use_Mesa=no)
1166 if test x"$use_Mesa" = xyes; then
1167 GL_search_list="MesaGL GL opengl32"
1168 GLU_search_list="MesaGLU GLU glu32"
1169 GLX_search_list="MesaGLX GLX"
1171 GL_search_list="GL opengl32 MesaGL"
1172 GLU_search_list="GLU glu32 MesaGLU"
1173 GLX_search_list="GLX MesaGLX"
1179 dnl If we are running under X11 then add in the appropriate libraries.
1180 if test x"$no_x" != xyes; then
1181 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1183 GL_CFLAGS="$X_CFLAGS"
1184 GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1186 GL_save_CPPFLAGS="$CPPFLAGS"
1187 CPPFLAGS="$GL_CFLAGS"
1189 GL_save_LIBS="$LIBS"
1192 FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
1193 FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
1194 FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
1195 FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
1197 if test -n "$LIBS"; then
1204 AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1205 GL_CFLAGS="$mdl_cv_gl_cflags"
1207 AC_CACHE_CHECK([OpenGL libs], mdl_cv_gl_libs, [mdl_cv_gl_libs="$GL_LIBS"])
1208 GL_LIBS="$mdl_cv_gl_libs"
1211 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1212 dnl and we don't want to be global namespace polluters.
1215 LIBS="$GL_save_LIBS"
1216 CPPFLAGS="$GL_save_CPPFLAGS"
1224 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1225 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1226 dnl 'lex' is actually present along the user's PATH).
1228 AC_DEFUN(AC_PROG_LEX_STRICT,
1229 [AC_CHECK_PROG(LEX, flex, flex)
1232 AC_CHECK_PROG(LEX,lex,lex)
1233 test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1238 dnl Check to see whether CC (gcc) supports a particular option.
1240 AC_DEFUN(FPTOOLS_CC_FLAG,
1242 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1243 [save_CFLAGS="$CFLAGS"
1246 AC_TRY_COMPILE(,[int main(){return(0);}],
1249 CFLAGS="$save_CFLAGS"
1251 if test "$ac_cv_cc_$2"x = "yesx"; then
1259 dnl Check to see whether 'struct msghdr' contains msg_control
1261 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1262 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1263 [AC_TRY_COMPILE([#include <sys/uio.h>
1264 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1265 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1266 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1267 AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1269 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1273 dnl Check to see whether 'struct msghdr' contains msg_accrights
1275 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1276 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1277 [AC_TRY_COMPILE([#include <sys/uio.h>
1278 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1279 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1280 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1281 AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1283 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl