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