1 dnl $Id: aclocal.m4,v 1.45 1999/11/04 15:09:09 sewardj 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.6 > /dev/null 2>&1; then
153 echo "Happy version 1.6 or later is required to compile GHC."
158 HappyVersion=$ac_cv_happy_version;
159 AC_SUBST(HappyVersion)
163 dnl What's the best way of doing context diffs?
165 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
167 AC_DEFUN(FPTOOLS_PROG_DIFF,
168 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
169 [echo foo > conftest1
171 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
172 fptools_cv_context_diffs='diff -C 1'
174 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
175 fptools_cv_context_diffs='diff -c1'
177 echo "Can't figure out how to do context diffs."
178 echo "Neither \`diff -C 1' nor \`diff -c1' works."
182 rm -f conftest1 conftest2
184 ContextDiffCmd=$fptools_cv_context_diffs
185 AC_SUBST(ContextDiffCmd)
189 dnl Finding the Right Yacc
191 AC_DEFUN(FPTOOLS_PROG_YACCY,
193 if test "$YACC" = "yacc"; then
194 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
195 [AC_CHECK_PROG(WhatCmd, what, what, :)
196 $WhatCmd $YACC > conftest.out
197 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
198 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
199 if test -f /usr/lang/yacc; then
200 echo "I'm going to use /usr/lang/yacc instead"
201 ac_cv_prog_yacc=/usr/lang/yacc
203 echo "I'm assuming the worst...no parser generator at all"
206 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
207 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
208 echo "I'm assuming the worst...no parser generator at all"
211 ac_cv_prog_yacc=$YACC
216 ac_cv_prog_yacc=$YACC
218 YaccCmd=$ac_cv_prog_yacc
222 dnl *** Checking for ar and its arguments + whether we need ranlib.
224 dnl ArCmd and RANLIB are AC_SUBST'ed
226 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
227 [AC_PATH_PROG(ArCmd,ar)
228 if test -z "$ArCmd"; then
229 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
232 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
235 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
238 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
241 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
244 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
248 echo "I can't figure out how to use your $ArCmd"
252 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
254 if test -z "$NeedRanLib"; then
256 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
264 dnl AC_SHEBANG_PERL - can we she-bang perl?
266 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
267 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
272 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
273 if test $? -ne 69; then
274 fptools_cv_shebang_perl=yes
276 fptools_cv_shebang_perl=no
282 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
283 dnl *Must* be called after AC_PROG_CC
285 AC_DEFUN(FPTOOLS_HAVE_GCC,
286 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
287 [if test -z "$GCC"; then
289 echo "You would be better off with gcc"
290 echo "Perhaps it is already installed, but not in your PATH?"
291 fptools_cv_have_gcc='no'
294 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' `"
296 if test `eval $cmd_string 2>/dev/null` != "1"; then
298 echo "I'm not sure if your version of gcc will work,"
299 echo "but it's worth a shot, eh?"
301 fptools_cv_have_gcc='yes'
304 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
308 dnl Small feature test for perl version. Assumes PerlCmd
309 dnl contains path to perl binary
311 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
312 [$PerlCmd -v >conftest.out 2>&1
313 if grep "version 4" conftest.out >/dev/null 2>&1; then
314 if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
316 ************************************************************************
317 Uh-oh...looks like you have Perl 4.035.
319 Perl version 4.035 has a bug to do with recursion that will bite if
320 you run the lit2texi script, when making Info files from
321 literate files of various sorts. Either use perl5, the last version of perl4
322 (4.036), or an older version (e.g., perl 4.019). Failing that, don't create
324 ************************************************************************
328 if grep "version 5" conftest.out >/dev/null 2>&1; then
331 echo "I'm not sure if your version of perl will work,"
332 echo "but it's worth a shot, eh?"
338 dnl ** figure out the alignment restriction of a type
339 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
340 dnl so we can't call REQUIRE)
342 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
343 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
344 [changequote(<<, >>)dnl
345 dnl The name to #define.
346 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
347 dnl The cache variable name.
348 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
349 dnl The name of the corresponding size.
350 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
352 AC_MSG_CHECKING(alignment of $1)
353 AC_CACHE_VAL(AC_CV_NAME,
360 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
365 FILE *f=fopen("conftestval", "w");
367 fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
370 AC_CV_NAME=`cat conftestval`,
371 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
372 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
373 AC_MSG_RESULT($AC_CV_NAME)
374 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
375 AC_PROVIDE($AC_TYPE_NAME)
376 undefine([AC_TYPE_NAME])dnl
377 undefine([AC_CV_NAME])dnl
378 undefine([AC_CV_SIZEOF_NAME])dnl
381 dnl ** figure out whether C compiler supports 'long long's
382 dnl (Closely based on Andreas Zeller's macro for testing
383 dnl for this under C++)
385 dnl If the C compiler supports `long long' types,
386 dnl define `HAVE_LONG_LONG'.
388 AC_DEFUN(FPTOOLS_C_LONG_LONG,
390 AC_REQUIRE([AC_PROG_CC])
391 AC_MSG_CHECKING(whether ${CC} supports long long types)
392 AC_CACHE_VAL(fptools_cv_have_long_long,
396 AC_TRY_COMPILE(,[long long a;],
397 fptools_cv_have_long_long=yes,
398 fptools_cv_have_long_long=no)
401 AC_MSG_RESULT($fptools_cv_have_long_long)
402 if test "$fptools_cv_have_long_long" = yes; then
403 AC_DEFINE(HAVE_LONG_LONG)
407 dnl *** Can we open files in binary mode? ***
409 AC_DEFUN(FPTOOLS_O_BINARY,
411 AC_REQUIRE([AC_PROG_CC])
412 AC_MSG_CHECKING(whether we can open files in binary mode)
413 AC_CACHE_VAL(fptools_cv_have_o_binary,
422 fptools_cv_have_o_binary=yes,
423 fptools_cv_have_o_binary=no)
426 AC_MSG_RESULT($fptools_cv_have_o_binary)
427 if test "$fptools_cv_have_o_binary" = yes; then
428 AC_DEFINE(HAVE_O_BINARY)
432 dnl *** Which one comes first, .text or .data? ***
434 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
435 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
437 int f() { return 1; }
439 int main() { return ((char*)&f > (char*)&i); }
442 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
443 if test "$fptools_cv_code_bef_data" = yes; then
444 AC_DEFINE(CODE_BEFORE_DATA)
448 dnl *** Helper function **
450 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
452 dnl *** What's the end-of-text-section marker called? ***
454 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
455 [AC_MSG_CHECKING([for end of text section marker])
457 for i in data_start _data_start etext _etext __etext; do
458 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
459 if test "$fptools_end_of_text" = yes; then
460 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
461 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
466 if test "$not_done" = 1; then
467 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
468 if test "$fptools_end_of_text" = yes; then
469 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
470 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
472 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
473 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
476 AC_MSG_RESULT([$]fptools_cv_end_of_text)
479 dnl *** What's the end-of-data-section marker called? ***
481 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
482 [AC_MSG_CHECKING([for end of data section marker])
484 for i in end _end __end; do
485 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
486 if test "$fptools_end_of_data" = yes; then
487 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
488 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
493 if test "$not_done" = 1; then
494 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
495 if test "$fptools_end_of_data" = yes; then
496 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
497 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
499 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
500 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
503 AC_MSG_RESULT([$]fptools_cv_end_of_data)
508 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
510 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
512 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
516 cat > conftest.$ac_ext <<EOF
517 dnl This sometimes fails to find confdefs.h, for some reason.
518 dnl [#]line __oline__ "[$]0"
519 [#]line __oline__ "configure"
520 #include "confdefs.h"
522 int t() { return 0; }
524 if AC_TRY_EVAL(ac_link); then
529 ifelse([$4], , , [else
539 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
541 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
543 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
544 [AC_MSG_CHECKING([for $1])
545 AC_CACHE_VAL(ac_cv_flag_$1,
546 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
547 eval "ac_cv_flag_$1=yes",
548 eval "ac_cv_flag_$1=no"
551 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
561 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
563 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
564 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
566 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
568 AC_DEFINE_UNQUOTED($ac_tr_lib)
570 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
572 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
574 AC_DEFINE_UNQUOTED($ac_tr_lib)
580 dnl check for prototypes
582 AC_DEFUN(AC_C_PROTOTYPES,
583 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
592 ac_cv_prototypes=yes,
593 ac_cv_prototypes=no)])
594 if test "$ac_cv_prototypes" = yes; then
595 AC_DEFINE(HAVE_PROTOTYPES)