1 dnl $Id: aclocal.m4,v 1.40 1999/03/27 12:48:25 sof Exp $
3 dnl Extra autoconf macros for the Glasgow fptools
5 dnl To be a good autoconf citizen, names of local macros have
6 dnl prefixed with FPTOOLS_ to ensure we don't clash
7 dnl with any pre-supplied autoconf ones.
10 dnl Is timezone around? (in a header file)
12 AC_DEFUN(FPTOOLS_HAVE_TIMEZONE,
13 [AC_CACHE_CHECK([timezone], fptools_cv_have_timezone,
14 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
15 # include <sys/time.h>
19 # include <sys/time.h>
24 ], [return timezone;],
25 fptools_cv_have_timezone=yes, fptools_cv_have_timezone=no)])
26 if test "$fptools_cv_have_timezone" = yes; then
27 AC_DEFINE(HAVE_TIMEZONE)
32 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
35 AC_DEFUN(FPTOOLS_TYPE_TIMEZONE,
36 [AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone,
37 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
38 # include <sys/time.h>
42 # include <sys/time.h>
48 extern time_t timezone;
50 [int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
51 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
54 dnl *** Is altzone available? ***
56 AC_DEFUN(FPTOOLS_ALTZONE,
57 [AC_CACHE_CHECK([altzone], fptools_cv_altzone,
58 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
59 # include <sys/time.h>
63 # include <sys/time.h>
69 fptools_cv_altzone=yes, fptools_cv_altzone=no)])
70 if test "$fptools_cv_altzone" = yes; then
71 AC_DEFINE(HAVE_ALTZONE)
76 dnl ** 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/'`
307 dnl FPTOOLS_PROG_GNUCPP gathers the path to the cpp that the
308 dnl gcc driver calls upon.
310 dnl Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
312 AC_DEFUN(FPTOOLS_PROG_GNUCPP,
313 [AC_CACHE_CHECK([how to invoke GNU cpp directly], fptools_cv_gnu_cpp,
314 [if test "$HaveGcc" = "YES"; then
316 gcc -v -E conftest.c >/dev/null 2>conftest.out
318 echo 'tr/\x5c/\//; /(\S+\/)cpp/ && print "[$]{1}cpp -iprefix [$]1";' > conftest.pl
319 fptools_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
322 # We need to be able to invoke CPP directly, preferably
323 # with input from stdin (mkdependHS and hscpp depend on
324 # this at the moment).
325 # Take a guess at what to use, this probably won't work.
326 echo Warning: GNU cpp not found, using $CPP
327 fptools_cv_gnu_cpp = $CPP
330 GNUCPP=$fptools_cv_gnu_cpp
331 RAWCPP="$GNUCPP -traditional"
336 dnl Small feature test for perl version. Assumes PerlCmd
337 dnl contains path to perl binary
339 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
340 [$PerlCmd -v >conftest.out 2>&1
341 if grep "version 4" conftest.out >/dev/null 2>&1; then
342 if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
344 ************************************************************************
345 Uh-oh...looks like you have Perl 4.035.
347 Perl version 4.035 has a bug to do with recursion that will bite if
348 you run the lit2texi script, when making Info files from
349 literate files of various sorts. Either use perl5, the last version of perl4
350 (4.036), or an older version (e.g., perl 4.019). Failing that, don't create
352 ************************************************************************
356 if grep "version 5" conftest.out >/dev/null 2>&1; then
359 echo "I'm not sure if your version of perl will work,"
360 echo "but it's worth a shot, eh?"
366 dnl ** figure out the alignment restriction of a type
367 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
368 dnl so we can't call REQUIRE)
370 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
371 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
372 [changequote(<<, >>)dnl
373 dnl The name to #define.
374 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
375 dnl The cache variable name.
376 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
377 dnl The name of the corresponding size.
378 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
380 AC_MSG_CHECKING(alignment of $1)
381 AC_CACHE_VAL(AC_CV_NAME,
388 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
393 FILE *f=fopen("conftestval", "w");
395 fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
398 AC_CV_NAME=`cat conftestval`,
399 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
400 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
401 AC_MSG_RESULT($AC_CV_NAME)
402 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
403 AC_PROVIDE($AC_TYPE_NAME)
404 undefine([AC_TYPE_NAME])dnl
405 undefine([AC_CV_NAME])dnl
406 undefine([AC_CV_SIZEOF_NAME])dnl
409 dnl ** figure out whether C compiler supports 'long long's
410 dnl (Closely based on Andreas Zeller's macro for testing
411 dnl for this under C++)
413 dnl If the C compiler supports `long long' types,
414 dnl define `HAVE_LONG_LONG'.
416 AC_DEFUN(FPTOOLS_C_LONG_LONG,
418 AC_REQUIRE([AC_PROG_CC])
419 AC_MSG_CHECKING(whether ${CC} supports long long types)
420 AC_CACHE_VAL(fptools_cv_have_long_long,
424 AC_TRY_COMPILE(,[long long a;],
425 fptools_cv_have_long_long=yes,
426 fptools_cv_have_long_long=no)
429 AC_MSG_RESULT($fptools_cv_have_long_long)
430 if test "$fptools_cv_have_long_long" = yes; then
431 AC_DEFINE(HAVE_LONG_LONG)
435 dnl *** Can we open files in binary mode? ***
437 AC_DEFUN(FPTOOLS_O_BINARY,
439 AC_REQUIRE([AC_PROG_CC])
440 AC_MSG_CHECKING(whether we can open files in binary mode)
441 AC_CACHE_VAL(fptools_cv_have_o_binary,
450 fptools_cv_have_o_binary=yes,
451 fptools_cv_have_o_binary=no)
454 AC_MSG_RESULT($fptools_cv_have_o_binary)
455 if test "$fptools_cv_have_o_binary" = yes; then
456 AC_DEFINE(HAVE_O_BINARY)
460 dnl *** Which one comes first, .text or .data? ***
462 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
463 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
465 int f() { return 1; }
467 int main() { return ((char*)&f > (char*)&i); }
470 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
471 if test "$fptools_cv_code_bef_data" = yes; then
472 AC_DEFINE(CODE_BEFORE_DATA)
476 dnl *** Helper function **
478 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
480 dnl *** What's the end-of-text-section marker called? ***
482 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
483 [AC_MSG_CHECKING([for end of text section marker])
485 for i in data_start _data_start etext _etext __etext; do
486 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
487 if test "$fptools_end_of_text" = yes; then
488 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
489 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
494 if test "$not_done" = 1; then
495 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
496 if test "$fptools_end_of_text" = yes; then
497 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
498 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
500 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
501 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
504 AC_MSG_RESULT([$]fptools_cv_end_of_text)
507 dnl *** What's the end-of-data-section marker called? ***
509 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
510 [AC_MSG_CHECKING([for end of data section marker])
512 for i in end _end __end; do
513 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
514 if test "$fptools_end_of_data" = yes; then
515 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
516 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
521 if test "$not_done" = 1; then
522 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
523 if test "$fptools_end_of_data" = yes; then
524 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
525 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
527 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
528 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
531 AC_MSG_RESULT([$]fptools_cv_end_of_data)
536 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
538 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
540 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
544 cat > conftest.$ac_ext <<EOF
545 dnl This sometimes fails to find confdefs.h, for some reason.
546 dnl [#]line __oline__ "[$]0"
547 [#]line __oline__ "configure"
548 #include "confdefs.h"
550 int t() { return 0; }
552 if AC_TRY_EVAL(ac_link); then
557 ifelse([$4], , , [else
567 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
569 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
571 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
572 [AC_MSG_CHECKING([for $1])
573 AC_CACHE_VAL(ac_cv_flag_$1,
574 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
575 eval "ac_cv_flag_$1=yes",
576 eval "ac_cv_flag_$1=no"
579 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
589 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
591 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
592 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
594 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
596 AC_DEFINE_UNQUOTED($ac_tr_lib)
598 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
600 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
602 AC_DEFINE_UNQUOTED($ac_tr_lib)
608 dnl check for prototypes
610 AC_DEFUN(AC_C_PROTOTYPES,
611 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
620 ac_cv_prototypes=yes,
621 ac_cv_prototypes=no)])
622 if test "$ac_cv_prototypes" = yes; then
623 AC_DEFINE(HAVE_PROTOTYPES)