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