[project @ 2003-08-18 13:15:53 by panne]
[ghc.git] / aclocal.m4
1 # Extra autoconf macros for the Glasgow fptools
2 #
3 # To be a good autoconf citizen, names of local macros have prefixed with FP_ to
4 # ensure we don't clash with any pre-supplied autoconf ones.
5
6
7 # FP_ALTZONE
8 # -------------------
9 # Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise.
10 # Used by base package.
11 AC_DEFUN([FP_ALTZONE],
12 [AC_REQUIRE([AC_HEADER_TIME])dnl
13 AC_CHECK_HEADERS([sys/time.h])
14 AC_CHECK_DECLS([altzone], [], [],[#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 ])# FP_ALTZONE
25
26
27 dnl ** check for leading underscores in symbol names
28 dnl 
29 dnl Test for determining whether symbol names have a leading
30 dnl underscore.
31 dnl 
32 dnl We assume that they _haven't_ if anything goes wrong.
33 dnl
34 dnl Some nlist implementations seem to try to be compatible by ignoring
35 dnl a leading underscore sometimes (eg. FreeBSD).  We therefore have
36 dnl to work around this by checking for *no* leading underscore first.
37 dnl Sigh.  --SDM
38 dnl
39 dnl Similarly on OpenBSD, but this test doesn't help. -- dons
40 dnl
41 AC_DEFUN(FPTOOLS_UNDERSCORE,
42 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
43 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
44
45 dnl
46 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
47 dnl but symbol table listings shows none. What is going on here?!?
48 dnl
49 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
50 dnl the underscoredness of that "platform"
51 changequote(<<, >>)dnl
52 <<
53 case $HostPlatform in
54 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
55     case $build in
56         i386-*2\.[[0-9]] | i386-*3\.[[0-3]] ) fptools_cv_lead_uscore='yes' ;;
57         *)      fptools_cv_lead_uscore='no' ;;
58     esac ;;
59 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
60 *cygwin32) fptools_cv_lead_uscore='yes';;
61 *mingw32) fptools_cv_lead_uscore='yes';;
62 *) >>
63 changequote([, ])dnl
64 AC_TRY_RUN([#ifdef HAVE_NLIST_H
65 #include <nlist.h>
66 changequote(<<, >>)dnl
67 <<
68 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
69 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
70 #endif
71
72 main(argc, argv)
73 int argc;
74 char **argv;
75 {
76 #ifdef HAVE_NLIST_H
77     if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
78         exit(1);
79     if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
80         exit(0);>>
81 changequote([, ])dnl
82 #endif
83     exit(1);
84 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
85 ;;
86 esac);
87 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
88 AC_SUBST(LeadingUnderscore)
89 case $LeadingUnderscore in
90 YES) AC_DEFINE(LEADING_UNDERSCORE);;
91 esac
92 ])
93
94 dnl
95 dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
96 dnl                            ACTION-IF-TRUE [, ACTION-IF-FALSE])
97 dnl
98 dnl compare versions field-wise (separator is '.')
99 dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
100 dnl
101 dnl quite shell-independant and SUSv2 compliant code
102 dnl
103 dnl NOTE: the loop could be unrolled within autoconf, but the
104 dnl       macro code would be a) longer and b) harder to debug... ;)
105 dnl
106 AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
107 [if ( IFS=".";
108       a="[$1]";  b="[$3]";
109       while test -n "$a$b"
110       do
111               set -- [$]a;  h1="[$]1";  shift 2>/dev/null;  a="[$]*"
112               set -- [$]b;  h2="[$]1";  shift 2>/dev/null;  b="[$]*"
113               test -n "[$]h1" || h1=0;  test -n "[$]h2" || h2=0
114               test [$]{h1} -eq [$]{h2} || break
115       done
116       test [$]{h1} [$2] [$]{h2}
117     )
118 then ifelse([$4],,[:],[
119   $4])
120 ifelse([$5],,,
121 [else
122   $5])
123 fi
124 ])])dnl
125
126
127 dnl
128 dnl Check for Greencard and version.
129 dnl
130 AC_DEFUN(FPTOOLS_GREENCARD,
131 [
132 AC_PATH_PROG(GreencardCmd,greencard)
133 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
134 changequote(, )dnl
135 [if test x"$GreencardCmd" != x; then
136    fptools_cv_greencard_version="`$GreencardCmd --version |
137                           grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
138 else
139    fptools_cv_greencard_version=""
140 fi
141 changequote([, ])dnl
142 ])
143 FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_greencard_version],-lt,$1,
144   [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])dnl
145 GreencardVersion=$fptools_cv_greencard_version
146 AC_SUBST(GreencardVersion)
147 ])
148
149 dnl
150 dnl Check for Happy and version.  If we're building GHC, then we need
151 dnl at least Happy version 1.13.  If there's no installed Happy, we look
152 dnl for a happy source tree and point the build system at that instead.
153 dnl
154 AC_DEFUN(FPTOOLS_HAPPY,
155 [
156 if test -d $srcdir/happy; then
157    SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
158 fi
159 if test x"$UseSrcTreeHappy" = xYES; then
160   HappyCmd=$SrcTreeHappyCmd
161 else
162   AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
163 fi
164 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
165 changequote(, )dnl
166 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
167    fptools_cv_happy_version=`grep '^ProjectVersion[     ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
168 elif test x"$HappyCmd" != x; then
169    fptools_cv_happy_version="`$HappyCmd -v |
170                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
171 else
172    fptools_cv_happy_version="";
173 fi;
174 changequote([, ])dnl
175 ])
176 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
177   FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13],
178   [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
179 fi
180 HappyVersion=$fptools_cv_happy_version;
181 AC_SUBST(HappyVersion)
182 ])
183
184 dnl
185 dnl Check for Haddock and version.  If there's no installed Haddock, we look
186 dnl for a haddock source tree and point the build system at that instead.
187 dnl
188 AC_DEFUN(FPTOOLS_HADDOCK,
189 [
190 if test -d $srcdir/haddock; then
191    SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
192 fi
193 if test x"$UseSrcTreeHaddock" = xYES; then
194   HaddockCmd=$SrcTreeHaddockCmd
195 else
196   AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
197 fi
198 dnl Darn, I forgot to make Haddock print out its version number when
199 dnl invoked with -v.  We could try generating some HTML and grepping
200 dnl through that to find the version number, but I think we'll make
201 dnl do without it for now.
202 ])
203
204 dnl
205 dnl Check for Alex and version.  If we're building GHC, then we need
206 dnl at least Alex version 2.0.  If there's no installed Alex, we look
207 dnl for a alex source tree and point the build system at that instead.
208 dnl
209 AC_DEFUN(FPTOOLS_ALEX,
210 [
211 if test -d $srcdir/alex; then
212    SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
213 fi
214 if test x"$UseSrcTreeAlex" = xYES; then
215   AlexCmd=$SrcTreeAlexCmd
216 else
217   AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
218 fi
219 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
220 changequote(, )dnl
221 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
222    fptools_cv_alex_version=`grep '^ProjectVersion[      ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
223 elif test x"$AlexCmd" != x; then
224    fptools_cv_alex_version="`$AlexCmd -v |
225                           grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
226 else
227    fptools_cv_alex_version="";
228 fi;
229 changequote([, ])dnl
230 ])
231 dnl if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
232 dnl   FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0],
233 dnl   [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl
234 dnl fi
235 AlexVersion=$fptools_cv_alex_version;
236 AC_SUBST(AlexVersion)
237 ])
238
239 dnl
240 dnl What's the best way of doing context diffs?
241 dnl
242 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
243 dnl
244 AC_DEFUN(FPTOOLS_PROG_DIFF,
245 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
246 [echo foo > conftest1
247 echo foo > conftest2
248 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
249     fptools_cv_context_diffs='diff -C 1'
250 else
251     if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
252         fptools_cv_context_diffs='diff -c1'
253     else
254         echo "Can't figure out how to do context diffs."
255         echo "Neither \`diff -C 1' nor \`diff -c1' works."
256         exit 1
257     fi
258 fi
259 rm -f conftest1 conftest2
260 ])
261 ContextDiffCmd=$fptools_cv_context_diffs
262 AC_SUBST(ContextDiffCmd)
263 ])
264
265 dnl
266 dnl Check whether ld supports -x
267 dnl
268 AC_DEFUN(FPTOOLS_LD_X,
269 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
270 [
271 echo 'foo() {}' > conftest.c
272 ${CC-cc} -c conftest.c
273 if ${LdCmd} -r -x -o foo.o conftest.o; then
274    fptools_cv_ld_x=yes
275 else
276    fptools_cv_ld_x=no
277 fi
278 rm -rf conftest.c conftest.o foo.o
279 ])
280 if test "$fptools_cv_ld_x" = yes; then
281         LdXFlag=-x
282 else
283         LdXFlag=
284 fi
285 AC_SUBST(LdXFlag)
286 ])
287
288 dnl
289 dnl Finding the Right Yacc
290 dnl
291 AC_DEFUN(FPTOOLS_PROG_YACCY,
292 [AC_PROG_YACC
293 if test "$YACC" = "yacc"; then
294    AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
295    [AC_CHECK_PROG(WhatCmd, what, what, :)
296     $WhatCmd $YACC > conftest.out
297     if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
298         echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
299         if test -f /usr/lang/yacc; then
300            echo "I'm going to use /usr/lang/yacc instead"
301            ac_cv_prog_yacc=/usr/lang/yacc
302         else
303            echo "I'm assuming the worst...no parser generator at all"
304            ac_cv_prog_yacc=:
305         fi
306     elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
307         echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
308         echo "I'm assuming the worst...no parser generator at all"
309         ac_cv_prog_yacc=:
310     else
311         ac_cv_prog_yacc=$YACC
312     fi
313     rm -fr conftest*
314 ])
315 else
316     ac_cv_prog_yacc=$YACC
317 fi
318 YaccCmd=$ac_cv_prog_yacc
319 AC_SUBST(YaccCmd)
320 ])
321
322 dnl *** Checking for ar and its arguments + whether we need ranlib.
323 dnl
324 dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
325 dnl On Digital UNIX, we test for the -Z (compress) and
326 dnl -input (take list of files from external file) flags.
327 dnl 
328 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
329 [AC_PATH_PROG(ArCmdRaw,ar)
330 if test -z "$ArCmdRaw"; then
331     echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
332     exit 1;
333 fi
334 dnl GNU ar needs special treatment: it appears to have problems with
335 dnl object files with the same name if you use the 's' modifier, but
336 dnl simple 'ar q' works fine, and doesn't need a separate ranlib.
337 if $ArCmdRaw --version | grep 'GNU' >/dev/null 2>/dev/null; then
338     ArCmdArgs='q'
339     NeedRanLib=''
340 elif $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 #ifdef HAVE_OPENGL_GL_H
667 # include <OpenGL/gl.h>
668 #endif
669
670 #ifdef HAVE_SYS_RESOURCE_H
671 # include <sys/resource.h>
672 #endif
673
674 typedef $1 testing;
675
676 main() {
677   FILE *f=fopen("conftestval", "w");
678   if (!f) exit(1);
679   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
680     fprintf(f, "%s%d\n",
681            ((testing)(-1) < (testing)0) ? "Int" : "Word",
682            sizeof(testing)*8);
683   } else {
684     fprintf(f,"%s\n",
685            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
686            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
687   }
688   fclose(f);
689   exit(0);
690 }], AC_CV_NAME=`cat conftestval`,
691 ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
692 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
693 AC_MSG_RESULT($AC_CV_NAME)
694 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
695 undefine([AC_TYPE_NAME])dnl
696 undefine([AC_CV_NAME])dnl
697 ])
698
699 dnl ** figure out whether C compiler supports 'long long's
700 dnl    (Closely based on Andreas Zeller's macro for testing
701 dnl     for this under C++)
702 dnl
703 dnl    If the C compiler supports `long long' types,
704 dnl    define `HAVE_LONG_LONG'.
705 dnl
706 AC_DEFUN(FPTOOLS_C_LONG_LONG,
707 [
708 AC_REQUIRE([AC_PROG_CC])
709 AC_MSG_CHECKING(whether ${CC} supports long long types)
710 AC_CACHE_VAL(fptools_cv_have_long_long,
711 [
712 AC_LANG_SAVE
713 AC_LANG_C
714 AC_TRY_COMPILE(,[long long a;],
715 fptools_cv_have_long_long=yes,
716 fptools_cv_have_long_long=no)
717 AC_LANG_RESTORE
718 ])
719 AC_MSG_RESULT($fptools_cv_have_long_long)
720 if test "$fptools_cv_have_long_long" = yes; then
721 AC_DEFINE(HAVE_LONG_LONG)
722 fi
723 ])
724
725 dnl ** Obtain the value of a C constant.
726 dnl    The value will be `(-1)' if the constant is undefined.
727 dnl
728 dnl    This is set up so that the argument can be a shell variable.
729 dnl
730 AC_DEFUN(FPTOOLS_CHECK_CCONST,
731 [
732 eval "cv_name=ac_cv_cconst_$1"
733 AC_MSG_CHECKING(value of $1)
734 AC_CACHE_VAL($cv_name,
735 [AC_TRY_RUN([#include <stdio.h>
736 #include <errno.h>
737 main()
738 {
739   FILE *f=fopen("conftestval", "w");
740   if (!f) exit(1);
741   fprintf(f, "%d\n", $1);
742   exit(0);
743 }], 
744 eval "$cv_name=`cat conftestval`",
745 eval "$cv_name=-1",
746 eval "$cv_name=-1")])dnl
747 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
748 AC_MSG_RESULT($fptools_check_cconst_result)
749 AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
750 unset fptools_check_cconst_result
751 ])
752
753 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with 
754 dnl    spaces)
755 dnl
756 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
757 [for ac_const_name in $1
758 do
759 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
760 done
761 ])
762
763
764 dnl *** Can we open files in binary mode? ***
765 dnl 
766 AC_DEFUN(FPTOOLS_O_BINARY,
767 [
768 AC_REQUIRE([AC_PROG_CC])
769 AC_MSG_CHECKING(whether we can open files in binary mode)
770 AC_CACHE_VAL(fptools_cv_have_o_binary,
771 [
772 AC_LANG_SAVE
773 AC_LANG_C
774 AC_TRY_COMPILE(
775 [#ifdef HAVE_FCNTL_H
776 #include <fcntl.h>
777 #endif],
778 [int x = O_BINARY;],
779 fptools_cv_have_o_binary=yes,
780 fptools_cv_have_o_binary=no)
781 AC_LANG_RESTORE
782 ])
783 AC_MSG_RESULT($fptools_cv_have_o_binary)
784 if test "$fptools_cv_have_o_binary" = yes; then
785 AC_DEFINE(HAVE_O_BINARY)
786 fi
787 ])
788
789 dnl *** Helper function **
790 dnl 
791 AC_DEFUN(FPTOOLS_IN_SCOPE,
792 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
793 ])
794
795
796 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
797
798 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
799
800 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
801 [
802 ac_save_LIBS="$LIBS"
803 LIBS=[$1];
804 cat > conftest.$ac_ext <<EOF
805 dnl This sometimes fails to find confdefs.h, for some reason.
806 dnl [#]line __oline__ "[$]0"
807 [#]line __oline__ "configure"
808 #include "confdefs.h"
809 [$2]
810 int t() { return 0; }
811 EOF
812 if AC_TRY_EVAL(ac_link); then
813   ifelse([$3], , :, [
814     LIBS="$ac_save_LIBS"
815     rm -rf conftest*
816     $3])
817   ifelse([$4], , , [else
818     LIBS="$ac_save_LIBS"
819     rm -rf conftest*
820     $4
821 ])dnl
822 fi
823 rm -f conftest*
824 ]
825 )
826
827 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
828
829 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
830
831 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
832 [AC_MSG_CHECKING([for $1])
833  AC_CACHE_VAL(ac_cv_flag_$1,
834    [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
835      eval "ac_cv_flag_$1=yes",
836      eval "ac_cv_flag_$1=no"
837    )]
838  )
839 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
840   AC_MSG_RESULT(yes)
841   LIBS="$2 $LIBS"
842   $4
843 else
844   AC_MSG_RESULT(no)
845   $5
846 fi
847 ])
848
849 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
850
851 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
852 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
853 [changequote(, )dnl
854   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
855  changequote([, ])dnl
856  AC_DEFINE_UNQUOTED($ac_tr_lib)
857 ],
858 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
859 [changequote(, )dnl
860   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
861  changequote([, ])dnl
862  AC_DEFINE_UNQUOTED($ac_tr_lib)
863 ],
864 []
865 )])]
866 )
867
868 dnl check for prototypes
869 dnl
870 AC_DEFUN([AC_C_PROTOTYPES],
871 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
872 [AC_TRY_COMPILE([
873 void foo(int);
874 void foo(i)
875 int i; { 
876 return;
877 }
878 ],
879 [int i;], 
880 ac_cv_prototypes=yes,
881 ac_cv_prototypes=no)])
882 if test "$ac_cv_prototypes" = yes; then
883 AC_DEFINE([HAVE_PROTOTYPES])
884 fi
885 ])
886
887 dnl ** Check which CATALOG file we have to use with DocBook SGML.
888 dnl
889 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
890 dnl
891 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
892 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
893 dnl is set to "no".  JADE is the jade executable and STYLESHEET
894 dnl a DocBook style sheet.
895 dnl
896 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
897 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
898 [
899 cat > conftest.sgml << EOF
900 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
901 <Article>
902 <ArtHeader>
903 <Title>Test</Title>
904 <Author><OtherName>Test</OtherName></Author>
905 <Address>Test</Address>
906 <PubDate>Test</PubDate>
907 </ArtHeader>
908 <Sect1><Title>Test</Title>
909 <Para>
910 Test.
911 </Para>
912 </Sect1>
913 </Article>
914 EOF
915 fptools_cv_sgml_catalog=no
916 if test -z "$SGML_CATALOG_FILES" ; then
917  for fptools_catalog in $4; do
918    ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
919    if AC_TRY_EVAL(ac_try); then
920      fptools_cv_sgml_catalog=[$]fptools_catalog
921      break
922    fi
923  done
924 else
925 # If the env var SGML_CATALOG_FILES is defined, assume things are cool.
926   fptools_cv_sgml_catalog="yes"
927 fi
928 ])
929 rm -rf conftest*
930 if test $fptools_cv_sgml_catalog != "no"; then
931   $1=$fptools_cv_sgml_catalog
932 fi
933 ])
934
935 dnl ######################################################################
936 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
937 dnl                     [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
938 dnl Search for a library defining FUNC, if it's not already available.
939 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
940 dnl specified.
941 dnl ######################################################################
942
943 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
944 [AC_PREREQ([2.13])
945 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
946 [ac_func_search_save_LIBS="$LIBS"
947 ac_cv_search_$2="no"
948 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
949 test "$ac_cv_search_$2" = "no" && for i in $3; do
950 LIBS="-l$i $6 $ac_func_search_save_LIBS"
951 AC_TRY_LINK([$1], [$2()],
952 [ac_cv_search_$2="-l$i"
953 break])
954 done
955 LIBS="$ac_func_search_save_LIBS"])
956 if test "$ac_cv_search_$2" != "no"; then
957   test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
958   $4
959 else :
960   $5
961 fi])
962
963 dnl ####################### -*- Mode: M4 -*- ###########################
964 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
965 dnl
966 dnl This file is free software; you can redistribute it and/or modify it
967 dnl under the terms of the GNU General Public License as published by
968 dnl the Free Software Foundation; either version 2 of the License, or
969 dnl (at your option) any later version.
970 dnl
971 dnl This file is distributed in the hope that it will be useful, but
972 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
973 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
974 dnl General Public License for more details.
975 dnl
976 dnl You should have received a copy of the GNU General Public License
977 dnl along with this file; if not, write to:
978 dnl
979 dnl   Free Software Foundation, Inc.
980 dnl   Suite 330
981 dnl   59 Temple Place
982 dnl   Boston, MA 02111-1307, USA.
983 dnl ####################################################################
984
985
986 dnl @synopsis FPTOOLS_CHECK_LIBM
987 dnl 
988 dnl Search for math library (typically -lm).
989 dnl
990 dnl The variable LIBM (which is not an output variable by default) is
991 dnl set to a value which is suitable for use in a Makefile (for example,
992 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
993 dnl
994 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
995
996 # FPTOOLS_CHECK_LIBM - check for math library
997 AC_DEFUN(FPTOOLS_CHECK_LIBM,
998 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
999 LIBM=
1000 case "$host" in
1001 *-*-beos*)
1002   # These system don't have libm
1003   ;;
1004 *-ncr-sysv4.3*)
1005   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1006   AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1007   ;;
1008 *)
1009   AC_CHECK_LIB(m, main, LIBM="-lm")
1010   ;;
1011 esac
1012 ])
1013
1014 dnl ######################################################################
1015 dnl Note: Caching has been completely rewritten, but is still no perfect yet.
1016 dnl ######################################################################
1017
1018 dnl ########################### -*- Mode: M4 -*- #######################
1019 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1020 dnl
1021 dnl This file is free software; you can redistribute it and/or modify it
1022 dnl under the terms of the GNU General Public License as published by
1023 dnl the Free Software Foundation; either version 2 of the License, or
1024 dnl (at your option) any later version.
1025 dnl
1026 dnl This file is distributed in the hope that it will be useful, but
1027 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1028 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1029 dnl General Public License for more details.
1030 dnl
1031 dnl You should have received a copy of the GNU General Public License
1032 dnl along with this file; if not, write to:
1033 dnl
1034 dnl   Free Software Foundation, Inc.
1035 dnl   Suite 330
1036 dnl   59 Temple Place
1037 dnl   Boston, MA 02111-1307, USA.
1038 dnl ####################################################################
1039
1040 dnl @synopsis FPTOOLS_HAVE_OPENGL
1041 dnl 
1042 dnl Search for OpenGL.  We search first for Mesa (a GPL'ed version of
1043 dnl OpenGL) before a vendor's version of OpenGL if we were specifically
1044 dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
1045 dnl
1046 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1047 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1048 dnl "-lglut".
1049 dnl
1050 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1051 dnl be missing) are added to the shell output variable "GL_LIBS", along
1052 dnl with any other libraries that are necessary to successfully link an
1053 dnl OpenGL application (e.g. the X11 libraries).  Care has been taken to
1054 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1055 dnl proper order.
1056 dnl
1057 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1058 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1059 dnl an OpenGL application.
1060 dnl
1061 dnl The following shell variable (which are not output variables) are
1062 dnl also set to either "yes" or "no" (depending on which libraries were
1063 dnl found) to help you determine exactly what was found.
1064 dnl
1065 dnl   have_GL
1066 dnl   have_GLU
1067 dnl   have_GLX
1068 dnl   have_glut
1069 dnl
1070 dnl A complete little toy "Automake `make distcheck'" package of how to
1071 dnl use this macro is available at:
1072 dnl
1073 dnl   ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1074 dnl
1075 dnl Please note that as the ac_opengl macro and the toy example evolves,
1076 dnl the version number increases, so you may have to adjust the above
1077 dnl URL accordingly.
1078 dnl
1079 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1080
1081 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1082 [
1083   AC_REQUIRE([AC_PROG_CC])
1084   AC_REQUIRE([AC_PATH_X])
1085   AC_REQUIRE([AC_PATH_XTRA])
1086   AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1087
1088 dnl Check for Mesa first if we were asked to.
1089   AC_ARG_ENABLE(Mesa,
1090 [  --enable-mesa
1091         Prefer Mesa over a vendor's native OpenGL library (default=no)
1092 ],
1093                 use_Mesa=$enableval,
1094                 use_Mesa=no)
1095
1096   if test x"$use_Mesa" = xyes; then
1097      GL_search_list="MesaGL  GL  opengl32"
1098     GLU_search_list="MesaGLU GLU glu32"
1099     GLX_search_list="MesaGLX GLX"
1100   else
1101      GL_search_list="GL  opengl32 MesaGL"
1102     GLU_search_list="GLU glu32    MesaGLU"
1103     GLX_search_list="GLX          MesaGLX"
1104   fi      
1105
1106   AC_LANG_SAVE
1107   AC_LANG_C
1108
1109 dnl If we are running under X11 then add in the appropriate libraries.
1110   if test x"$no_x" != xyes; then
1111 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1112 dnl and GL_X_LIBS/GLUT_X_LIBS.
1113     GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
1114     GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1115     GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM"
1116   fi
1117   GL_save_CPPFLAGS="$CPPFLAGS"
1118   CPPFLAGS="$GL_CFLAGS"
1119
1120   GL_save_LIBS="$LIBS"
1121   LIBS="$GL_X_LIBS"
1122
1123   FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>],   glEnd,         $GL_search_list,  have_GL=yes,   have_GL=no)
1124   FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>],  gluNewQuadric, $GLU_search_list, have_GLU=yes,  have_GLU=no)
1125   FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>],  glXWaitX,      $GLX_search_list, have_GLX=yes,  have_GLX=no)
1126
1127   if test -n "$LIBS"; then
1128     GL_LIBS="$LDFLAGS $LIBS"
1129   else
1130     GL_LIBS="$LDFLAGS"
1131     GL_CFLAGS=
1132   fi
1133
1134   LIBS="$GLUT_X_LIBS"
1135
1136   FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop,  glut32 glut,      have_glut=yes, have_glut=no)
1137
1138   if test -n "$LIBS"; then
1139     GLUT_LIBS="$LDFLAGS $LIBS"
1140   fi
1141
1142   AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1143   GL_CFLAGS="$mdl_cv_gl_cflags"
1144   AC_SUBST(GL_CFLAGS)
1145   AC_CACHE_CHECK([OpenGL libs],  mdl_cv_gl_libs,   [mdl_cv_gl_libs="$GL_LIBS"])
1146   GL_LIBS="$mdl_cv_gl_libs"
1147   AC_SUBST(GL_LIBS)
1148   AC_CACHE_CHECK([GLUT libs],  mdl_cv_glut_libs,   [mdl_cv_glut_libs="$GLUT_LIBS"])
1149   GLUT_LIBS="$mdl_cv_glut_libs"
1150   AC_SUBST(GLUT_LIBS)
1151
1152 dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables
1153 dnl and we don't want to be global namespace polluters.
1154   GL_X_LIBS=
1155   GLUT_X_LIBS=
1156
1157   LIBS="$GL_save_LIBS"
1158   CPPFLAGS="$GL_save_CPPFLAGS"
1159
1160   AC_LANG_RESTORE
1161 ])
1162
1163 # LocalWords:  fi
1164
1165 dnl 
1166 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1167 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1168 dnl 'lex' is actually present along the user's PATH).
1169 dnl
1170 AC_DEFUN(AC_PROG_LEX_STRICT,
1171 [AC_CHECK_PROG(LEX, flex, flex)
1172 if test -z "$LEX"
1173 then
1174   AC_CHECK_PROG(LEX,lex,lex)
1175   test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1176 fi
1177 ])
1178
1179 dnl
1180 dnl Check to see whether CC (gcc) supports a particular option.
1181 dnl
1182 AC_DEFUN(FPTOOLS_CC_FLAG,
1183 [
1184 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1185 [save_CFLAGS="$CFLAGS"
1186  CFLAGS="$CFLAGS $1"
1187  AC_LANG_C
1188  AC_TRY_COMPILE(,[int main(){return(0);}],
1189                  [ac_cv_cc_$2=yes],
1190                  [ac_cv_cc_$2=no])
1191  CFLAGS="$save_CFLAGS"
1192 ])
1193 if test "$ac_cv_cc_$2"x = "yesx"; then
1194   $2=$1;
1195 else
1196   $2="";
1197 fi;
1198 ])
1199
1200 dnl
1201 dnl Check to see whether 'struct msghdr' contains msg_control
1202 dnl 
1203 AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
1204 [AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
1205 [AC_TRY_COMPILE([#include <sys/types.h>
1206 #include <sys/uio.h>
1207 #include <sys/socket.h>], [struct msghdr m; m.msg_control;],
1208 fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
1209 if test $fptools_cv_struct_msghdr_msg_control = yes; then
1210   AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
1211 fi
1212 AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
1213 ])
1214
1215 dnl
1216 dnl Check to see whether 'struct msghdr' contains msg_accrights
1217 dnl 
1218 AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
1219 [AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
1220 [AC_TRY_COMPILE([#include <sys/types.h>
1221 #include <sys/uio.h>
1222 #include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
1223 fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
1224 if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
1225   AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
1226 fi
1227 AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl
1228 ])
1229