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