1 dnl $Id: aclocal.m4,v 1.35 1998/12/02 13:17:10 simonm 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';;
83 AC_TRY_RUN([#ifdef HAVE_NLIST_H
85 changequote(<<, >>)dnl
87 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
88 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
96 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
98 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
103 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
106 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
107 AC_SUBST(LeadingUnderscore)
108 case $LeadingUnderscore in
109 YES) AC_DEFINE(LEADING_UNDERSCORE);;
114 dnl Check for Happy and version.
116 AC_DEFUN(FPTOOLS_HAPPY,
117 [AC_PATH_PROG(HappyCmd,happy)
118 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
119 [if test x"$HappyCmd" != x; then
120 fptools_cv_happy_version="`$HappyCmd -v |
122 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
125 fptools_cv_happy_version="";
127 if expr "$fptools_cv_happy_version" "<" 1.4 > /dev/null 2>&1; then
129 echo "Happy version 1.4 or later is required to compile GHC."
133 HappyVersion=$ac_cv_happy_version;
134 AC_SUBST(HappyVersion)
138 dnl What's the best way of doing context diffs?
140 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
142 AC_DEFUN(FPTOOLS_PROG_DIFF,
143 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
144 [echo foo > conftest1
146 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
147 fptools_cv_context_diffs='diff -C 1'
149 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
150 fptools_cv_context_diffs='diff -c1'
152 echo "Can't figure out how to do context diffs."
153 echo "Neither \`diff -C 1' nor \`diff -c1' works."
157 rm -f conftest1 conftest2
159 ContextDiffCmd=$fptools_cv_context_diffs
160 AC_SUBST(ContextDiffCmd)
164 dnl Finding the Right Yacc
166 AC_DEFUN(FPTOOLS_PROG_YACCY,
168 if test "$YACC" = "yacc"; then
169 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
170 [AC_CHECK_PROG(WhatCmd, what, what, :)
171 $WhatCmd $YACC > conftest.out
172 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
173 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
174 if test -f /usr/lang/yacc; then
175 echo "I'm going to use /usr/lang/yacc instead"
176 ac_cv_prog_yacc=/usr/lang/yacc
178 echo "I'm assuming the worst...no parser generator at all"
181 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
182 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
183 echo "I'm assuming the worst...no parser generator at all"
186 ac_cv_prog_yacc=$YACC
191 ac_cv_prog_yacc=$YACC
193 YaccCmd=$ac_cv_prog_yacc
197 dnl *** Checking for ar and its arguments + whether we need ranlib.
199 dnl ArCmd and RANLIB are AC_SUBST'ed
201 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
202 [AC_PATH_PROG(ArCmd,ar)
203 if test -z "$ArCmd"; then
204 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
207 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
210 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
213 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
216 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
219 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
223 echo "I can't figure out how to use your $ArCmd"
227 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
229 if test -z "$NeedRanLib"; then
231 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
239 dnl AC_SHEBANG_PERL - can we she-bang perl?
241 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
242 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
247 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
248 if test $? -ne 69; then
249 fptools_cv_shebang_perl=yes
251 fptools_cv_shebang_perl=no
257 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
258 dnl *Must* be called after AC_PROG_CC
260 AC_DEFUN(FPTOOLS_HAVE_GCC,
261 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
262 [if test -z "$GCC"; then
264 echo "You would be better off with gcc"
265 echo "Perhaps it is already installed, but not in your PATH?"
266 fptools_cv_have_gcc='no'
269 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' `"
271 if test `eval $cmd_string 2>/dev/null` != "1"; then
273 echo "I'm not sure if your version of gcc will work,"
274 echo "but it's worth a shot, eh?"
276 fptools_cv_have_gcc='yes'
279 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
284 dnl FPTOOLS_PROG_GNUCPP gathers the path to the cpp that the
285 dnl gcc driver calls upon.
287 dnl Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
289 AC_DEFUN(FPTOOLS_PROG_GNUCPP,
290 [AC_CACHE_CHECK([how to invoke GNU cpp directly], fptools_cv_gnu_cpp,
291 [if test "$HaveGcc" = "YES"; then
293 gcc -v -E conftest.c >/dev/null 2>conftest.out
295 echo 'tr/\x5c/\//; /(\S+\/)cpp/ && print "[$]{1}cpp -iprefix [$]1";' > conftest.pl
296 fptools_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
299 # We need to be able to invoke CPP directly, preferably
300 # with input from stdin (mkdependHS and hscpp depend on
301 # this at the moment).
302 # Take a guess at what to use, this probably won't work.
303 echo Warning: GNU cpp not found, using $CPP
304 fptools_cv_gnu_cpp = $CPP
307 GNUCPP=$fptools_cv_gnu_cpp
308 RAWCPP="$GNUCPP -traditional"
313 dnl Small feature test for perl version. Assumes PerlCmd
314 dnl contains path to perl binary
316 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
317 [$PerlCmd -v >conftest.out 2>&1
318 if grep "version 4" conftest.out >/dev/null 2>&1; then
319 if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
321 ************************************************************************
322 Uh-oh...looks like you have Perl 4.035.
324 Perl version 4.035 has a bug to do with recursion that will bite if
325 you run the lit2texi script, when making Info files from
326 literate files of various sorts. Either use perl5, the last version of perl4
327 (4.036), or an older version (e.g., perl 4.019). Failing that, don't create
329 ************************************************************************
333 if grep "version 5" conftest.out >/dev/null 2>&1; then
336 echo "I'm not sure if your version of perl will work,"
337 echo "but it's worth a shot, eh?"
343 dnl ** figure out the alignment restriction of a type
344 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
345 dnl so we can't call REQUIRE)
347 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
348 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
349 [changequote(<<, >>)dnl
350 dnl The name to #define.
351 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
352 dnl The cache variable name.
353 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
354 dnl The name of the corresponding size.
355 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
357 AC_MSG_CHECKING(alignment of $1)
358 AC_CACHE_VAL(AC_CV_NAME,
365 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
370 FILE *f=fopen("conftestval", "w");
372 fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
375 AC_CV_NAME=`cat conftestval`,
376 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
377 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
378 AC_MSG_RESULT($AC_CV_NAME)
379 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
380 AC_PROVIDE($AC_TYPE_NAME)
381 undefine([AC_TYPE_NAME])dnl
382 undefine([AC_CV_NAME])dnl
383 undefine([AC_CV_SIZEOF_NAME])dnl
386 dnl ** figure out whether C compiler supports 'long long's
387 dnl (Closely based on Andreas Zeller's macro for testing
388 dnl for this under C++)
390 dnl If the C compiler supports `long long' types,
391 dnl define `HAVE_LONG_LONG'.
393 AC_DEFUN(FPTOOLS_C_LONG_LONG,
395 AC_REQUIRE([AC_PROG_CC])
396 AC_MSG_CHECKING(whether ${CC} supports long long types)
397 AC_CACHE_VAL(fptools_cv_have_long_long,
401 AC_TRY_COMPILE(,[long long a;],
402 fptools_cv_have_long_long=yes,
403 fptools_cv_have_long_long=no)
406 AC_MSG_RESULT($fptools_cv_have_long_long)
407 if test "$fptools_cv_have_long_long" = yes; then
408 AC_DEFINE(HAVE_LONG_LONG)
412 dnl *** Can we open files in binary mode? ***
414 AC_DEFUN(FPTOOLS_O_BINARY,
416 AC_REQUIRE([AC_PROG_CC])
417 AC_MSG_CHECKING(whether we can open files in binary mode)
418 AC_CACHE_VAL(fptools_cv_have_o_binary,
427 fptools_cv_have_o_binary=yes,
428 fptools_cv_have_o_binary=no)
431 AC_MSG_RESULT($fptools_cv_have_o_binary)
432 if test "$fptools_cv_have_o_binary" = yes; then
433 AC_DEFINE(HAVE_O_BINARY)
437 dnl *** Which one comes first, .text or .data? ***
439 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
440 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
442 int f() { return 1; }
444 int main() { return ((char*)&f > (char*)&i); }
447 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
448 if test "$fptools_cv_code_bef_data" = yes; then
449 AC_DEFINE(CODE_BEFORE_DATA)
453 dnl *** Helper function **
455 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
457 dnl *** What's the end-of-text-section marker called? ***
459 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
460 [AC_CACHE_CHECK([for end of text section marker], fptools_cv_end_of_text,
463 for i in etext _etext __etext; do
464 FPTOOLS_IN_SCOPE($i,$i,fptools_cv_end_of_text)
465 if test "$fptools_cv_end_of_text" = yes; then
466 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i)
467 AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i)
472 if test "$not_done" = 1; then
473 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_cv_end_of_text);
474 if test "$fptools_cv_end_of_text" = yes; then
475 AC_DEFINE(TEXT_SECTION_END_MARKER_DECL, etext asm("etext"))
476 AC_DEFINE(TEXT_SECTION_END_MARKER, etext)
478 AC_DEFINE(TEXT_SECTION_END_MARKER, dunno_what_it_is)
483 dnl *** What's the end-of-data-section marker called? ***
485 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
486 [AC_CACHE_CHECK([for end of data section marker], fptools_cv_end_of_data,
489 for i in end _end __end; do
490 FPTOOLS_IN_SCOPE($i,$i,fptools_cv_end_of_data)
491 if test "$fptools_cv_end_of_data" = yes; then
492 AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)
493 AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)
498 if test "$not_done" = 1; then
499 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_cv_end_of_data);
500 if test "$fptools_cv_end_of_data" = yes; then
501 AC_DEFINE(DATA_SECTION_END_MARKER_DECL, end asm("end"))
502 AC_DEFINE(DATA_SECTION_END_MARKER, end)
504 AC_DEFINE(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)
505 AC_DEFINE(DATA_SECTION_END_MARKER, dunno_what_it_is)
512 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
514 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
516 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
520 cat > conftest.$ac_ext <<EOF
521 dnl This sometimes fails to find confdefs.h, for some reason.
522 dnl [#]line __oline__ "[$]0"
523 [#]line __oline__ "configure"
524 #include "confdefs.h"
526 int t() { return 0; }
528 if AC_TRY_EVAL(ac_link); then
533 ifelse([$4], , , [else
543 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
545 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
547 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
548 [AC_MSG_CHECKING([for $1])
549 AC_CACHE_VAL(ac_cv_flag_$1,
550 [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
551 eval "ac_cv_flag_$1=yes",
552 eval "ac_cv_flag_$1=no"
555 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
565 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
567 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
568 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
570 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
572 AC_DEFINE_UNQUOTED($ac_tr_lib)
574 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
576 ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
578 AC_DEFINE_UNQUOTED($ac_tr_lib)
584 dnl check for prototypes
586 AC_DEFUN(AC_C_PROTOTYPES,
587 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
596 ac_cv_prototypes=yes,
597 ac_cv_prototypes=no)])
598 if test "$ac_cv_prototypes" = yes; then
599 AC_DEFINE(HAVE_PROTOTYPES)