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