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