1 dnl $Id: aclocal.m4,v 1.27 1998/08/16 16:45:37 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';;
74 AC_TRY_RUN([#ifdef HAVE_NLIST_H
76 changequote(<<, >>)dnl
78 struct nlist xYzzY[] = {{"_xYzzY", 0},{0}};
86 if(nlist(argv[0], xYzzY) == 0 && xYzzY[0].n_value != 0)
91 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
94 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
95 AC_SUBST(LeadingUnderscore)
96 case $LeadingUnderscore in
97 YES) AC_DEFINE(LEADING_UNDERSCORE);;
102 dnl Check for Happy and version.
104 AC_DEFUN(FPTOOLS_HAPPY,
105 [AC_PATH_PROG(HappyCmd,happy)
106 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
107 [if test x"$HappyCmd" != x; then
108 fptools_cv_happy_version="`$HappyCmd -v |
110 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
113 fptools_cv_happy_version="";
115 if expr "$fptools_cv_happy_version" "<" 1.4 > /dev/null 2>&1; then
117 echo "Happy version 1.4 or later is required to compile GHC."
121 HappyVersion=$ac_cv_happy_version;
122 AC_SUBST(HappyVersion)
126 dnl What's the best way of doing context diffs?
128 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
130 AC_DEFUN(FPTOOLS_PROG_DIFF,
131 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
132 [echo foo > conftest1
134 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
135 fptools_cv_context_diffs='diff -C 1'
137 if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
138 fptools_cv_context_diffs='diff -c1'
140 echo "Can't figure out how to do context diffs."
141 echo "Neither \`diff -C 1' nor \`diff -c1' works."
145 rm -f conftest1 conftest2
147 ContextDiffCmd=$fptools_cv_context_diffs
148 AC_SUBST(ContextDiffCmd)
152 dnl Finding the Right Yacc
154 AC_DEFUN(FPTOOLS_PROG_YACCY,
156 if test "$YACC" = "yacc"; then
157 AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
158 [AC_CHECK_PROG(WhatCmd, what, what, :)
159 $WhatCmd $YACC > conftest.out
160 if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
161 echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
162 if test -f /usr/lang/yacc; then
163 echo "I'm going to use /usr/lang/yacc instead"
164 ac_cv_prog_yacc=/usr/lang/yacc
166 echo "I'm assuming the worst...no parser generator at all"
169 elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
170 echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
171 echo "I'm assuming the worst...no parser generator at all"
174 ac_cv_prog_yacc=$YACC
179 ac_cv_prog_yacc=$YACC
181 YaccCmd=$ac_cv_prog_yacc
185 dnl *** Checking for ar and its arguments + whether we need ranlib.
187 dnl ArCmd and RANLIB are AC_SUBST'ed
189 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
190 [AC_PATH_PROG(ArCmd,ar)
191 if test -z "$ArCmd"; then
192 echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
195 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
198 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
201 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
204 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
207 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
211 echo "I can't figure out how to use your $ArCmd"
215 test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
217 if test -z "$NeedRanLib"; then
219 test -n "$verbose" && echo " setting RANLIB to $RANLIB"
227 dnl AC_SHEBANG_PERL - can we she-bang perl?
229 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
230 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
235 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
236 if test $? -ne 69; then
237 fptools_cv_shebang_perl=yes
239 fptools_cv_shebang_perl=no
245 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
246 dnl *Must* be called after AC_PROG_CC
248 AC_DEFUN(FPTOOLS_HAVE_GCC,
249 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
250 [if test -z "$GCC"; then
252 echo "You would be better off with gcc"
253 echo "Perhaps it is already installed, but not in your PATH?"
254 fptools_cv_have_gcc='no'
257 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' `"
259 if test `eval $cmd_string 2>/dev/null` != "1"; then
261 echo "I'm not sure if your version of gcc will work,"
262 echo "but it's worth a shot, eh?"
264 fptools_cv_have_gcc='yes'
267 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
272 dnl FPTOOLS_PROG_GNUCPP gathers the path to the cpp that the
273 dnl gcc driver calls upon.
275 dnl Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
277 AC_DEFUN(FPTOOLS_PROG_GNUCPP,
278 [AC_CACHE_CHECK([how to invoke GNU cpp directly], fptools_cv_gnu_cpp,
279 [if test "$HaveGcc" = "YES"; then
281 gcc -v -E conftest.c >/dev/null 2>conftest.out
283 echo 'tr/\x5c/\//; /(\S+\/)cpp/ && print "[$]{1}cpp -iprefix [$]1";' > conftest.pl
284 fptools_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
287 # We need to be able to invoke CPP directly, preferably
288 # with input from stdin (mkdependHS and hscpp depend on
289 # this at the moment).
290 # Take a guess at what to use, this probably won't work.
291 echo Warning: GNU cpp not found, using $CPP
292 fptools_cv_gnu_cpp = $CPP
295 GNUCPP=$fptools_cv_gnu_cpp
296 RAWCPP="$GNUCPP -traditional"
301 dnl Small feature test for perl version. Assumes PerlCmd
302 dnl contains path to perl binary
304 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
305 [$PerlCmd -v >conftest.out 2>&1
306 if grep "version 4" conftest.out >/dev/null 2>&1; then
307 if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
309 ************************************************************************
310 Uh-oh...looks like you have Perl 4.035.
312 Perl version 4.035 has a bug to do with recursion that will bite if
313 you run the lit2texi script, when making Info files from
314 literate files of various sorts. Either use perl5, the last version of perl4
315 (4.036), or an older version (e.g., perl 4.019). Failing that, don't create
317 ************************************************************************
321 if grep "version 5" conftest.out >/dev/null 2>&1; then
324 echo "I'm not sure if your version of perl will work,"
325 echo "but it's worth a shot, eh?"
331 dnl ** figure out the alignment restriction of a type
332 dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
333 dnl so we can't call REQUIRE)
335 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
336 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
337 [changequote(<<, >>)dnl
338 dnl The name to #define.
339 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
340 dnl The cache variable name.
341 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
342 dnl The name of the corresponding size.
343 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
345 AC_MSG_CHECKING(alignment of $1)
346 AC_CACHE_VAL(AC_CV_NAME,
353 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
358 FILE *f=fopen("conftestval", "w");
360 fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
363 AC_CV_NAME=`cat conftestval`,
364 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
365 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
366 AC_MSG_RESULT($AC_CV_NAME)
367 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
368 AC_PROVIDE($AC_TYPE_NAME)
369 undefine([AC_TYPE_NAME])dnl
370 undefine([AC_CV_NAME])dnl
371 undefine([AC_CV_SIZEOF_NAME])dnl
374 dnl ** figure out whether C compiler supports 'long long's
375 dnl (Closely based on Andreas Zeller's macro for testing
376 dnl for this under C++)
378 dnl If the C compiler supports `long long' types,
379 dnl define `HAVE_LONG_LONG'.
381 AC_DEFUN(FPTOOLS_C_LONG_LONG,
383 AC_REQUIRE([AC_PROG_CC])
384 AC_MSG_CHECKING(whether ${CC} supports long long types)
385 AC_CACHE_VAL(fptools_cv_have_long_long,
389 AC_TRY_COMPILE(,[long long a;],
390 fptools_cv_have_long_long=yes,
391 fptools_cv_have_long_long=no)
394 AC_MSG_RESULT($fptools_cv_have_long_long)
395 if test "$fptools_cv_have_long_long" = yes; then
396 AC_DEFINE(HAVE_LONG_LONG)
400 dnl *** Can we open files in binary mode? ***
402 AC_DEFUN(FPTOOLS_O_BINARY,
404 AC_REQUIRE([AC_PROG_CC])
405 AC_MSG_CHECKING(whether we can open files in binary mode)
406 AC_CACHE_VAL(fptools_cv_have_o_binary,
415 fptools_cv_have_o_binary=yes,
416 fptools_cv_have_o_binary=no)
419 AC_MSG_RESULT($fptools_cv_have_o_binary)
420 if test "$fptools_cv_have_o_binary" = yes; then
421 AC_DEFINE(HAVE_O_BINARY)