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