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