[project @ 1998-08-16 16:25:21 by sof]
[ghc-hetmet.git] / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.26 1998/08/16 16:25:21 sof Exp $
2 dnl 
3 dnl Extra autoconf macros for the Glasgow fptools
4 dnl
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.
8
9 dnl
10 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
11 dnl has `long'..)
12 dnl 
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>
17 # include <time.h>
18 #else
19 # if HAVE_SYS_TIME_H
20 #  include <sys/time.h>
21 # else
22 #  include <time.h>
23 # endif
24 #endif
25
26 extern time_t timezone;
27 ],
28 [int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
29 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
30 ])
31
32 dnl *** Is altzone available? ***
33 dnl 
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>
38 # include <time.h>
39 #else
40 # if HAVE_SYS_TIME_H
41 #  include <sys/time.h>
42 # else
43 #  include <time.h>
44 # endif
45 #endif
46 ], [return altzone;], 
47 fptools_cv_altzone=yes, fptools_cv_altzone=no)])
48 if test "$fptools_cv_altzone" = yes; then
49   AC_DEFINE(HAVE_ALTZONE)
50 fi
51 ])
52
53 dnl ** check for leading underscores in symbol names
54 dnl 
55 dnl Test for determining whether symbol names have a leading
56 dnl underscore.
57 dnl 
58 dnl We assume that they _haven't_ if anything goes wrong.
59 dnl
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,
63
64 dnl
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?!?
67 dnl
68 changequote(<<, >>)dnl
69 <<
70 case $HostPlatform in
71 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
72 *) >>
73 changequote([, ])dnl
74 AC_TRY_RUN([#ifdef HAVE_NLIST_H
75 #include <nlist.h>
76 changequote(<<, >>)dnl
77 <<
78 struct nlist xYzzY[] = {{"_xYzzY", 0},{0}};
79 #endif
80
81 main(argc, argv)
82 int argc;
83 char **argv;
84 {
85 #ifdef HAVE_NLIST_H
86     if(nlist(argv[0], xYzzY) == 0 && xYzzY[0].n_value != 0)
87         exit(0);>>
88 changequote([, ])dnl
89 #endif
90     exit(1);
91 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
92 ;;
93 esac);
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);;
98 esac
99 ])
100
101 dnl
102 dnl Check for Happy and version.
103 dnl
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 |
109 changequote(, )dnl
110                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
111 changequote([, ])dnl
112 else
113    fptools_cv_happy_version="";
114 fi;
115 if expr "$fptools_cv_happy_version" "<" 1.4 > /dev/null 2>&1; then
116    echo
117    echo "Happy version 1.4 or later is required to compile GHC."
118    exit 1;
119 fi;
120 ])
121 HappyVersion=$ac_cv_happy_version;
122 AC_SUBST(HappyVersion)
123 ])
124
125 dnl
126 dnl What's the best way of doing context diffs?
127 dnl
128 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
129 dnl
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
133 echo foo > conftest2
134 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
135     fptools_cv_context_diffs='diff -C 1'
136 else
137     if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
138         fptools_cv_context_diffs='diff -c1'
139     else
140         echo "Can't figure out how to do context diffs."
141         echo "Neither \`diff -C 1' nor \`diff -c1' works."
142         exit 1
143     fi
144 fi
145 rm -f conftest1 conftest2
146 ])
147 ContextDiffCmd=$fptools_cv_context_diffs
148 AC_SUBST(ContextDiffCmd)
149 ])
150
151 dnl
152 dnl Finding the Right Yacc
153 dnl
154 AC_DEFUN(FPTOOLS_PROG_YACCY,
155 [AC_PROG_YACC
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
165         else
166            echo "I'm assuming the worst...no parser generator at all"
167            ac_cv_prog_yacc=:
168         fi
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"
172         ac_cv_prog_yacc=:
173     else
174         ac_cv_prog_yacc=$YACC
175     fi
176     rm -fr conftest*
177 ])
178 else
179     ac_cv_prog_yacc=$YACC
180 fi
181 YaccCmd=$ac_cv_prog_yacc
182 AC_SUBST(YaccCmd)
183 ])
184
185 dnl *** Checking for ar and its arguments + whether we need ranlib.
186 dnl
187 dnl ArCmd and RANLIB are AC_SUBST'ed
188 dnl 
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"
193     exit 1;
194 fi
195 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
196     ArCmd="$ArCmd clqs"
197     NeedRanLib=''
198 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
199     ArCmd="$ArCmd cqs"
200     NeedRanLib=''
201 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
202     ArCmd="$ArCmd clq"
203     NeedRanLib='YES'
204 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
205     ArCmd="$ArCmd cq"
206     NeedRanLib='YES'
207 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
208     ArCmd="$ArCmd cq"
209     NeedRanLib='YES'
210 else
211     echo "I can't figure out how to use your $ArCmd"
212     exit 1
213 fi
214 rm -rf conftest*
215 test -n "$ArCmd" && test -n "$verbose" && echo "        setting ArCmd to $ArCmd"
216 AC_SUBST(ArCmd)
217 if test -z "$NeedRanLib"; then
218     RANLIB=':'
219     test -n "$verbose" && echo "        setting RANLIB to $RANLIB"
220     AC_SUBST(RANLIB)
221 else
222     AC_PROG_RANLIB
223 fi
224 ])
225
226 dnl
227 dnl AC_SHEBANG_PERL - can we she-bang perl?
228 dnl
229 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
230 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
231 [echo "#!$PerlCmd"'
232 exit $1;
233 ' > conftest
234 chmod u+x conftest
235 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
236 if test $? -ne 69; then
237    fptools_cv_shebang_perl=yes
238 else
239    fptools_cv_shebang_perl=no
240 fi
241 rm -f conftest
242 ])])
243
244 dnl
245 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
246 dnl *Must* be called after AC_PROG_CC
247 dnl
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
251     echo ''
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'
255 else
256 changequote(, )dnl
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' `"
258 changequote([, ])dnl
259     if test `eval $cmd_string 2>/dev/null` != "1"; then
260         echo ''
261         echo "I'm not sure if your version of gcc will work,"
262         echo "but it's worth a shot, eh?"
263     fi
264     fptools_cv_have_gcc='yes'
265 fi
266 ])
267 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
268 AC_SUBST(HaveGcc)
269 ])
270
271 dnl
272 dnl FPTOOLS_PROG_GNUCPP gathers the path to the cpp that the
273 dnl gcc driver calls upon.
274 dnl
275 dnl Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
276 dnl
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
280         echo > conftest.c
281         gcc -v -E conftest.c >/dev/null 2>conftest.out
282         # \x5c = backslash
283         echo 'tr/\x5c/\//; /(\S+\/cpp)/ && print "[$]1";' > conftest.pl
284         fptools_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
285         rm -fr conftest*
286  else
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
293  fi
294 ])
295 GNUCPP=$fptools_cv_gnu_cpp
296 RAWCPP="$GNUCPP -traditional"
297 AC_SUBST(GNUCPP)
298 AC_SUBST(RAWCPP)
299 ])
300
301 dnl Small feature test for perl version. Assumes PerlCmd
302 dnl contains path to perl binary
303 dnl
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
308       echo "
309 ************************************************************************
310 Uh-oh...looks like you have Perl 4.035.
311
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
316 any Info files :-)
317 ************************************************************************
318 "
319    fi
320 else
321    if grep "version 5" conftest.out >/dev/null 2>&1; then
322       :
323    else
324      echo "I'm not sure if your version of perl will work,"
325      echo "but it's worth a shot, eh?"
326    fi
327 fi
328 rm -fr conftest*
329 ])
330
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)
334
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
344 changequote([, ])dnl
345 AC_MSG_CHECKING(alignment of $1)
346 AC_CACHE_VAL(AC_CV_NAME,
347 [AC_TRY_RUN([
348 #include <stdio.h>
349 #if HAVE_STDDEF_H
350 #include <stddef.h>
351 #endif
352 #ifndef offsetof
353 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
354 #endif
355 int
356 main()
357 {
358   FILE *f=fopen("conftestval", "w");
359   if (!f) exit(1);
360   fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
361   exit(0);
362 }],
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
372 ])
373
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++)
377 dnl
378 dnl    If the C compiler supports `long long' types,
379 dnl    define `HAVE_LONG_LONG'.
380 dnl
381 AC_DEFUN(FPTOOLS_C_LONG_LONG,
382 [
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,
386 [
387 AC_LANG_SAVE
388 AC_LANG_C
389 AC_TRY_COMPILE(,[long long a;],
390 fptools_cv_have_long_long=yes,
391 fptools_cv_have_long_long=no)
392 AC_LANG_RESTORE
393 ])
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)
397 fi
398 ])
399
400 dnl *** Can we open files in binary mode? ***
401 dnl 
402 AC_DEFUN(FPTOOLS_O_BINARY,
403 [
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,
407 [
408 AC_LANG_SAVE
409 AC_LANG_C
410 AC_TRY_COMPILE(,[#include <fcntl.h>
411 x = O_BINARY;],
412 fptools_cv_have_o_binary=yes,
413 fptools_cv_have_o_binary=no)
414 AC_LANG_RESTORE
415 ])
416 AC_MSG_RESULT($fptools_cv_have_o_binary)
417 if test "$fptools_cv_have_o_binary" = yes; then
418 AC_DEFINE(HAVE_O_BINARY)
419 fi
420 ])