1 dnl $Id: aclocal.m4,v 1.37 1999/01/26 09:59:18 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 Has timezone the type time_t or long (HP-UX 10.20 apparently
13 AC_DEFUN(FPTOOLS_TYPE_TIMEZONE,
14 [AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone,
15 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
16 # include <sys/time.h>
20 # include <sys/time.h>
26 extern time_t timezone;
28 [int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
29 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
32 dnl *** Is altzone available? ***
34 AC_DEFUN(FPTOOLS_ALTZONE,
35 [AC_CACHE_CHECK([altzone], fptools_cv_altzone,
36 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
37 # include <sys/time.h>
41 # include <sys/time.h>
47 fptools_cv_altzone=yes, fptools_cv_altzone=no)])
48 if test "$fptools_cv_altzone" = yes; then
49 AC_DEFINE(HAVE_ALTZONE)
54 dnl ** check for leading underscores in symbol names
56 dnl Test for determining whether symbol names have a leading
59 dnl We assume that they _haven't_ if anything goes wrong.
61 dnl Some nlist implementations seem to try to be compatible by ignoring
62 dnl a leading underscore sometimes (eg. FreeBSD). We therefore have
63 dnl to work around this by checking for *no* leading underscore first.
66 AC_DEFUN(FPTOOLS_UNDERSCORE,
67 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
68 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
71 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
72 dnl but symbol table listings shows none. What is going on here?!?
74 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
75 dnl the underscoredness of that "platform"
76 changequote(<<, >>)dnl
79 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
80 *cygwin32) fptools_cv_lead_uscore='yes';;
81 *mingw32) fptools_cv_lead_uscore='yes';;
84 AC_TRY_RUN([#ifdef HAVE_NLIST_H
86 changequote(<<, >>)dnl
88 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
89 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
97 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
99 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
104 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
107 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
108 AC_SUBST(LeadingUnderscore)
109 case $LeadingUnderscore in
110 YES) AC_DEFINE(LEADING_UNDERSCORE);;
115 dnl Check for Happy and version.
117 AC_DEFUN(FPTOOLS_HAPPY,
118 [AC_PATH_PROG(HappyCmd,happy)
119 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
120 [if test x"$HappyCmd" != x; then
121 fptools_cv_happy_version="`$HappyCmd -v |
123 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
126 fptools_cv_happy_version="";
128 if expr "$fptools_cv_happy_version" "<" 1.4 > /dev/null 2>&1; then
130 echo "Happy version 1.4 or later is required to compile GHC."
134 HappyVersion=$ac_cv_happy_version;
135 AC_SUBST(HappyVersion)
139 dnl What's the best way of doing context diffs?
141 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
143 AC_DEFUN(FPTOOLS_PROG_DIFF,
144 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
145 [echo foo > conftest1
147 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
148 fptools_cv_context_diffs='diff -C 1'
150 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
151 fptools_cv_context_diffs='diff -c1'
153 echo "Can't figure out how to do context diffs."
154 echo "Neither \`diff -C 1' nor \`diff -c1' works."
158 rm -f conftest1 conftest2
160 ContextDiffCmd=$fptools_cv_context_diffs
161 AC_SUBST(ContextDiffCmd)
165 dnl Finding the Right Yacc
167 AC_DEFUN(FPTOOLS_PROG_YACCY,
169 if test "$YACC" = "yacc"; then
170 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
171 [AC_CHECK_PROG(WhatCmd, what, what, :)
172 $WhatCmd $YACC > conftest.out
173 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
174 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
175 if test -f /usr/lang/yacc; then
176 echo "I'm going to use /usr/lang/yacc instead"
177 ac_cv_prog_yacc=/usr/lang/yacc
179 echo "I'm assuming the worst...no parser generator at all"
182 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
183 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
184 echo "I'm assuming the worst...no parser generator at all"
187 ac_cv_prog_yacc=$YACC
192 ac_cv_prog_yacc=$YACC
194 YaccCmd=$ac_cv_prog_yacc
198 dnl *** Checking for ar and its arguments + whether we need ranlib.
200 dnl ArCmd and RANLIB are AC_SUBST'ed
202 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
203 [AC_PATH_PROG(ArCmd,ar)
204 if test -z "$ArCmd"; then
205 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
208 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
211 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
214 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
217 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
220 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
224 echo "I can't figure out how to use your $ArCmd"
228 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
230 if test -z "$NeedRanLib"; then
232 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
240 dnl AC_SHEBANG_PERL - can we she-bang perl?
242 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
243 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
248 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
249 if test $? -ne 69; then
250 fptools_cv_shebang_perl=yes
252 fptools_cv_shebang_perl=no
258 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
259 dnl *Must* be called after AC_PROG_CC
261 AC_DEFUN(FPTOOLS_HAVE_GCC,
262 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
263 [if test -z "$GCC"; then
265 echo "You would be better off with gcc"
266 echo "Perhaps it is already installed, but not in your PATH?"
267 fptools_cv_have_gcc='no'
270 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' `"
272 if test `eval $cmd_string 2>/dev/null` != "1"; then
274 echo "I'm not sure if your version of gcc will work,"
275 echo "but it's worth a shot, eh?"
277 fptools_cv_have_gcc='yes'
280 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
285 dnl FPTOOLS_PROG_GNUCPP gathers the path to the cpp that the
286 dnl gcc driver calls upon.
288 dnl Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
290 AC_DEFUN(FPTOOLS_PROG_GNUCPP,
291 [AC_CACHE_CHECK([how to invoke GNU cpp directly], fptools_cv_gnu_cpp,
292 [if test "$HaveGcc" = "YES"; then
294 gcc -v -E conftest.c >/dev/null 2>conftest.out
296 echo 'tr/\x5c/\//; /(\S+\/)cpp/ && print "[$]{1}cpp -iprefix [$]1";' > conftest.pl
297 fptools_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
300 # We need to be able to invoke CPP directly, preferably
301 # with input from stdin (mkdependHS and hscpp depend on
302 # this at the moment).
303 # Take a guess at what to use, this probably won't work.
304 echo Warning: GNU cpp not found, using $CPP
305 fptools_cv_gnu_cpp = $CPP
308 GNUCPP=$fptools_cv_gnu_cpp
309 RAWCPP="$GNUCPP -traditional"
314 dnl Small feature test for perl version. Assumes PerlCmd
315 dnl contains path to perl binary
317 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
318 [$PerlCmd -v >conftest.out 2>&1
319 if grep "version 4" conftest.out >/dev/null 2>&1; then
320 if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
322 ************************************************************************
323 Uh-oh...looks like you have Perl 4.035.
325 Perl version 4.035 has a bug to do with recursion that will bite if
326 you run the lit2texi script, when making Info files from
327 literate files of various sorts. Either use perl5, the last version of perl4
328 (4.036), or an older version (e.g., perl 4.019). Failing that, don't create
330 ************************************************************************
334 if grep "version 5" conftest.out >/dev/null 2>&1; then
337 echo "I'm not sure if your version of perl will work,"
338 echo "but it's worth a shot, eh?"
344 dnl ** figure out the alignment restriction of a type
345 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
346 dnl so we can't call REQUIRE)
348 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
349 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
350 [changequote(<<, >>)dnl
351 dnl The name to #define.
352 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
353 dnl The cache variable name.
354 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
355 dnl The name of the corresponding size.
356 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
358 AC_MSG_CHECKING(alignment of $1)
359 AC_CACHE_VAL(AC_CV_NAME,
366 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
371 FILE *f=fopen("conftestval", "w");
373 fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
376 AC_CV_NAME=`cat conftestval`,
377 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
378 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
379 AC_MSG_RESULT($AC_CV_NAME)
380 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
381 AC_PROVIDE($AC_TYPE_NAME)
382 undefine([AC_TYPE_NAME])dnl
383 undefine([AC_CV_NAME])dnl
384 undefine([AC_CV_SIZEOF_NAME])dnl
387 dnl ** figure out whether C compiler supports 'long long's
388 dnl (Closely based on Andreas Zeller's macro for testing
389 dnl for this under C++)
391 dnl If the C compiler supports `long long' types,
392 dnl define `HAVE_LONG_LONG'.
394 AC_DEFUN(FPTOOLS_C_LONG_LONG,
396 AC_REQUIRE([AC_PROG_CC])
397 AC_MSG_CHECKING(whether ${CC} supports long long types)
398 AC_CACHE_VAL(fptools_cv_have_long_long,
402 AC_TRY_COMPILE(,[long long a;],
403 fptools_cv_have_long_long=yes,
404 fptools_cv_have_long_long=no)
407 AC_MSG_RESULT($fptools_cv_have_long_long)
408 if test "$fptools_cv_have_long_long" = yes; then
409 AC_DEFINE(HAVE_LONG_LONG)
413 dnl *** Can we open files in binary mode? ***
415 AC_DEFUN(FPTOOLS_O_BINARY,
417 AC_REQUIRE([AC_PROG_CC])
418 AC_MSG_CHECKING(whether we can open files in binary mode)
419 AC_CACHE_VAL(fptools_cv_have_o_binary,
428 fptools_cv_have_o_binary=yes,
429 fptools_cv_have_o_binary=no)
432 AC_MSG_RESULT($fptools_cv_have_o_binary)
433 if test "$fptools_cv_have_o_binary" = yes; then
434 AC_DEFINE(HAVE_O_BINARY)
438 dnl *** Which one comes first, .text or .data? ***
440 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
441 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
443 int f() { return 1; }
445 int main() { return ((char*)&f > (char*)&i); }
448 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
449 if test "$fptools_cv_code_bef_data" = yes; then
450 AC_DEFINE(CODE_BEFORE_DATA)
454 dnl *** Helper function **
456 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
458 dnl *** What's the end-of-text-section marker called? ***
460 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
461 [AC_MSG_CHECKING([for end of text section marker])
463 for i in etext _etext __etext; do
464 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
465 if test "$fptools_end_of_text" = yes; then
466 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
467 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
472 if test "$not_done" = 1; then
473 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
474 if test "$fptools_end_of_text" = yes; then
475 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
476 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
478 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
479 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
482 AC_MSG_RESULT([$]fptools_cv_end_of_text)
485 dnl *** What's the end-of-data-section marker called? ***
487 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
488 [AC_MSG_CHECKING([for end of data section marker])
490 for i in end _end __end; do
491 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
492 if test "$fptools_end_of_data" = yes; then
493 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
494 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
499 if test "$not_done" = 1; then
500 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
501 if test "$fptools_end_of_data" = yes; then
502 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
503 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
505 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
506 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
509 AC_MSG_RESULT([$]fptools_cv_end_of_data)
514 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
516 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
518 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
522 cat > conftest.$ac_ext <<EOF
523 dnl This sometimes fails to find confdefs.h, for some reason.
524 dnl [#]line __oline__ "[$]0"
525 [#]line __oline__ "configure"
526 #include "confdefs.h"
528 int t() { return 0; }
530 if AC_TRY_EVAL(ac_link); then
535 ifelse([$4], , , [else
545 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
547 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
549 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
550 [AC_MSG_CHECKING([for $1])
551 AC_CACHE_VAL(ac_cv_flag_$1,
552 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
553 eval "ac_cv_flag_$1=yes",
554 eval "ac_cv_flag_$1=no"
557 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
567 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
569 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
570 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
572 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
574 AC_DEFINE_UNQUOTED($ac_tr_lib)
576 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
578 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
580 AC_DEFINE_UNQUOTED($ac_tr_lib)
586 dnl check for prototypes
588 AC_DEFUN(AC_C_PROTOTYPES,
589 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
598 ac_cv_prototypes=yes,
599 ac_cv_prototypes=no)])
600 if test "$ac_cv_prototypes" = yes; then
601 AC_DEFINE(HAVE_PROTOTYPES)