[project @ 2001-04-20 10:56:12 by michaelw]
[ghc-hetmet.git] / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.71 2001/04/20 10:56:12 michaelw 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 Is timezone around? (in a header file)
11 dnl 
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>
16 # include <time.h>
17 #else
18 # if HAVE_SYS_TIME_H
19 #  include <sys/time.h>
20 # else
21 #  include <time.h>
22 # endif
23 #endif
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)
28 fi
29 ])
30
31 dnl
32 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
33 dnl has `long'..)
34 dnl 
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>
39 # include <time.h>
40 #else
41 # if HAVE_SYS_TIME_H
42 #  include <sys/time.h>
43 # else
44 #  include <time.h>
45 # endif
46 #endif
47
48 extern time_t timezone; 
49 ],
50 [int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
51 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
52 ])
53
54 dnl *** Is altzone available? ***
55 dnl 
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>
60 # include <time.h>
61 #else
62 # if HAVE_SYS_TIME_H
63 #  include <sys/time.h>
64 # else
65 #  include <time.h>
66 # endif
67 #endif
68 ], [return altzone;], 
69 fptools_cv_altzone=yes, fptools_cv_altzone=no)])
70 if test "$fptools_cv_altzone" = yes; then
71   AC_DEFINE(HAVE_ALTZONE)
72 fi
73 ])
74
75
76 dnl *** Does libc contain GNU regex? ***
77 dnl 
78 AC_DEFUN(FPTOOLS_REGEX_IN_LIBC,
79 [AC_CACHE_CHECK([for GNU regex in libc], fptools_cv_have_regex,
80 [AC_TRY_LINK([#if HAVE_UNISTD_H
81 #include <unistd.h>
82 #endif
83 #include <regex.h>
84 ],[ struct re_pattern_buffer patbuf; re_compile_pattern("",0,&patbuf); ],
85 fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
86 if test "$fptools_cv_have_regex" = yes; then
87         HaveRegex=YES
88 else
89         HaveRegex=NO
90 fi
91 AC_SUBST(HaveRegex)
92 ])
93
94
95 dnl ** check for leading underscores in symbol names
96 dnl 
97 dnl Test for determining whether symbol names have a leading
98 dnl underscore.
99 dnl 
100 dnl We assume that they _haven't_ if anything goes wrong.
101 dnl
102 dnl Some nlist implementations seem to try to be compatible by ignoring
103 dnl a leading underscore sometimes (eg. FreeBSD).  We therefore have
104 dnl to work around this by checking for *no* leading underscore first.
105 dnl Sigh.  --SDM
106 dnl
107 AC_DEFUN(FPTOOLS_UNDERSCORE,
108 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
109 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
110
111 dnl
112 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
113 dnl but symbol table listings shows none. What is going on here?!?
114 dnl
115 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
116 dnl the underscoredness of that "platform"
117 changequote(<<, >>)dnl
118 <<
119 case $HostPlatform in
120 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
121 *cygwin32) fptools_cv_lead_uscore='yes';;
122 *mingw32) fptools_cv_lead_uscore='yes';;
123 *) >>
124 changequote([, ])dnl
125 AC_TRY_RUN([#ifdef HAVE_NLIST_H
126 #include <nlist.h>
127 changequote(<<, >>)dnl
128 <<
129 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
130 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
131 #endif
132
133 main(argc, argv)
134 int argc;
135 char **argv;
136 {
137 #ifdef HAVE_NLIST_H
138     if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
139         exit(1);
140     if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
141         exit(0);>>
142 changequote([, ])dnl
143 #endif
144     exit(1);
145 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
146 ;;
147 esac);
148 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
149 AC_SUBST(LeadingUnderscore)
150 case $LeadingUnderscore in
151 YES) AC_DEFINE(LEADING_UNDERSCORE);;
152 esac
153 ])
154
155 dnl
156 dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
157 dnl                            ACTION-IF-TRUE [, ACTION-IF-FALSE])
158 dnl
159 dnl compare versions field-wise (separator is '.')
160 dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
161 dnl
162 dnl quite shell-independant and SUSv2 compliant code
163 dnl
164 dnl NOTE: the loop could be unrolled within autoconf, but the
165 dnl       macro code would be a) longer and b) harder to debug... ;)
166 dnl
167 AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
168 [if ( IFS=".";
169       a="[$1]";  b="[$3]";
170       while test -n "$a$b"
171       do
172               set -- [$]a;  h1="[$]1";  shift 2>/dev/null;  a="[$]*"
173               set -- [$]b;  h2="[$]1";  shift 2>/dev/null;  b="[$]*"
174               test -n "[$]h1" || h1=0;  test -n "[$]h2" || h2=0
175               test [$]{h1} -eq [$]{h2} || break
176       done
177       test [$]{h1} [$2] [$]{h2}
178     )
179 then ifelse([$4],,[:],[
180   $4])
181 ifelse([$5],,,
182 [else
183   $5])
184 fi
185 ])])dnl
186
187
188 dnl
189 dnl Check for Happy and version.  If we're building GHC, then we need
190 dnl at least Happy version 1.9.  If there's no installed Happy, we look
191 dnl for a happy source tree and point the build system at that instead.
192 dnl
193 AC_DEFUN(FPTOOLS_HAPPY,
194 [
195 if test -d $srcdir/happy; then
196    SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
197 fi
198 AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
199 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
200 changequote(, )dnl
201 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
202    fptools_cv_happy_version=`grep '^ProjectVersion[     ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
203 elif test x"$HappyCmd" != x; then
204    fptools_cv_happy_version="`$HappyCmd -v |
205                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
206 else
207    fptools_cv_happy_version="";
208 fi;
209 changequote([, ])dnl
210 ])
211 if test -d $srcdir/ghc; then
212   FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9],
213   [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])dnl
214 fi
215 HappyVersion=$fptools_cv_happy_version;
216 AC_SUBST(HappyVersion)
217 ])
218
219 dnl
220 dnl What's the best way of doing context diffs?
221 dnl
222 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
223 dnl
224 AC_DEFUN(FPTOOLS_PROG_DIFF,
225 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
226 [echo foo > conftest1
227 echo foo > conftest2
228 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
229     fptools_cv_context_diffs='diff -C 1'
230 else
231     if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
232         fptools_cv_context_diffs='diff -c1'
233     else
234         echo "Can't figure out how to do context diffs."
235         echo "Neither \`diff -C 1' nor \`diff -c1' works."
236         exit 1
237     fi
238 fi
239 rm -f conftest1 conftest2
240 ])
241 ContextDiffCmd=$fptools_cv_context_diffs
242 AC_SUBST(ContextDiffCmd)
243 ])
244
245 dnl
246 dnl Finding the Right Yacc
247 dnl
248 AC_DEFUN(FPTOOLS_PROG_YACCY,
249 [AC_PROG_YACC
250 if test "$YACC" = "yacc"; then
251    AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
252    [AC_CHECK_PROG(WhatCmd, what, what, :)
253     $WhatCmd $YACC > conftest.out
254     if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
255         echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
256         if test -f /usr/lang/yacc; then
257            echo "I'm going to use /usr/lang/yacc instead"
258            ac_cv_prog_yacc=/usr/lang/yacc
259         else
260            echo "I'm assuming the worst...no parser generator at all"
261            ac_cv_prog_yacc=:
262         fi
263     elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
264         echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
265         echo "I'm assuming the worst...no parser generator at all"
266         ac_cv_prog_yacc=:
267     else
268         ac_cv_prog_yacc=$YACC
269     fi
270     rm -fr conftest*
271 ])
272 else
273     ac_cv_prog_yacc=$YACC
274 fi
275 YaccCmd=$ac_cv_prog_yacc
276 AC_SUBST(YaccCmd)
277 ])
278
279 dnl *** Checking for ar and its arguments + whether we need ranlib.
280 dnl
281 dnl ArCmd and RANLIB are AC_SUBST'ed
282 dnl 
283 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
284 [AC_PATH_PROG(ArCmd,ar)
285 if test -z "$ArCmd"; then
286     echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
287     exit 1;
288 fi
289 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
290     ArCmd="$ArCmd clqs"
291     NeedRanLib=''
292 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
293     ArCmd="$ArCmd cqs"
294     NeedRanLib=''
295 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
296     ArCmd="$ArCmd clq"
297     NeedRanLib='YES'
298 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
299     ArCmd="$ArCmd cq"
300     NeedRanLib='YES'
301 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
302     ArCmd="$ArCmd cq"
303     NeedRanLib='YES'
304 else
305     echo "I can't figure out how to use your $ArCmd"
306     exit 1
307 fi
308 rm -rf conftest*
309 test -n "$ArCmd" && test -n "$verbose" && echo "        setting ArCmd to $ArCmd"
310 AC_SUBST(ArCmd)
311 if test -z "$NeedRanLib"; then
312     RANLIB=':'
313     test -n "$verbose" && echo "        setting RANLIB to $RANLIB"
314     AC_SUBST(RANLIB)
315 else
316     AC_PROG_RANLIB
317 fi
318 ])
319
320 dnl
321 dnl AC_SHEBANG_PERL - can we she-bang perl?
322 dnl
323 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
324 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
325 [echo "#!$PerlCmd"'
326 exit $1;
327 ' > conftest
328 chmod u+x conftest
329 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
330 if test $? -ne 69; then
331    fptools_cv_shebang_perl=yes
332 else
333    fptools_cv_shebang_perl=no
334 fi
335 rm -f conftest
336 ])])
337
338 dnl
339 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
340 dnl *Must* be called after AC_PROG_CC
341 dnl
342 AC_DEFUN(FPTOOLS_HAVE_GCC,
343 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
344 [if test -z "$GCC"; then
345     echo ''
346     echo "You would be better off with gcc"
347     echo "Perhaps it is already installed, but not in your PATH?"
348     fptools_cv_have_gcc='no'
349 else
350 changequote(, )dnl
351     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' `"
352 changequote([, ])dnl
353     if test `eval $cmd_string 2>/dev/null` != "1"; then
354         echo ''
355         echo "I'm not sure if your version of gcc will work,"
356         echo "but it's worth a shot, eh?"
357     fi
358     fptools_cv_have_gcc='yes'
359 fi
360 ])
361 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
362 AC_SUBST(HaveGcc)
363 ])
364
365 dnl Small feature test for perl version. Assumes PerlCmd
366 dnl contains path to perl binary
367 dnl
368 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
369 [$PerlCmd -v >conftest.out 2>&1
370 if grep "version 5" conftest.out >/dev/null 2>&1; then
371    :
372 else
373   if grep "v5.6" conftest.out >/dev/null 2>&1; then
374      :
375   else
376      if grep "version 6" conftest.out >/dev/null 2>&1; then
377         :
378      else
379        echo "Your version of perl probably won't work."
380      fi
381   fi
382 fi
383 rm -fr conftest*
384 ])
385
386 dnl
387 dnl FPTOOLS_GHC_VERSION(version)
388 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
389 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
390 dnl
391 dnl Test for version of installed ghc.  Uses $GHC.
392 dnl [original version pinched from c2hs]
393 dnl
394 AC_DEFUN(FPTOOLS_GHC_VERSION,
395 [define([FPTOOLS_CV_GHC_VERSION], [fptools_cv_ghc_version])dnl
396 AC_CACHE_CHECK([version of ghc], FPTOOLS_CV_GHC_VERSION, [dnl
397 ${WithGhc-ghc} --version > conftestghc 2>&1
398   cat conftestghc >&AC_FD_CC
399 dnl `Useless Use Of cat' award...
400 changequote(<<, >>)dnl
401   FPTOOLS_CV_GHC_VERSION=`cat conftestghc | sed -n -e 's/, patchlevel *\([0-9]\)/.\1/;s/.* version \([0-9][0-9.]*\).*/\1/p'`
402 changequote([, ])dnl
403   rm -fr conftest*
404   if test "[$]FPTOOLS_CV_GHC_VERSION" = ""
405   then
406     FPTOOLS_CV_GHC_VERSION='unknown'
407   fi])
408 changequote(<<, >>)dnl
409 FPTOOLS_CV_GHC_VERSION<<_major>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^\([0-9]\).*/\1/'`
410 FPTOOLS_CV_GHC_VERSION<<_minor>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^[0-9]\.\([0-9]*\).*/\1/'`
411 FPTOOLS_CV_GHC_VERSION<<_pl>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -n -e 's/^[0-9]\.[0-9]*\.\([0-9]*\)/\1/p'`
412 changequote([, ])dnl
413 if test "[$]FPTOOLS_CV_GHC_VERSION[_pl]" = ""
414 then
415   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor]"
416   FPTOOLS_CV_GHC_VERSION[_pl]="0"
417 else
418   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor].[$]FPTOOLS_CV_GHC_VERSION[_pl]"
419 fi
420 ifelse($#, [1], [dnl
421 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
422 ], $#, [2], [dnl
423 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
424 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
425 ], $#, [3], [dnl
426 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
427 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
428 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
429 ], $#, [4], [dnl
430 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
431 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
432 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
433 [$4]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
434 ], [AC_MSG_ERROR([wrong number of arguments to [$0]])])dnl
435 undefine([FPTOOLS_CV_GHC_VERSION])dnl
436 ])dnl
437
438
439 dnl ** figure out the alignment restriction of a type
440 dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
441 dnl     so we can't call REQUIRE)
442
443 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
444 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
445 [changequote(<<, >>)dnl
446 dnl The name to #define.
447 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
448 dnl The cache variable name.
449 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
450 dnl The name of the corresponding size.
451 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
452 changequote([, ])dnl
453 AC_MSG_CHECKING(alignment of $1)
454 AC_CACHE_VAL(AC_CV_NAME,
455 [AC_TRY_RUN([
456 #include <stdio.h>
457 #if HAVE_STDDEF_H
458 #include <stddef.h>
459 #endif
460 #ifndef offsetof
461 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
462 #endif
463 int
464 main()
465 {
466   FILE *f=fopen("conftestval", "w");
467   if (!f) exit(1);
468   fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
469   exit(0);
470 }],
471 AC_CV_NAME=`cat conftestval`,
472 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
473 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
474 AC_MSG_RESULT($AC_CV_NAME)
475 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
476 AC_PROVIDE($AC_TYPE_NAME)
477 undefine([AC_TYPE_NAME])dnl
478 undefine([AC_CV_NAME])dnl
479 undefine([AC_CV_SIZEOF_NAME])dnl
480 ])
481
482 dnl ** Map an arithmetic C type to a Haskell type.
483 dnl    Based on autconf's AC_CHECK_SIZEOF.
484
485 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
486 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
487 [changequote(<<, >>)dnl
488 dnl The name to #define.
489 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
490 dnl The cache variable name.
491 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
492 changequote([, ])dnl
493 AC_MSG_CHECKING(Haskell type for $1)
494 AC_CACHE_VAL(AC_CV_NAME,
495 [AC_TRY_RUN([#include <stdio.h>
496 #include <stddef.h>
497 #ifdef HAVE_SIGNAL_H
498 #include <signal.h>
499 #endif
500 #ifdef HAVE_TIME_H
501 #include <time.h>
502 #endif
503 #ifdef HAVE_GL_GL_H
504 #include <GL/gl.h>
505 #endif
506
507 typedef $1 testing;
508
509 main() {
510   FILE *f=fopen("conftestval", "w");
511   if (!f) exit(1);
512   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
513     fprintf(f, "%s%d\n",
514            ((testing)(-1) < (testing)0) ? "Int" : "Word",
515            sizeof(testing)*8);
516   } else {
517     fprintf(f,"%s\n",
518            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
519            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
520   }
521   fclose(f);
522   exit(0);
523 }], AC_CV_NAME=`cat conftestval`,
524 ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
525 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
526 AC_MSG_RESULT($AC_CV_NAME)
527 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
528 undefine([AC_TYPE_NAME])dnl
529 undefine([AC_CV_NAME])dnl
530 ])
531
532 dnl ** figure out whether C compiler supports 'long long's
533 dnl    (Closely based on Andreas Zeller's macro for testing
534 dnl     for this under C++)
535 dnl
536 dnl    If the C compiler supports `long long' types,
537 dnl    define `HAVE_LONG_LONG'.
538 dnl
539 AC_DEFUN(FPTOOLS_C_LONG_LONG,
540 [
541 AC_REQUIRE([AC_PROG_CC])
542 AC_MSG_CHECKING(whether ${CC} supports long long types)
543 AC_CACHE_VAL(fptools_cv_have_long_long,
544 [
545 AC_LANG_SAVE
546 AC_LANG_C
547 AC_TRY_COMPILE(,[long long a;],
548 fptools_cv_have_long_long=yes,
549 fptools_cv_have_long_long=no)
550 AC_LANG_RESTORE
551 ])
552 AC_MSG_RESULT($fptools_cv_have_long_long)
553 if test "$fptools_cv_have_long_long" = yes; then
554 AC_DEFINE(HAVE_LONG_LONG)
555 fi
556 ])
557
558 dnl ** Obtain the value of a C constant.
559 dnl    The value will be `(-1)' if the constant is undefined.
560 dnl
561 dnl    This is set up so that the argument can be a shell variable.
562 dnl
563 AC_DEFUN(FPTOOLS_CHECK_CCONST,
564 [
565 eval "def_name=CCONST_$1"
566 eval "cv_name=ac_cv_cconst_$1"
567 AC_MSG_CHECKING(value of $1)
568 AC_CACHE_VAL($cv_name,
569 [AC_TRY_RUN([#include <stdio.h>
570 #include <errno.h>
571 main()
572 {
573   FILE *f=fopen("conftestval", "w");
574   if (!f) exit(1);
575   fprintf(f, "%d\n", $1);
576   exit(0);
577 }], 
578 eval "$cv_name=`cat conftestval`",
579 eval "$cv_name=-1",
580 ifelse([$2], , , eval "$cv_name=$2"))])dnl
581 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
582 AC_MSG_RESULT($fptools_check_cconst_result)
583 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
584 unset fptools_check_cconst_result
585 ])
586
587 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with 
588 dnl    spaces)
589 dnl
590 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
591 [for ac_const_name in $1
592 do
593 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
594 done
595 ])
596
597
598 dnl *** Can we open files in binary mode? ***
599 dnl 
600 AC_DEFUN(FPTOOLS_O_BINARY,
601 [
602 AC_REQUIRE([AC_PROG_CC])
603 AC_MSG_CHECKING(whether we can open files in binary mode)
604 AC_CACHE_VAL(fptools_cv_have_o_binary,
605 [
606 AC_LANG_SAVE
607 AC_LANG_C
608 AC_TRY_COMPILE(,
609 [#ifdef HAVE_FCNTL_H
610 #include <fcntl.h>
611 #endif
612 int x = O_BINARY;],
613 fptools_cv_have_o_binary=yes,
614 fptools_cv_have_o_binary=no)
615 AC_LANG_RESTORE
616 ])
617 AC_MSG_RESULT($fptools_cv_have_o_binary)
618 if test "$fptools_cv_have_o_binary" = yes; then
619 AC_DEFINE(HAVE_O_BINARY)
620 fi
621 ])
622
623 dnl *** Which one comes first, .text or .data? ***
624 dnl 
625 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
626 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
627 [AC_TRY_RUN([
628 int f() { return 1; }
629 int i;
630 int main() { return ((char*)&f > (char*)&i); }
631
632 ],
633 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
634 if test "$fptools_cv_code_bef_data" = yes; then
635   AC_DEFINE(CODE_BEFORE_DATA)
636 fi
637 ])
638
639 dnl *** Helper function **
640 dnl 
641 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
642
643 dnl *** What's the end-of-text-section marker called? ***
644 dnl
645 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
646 [AC_MSG_CHECKING([for end of text section marker])
647 not_done=1
648 for i in data_start _data_start etext _etext __etext; do
649   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
650   if test "$fptools_end_of_text" = yes; then
651    AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
652    AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
653    not_done=0
654    break
655   fi
656 done
657 if test "$not_done" = 1; then
658 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
659 if test "$fptools_end_of_text" = yes; then
660   AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
661   AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
662 else
663   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
664   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
665 fi
666 fi
667 AC_MSG_RESULT([$]fptools_cv_end_of_text)
668 ])
669
670 dnl *** What's the end-of-data-section marker called? ***
671 dnl
672 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
673 [AC_MSG_CHECKING([for end of data section marker])
674 not_done=1
675 for i in end _end __end; do
676   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
677   if test "$fptools_end_of_data" = yes; then
678    AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
679    AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
680    not_done=0
681    break
682   fi
683 done
684 if test "$not_done" = 1; then
685 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
686 if test "$fptools_end_of_data" = yes; then
687   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
688   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
689 else
690   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
691   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
692 fi
693 fi
694 AC_MSG_RESULT([$]fptools_cv_end_of_data)
695 ])
696
697
698
699 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
700
701 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
702
703 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
704 [
705 ac_save_LIBS="$LIBS"
706 LIBS=[$1];
707 cat > conftest.$ac_ext <<EOF
708 dnl This sometimes fails to find confdefs.h, for some reason.
709 dnl [#]line __oline__ "[$]0"
710 [#]line __oline__ "configure"
711 #include "confdefs.h"
712 [$2]
713 int t() { return 0; }
714 EOF
715 if AC_TRY_EVAL(ac_link); then
716   ifelse([$3], , :, [
717     LIBS="$ac_save_LIBS"
718     rm -rf conftest*
719     $3])
720   ifelse([$4], , , [else
721     LIBS="$ac_save_LIBS"
722     rm -rf conftest*
723     $4
724 ])dnl
725 fi
726 rm -f conftest*
727 ]
728 )
729
730 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
731
732 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
733
734 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
735 [AC_MSG_CHECKING([for $1])
736  AC_CACHE_VAL(ac_cv_flag_$1,
737    [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
738      eval "ac_cv_flag_$1=yes",
739      eval "ac_cv_flag_$1=no"
740    )]
741  )
742 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
743   AC_MSG_RESULT(yes)
744   LIBS="$2 $LIBS"
745   $4
746 else
747   AC_MSG_RESULT(no)
748   $5
749 fi
750 ])
751
752 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
753
754 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
755 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
756 [changequote(, )dnl
757   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
758  changequote([, ])dnl
759  AC_DEFINE_UNQUOTED($ac_tr_lib)
760 ],
761 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
762 [changequote(, )dnl
763   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
764  changequote([, ])dnl
765  AC_DEFINE_UNQUOTED($ac_tr_lib)
766 ],
767 []
768 )])]
769 )
770
771 dnl check for prototypes
772 dnl
773 AC_DEFUN(AC_C_PROTOTYPES,
774 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
775 [AC_TRY_COMPILE([
776 void foo(int);
777 void foo(i)
778 int i; { 
779 return;
780 }
781 ],
782 [int i;], 
783 ac_cv_prototypes=yes,
784 ac_cv_prototypes=no)])
785 if test "$ac_cv_prototypes" = yes; then
786 AC_DEFINE(HAVE_PROTOTYPES)
787 fi
788 ])
789
790 dnl ** Check which CATALOG file we have to use with DocBook SGML.
791 dnl
792 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
793 dnl
794 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
795 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
796 dnl is set to "no".  JADE is the jade executable and STYLESHEET
797 dnl a DocBook style sheet.
798 dnl
799 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
800 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
801 [
802 cat > conftest.sgml << EOF
803 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
804 <Article>
805 <ArtHeader>
806 <Title>Test</Title>
807 <Author><OtherName>Test</OtherName></Author>
808 <Address>Test</Address>
809 <PubDate>Test</PubDate>
810 </ArtHeader>
811 <Sect1><Title>Test</Title>
812 <Para>
813 Test.
814 </Para>
815 </Sect1>
816 </Article>
817 EOF
818 fptools_cv_sgml_catalog=no
819 for fptools_catalog in $4; do
820   ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
821   if AC_TRY_EVAL(ac_try); then
822     fptools_cv_sgml_catalog=[$]fptools_catalog
823     break
824   fi
825 done
826 ])
827 rm -rf conftest*
828 if test $fptools_cv_sgml_catalog != "no"; then
829   $1=$fptools_cv_sgml_catalog
830 fi
831 ])
832
833 dnl ######################################################################
834 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
835 dnl                     [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
836 dnl Search for a library defining FUNC, if it's not already available.
837 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
838 dnl specified.
839 dnl ######################################################################
840
841 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
842 [AC_PREREQ([2.13])
843 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
844 [ac_func_search_save_LIBS="$LIBS"
845 ac_cv_search_$2="no"
846 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
847 test "$ac_cv_search_$2" = "no" && for i in $3; do
848 LIBS="-l$i $6 $ac_func_search_save_LIBS"
849 AC_TRY_LINK([$1], [$2()],
850 [ac_cv_search_$2="-l$i"
851 break])
852 done
853 LIBS="$ac_func_search_save_LIBS"])
854 if test "$ac_cv_search_$2" != "no"; then
855   test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
856   $4
857 else :
858   $5
859 fi])
860
861 dnl ####################### -*- Mode: M4 -*- ###########################
862 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
863 dnl
864 dnl This file is free software; you can redistribute it and/or modify it
865 dnl under the terms of the GNU General Public License as published by
866 dnl the Free Software Foundation; either version 2 of the License, or
867 dnl (at your option) any later version.
868 dnl
869 dnl This file is distributed in the hope that it will be useful, but
870 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
871 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
872 dnl General Public License for more details.
873 dnl
874 dnl You should have received a copy of the GNU General Public License
875 dnl along with this file; if not, write to:
876 dnl
877 dnl   Free Software Foundation, Inc.
878 dnl   Suite 330
879 dnl   59 Temple Place
880 dnl   Boston, MA 02111-1307, USA.
881 dnl ####################################################################
882
883
884 dnl @synopsis FPTOOLS_CHECK_LIBM
885 dnl 
886 dnl Search for math library (typically -lm).
887 dnl
888 dnl The variable LIBM (which is not an output variable by default) is
889 dnl set to a value which is suitable for use in a Makefile (for example,
890 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
891 dnl
892 dnl @version 0.01 $Id: aclocal.m4,v 1.71 2001/04/20 10:56:12 michaelw Exp $
893 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
894
895 # FPTOOLS_CHECK_LIBM - check for math library
896 AC_DEFUN(FPTOOLS_CHECK_LIBM,
897 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
898 LIBM=
899 case "$host" in
900 *-*-beos* | *-*-macosx*)
901   # These system don't have libm
902   ;;
903 *-ncr-sysv4.3*)
904   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
905   AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
906   ;;
907 *)
908   AC_CHECK_LIB(m, main, LIBM="-lm")
909   ;;
910 esac
911 ])
912
913 dnl ######################################################################
914 dnl NOTE: Because of portability issues between different autoconf
915 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
916 dnl Furthermore, caching has been completely rewritten.
917 dnl ######################################################################
918
919 dnl ########################### -*- Mode: M4 -*- #######################
920 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
921 dnl
922 dnl This file is free software; you can redistribute it and/or modify it
923 dnl under the terms of the GNU General Public License as published by
924 dnl the Free Software Foundation; either version 2 of the License, or
925 dnl (at your option) any later version.
926 dnl
927 dnl This file is distributed in the hope that it will be useful, but
928 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
929 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
930 dnl General Public License for more details.
931 dnl
932 dnl You should have received a copy of the GNU General Public License
933 dnl along with this file; if not, write to:
934 dnl
935 dnl   Free Software Foundation, Inc.
936 dnl   Suite 330
937 dnl   59 Temple Place
938 dnl   Boston, MA 02111-1307, USA.
939 dnl ####################################################################
940
941 dnl @synopsis FPTOOLS_HAVE_OPENGL
942 dnl 
943 dnl Search for OpenGL.  We search first for Mesa (a GPL'ed version of
944 dnl OpenGL) before a vendor's version of OpenGL, unless we were
945 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
946 dnl
947 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
948 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
949 dnl "-lglut".
950 dnl
951 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
952 dnl be missing) are added to the shell output variable "GL_LIBS", along
953 dnl with any other libraries that are necessary to successfully link an
954 dnl OpenGL application (e.g. the X11 libraries).  Care has been taken to
955 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
956 dnl proper order.
957 dnl
958 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
959 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
960 dnl an OpenGL application.
961 dnl
962 dnl The following shell variable (which are not output variables) are
963 dnl also set to either "yes" or "no" (depending on which libraries were
964 dnl found) to help you determine exactly what was found.
965 dnl
966 dnl   have_GL
967 dnl   have_GLU
968 dnl   have_GLX
969 dnl   have_glut
970 dnl
971 dnl A complete little toy "Automake `make distcheck'" package of how to
972 dnl use this macro is available at:
973 dnl
974 dnl   ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
975 dnl
976 dnl Please note that as the ac_opengl macro and the toy example evolves,
977 dnl the version number increases, so you may have to adjust the above
978 dnl URL accordingly.
979 dnl
980 dnl @version 0.01 $Id: aclocal.m4,v 1.71 2001/04/20 10:56:12 michaelw Exp $
981 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
982
983 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
984 [
985   AC_REQUIRE([AC_PROG_CC])
986   AC_REQUIRE([AC_PATH_X])
987   AC_REQUIRE([AC_PATH_XTRA])
988   AC_REQUIRE([FPTOOLS_CHECK_LIBM])
989
990 dnl Check for Mesa first, unless we were asked not to.
991 dnl    AC_HELP_STRING([--with-Mesa],
992 dnl                   [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
993 dnl                   with_Mesa_help_string)
994 dnl    AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
995   AC_ARG_ENABLE(Mesa, [  --with-Mesa             Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
996
997   if test x"$use_Mesa" = xyes; then
998      GL_search_list="MesaGL  GL  opengl32"
999     GLU_search_list="MesaGLU GLU glu32"
1000     GLX_search_list="MesaGLX GLX"
1001   else
1002      GL_search_list="GL  opengl32 MesaGL"
1003     GLU_search_list="GLU glu32    MesaGLU"
1004     GLX_search_list="GLX          MesaGLX"
1005   fi      
1006
1007   AC_LANG_SAVE
1008   AC_LANG_C
1009
1010 dnl If we are running under X11 then add in the appropriate libraries.
1011   if ! test x"$no_x" = xyes; then
1012 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1013 dnl and GL_X_LIBS.
1014     GL_CFLAGS="$X_CFLAGS"
1015     GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1016   fi
1017   GL_save_CPPFLAGS="$CPPFLAGS"
1018   CPPFLAGS="$GL_CFLAGS"
1019
1020   GL_save_LIBS="$LIBS"
1021   LIBS="$GL_X_LIBS"
1022
1023   FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>],   glEnd,           $GL_search_list,  have_GL=yes,   have_GL=no)
1024   FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>],  gluNewQuadric,   $GLU_search_list, have_GLU=yes,  have_GLU=no)
1025   FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>],  glXChooseVisual, $GLX_search_list, have_GLX=yes,  have_GLX=no)
1026   FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop,    glut glut32,      have_glut=yes, have_glut=no)
1027
1028   if test -n "$LIBS"; then
1029     GL_LIBS="$LIBS"
1030   else
1031     GL_LIBS=
1032     GL_CFLAGS=
1033   fi
1034
1035   AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1036   GL_CFLAGS="$mdl_cv_gl_cflags"
1037   AC_SUBST(GL_CFLAGS)
1038   AC_CACHE_CHECK([OpenGL libs],  mdl_cv_gl_libs,   [mdl_cv_gl_libs="$GL_LIBS"])
1039   GL_LIBS="$mdl_cv_gl_libs"
1040   AC_SUBST(GL_LIBS)
1041
1042 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1043 dnl and we don't want to be global namespace polluters.
1044   GL_X_LIBS=
1045
1046   LIBS="$GL_save_LIBS"
1047   CPPFLAGS="$GL_save_CPPFLAGS"
1048
1049   AC_LANG_RESTORE
1050 ])
1051
1052 # LocalWords:  fi