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