1 dnl $Id: aclocal.m4,v 1.43 1999/07/14 13:26:48 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 ** check for leading underscores in symbol names
78 dnl Test for determining whether symbol names have a leading
81 dnl We assume that they _haven't_ if anything goes wrong.
83 dnl Some nlist implementations seem to try to be compatible by ignoring
84 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
85 dnl to work around this by checking for *no* leading underscore first.
88 AC_DEFUN(FPTOOLS_UNDERSCORE,
89 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
90 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
93 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
94 dnl but symbol table listings shows none. What is going on here?!?
96 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
97 dnl the underscoredness of that "platform"
98 changequote(<<, >>)dnl
100 case $HostPlatform in
101 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
102 *cygwin32) fptools_cv_lead_uscore='yes';;
103 *mingw32) fptools_cv_lead_uscore='yes';;
106 AC_TRY_RUN([#ifdef HAVE_NLIST_H
108 changequote(<<, >>)dnl
110 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
111 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
119 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
121 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
126 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
129 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
130 AC_SUBST(LeadingUnderscore)
131 case $LeadingUnderscore in
132 YES) AC_DEFINE(LEADING_UNDERSCORE);;
137 dnl Check for Happy and version.
139 AC_DEFUN(FPTOOLS_HAPPY,
140 [AC_PATH_PROG(HappyCmd,happy,,$PATH ${hardtop}/happy/src)
141 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
142 [if test x"$HappyCmd" != x; then
143 fptools_cv_happy_version="`$HappyCmd -v |
145 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
148 fptools_cv_happy_version="";
150 if expr "$fptools_cv_happy_version" "<" 1.4 > /dev/null 2>&1; then
152 echo "Happy version 1.4 or later is required to compile GHC."
156 HappyVersion=$ac_cv_happy_version;
157 AC_SUBST(HappyVersion)
161 dnl What's the best way of doing context diffs?
163 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
165 AC_DEFUN(FPTOOLS_PROG_DIFF,
166 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
167 [echo foo > conftest1
169 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
170 fptools_cv_context_diffs='diff -C 1'
172 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
173 fptools_cv_context_diffs='diff -c1'
175 echo "Can't figure out how to do context diffs."
176 echo "Neither \`diff -C 1' nor \`diff -c1' works."
180 rm -f conftest1 conftest2
182 ContextDiffCmd=$fptools_cv_context_diffs
183 AC_SUBST(ContextDiffCmd)
187 dnl Finding the Right Yacc
189 AC_DEFUN(FPTOOLS_PROG_YACCY,
191 if test "$YACC" = "yacc"; then
192 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
193 [AC_CHECK_PROG(WhatCmd, what, what, :)
194 $WhatCmd $YACC > conftest.out
195 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
196 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
197 if test -f /usr/lang/yacc; then
198 echo "I'm going to use /usr/lang/yacc instead"
199 ac_cv_prog_yacc=/usr/lang/yacc
201 echo "I'm assuming the worst...no parser generator at all"
204 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
205 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
206 echo "I'm assuming the worst...no parser generator at all"
209 ac_cv_prog_yacc=$YACC
214 ac_cv_prog_yacc=$YACC
216 YaccCmd=$ac_cv_prog_yacc
220 dnl *** Checking for ar and its arguments + whether we need ranlib.
222 dnl ArCmd and RANLIB are AC_SUBST'ed
224 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
225 [AC_PATH_PROG(ArCmd,ar)
226 if test -z "$ArCmd"; then
227 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
230 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
233 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
236 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
239 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
242 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
246 echo "I can't figure out how to use your $ArCmd"
250 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
252 if test -z "$NeedRanLib"; then
254 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
262 dnl AC_SHEBANG_PERL - can we she-bang perl?
264 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
265 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
270 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
271 if test $? -ne 69; then
272 fptools_cv_shebang_perl=yes
274 fptools_cv_shebang_perl=no
280 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
281 dnl *Must* be called after AC_PROG_CC
283 AC_DEFUN(FPTOOLS_HAVE_GCC,
284 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
285 [if test -z "$GCC"; then
287 echo "You would be better off with gcc"
288 echo "Perhaps it is already installed, but not in your PATH?"
289 fptools_cv_have_gcc='no'
292 cmd_string="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 20 \\\< \1 \\\* 10 + \2/g' `"
294 if test `eval $cmd_string 2>/dev/null` != "1"; then
296 echo "I'm not sure if your version of gcc will work,"
297 echo "but it's worth a shot, eh?"
299 fptools_cv_have_gcc='yes'
302 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
306 dnl Small feature test for perl version. Assumes PerlCmd
307 dnl contains path to perl binary
309 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
310 [$PerlCmd -v >conftest.out 2>&1
311 if grep "version 4" conftest.out >/dev/null 2>&1; then
312 if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
314 ************************************************************************
315 Uh-oh...looks like you have Perl 4.035.
317 Perl version 4.035 has a bug to do with recursion that will bite if
318 you run the lit2texi script, when making Info files from
319 literate files of various sorts. Either use perl5, the last version of perl4
320 (4.036), or an older version (e.g., perl 4.019). Failing that, don't create
322 ************************************************************************
326 if grep "version 5" conftest.out >/dev/null 2>&1; then
329 echo "I'm not sure if your version of perl will work,"
330 echo "but it's worth a shot, eh?"
336 dnl ** figure out the alignment restriction of a type
337 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
338 dnl so we can't call REQUIRE)
340 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
341 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
342 [changequote(<<, >>)dnl
343 dnl The name to #define.
344 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
345 dnl The cache variable name.
346 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
347 dnl The name of the corresponding size.
348 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
350 AC_MSG_CHECKING(alignment of $1)
351 AC_CACHE_VAL(AC_CV_NAME,
358 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
363 FILE *f=fopen("conftestval", "w");
365 fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
368 AC_CV_NAME=`cat conftestval`,
369 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
370 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
371 AC_MSG_RESULT($AC_CV_NAME)
372 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
373 AC_PROVIDE($AC_TYPE_NAME)
374 undefine([AC_TYPE_NAME])dnl
375 undefine([AC_CV_NAME])dnl
376 undefine([AC_CV_SIZEOF_NAME])dnl
379 dnl ** figure out whether C compiler supports 'long long's
380 dnl (Closely based on Andreas Zeller's macro for testing
381 dnl for this under C++)
383 dnl If the C compiler supports `long long' types,
384 dnl define `HAVE_LONG_LONG'.
386 AC_DEFUN(FPTOOLS_C_LONG_LONG,
388 AC_REQUIRE([AC_PROG_CC])
389 AC_MSG_CHECKING(whether ${CC} supports long long types)
390 AC_CACHE_VAL(fptools_cv_have_long_long,
394 AC_TRY_COMPILE(,[long long a;],
395 fptools_cv_have_long_long=yes,
396 fptools_cv_have_long_long=no)
399 AC_MSG_RESULT($fptools_cv_have_long_long)
400 if test "$fptools_cv_have_long_long" = yes; then
401 AC_DEFINE(HAVE_LONG_LONG)
405 dnl *** Can we open files in binary mode? ***
407 AC_DEFUN(FPTOOLS_O_BINARY,
409 AC_REQUIRE([AC_PROG_CC])
410 AC_MSG_CHECKING(whether we can open files in binary mode)
411 AC_CACHE_VAL(fptools_cv_have_o_binary,
420 fptools_cv_have_o_binary=yes,
421 fptools_cv_have_o_binary=no)
424 AC_MSG_RESULT($fptools_cv_have_o_binary)
425 if test "$fptools_cv_have_o_binary" = yes; then
426 AC_DEFINE(HAVE_O_BINARY)
430 dnl *** Which one comes first, .text or .data? ***
432 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
433 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
435 int f() { return 1; }
437 int main() { return ((char*)&f > (char*)&i); }
440 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
441 if test "$fptools_cv_code_bef_data" = yes; then
442 AC_DEFINE(CODE_BEFORE_DATA)
446 dnl *** Helper function **
448 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
450 dnl *** What's the end-of-text-section marker called? ***
452 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
453 [AC_MSG_CHECKING([for end of text section marker])
455 for i in data_start _data_start etext _etext __etext; do
456 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
457 if test "$fptools_end_of_text" = yes; then
458 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
459 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
464 if test "$not_done" = 1; then
465 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
466 if test "$fptools_end_of_text" = yes; then
467 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
468 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
470 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
471 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
474 AC_MSG_RESULT([$]fptools_cv_end_of_text)
477 dnl *** What's the end-of-data-section marker called? ***
479 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
480 [AC_MSG_CHECKING([for end of data section marker])
482 for i in end _end __end; do
483 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
484 if test "$fptools_end_of_data" = yes; then
485 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
486 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
491 if test "$not_done" = 1; then
492 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
493 if test "$fptools_end_of_data" = yes; then
494 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
495 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
497 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
498 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
501 AC_MSG_RESULT([$]fptools_cv_end_of_data)
506 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
508 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
510 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
514 cat > conftest.$ac_ext <<EOF
515 dnl This sometimes fails to find confdefs.h, for some reason.
516 dnl [#]line __oline__ "[$]0"
517 [#]line __oline__ "configure"
518 #include "confdefs.h"
520 int t() { return 0; }
522 if AC_TRY_EVAL(ac_link); then
527 ifelse([$4], , , [else
537 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
539 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
541 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
542 [AC_MSG_CHECKING([for $1])
543 AC_CACHE_VAL(ac_cv_flag_$1,
544 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
545 eval "ac_cv_flag_$1=yes",
546 eval "ac_cv_flag_$1=no"
549 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
559 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
561 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
562 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
564 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
566 AC_DEFINE_UNQUOTED($ac_tr_lib)
568 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
570 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
572 AC_DEFINE_UNQUOTED($ac_tr_lib)
578 dnl check for prototypes
580 AC_DEFUN(AC_C_PROTOTYPES,
581 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
590 ac_cv_prototypes=yes,
591 ac_cv_prototypes=no)])
592 if test "$ac_cv_prototypes" = yes; then
593 AC_DEFINE(HAVE_PROTOTYPES)