1 dnl $Id: aclocal.m4,v 1.28 1998/09/29 17:30:09 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)
53 dnl ** check for leading underscores in symbol names
55 dnl Test for determining whether symbol names have a leading
58 dnl We assume that they _haven't_ if anything goes wrong.
60 AC_DEFUN(FPTOOLS_UNDERSCORE,
61 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
62 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
65 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
66 dnl but symbol table listings shows none. What is going on here?!?
68 changequote(<<, >>)dnl
71 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
72 *cygwin32) fptools_cv_lead_uscore='yes';;
75 AC_TRY_RUN([#ifdef HAVE_NLIST_H
77 changequote(<<, >>)dnl
79 struct nlist xYzzY[] = {{"_xYzzY", 0},{0}};
87 if(nlist(argv[0], xYzzY) == 0 && xYzzY[0].n_value != 0)
92 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
95 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
96 AC_SUBST(LeadingUnderscore)
97 case $LeadingUnderscore in
98 YES) AC_DEFINE(LEADING_UNDERSCORE);;
103 dnl Check for Happy and version.
105 AC_DEFUN(FPTOOLS_HAPPY,
106 [AC_PATH_PROG(HappyCmd,happy)
107 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
108 [if test x"$HappyCmd" != x; then
109 fptools_cv_happy_version="`$HappyCmd -v |
111 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
114 fptools_cv_happy_version="";
116 if expr "$fptools_cv_happy_version" "<" 1.4 > /dev/null 2>&1; then
118 echo "Happy version 1.4 or later is required to compile GHC."
122 HappyVersion=$ac_cv_happy_version;
123 AC_SUBST(HappyVersion)
127 dnl What's the best way of doing context diffs?
129 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
131 AC_DEFUN(FPTOOLS_PROG_DIFF,
132 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
133 [echo foo > conftest1
135 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
136 fptools_cv_context_diffs='diff -C 1'
138 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
139 fptools_cv_context_diffs='diff -c1'
141 echo "Can't figure out how to do context diffs."
142 echo "Neither \`diff -C 1' nor \`diff -c1' works."
146 rm -f conftest1 conftest2
148 ContextDiffCmd=$fptools_cv_context_diffs
149 AC_SUBST(ContextDiffCmd)
153 dnl Finding the Right Yacc
155 AC_DEFUN(FPTOOLS_PROG_YACCY,
157 if test "$YACC" = "yacc"; then
158 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
159 [AC_CHECK_PROG(WhatCmd, what, what, :)
160 $WhatCmd $YACC > conftest.out
161 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
162 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
163 if test -f /usr/lang/yacc; then
164 echo "I'm going to use /usr/lang/yacc instead"
165 ac_cv_prog_yacc=/usr/lang/yacc
167 echo "I'm assuming the worst...no parser generator at all"
170 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
171 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
172 echo "I'm assuming the worst...no parser generator at all"
175 ac_cv_prog_yacc=$YACC
180 ac_cv_prog_yacc=$YACC
182 YaccCmd=$ac_cv_prog_yacc
186 dnl *** Checking for ar and its arguments + whether we need ranlib.
188 dnl ArCmd and RANLIB are AC_SUBST'ed
190 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
191 [AC_PATH_PROG(ArCmd,ar)
192 if test -z "$ArCmd"; then
193 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
196 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
199 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
202 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
205 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
208 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
212 echo "I can't figure out how to use your $ArCmd"
216 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
218 if test -z "$NeedRanLib"; then
220 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
228 dnl AC_SHEBANG_PERL - can we she-bang perl?
230 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
231 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
236 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
237 if test $? -ne 69; then
238 fptools_cv_shebang_perl=yes
240 fptools_cv_shebang_perl=no
246 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
247 dnl *Must* be called after AC_PROG_CC
249 AC_DEFUN(FPTOOLS_HAVE_GCC,
250 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
251 [if test -z "$GCC"; then
253 echo "You would be better off with gcc"
254 echo "Perhaps it is already installed, but not in your PATH?"
255 fptools_cv_have_gcc='no'
258 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' `"
260 if test `eval $cmd_string 2>/dev/null` != "1"; then
262 echo "I'm not sure if your version of gcc will work,"
263 echo "but it's worth a shot, eh?"
265 fptools_cv_have_gcc='yes'
268 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
273 dnl FPTOOLS_PROG_GNUCPP gathers the path to the cpp that the
274 dnl gcc driver calls upon.
276 dnl Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
278 AC_DEFUN(FPTOOLS_PROG_GNUCPP,
279 [AC_CACHE_CHECK([how to invoke GNU cpp directly], fptools_cv_gnu_cpp,
280 [if test "$HaveGcc" = "YES"; then
282 gcc -v -E conftest.c >/dev/null 2>conftest.out
284 echo 'tr/\x5c/\//; /(\S+\/)cpp/ && print "[$]{1}cpp -iprefix [$]1";' > conftest.pl
285 fptools_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
288 # We need to be able to invoke CPP directly, preferably
289 # with input from stdin (mkdependHS and hscpp depend on
290 # this at the moment).
291 # Take a guess at what to use, this probably won't work.
292 echo Warning: GNU cpp not found, using $CPP
293 fptools_cv_gnu_cpp = $CPP
296 GNUCPP=$fptools_cv_gnu_cpp
297 RAWCPP="$GNUCPP -traditional"
302 dnl Small feature test for perl version. Assumes PerlCmd
303 dnl contains path to perl binary
305 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
306 [$PerlCmd -v >conftest.out 2>&1
307 if grep "version 4" conftest.out >/dev/null 2>&1; then
308 if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
310 ************************************************************************
311 Uh-oh...looks like you have Perl 4.035.
313 Perl version 4.035 has a bug to do with recursion that will bite if
314 you run the lit2texi script, when making Info files from
315 literate files of various sorts. Either use perl5, the last version of perl4
316 (4.036), or an older version (e.g., perl 4.019). Failing that, don't create
318 ************************************************************************
322 if grep "version 5" conftest.out >/dev/null 2>&1; then
325 echo "I'm not sure if your version of perl will work,"
326 echo "but it's worth a shot, eh?"
332 dnl ** figure out the alignment restriction of a type
333 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
334 dnl so we can't call REQUIRE)
336 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
337 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
338 [changequote(<<, >>)dnl
339 dnl The name to #define.
340 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
341 dnl The cache variable name.
342 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
343 dnl The name of the corresponding size.
344 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
346 AC_MSG_CHECKING(alignment of $1)
347 AC_CACHE_VAL(AC_CV_NAME,
354 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
359 FILE *f=fopen("conftestval", "w");
361 fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
364 AC_CV_NAME=`cat conftestval`,
365 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
366 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
367 AC_MSG_RESULT($AC_CV_NAME)
368 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
369 AC_PROVIDE($AC_TYPE_NAME)
370 undefine([AC_TYPE_NAME])dnl
371 undefine([AC_CV_NAME])dnl
372 undefine([AC_CV_SIZEOF_NAME])dnl
375 dnl ** figure out whether C compiler supports 'long long's
376 dnl (Closely based on Andreas Zeller's macro for testing
377 dnl for this under C++)
379 dnl If the C compiler supports `long long' types,
380 dnl define `HAVE_LONG_LONG'.
382 AC_DEFUN(FPTOOLS_C_LONG_LONG,
384 AC_REQUIRE([AC_PROG_CC])
385 AC_MSG_CHECKING(whether ${CC} supports long long types)
386 AC_CACHE_VAL(fptools_cv_have_long_long,
390 AC_TRY_COMPILE(,[long long a;],
391 fptools_cv_have_long_long=yes,
392 fptools_cv_have_long_long=no)
395 AC_MSG_RESULT($fptools_cv_have_long_long)
396 if test "$fptools_cv_have_long_long" = yes; then
397 AC_DEFINE(HAVE_LONG_LONG)
401 dnl *** Can we open files in binary mode? ***
403 AC_DEFUN(FPTOOLS_O_BINARY,
405 AC_REQUIRE([AC_PROG_CC])
406 AC_MSG_CHECKING(whether we can open files in binary mode)
407 AC_CACHE_VAL(fptools_cv_have_o_binary,
416 fptools_cv_have_o_binary=yes,
417 fptools_cv_have_o_binary=no)
420 AC_MSG_RESULT($fptools_cv_have_o_binary)
421 if test "$fptools_cv_have_o_binary" = yes; then
422 AC_DEFINE(HAVE_O_BINARY)
426 dnl *** Which one comes first, .text or .data? ***
428 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
429 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
431 int f() { return 1; }
433 int main() { return ((char*)&f > (char*)&i); }
436 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no)])
437 if test "$fptools_cv_code_bef_data" = yes; then
438 AC_DEFINE(CODE_BEFORE_DATA)
442 dnl *** Helper function **
444 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
446 dnl *** What's the end-of-text-section marker called? ***
448 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
449 [AC_CACHE_CHECK([for end of text section marker], fptools_cv_end_of_text,
452 for i in etext _etext __etext; do
453 FPTOOLS_IN_SCOPE($i,$i,fptools_cv_end_of_text)
454 if test "$fptools_cv_end_of_text" = yes; then
455 AC_DEFINE(TEXT_SECTION_END_MARKER, $i)
460 if test "$not_done"; then
461 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_cv_end_of_text);
462 if test "$fptools_cv_end_of_text" = yes; then
463 AC_DEFINE(TEXT_SECTION_END_MARKER, etext asm("etext"))
465 AC_DEFINE(TEXT_SECTION_END_MARKER, dunno_what_it_is)
470 dnl *** What's the end-of-data-section marker called? ***
472 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
473 [AC_CACHE_CHECK([for end of data section marker], fptools_cv_end_of_data,
476 for i in end _end __end; do
477 FPTOOLS_IN_SCOPE($i,$i,fptools_cv_end_of_data)
478 if test "$fptools_cv_end_of_data" = yes; then
479 AC_DEFINE(DATA_SECTION_END_MARKER, $i)
484 if test "$not_done"; then
485 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_cv_end_of_data);
486 if test "$fptools_cv_end_of_data" = yes; then
487 AC_DEFINE(DATA_SECTION_END_MARKER, end asm("end"))
489 AC_DEFINE(DATA_SECTION_END_MARKER, dunno_what_it_is)