[project @ 2002-01-07 20:46:52 by sof]
[ghc-hetmet.git] / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.92 2002/01/07 20:46:52 sof Exp $
2 dnl 
3 dnl Extra autoconf macros for the Glasgow fptools
4 dnl
5 dnl To be a good autoconf citizen, names of local macros have
6 dnl prefixed with FPTOOLS_ to ensure we don't clash
7 dnl with any pre-supplied autoconf ones.
8
9 dnl
10 dnl 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 if test x"$UseSrcTreeHappy" = xYES; then
201   HappyCmd=$SrcTreeHappyCmd
202 else
203   AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
204 fi
205 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
206 changequote(, )dnl
207 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
208    fptools_cv_happy_version=`grep '^ProjectVersion[     ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
209 elif test x"$HappyCmd" != x; then
210    fptools_cv_happy_version="`$HappyCmd -v |
211                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
212 else
213    fptools_cv_happy_version="";
214 fi;
215 changequote([, ])dnl
216 ])
217 if test -d $srcdir/ghc; then
218   FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9],
219   [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])dnl
220 fi
221 HappyVersion=$fptools_cv_happy_version;
222 AC_SUBST(HappyVersion)
223
224 # 1.9 and later is required, assume that we can use
225 # the "-agc" options.
226 HappyOpts="-agc"
227
228 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-gt,[1.11],
229   [HappyOpts=-agcs])
230
231 AC_SUBST(HappyOpts)
232 ])
233
234 dnl
235 dnl What's the best way of doing context diffs?
236 dnl
237 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
238 dnl
239 AC_DEFUN(FPTOOLS_PROG_DIFF,
240 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
241 [echo foo > conftest1
242 echo foo > conftest2
243 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
244     fptools_cv_context_diffs='diff -C 1'
245 else
246     if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
247         fptools_cv_context_diffs='diff -c1'
248     else
249         echo "Can't figure out how to do context diffs."
250         echo "Neither \`diff -C 1' nor \`diff -c1' works."
251         exit 1
252     fi
253 fi
254 rm -f conftest1 conftest2
255 ])
256 ContextDiffCmd=$fptools_cv_context_diffs
257 AC_SUBST(ContextDiffCmd)
258 ])
259
260 dnl
261 dnl Check whether ld supports -x
262 dnl
263 AC_DEFUN(FPTOOLS_LD_X,
264 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
265 [
266 echo 'foo() {}' > conftest.c
267 ${CC-cc} -c conftest.c
268 if ${LdCmd} -r -x -o foo.o conftest.o; then
269    fptools_cv_ld_x=yes
270 else
271    fptools_cv_ld_x=no
272 fi
273 rm -rf conftest.c conftest.o foo.o
274 ])
275 if test "$fptools_cv_ld_x" = yes; then
276         LdXFlag=-x
277 else
278         LdXFlag=
279 fi
280 AC_SUBST(LdXFlag)
281 ])
282
283 dnl
284 dnl Finding the Right Yacc
285 dnl
286 AC_DEFUN(FPTOOLS_PROG_YACCY,
287 [AC_PROG_YACC
288 if test "$YACC" = "yacc"; then
289    AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
290    [AC_CHECK_PROG(WhatCmd, what, what, :)
291     $WhatCmd $YACC > conftest.out
292     if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
293         echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
294         if test -f /usr/lang/yacc; then
295            echo "I'm going to use /usr/lang/yacc instead"
296            ac_cv_prog_yacc=/usr/lang/yacc
297         else
298            echo "I'm assuming the worst...no parser generator at all"
299            ac_cv_prog_yacc=:
300         fi
301     elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
302         echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
303         echo "I'm assuming the worst...no parser generator at all"
304         ac_cv_prog_yacc=:
305     else
306         ac_cv_prog_yacc=$YACC
307     fi
308     rm -fr conftest*
309 ])
310 else
311     ac_cv_prog_yacc=$YACC
312 fi
313 YaccCmd=$ac_cv_prog_yacc
314 AC_SUBST(YaccCmd)
315 ])
316
317 dnl *** Checking for ar and its arguments + whether we need ranlib.
318 dnl
319 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
320 dnl On Digital UNIX, we test for the -Z (compress) and
321 dnl -input (take list of files from external file) flags.
322 dnl 
323 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
324 [AC_PATH_PROG(ArCmd,ar)
325 if test -z "$ArCmd"; then
326     echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
327     exit 1;
328 fi
329 if $ArCmd clqsZ conftest.a >/dev/null 2>/dev/null; then
330     ArCmd="$ArCmd clqsZ"
331     NeedRanLib=''
332 elif $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
333     ArCmd="$ArCmd clqs"
334     NeedRanLib=''
335 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
336     ArCmd="$ArCmd cqs"
337     NeedRanLib=''
338 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
339     ArCmd="$ArCmd clq"
340     NeedRanLib='YES'
341 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
342     ArCmd="$ArCmd cq"
343     NeedRanLib='YES'
344 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
345     ArCmd="$ArCmd cq"
346     NeedRanLib='YES'
347 else
348     echo "I can't figure out how to use your $ArCmd"
349     exit 1
350 fi
351 rm -rf conftest*
352 test -n "$ArCmd" && test -n "$verbose" && echo "        setting ArCmd to $ArCmd"
353 AC_SUBST(ArCmd)
354 if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
355     ArSupportsInput='-input'
356 else
357     ArSupportsInput=''
358 fi
359 rm -rf conftest*
360 test -n "$ArSupportsInput" && test -n "$verbose" && echo "        setting ArSupportsInput to $ArSupportsInput"
361 AC_SUBST(ArSupportsInput)
362 if test -z "$NeedRanLib"; then
363     RANLIB=':'
364     test -n "$verbose" && echo "        setting RANLIB to $RANLIB"
365     AC_SUBST(RANLIB)
366 else
367     AC_PROG_RANLIB
368 fi
369 ])
370
371 dnl
372 dnl AC_SHEBANG_PERL - can we she-bang perl?
373 dnl
374 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
375 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
376 [echo "#!$PerlCmd"'
377 exit $1;
378 ' > conftest
379 chmod u+x conftest
380 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
381 if test $? -ne 69; then
382    fptools_cv_shebang_perl=yes
383 else
384    fptools_cv_shebang_perl=no
385 fi
386 rm -f conftest
387 ])])
388
389 dnl
390 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
391 dnl *Must* be called after AC_PROG_CC
392 dnl
393 AC_DEFUN(FPTOOLS_HAVE_GCC,
394 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
395 [if test -z "$GCC"; then
396     echo ''
397     echo "You would be better off with gcc"
398     echo "Perhaps it is already installed, but not in your PATH?"
399     fptools_cv_have_gcc='no'
400 else
401 changequote(, )dnl
402     is_gcc_v1="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 2000 \\\>= \1 \\\* 1000 + \2/g' `"
403     is_gcc_v3="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 3000 \\\<= \1 \\\* 1000 + \2/g' `"
404 changequote([, ])dnl
405     fptools_cv_have_gcc='yes'
406     if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
407         fptools_cv_have_gcc='no'
408         echo ""
409         echo "your gcc version appears to be ..."
410         $CC --version
411         echo "gcc prior to 2.0 and have never worked with ghc."
412         echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
413         AC_MSG_ERROR([gcc 1.X has never been supported])
414     fi
415     if test `eval $is_gcc_v3 2>/dev/null` = "1"; then
416         fptools_cv_have_gcc='no'
417         echo ""
418         echo "your gcc version appears to be ..."
419         $CC --version
420         echo "gcc versions 3.0 and above are not yet supported."
421         echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
422         AC_MSG_ERROR([gcc 3.0 and above is not currently supported])
423     fi
424 fi
425 ])
426 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
427 AC_SUBST(HaveGcc)
428 ])
429
430 dnl Small feature test for perl version. Assumes PerlCmd
431 dnl contains path to perl binary
432 dnl
433 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
434 [$PerlCmd -v >conftest.out 2>&1
435 if grep "version 5" conftest.out >/dev/null 2>&1; then
436    :
437 else
438   if grep "v5.6" conftest.out >/dev/null 2>&1; then
439      :
440   else
441      if grep "version 6" conftest.out >/dev/null 2>&1; then
442         :
443      else
444        echo "Your version of perl probably won't work."
445      fi
446   fi
447 fi
448 rm -fr conftest*
449 ])
450
451 dnl
452 dnl Getting at the right version of 'find'
453 dnl (i.e., not the MS util on a Win32 box).
454 dnl
455 AC_DEFUN(FPTOOLS_FIND_FIND,
456 [
457 AC_PATH_PROG(Find2Cmd, find)
458 $Find2Cmd --version > conftest.out 2>&1 
459 if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
460    # Encountered MS' find utility, which is not what we're after.
461    #
462    # HACK - AC_CHECK_PROG is useful here in that does let you reject
463    # an (absolute) entry in the path (Find2Cmd). It is not so useful
464    # in that it doesn't let you (AFAIU) set VARIABLE equal to the 
465    # absolute path eventually found. So, hack around this by inspecting
466    # what variables hold the abs. path & use them directly.
467    AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
468 else
469 FindCmd=$Find2Cmd
470 AC_SUBST(FindCmd)
471 fi
472 ])
473
474 dnl
475 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
476 dnl values of the second argument to the result of running
477 dnl the commands given by the third. It does not cache its
478 dnl result, so it is suitable for checks which should be
479 dnl run every time.
480 dnl
481 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
482 [AC_MSG_CHECKING([$1])
483  $3
484  AC_MSG_RESULT([$][$2])
485 ])
486
487 dnl
488 dnl FPTOOLS_GHC_VERSION(version)
489 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
490 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
491 dnl
492 dnl Test for version of installed ghc.  Uses $GHC.
493 dnl [original version pinched from c2hs]
494 dnl
495 AC_DEFUN(FPTOOLS_GHC_VERSION,
496 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
497 [${WithGhc-ghc} --version > conftestghc 2>&1
498   cat conftestghc >&AC_FD_CC
499 #Useless Use Of cat award...
500   fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
501   rm -fr conftest*
502   if test "[$]fptools_version_of_ghc" = ""
503   then
504     fptools_version_of_ghc='unknown'
505   fi
506 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
507 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
508 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
509 #
510 if test "[$]fptools_version_of_ghc[_pl]" = ""
511 then
512   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
513   fptools_version_of_ghc[_pl]="0"
514 else
515   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
516 fi
517 #
518 ifelse($#, [1], [dnl
519 [$1]="[$]fptools_version_of_ghc[_all]"
520 ], $#, [2], [dnl
521 [$1]="[$]fptools_version_of_ghc[_major]"
522 [$2]="[$]fptools_version_of_ghc[_minor]"
523 ], $#, [3], [dnl
524 [$1]="[$]fptools_version_of_ghc[_major]"
525 [$2]="[$]fptools_version_of_ghc[_minor]"
526 [$3]="[$]fptools_version_of_ghc[_pl]"
527 ], $#, [4], [dnl
528 [$1]="[$]fptools_version_of_ghc[_all]"
529 [$2]="[$]fptools_version_of_ghc[_major]"
530 [$3]="[$]fptools_version_of_ghc[_minor]"
531 [$4]="[$]fptools_version_of_ghc[_pl]"
532 ])
533 ])
534 ])dnl
535
536
537 dnl ** figure out the alignment restriction of a type
538 dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
539 dnl     so we can't call REQUIRE)
540
541 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
542 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
543 [changequote(<<, >>)dnl
544 dnl The name to #define.
545 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
546 dnl The cache variable name.
547 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
548 dnl The name of the corresponding size.
549 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
550 changequote([, ])dnl
551 AC_MSG_CHECKING(alignment of $1)
552 AC_CACHE_VAL(AC_CV_NAME,
553 [AC_TRY_RUN([
554 #include <stdio.h>
555 #if HAVE_STDDEF_H
556 #include <stddef.h>
557 #endif
558 #ifndef offsetof
559 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
560 #endif
561 int
562 main()
563 {
564   FILE *f=fopen("conftestval", "w");
565   if (!f) exit(1);
566   fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
567   exit(0);
568 }],
569 AC_CV_NAME=`cat conftestval`,
570 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
571 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
572 AC_MSG_RESULT($AC_CV_NAME)
573 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
574 AC_PROVIDE($AC_TYPE_NAME)
575 undefine([AC_TYPE_NAME])dnl
576 undefine([AC_CV_NAME])dnl
577 undefine([AC_CV_SIZEOF_NAME])dnl
578 ])
579
580 dnl ** Map an arithmetic C type to a Haskell type.
581 dnl    Based on autconf's AC_CHECK_SIZEOF.
582
583 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
584 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
585 [changequote(<<, >>)dnl
586 dnl The name to #define.
587 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
588 dnl The cache variable name.
589 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
590 changequote([, ])dnl
591 AC_MSG_CHECKING(Haskell type for $1)
592 AC_CACHE_VAL(AC_CV_NAME,
593 [AC_TRY_RUN([#include <stdio.h>
594 #include <stddef.h>
595
596 #ifdef HAVE_SYS_TYPES_H
597 # include <sys/types.h>
598 #endif
599
600 #ifdef HAVE_UNISTD_H
601 # include <unistd.h>
602 #endif
603
604 #ifdef HAVE_SYS_STAT_H
605 # include <sys/stat.h>
606 #endif
607
608 #ifdef HAVE_FCNTL_H
609 # include <fcntl.h>
610 #endif
611
612 #ifdef HAVE_SIGNAL_H
613 # include <signal.h>
614 #endif
615
616 #ifdef HAVE_TIME_H
617 # include <time.h>
618 #endif
619
620 #ifdef HAVE_TERMIOS_H
621 # include <termios.h>
622 #endif
623
624 #ifdef HAVE_STRING_H
625 # include <string.h>
626 #endif
627
628 #ifdef HAVE_CTYPE_H
629 # include <ctype.h>
630 #endif
631
632 #ifdef HAVE_GL_GL_H
633 # include <GL/gl.h>
634 #endif
635
636 typedef $1 testing;
637
638 main() {
639   FILE *f=fopen("conftestval", "w");
640   if (!f) exit(1);
641   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
642     fprintf(f, "%s%d\n",
643            ((testing)(-1) < (testing)0) ? "Int" : "Word",
644            sizeof(testing)*8);
645   } else {
646     fprintf(f,"%s\n",
647            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
648            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
649   }
650   fclose(f);
651   exit(0);
652 }], AC_CV_NAME=`cat conftestval`,
653 ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
654 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
655 AC_MSG_RESULT($AC_CV_NAME)
656 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
657 undefine([AC_TYPE_NAME])dnl
658 undefine([AC_CV_NAME])dnl
659 ])
660
661 dnl ** figure out whether C compiler supports 'long long's
662 dnl    (Closely based on Andreas Zeller's macro for testing
663 dnl     for this under C++)
664 dnl
665 dnl    If the C compiler supports `long long' types,
666 dnl    define `HAVE_LONG_LONG'.
667 dnl
668 AC_DEFUN(FPTOOLS_C_LONG_LONG,
669 [
670 AC_REQUIRE([AC_PROG_CC])
671 AC_MSG_CHECKING(whether ${CC} supports long long types)
672 AC_CACHE_VAL(fptools_cv_have_long_long,
673 [
674 AC_LANG_SAVE
675 AC_LANG_C
676 AC_TRY_COMPILE(,[long long a;],
677 fptools_cv_have_long_long=yes,
678 fptools_cv_have_long_long=no)
679 AC_LANG_RESTORE
680 ])
681 AC_MSG_RESULT($fptools_cv_have_long_long)
682 if test "$fptools_cv_have_long_long" = yes; then
683 AC_DEFINE(HAVE_LONG_LONG)
684 fi
685 ])
686
687 dnl ** Obtain the value of a C constant.
688 dnl    The value will be `(-1)' if the constant is undefined.
689 dnl
690 dnl    This is set up so that the argument can be a shell variable.
691 dnl
692 AC_DEFUN(FPTOOLS_CHECK_CCONST,
693 [
694 eval "def_name=CCONST_$1"
695 eval "cv_name=ac_cv_cconst_$1"
696 AC_MSG_CHECKING(value of $1)
697 AC_CACHE_VAL($cv_name,
698 [AC_TRY_RUN([#include <stdio.h>
699 #include <errno.h>
700 main()
701 {
702   FILE *f=fopen("conftestval", "w");
703   if (!f) exit(1);
704   fprintf(f, "%d\n", $1);
705   exit(0);
706 }], 
707 eval "$cv_name=`cat conftestval`",
708 eval "$cv_name=-1",
709 eval "$cv_name=-1")])dnl
710 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
711 AC_MSG_RESULT($fptools_check_cconst_result)
712 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
713 unset fptools_check_cconst_result
714 ])
715
716 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with 
717 dnl    spaces)
718 dnl
719 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
720 [for ac_const_name in $1
721 do
722 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
723 done
724 ])
725
726
727 dnl *** Can we open files in binary mode? ***
728 dnl 
729 AC_DEFUN(FPTOOLS_O_BINARY,
730 [
731 AC_REQUIRE([AC_PROG_CC])
732 AC_MSG_CHECKING(whether we can open files in binary mode)
733 AC_CACHE_VAL(fptools_cv_have_o_binary,
734 [
735 AC_LANG_SAVE
736 AC_LANG_C
737 AC_TRY_COMPILE(,
738 [#ifdef HAVE_FCNTL_H
739 #include <fcntl.h>
740 #endif
741 int x = O_BINARY;],
742 fptools_cv_have_o_binary=yes,
743 fptools_cv_have_o_binary=no)
744 AC_LANG_RESTORE
745 ])
746 AC_MSG_RESULT($fptools_cv_have_o_binary)
747 if test "$fptools_cv_have_o_binary" = yes; then
748 AC_DEFINE(HAVE_O_BINARY)
749 fi
750 ])
751
752 dnl *** Which one comes first, .text or .data? ***
753 dnl 
754 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
755 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
756 [AC_TRY_RUN([
757 int f() { return 1; }
758 int i;
759 int main() { return ((char*)&f > (char*)&i); }
760
761 ],
762 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
763 if test "$fptools_cv_code_bef_data" = yes; then
764   AC_DEFINE(CODE_BEFORE_DATA)
765 fi
766 ])
767
768 dnl *** Helper function **
769 dnl 
770 AC_DEFUN(FPTOOLS_IN_SCOPE,
771 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
772 ])
773
774 dnl *** What's the end-of-text-section marker called? ***
775 dnl
776 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
777 [AC_CACHE_CHECK([for end of text section marker],
778                 [fptools_cv_end_of_text],
779                 [fptools_cv_end_of_text=""
780                  not_done=1
781                  for i in data_start _data_start etext _etext __etext; do
782                    FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
783                    if test "$fptools_end_of_text" = yes; then
784                      fptools_cv_end_of_text=$i
785                      not_done=0
786                      break
787                    fi
788                  done
789                  if test "$not_done" = 1; then
790                    FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
791                    if test "$fptools_end_of_text" = yes; then
792                      fptools_cv_end_of_text="etext"
793                    fi
794                  fi])
795                  if test -n "$fptools_cv_end_of_text"; then
796                    AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
797                  else
798                    AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
799                  fi
800  AC_CACHE_CHECK([for end of text section marker declaration],
801                 [fptools_cv_end_of_text_decl],
802                 [fptools_cv_end_of_text_decl=""
803                  not_done=1
804                  for i in data_start _data_start etext _etext __etext; do
805                    FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
806                    if test "$fptools_end_of_text_decl" = yes; then
807                      fptools_cv_end_of_text_decl=$i
808                      not_done=0
809                      break
810                    fi
811                  done
812                  if test "$not_done" = 1; then
813                    FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
814                    if test "$fptools_end_of_text_decl" = yes; then
815                      fptools_cv_end_of_text_decl="etext asm(\"etext\")"
816                    fi
817                  fi])
818                  if test -n "$fptools_cv_end_of_text_decl"; then
819                    AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
820                  else
821                    AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
822                  fi
823 ])                 
824  
825 dnl *** What's the end-of-data-section marker called? ***
826 dnl
827 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
828 [AC_CACHE_CHECK([for end of data section marker],
829                 [fptools_cv_end_of_data],
830                 [fptools_cv_end_of_data=""
831                  not_done=1
832                  for i in end _end __end; do
833                    FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
834                    if test "$fptools_end_of_data" = yes; then
835                      fptools_cv_end_of_data=$i
836                      not_done=0
837                      break
838                    fi
839                  done
840                  if test "$not_done" = 1; then
841                    FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
842                    if test "$fptools_end_of_data" = yes; then
843                      fptools_cv_end_of_data="end"
844                    fi
845                  fi])
846                  if test -n "$fptools_cv_end_of_data"; then
847                    AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
848                  else
849                    AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
850                  fi
851  AC_CACHE_CHECK([for end of data section marker declaration],
852                 [fptools_cv_end_of_data_decl],
853                 [fptools_cv_end_of_data_decl=""
854                  not_done=1
855                  for i in end _end __end; do
856                    FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
857                    if test "$fptools_end_of_data_decl" = yes; then
858                      fptools_cv_end_of_data_decl=$i
859                      not_done=0
860                      break
861                    fi
862                  done
863                  if test "$not_done" = 1; then
864                    FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
865                    if test "$fptools_end_of_data_decl" = yes; then
866                      fptools_cv_end_of_data_decl="end asm(\"end\")"
867                    fi
868                  fi])
869                  if test -n "$fptools_cv_end_of_data_decl"; then
870                    AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
871                  else
872                    AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
873                  fi
874 ])                 
875  
876
877 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
878
879 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
880
881 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
882 [
883 ac_save_LIBS="$LIBS"
884 LIBS=[$1];
885 cat > conftest.$ac_ext <<EOF
886 dnl This sometimes fails to find confdefs.h, for some reason.
887 dnl [#]line __oline__ "[$]0"
888 [#]line __oline__ "configure"
889 #include "confdefs.h"
890 [$2]
891 int t() { return 0; }
892 EOF
893 if AC_TRY_EVAL(ac_link); then
894   ifelse([$3], , :, [
895     LIBS="$ac_save_LIBS"
896     rm -rf conftest*
897     $3])
898   ifelse([$4], , , [else
899     LIBS="$ac_save_LIBS"
900     rm -rf conftest*
901     $4
902 ])dnl
903 fi
904 rm -f conftest*
905 ]
906 )
907
908 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
909
910 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
911
912 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
913 [AC_MSG_CHECKING([for $1])
914  AC_CACHE_VAL(ac_cv_flag_$1,
915    [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
916      eval "ac_cv_flag_$1=yes",
917      eval "ac_cv_flag_$1=no"
918    )]
919  )
920 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
921   AC_MSG_RESULT(yes)
922   LIBS="$2 $LIBS"
923   $4
924 else
925   AC_MSG_RESULT(no)
926   $5
927 fi
928 ])
929
930 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
931
932 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
933 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
934 [changequote(, )dnl
935   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
936  changequote([, ])dnl
937  AC_DEFINE_UNQUOTED($ac_tr_lib)
938 ],
939 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
940 [changequote(, )dnl
941   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
942  changequote([, ])dnl
943  AC_DEFINE_UNQUOTED($ac_tr_lib)
944 ],
945 []
946 )])]
947 )
948
949 dnl check for prototypes
950 dnl
951 AC_DEFUN([AC_C_PROTOTYPES],
952 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
953 [AC_TRY_COMPILE([
954 void foo(int);
955 void foo(i)
956 int i; { 
957 return;
958 }
959 ],
960 [int i;], 
961 ac_cv_prototypes=yes,
962 ac_cv_prototypes=no)])
963 if test "$ac_cv_prototypes" = yes; then
964 AC_DEFINE([HAVE_PROTOTYPES])
965 fi
966 ])
967
968 dnl ** Check which CATALOG file we have to use with DocBook SGML.
969 dnl
970 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
971 dnl
972 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
973 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
974 dnl is set to "no".  JADE is the jade executable and STYLESHEET
975 dnl a DocBook style sheet.
976 dnl
977 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
978 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
979 [
980 cat > conftest.sgml << EOF
981 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
982 <Article>
983 <ArtHeader>
984 <Title>Test</Title>
985 <Author><OtherName>Test</OtherName></Author>
986 <Address>Test</Address>
987 <PubDate>Test</PubDate>
988 </ArtHeader>
989 <Sect1><Title>Test</Title>
990 <Para>
991 Test.
992 </Para>
993 </Sect1>
994 </Article>
995 EOF
996 fptools_cv_sgml_catalog=no
997 for fptools_catalog in $4; do
998   ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
999   if AC_TRY_EVAL(ac_try); then
1000     fptools_cv_sgml_catalog=[$]fptools_catalog
1001     break
1002   fi
1003 done
1004 ])
1005 rm -rf conftest*
1006 if test $fptools_cv_sgml_catalog != "no"; then
1007   $1=$fptools_cv_sgml_catalog
1008 fi
1009 ])
1010
1011 dnl ######################################################################
1012 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1013 dnl                     [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1014 dnl Search for a library defining FUNC, if it's not already available.
1015 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1016 dnl specified.
1017 dnl ######################################################################
1018
1019 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1020 [AC_PREREQ([2.13])
1021 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1022 [ac_func_search_save_LIBS="$LIBS"
1023 ac_cv_search_$2="no"
1024 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1025 test "$ac_cv_search_$2" = "no" && for i in $3; do
1026 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1027 AC_TRY_LINK([$1], [$2()],
1028 [ac_cv_search_$2="-l$i"
1029 break])
1030 done
1031 LIBS="$ac_func_search_save_LIBS"])
1032 if test "$ac_cv_search_$2" != "no"; then
1033   test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1034   $4
1035 else :
1036   $5
1037 fi])
1038
1039 dnl ####################### -*- Mode: M4 -*- ###########################
1040 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1041 dnl
1042 dnl This file is free software; you can redistribute it and/or modify it
1043 dnl under the terms of the GNU General Public License as published by
1044 dnl the Free Software Foundation; either version 2 of the License, or
1045 dnl (at your option) any later version.
1046 dnl
1047 dnl This file is distributed in the hope that it will be useful, but
1048 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1049 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1050 dnl General Public License for more details.
1051 dnl
1052 dnl You should have received a copy of the GNU General Public License
1053 dnl along with this file; if not, write to:
1054 dnl
1055 dnl   Free Software Foundation, Inc.
1056 dnl   Suite 330
1057 dnl   59 Temple Place
1058 dnl   Boston, MA 02111-1307, USA.
1059 dnl ####################################################################
1060
1061
1062 dnl @synopsis FPTOOLS_CHECK_LIBM
1063 dnl 
1064 dnl Search for math library (typically -lm).
1065 dnl
1066 dnl The variable LIBM (which is not an output variable by default) is
1067 dnl set to a value which is suitable for use in a Makefile (for example,
1068 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1069 dnl
1070 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1071
1072 # FPTOOLS_CHECK_LIBM - check for math library
1073 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1074 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1075 LIBM=
1076 case "$host" in
1077 *-*-beos*)
1078   # These system don't have libm
1079   ;;
1080 *-ncr-sysv4.3*)
1081   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1082   AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1083   ;;
1084 *)
1085   AC_CHECK_LIB(m, main, LIBM="-lm")
1086   ;;
1087 esac
1088 ])
1089
1090 dnl ######################################################################
1091 dnl NOTE: Because of portability issues between different autoconf
1092 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1093 dnl Furthermore, caching has been completely rewritten.
1094 dnl ######################################################################
1095
1096 dnl ########################### -*- Mode: M4 -*- #######################
1097 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1098 dnl
1099 dnl This file is free software; you can redistribute it and/or modify it
1100 dnl under the terms of the GNU General Public License as published by
1101 dnl the Free Software Foundation; either version 2 of the License, or
1102 dnl (at your option) any later version.
1103 dnl
1104 dnl This file is distributed in the hope that it will be useful, but
1105 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1106 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1107 dnl General Public License for more details.
1108 dnl
1109 dnl You should have received a copy of the GNU General Public License
1110 dnl along with this file; if not, write to:
1111 dnl
1112 dnl   Free Software Foundation, Inc.
1113 dnl   Suite 330
1114 dnl   59 Temple Place
1115 dnl   Boston, MA 02111-1307, USA.
1116 dnl ####################################################################
1117
1118 dnl @synopsis FPTOOLS_HAVE_OPENGL
1119 dnl 
1120 dnl Search for OpenGL.  We search first for Mesa (a GPL'ed version of
1121 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1122 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1123 dnl
1124 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1125 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1126 dnl "-lglut".
1127 dnl
1128 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1129 dnl be missing) are added to the shell output variable "GL_LIBS", along
1130 dnl with any other libraries that are necessary to successfully link an
1131 dnl OpenGL application (e.g. the X11 libraries).  Care has been taken to
1132 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1133 dnl proper order.
1134 dnl
1135 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1136 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1137 dnl an OpenGL application.
1138 dnl
1139 dnl The following shell variable (which are not output variables) are
1140 dnl also set to either "yes" or "no" (depending on which libraries were
1141 dnl found) to help you determine exactly what was found.
1142 dnl
1143 dnl   have_GL
1144 dnl   have_GLU
1145 dnl   have_GLX
1146 dnl   have_glut
1147 dnl
1148 dnl A complete little toy "Automake `make distcheck'" package of how to
1149 dnl use this macro is available at:
1150 dnl
1151 dnl   ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1152 dnl
1153 dnl Please note that as the ac_opengl macro and the toy example evolves,
1154 dnl the version number increases, so you may have to adjust the above
1155 dnl URL accordingly.
1156 dnl
1157 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1158
1159 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1160 [
1161   AC_REQUIRE([AC_PROG_CC])
1162   AC_REQUIRE([AC_PATH_X])
1163   AC_REQUIRE([AC_PATH_XTRA])
1164   AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1165
1166 dnl Check for Mesa first, unless we were asked not to.
1167 dnl    AC_HELP_STRING([--with-Mesa],
1168 dnl                   [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1169 dnl                   with_Mesa_help_string)
1170 dnl    AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1171   AC_ARG_ENABLE(Mesa, [  --with-Mesa             Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1172
1173   if test x"$use_Mesa" = xyes; then
1174      GL_search_list="MesaGL  GL  opengl32"
1175     GLU_search_list="MesaGLU GLU glu32"
1176     GLX_search_list="MesaGLX GLX"
1177   else
1178      GL_search_list="GL  opengl32 MesaGL"
1179     GLU_search_list="GLU glu32    MesaGLU"
1180     GLX_search_list="GLX          MesaGLX"
1181   fi      
1182
1183   AC_LANG_SAVE
1184   AC_LANG_C
1185
1186 dnl If we are running under X11 then add in the appropriate libraries.
1187   if ! test x"$no_x" = xyes; then
1188 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1189 dnl and GL_X_LIBS.
1190     GL_CFLAGS="$X_CFLAGS"
1191     GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1192   fi
1193   GL_save_CPPFLAGS="$CPPFLAGS"
1194   CPPFLAGS="$GL_CFLAGS"
1195
1196   GL_save_LIBS="$LIBS"
1197   LIBS="$GL_X_LIBS"
1198
1199   FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>],   glEnd,           $GL_search_list,  have_GL=yes,   have_GL=no)
1200   FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>],  gluNewQuadric,   $GLU_search_list, have_GLU=yes,  have_GLU=no)
1201   FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>],  glXChooseVisual, $GLX_search_list, have_GLX=yes,  have_GLX=no)
1202   FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop,    glut glut32,      have_glut=yes, have_glut=no)
1203
1204   if test -n "$LIBS"; then
1205     GL_LIBS="$LIBS"
1206   else
1207     GL_LIBS=
1208     GL_CFLAGS=
1209   fi
1210
1211   AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1212   GL_CFLAGS="$mdl_cv_gl_cflags"
1213   AC_SUBST(GL_CFLAGS)
1214   AC_CACHE_CHECK([OpenGL libs],  mdl_cv_gl_libs,   [mdl_cv_gl_libs="$GL_LIBS"])
1215   GL_LIBS="$mdl_cv_gl_libs"
1216   AC_SUBST(GL_LIBS)
1217
1218 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1219 dnl and we don't want to be global namespace polluters.
1220   GL_X_LIBS=
1221
1222   LIBS="$GL_save_LIBS"
1223   CPPFLAGS="$GL_save_CPPFLAGS"
1224
1225   AC_LANG_RESTORE
1226 ])
1227
1228 # LocalWords:  fi
1229
1230 dnl 
1231 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1232 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1233 dnl 'lex' is actually present along the user's PATH).
1234 dnl
1235 AC_DEFUN(AC_PROG_LEX_STRICT,
1236 [AC_CHECK_PROG(LEX, flex, flex)
1237 if test -z "$LEX"
1238 then
1239   AC_CHECK_PROG(LEX,lex,lex)
1240   test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1241 fi
1242 ])
1243
1244 dnl
1245 dnl Check to see whether CC (gcc) supports a particular option.
1246 dnl 
1247 AC_DEFUN(FPTOOLS_CC_FLAG,
1248 [
1249 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1250 [save_CFLAGS="$CFLAGS"
1251  CFLAGS="$CFLAGS $1"
1252  AC_LANG_C
1253  AC_TRY_COMPILE(,[int main(){return(0);}],
1254                  [ac_cv_cc_$2=yes],
1255                  [ac_cv_cc_$2=no])
1256  CFLAGS="$save_CFLAGS"
1257 ])
1258 if test "$ac_cv_cc_$2"x = "yesx"; then
1259   $2=$1;
1260 else
1261   $2="";
1262 fi;
1263 ])