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