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