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