1 dnl $Id: aclocal.m4,v 1.46 1999/12/21 13:00:54 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. If we're building GHC, then we need
138 dnl at least Happy version 1.6. If there's no installed Happy, we look
139 dnl for a happy source tree and point the build system at that instead.
141 dnl ToDo: when we reset HappyCmd to the source tree, autoconf doesn't
142 dnl seems to insert it in the cache file. sigh.
144 AC_DEFUN(FPTOOLS_HAPPY,
145 [AC_PATH_PROG(HappyCmd,happy)
146 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
147 [if test x"$HappyCmd" != x; then
148 fptools_cv_happy_version="`$HappyCmd -v |
150 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
151 elif test -d $srcdir/happy; then
152 HappyCmd=$hardtop/happy/src/happy-inplace;
153 fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
154 echo -n "using happy from the source tree... ";
156 fptools_cv_happy_version="";
159 if expr "$fptools_cv_happy_version" "<" 1.6 > /dev/null 2>&1; then
160 if test -d $srcdir/ghc; then
162 echo "Happy version 1.6 or later is required to compile GHC."
167 HappyVersion=$fptools_cv_happy_version;
168 AC_SUBST(HappyVersion)
172 dnl What's the best way of doing context diffs?
174 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
176 AC_DEFUN(FPTOOLS_PROG_DIFF,
177 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
178 [echo foo > conftest1
180 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
181 fptools_cv_context_diffs='diff -C 1'
183 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
184 fptools_cv_context_diffs='diff -c1'
186 echo "Can't figure out how to do context diffs."
187 echo "Neither \`diff -C 1' nor \`diff -c1' works."
191 rm -f conftest1 conftest2
193 ContextDiffCmd=$fptools_cv_context_diffs
194 AC_SUBST(ContextDiffCmd)
198 dnl Finding the Right Yacc
200 AC_DEFUN(FPTOOLS_PROG_YACCY,
202 if test "$YACC" = "yacc"; then
203 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
204 [AC_CHECK_PROG(WhatCmd, what, what, :)
205 $WhatCmd $YACC > conftest.out
206 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
207 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
208 if test -f /usr/lang/yacc; then
209 echo "I'm going to use /usr/lang/yacc instead"
210 ac_cv_prog_yacc=/usr/lang/yacc
212 echo "I'm assuming the worst...no parser generator at all"
215 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
216 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
217 echo "I'm assuming the worst...no parser generator at all"
220 ac_cv_prog_yacc=$YACC
225 ac_cv_prog_yacc=$YACC
227 YaccCmd=$ac_cv_prog_yacc
231 dnl *** Checking for ar and its arguments + whether we need ranlib.
233 dnl ArCmd and RANLIB are AC_SUBST'ed
235 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
236 [AC_PATH_PROG(ArCmd,ar)
237 if test -z "$ArCmd"; then
238 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
241 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
244 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
247 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
250 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
253 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
257 echo "I can't figure out how to use your $ArCmd"
261 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
263 if test -z "$NeedRanLib"; then
265 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
273 dnl AC_SHEBANG_PERL - can we she-bang perl?
275 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
276 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
281 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
282 if test $? -ne 69; then
283 fptools_cv_shebang_perl=yes
285 fptools_cv_shebang_perl=no
291 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
292 dnl *Must* be called after AC_PROG_CC
294 AC_DEFUN(FPTOOLS_HAVE_GCC,
295 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
296 [if test -z "$GCC"; then
298 echo "You would be better off with gcc"
299 echo "Perhaps it is already installed, but not in your PATH?"
300 fptools_cv_have_gcc='no'
303 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' `"
305 if test `eval $cmd_string 2>/dev/null` != "1"; then
307 echo "I'm not sure if your version of gcc will work,"
308 echo "but it's worth a shot, eh?"
310 fptools_cv_have_gcc='yes'
313 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
317 dnl Small feature test for perl version. Assumes PerlCmd
318 dnl contains path to perl binary
320 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
321 [$PerlCmd -v >conftest.out 2>&1
322 if grep "version 4" conftest.out >/dev/null 2>&1; then
323 if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
325 ************************************************************************
326 Uh-oh...looks like you have Perl 4.035.
328 Perl version 4.035 has a bug to do with recursion that will bite if
329 you run the lit2texi script, when making Info files from
330 literate files of various sorts. Either use perl5, the last version of perl4
331 (4.036), or an older version (e.g., perl 4.019). Failing that, don't create
333 ************************************************************************
337 if grep "version 5" conftest.out >/dev/null 2>&1; then
340 echo "I'm not sure if your version of perl will work,"
341 echo "but it's worth a shot, eh?"
347 dnl ** figure out the alignment restriction of a type
348 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
349 dnl so we can't call REQUIRE)
351 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
352 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
353 [changequote(<<, >>)dnl
354 dnl The name to #define.
355 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
356 dnl The cache variable name.
357 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
358 dnl The name of the corresponding size.
359 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
361 AC_MSG_CHECKING(alignment of $1)
362 AC_CACHE_VAL(AC_CV_NAME,
369 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
374 FILE *f=fopen("conftestval", "w");
376 fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
379 AC_CV_NAME=`cat conftestval`,
380 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
381 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
382 AC_MSG_RESULT($AC_CV_NAME)
383 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
384 AC_PROVIDE($AC_TYPE_NAME)
385 undefine([AC_TYPE_NAME])dnl
386 undefine([AC_CV_NAME])dnl
387 undefine([AC_CV_SIZEOF_NAME])dnl
390 dnl ** figure out whether C compiler supports 'long long's
391 dnl (Closely based on Andreas Zeller's macro for testing
392 dnl for this under C++)
394 dnl If the C compiler supports `long long' types,
395 dnl define `HAVE_LONG_LONG'.
397 AC_DEFUN(FPTOOLS_C_LONG_LONG,
399 AC_REQUIRE([AC_PROG_CC])
400 AC_MSG_CHECKING(whether ${CC} supports long long types)
401 AC_CACHE_VAL(fptools_cv_have_long_long,
405 AC_TRY_COMPILE(,[long long a;],
406 fptools_cv_have_long_long=yes,
407 fptools_cv_have_long_long=no)
410 AC_MSG_RESULT($fptools_cv_have_long_long)
411 if test "$fptools_cv_have_long_long" = yes; then
412 AC_DEFINE(HAVE_LONG_LONG)
416 dnl *** Can we open files in binary mode? ***
418 AC_DEFUN(FPTOOLS_O_BINARY,
420 AC_REQUIRE([AC_PROG_CC])
421 AC_MSG_CHECKING(whether we can open files in binary mode)
422 AC_CACHE_VAL(fptools_cv_have_o_binary,
431 fptools_cv_have_o_binary=yes,
432 fptools_cv_have_o_binary=no)
435 AC_MSG_RESULT($fptools_cv_have_o_binary)
436 if test "$fptools_cv_have_o_binary" = yes; then
437 AC_DEFINE(HAVE_O_BINARY)
441 dnl *** Which one comes first, .text or .data? ***
443 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
444 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
446 int f() { return 1; }
448 int main() { return ((char*)&f > (char*)&i); }
451 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
452 if test "$fptools_cv_code_bef_data" = yes; then
453 AC_DEFINE(CODE_BEFORE_DATA)
457 dnl *** Helper function **
459 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
461 dnl *** What's the end-of-text-section marker called? ***
463 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
464 [AC_MSG_CHECKING([for end of text section marker])
466 for i in data_start _data_start etext _etext __etext; do
467 FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
468 if test "$fptools_end_of_text" = yes; then
469 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
470 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
475 if test "$not_done" = 1; then
476 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
477 if test "$fptools_end_of_text" = yes; then
478 AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
479 AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
481 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
482 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
485 AC_MSG_RESULT([$]fptools_cv_end_of_text)
488 dnl *** What's the end-of-data-section marker called? ***
490 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
491 [AC_MSG_CHECKING([for end of data section marker])
493 for i in end _end __end; do
494 FPTOOLS_IN_SCOPE($i,$i,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, $i)])
497 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
502 if test "$not_done" = 1; then
503 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
504 if test "$fptools_end_of_data" = yes; then
505 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
506 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
508 AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
509 AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
512 AC_MSG_RESULT([$]fptools_cv_end_of_data)
517 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
519 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
521 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
525 cat > conftest.$ac_ext <<EOF
526 dnl This sometimes fails to find confdefs.h, for some reason.
527 dnl [#]line __oline__ "[$]0"
528 [#]line __oline__ "configure"
529 #include "confdefs.h"
531 int t() { return 0; }
533 if AC_TRY_EVAL(ac_link); then
538 ifelse([$4], , , [else
548 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
550 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
552 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
553 [AC_MSG_CHECKING([for $1])
554 AC_CACHE_VAL(ac_cv_flag_$1,
555 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
556 eval "ac_cv_flag_$1=yes",
557 eval "ac_cv_flag_$1=no"
560 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
570 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
572 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
573 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
575 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
577 AC_DEFINE_UNQUOTED($ac_tr_lib)
579 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
581 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
583 AC_DEFINE_UNQUOTED($ac_tr_lib)
589 dnl check for prototypes
591 AC_DEFUN(AC_C_PROTOTYPES,
592 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
601 ac_cv_prototypes=yes,
602 ac_cv_prototypes=no)])
603 if test "$ac_cv_prototypes" = yes; then
604 AC_DEFINE(HAVE_PROTOTYPES)