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