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