[project @ 2002-01-07 20:24:22 by sof]
[ghc-hetmet.git] / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.91 2002/01/07 20:24: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
596 #ifdef HAVE_SYS_TYPES_H
597 # include <sys/types.h>
598 #endif
599
600 #ifdef HAVE_UNISTD_H
601 # include <unistd.h>
602 #endif
603
604 #ifdef HAVE_SYS_STAT_H
605 # include <sys/stat.h>
606 #endif
607
608 #ifdef HAVE_FCNTL_H
609 # include <fcntl.h>
610 #endif
611
612 #ifdef HAVE_SIGNAL_H
613 # include <signal.h>
614 #endif
615
616 #ifdef HAVE_TIME_H
617 # include <time.h>
618 #endif
619
620 #ifdef HAVE_TERMIOS_H
621 # include <termios.h>
622 #endif
623
624 #ifdef HAVE_STRING_H
625 # include <string.h>
626 #endif
627
628 #ifdef HAVE_CTYPE_H
629 # include <ctype.h>
630 #endif
631
632 #ifdef HAVE_GL_GL_H
633 # include <GL/gl.h>
634 #endif
635
636 typedef $1 testing;
637
638 main() {
639   FILE *f=fopen("conftestval2", "w");
640   if (!f) exit(1);
641   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
642     fprintf(f, "%s%d\n",
643            ((testing)(-1) < (testing)0) ? "Int" : "Word",
644            sizeof(testing)*8);
645   } else {
646     fprintf(f,"%s\n",
647            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
648            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
649   }
650   fclose(f);
651   exit(0);
652 }], AC_CV_NAME=`cat conftestval2`,
653 echo $AC_CV_NAME
654 ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
655 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
656 AC_MSG_RESULT($AC_CV_NAME)
657 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
658 undefine([AC_TYPE_NAME])dnl
659 undefine([AC_CV_NAME])dnl
660 ])
661
662 dnl ** figure out whether C compiler supports 'long long's
663 dnl    (Closely based on Andreas Zeller's macro for testing
664 dnl     for this under C++)
665 dnl
666 dnl    If the C compiler supports `long long' types,
667 dnl    define `HAVE_LONG_LONG'.
668 dnl
669 AC_DEFUN(FPTOOLS_C_LONG_LONG,
670 [
671 AC_REQUIRE([AC_PROG_CC])
672 AC_MSG_CHECKING(whether ${CC} supports long long types)
673 AC_CACHE_VAL(fptools_cv_have_long_long,
674 [
675 AC_LANG_SAVE
676 AC_LANG_C
677 AC_TRY_COMPILE(,[long long a;],
678 fptools_cv_have_long_long=yes,
679 fptools_cv_have_long_long=no)
680 AC_LANG_RESTORE
681 ])
682 AC_MSG_RESULT($fptools_cv_have_long_long)
683 if test "$fptools_cv_have_long_long" = yes; then
684 AC_DEFINE(HAVE_LONG_LONG)
685 fi
686 ])
687
688 dnl ** Obtain the value of a C constant.
689 dnl    The value will be `(-1)' if the constant is undefined.
690 dnl
691 dnl    This is set up so that the argument can be a shell variable.
692 dnl
693 AC_DEFUN(FPTOOLS_CHECK_CCONST,
694 [
695 eval "def_name=CCONST_$1"
696 eval "cv_name=ac_cv_cconst_$1"
697 AC_MSG_CHECKING(value of $1)
698 AC_CACHE_VAL($cv_name,
699 [AC_TRY_RUN([#include <stdio.h>
700 #include <errno.h>
701 main()
702 {
703   FILE *f=fopen("conftestval", "w");
704   if (!f) exit(1);
705   fprintf(f, "%d\n", $1);
706   exit(0);
707 }], 
708 eval "$cv_name=`cat conftestval`",
709 eval "$cv_name=-1",
710 eval "$cv_name=-1")])dnl
711 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
712 AC_MSG_RESULT($fptools_check_cconst_result)
713 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
714 unset fptools_check_cconst_result
715 ])
716
717 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with 
718 dnl    spaces)
719 dnl
720 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
721 [for ac_const_name in $1
722 do
723 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
724 done
725 ])
726
727
728 dnl *** Can we open files in binary mode? ***
729 dnl 
730 AC_DEFUN(FPTOOLS_O_BINARY,
731 [
732 AC_REQUIRE([AC_PROG_CC])
733 AC_MSG_CHECKING(whether we can open files in binary mode)
734 AC_CACHE_VAL(fptools_cv_have_o_binary,
735 [
736 AC_LANG_SAVE
737 AC_LANG_C
738 AC_TRY_COMPILE(,
739 [#ifdef HAVE_FCNTL_H
740 #include <fcntl.h>
741 #endif
742 int x = O_BINARY;],
743 fptools_cv_have_o_binary=yes,
744 fptools_cv_have_o_binary=no)
745 AC_LANG_RESTORE
746 ])
747 AC_MSG_RESULT($fptools_cv_have_o_binary)
748 if test "$fptools_cv_have_o_binary" = yes; then
749 AC_DEFINE(HAVE_O_BINARY)
750 fi
751 ])
752
753 dnl *** Which one comes first, .text or .data? ***
754 dnl 
755 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
756 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
757 [AC_TRY_RUN([
758 int f() { return 1; }
759 int i;
760 int main() { return ((char*)&f > (char*)&i); }
761
762 ],
763 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
764 if test "$fptools_cv_code_bef_data" = yes; then
765   AC_DEFINE(CODE_BEFORE_DATA)
766 fi
767 ])
768
769 dnl *** Helper function **
770 dnl 
771 AC_DEFUN(FPTOOLS_IN_SCOPE,
772 [AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
773 ])
774
775 dnl *** What's the end-of-text-section marker called? ***
776 dnl
777 AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
778 [AC_CACHE_CHECK([for end of text section marker],
779                 [fptools_cv_end_of_text],
780                 [fptools_cv_end_of_text=""
781                  not_done=1
782                  for i in data_start _data_start etext _etext __etext; do
783                    FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
784                    if test "$fptools_end_of_text" = yes; then
785                      fptools_cv_end_of_text=$i
786                      not_done=0
787                      break
788                    fi
789                  done
790                  if test "$not_done" = 1; then
791                    FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
792                    if test "$fptools_end_of_text" = yes; then
793                      fptools_cv_end_of_text="etext"
794                    fi
795                  fi])
796                  if test -n "$fptools_cv_end_of_text"; then
797                    AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
798                  else
799                    AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
800                  fi
801  AC_CACHE_CHECK([for end of text section marker declaration],
802                 [fptools_cv_end_of_text_decl],
803                 [fptools_cv_end_of_text_decl=""
804                  not_done=1
805                  for i in data_start _data_start etext _etext __etext; do
806                    FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
807                    if test "$fptools_end_of_text_decl" = yes; then
808                      fptools_cv_end_of_text_decl=$i
809                      not_done=0
810                      break
811                    fi
812                  done
813                  if test "$not_done" = 1; then
814                    FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
815                    if test "$fptools_end_of_text_decl" = yes; then
816                      fptools_cv_end_of_text_decl="etext asm(\"etext\")"
817                    fi
818                  fi])
819                  if test -n "$fptools_cv_end_of_text_decl"; then
820                    AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
821                  else
822                    AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
823                  fi
824 ])                 
825  
826 dnl *** What's the end-of-data-section marker called? ***
827 dnl
828 AC_DEFUN([FPTOOLS_END_DATA_SECTION],
829 [AC_CACHE_CHECK([for end of data section marker],
830                 [fptools_cv_end_of_data],
831                 [fptools_cv_end_of_data=""
832                  not_done=1
833                  for i in end _end __end; do
834                    FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
835                    if test "$fptools_end_of_data" = yes; then
836                      fptools_cv_end_of_data=$i
837                      not_done=0
838                      break
839                    fi
840                  done
841                  if test "$not_done" = 1; then
842                    FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
843                    if test "$fptools_end_of_data" = yes; then
844                      fptools_cv_end_of_data="end"
845                    fi
846                  fi])
847                  if test -n "$fptools_cv_end_of_data"; then
848                    AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
849                  else
850                    AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
851                  fi
852  AC_CACHE_CHECK([for end of data section marker declaration],
853                 [fptools_cv_end_of_data_decl],
854                 [fptools_cv_end_of_data_decl=""
855                  not_done=1
856                  for i in end _end __end; do
857                    FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
858                    if test "$fptools_end_of_data_decl" = yes; then
859                      fptools_cv_end_of_data_decl=$i
860                      not_done=0
861                      break
862                    fi
863                  done
864                  if test "$not_done" = 1; then
865                    FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
866                    if test "$fptools_end_of_data_decl" = yes; then
867                      fptools_cv_end_of_data_decl="end asm(\"end\")"
868                    fi
869                  fi])
870                  if test -n "$fptools_cv_end_of_data_decl"; then
871                    AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
872                  else
873                    AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
874                  fi
875 ])                 
876  
877
878 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
879
880 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
881
882 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
883 [
884 ac_save_LIBS="$LIBS"
885 LIBS=[$1];
886 cat > conftest.$ac_ext <<EOF
887 dnl This sometimes fails to find confdefs.h, for some reason.
888 dnl [#]line __oline__ "[$]0"
889 [#]line __oline__ "configure"
890 #include "confdefs.h"
891 [$2]
892 int t() { return 0; }
893 EOF
894 if AC_TRY_EVAL(ac_link); then
895   ifelse([$3], , :, [
896     LIBS="$ac_save_LIBS"
897     rm -rf conftest*
898     $3])
899   ifelse([$4], , , [else
900     LIBS="$ac_save_LIBS"
901     rm -rf conftest*
902     $4
903 ])dnl
904 fi
905 rm -f conftest*
906 ]
907 )
908
909 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
910
911 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
912
913 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
914 [AC_MSG_CHECKING([for $1])
915  AC_CACHE_VAL(ac_cv_flag_$1,
916    [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
917      eval "ac_cv_flag_$1=yes",
918      eval "ac_cv_flag_$1=no"
919    )]
920  )
921 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
922   AC_MSG_RESULT(yes)
923   LIBS="$2 $LIBS"
924   $4
925 else
926   AC_MSG_RESULT(no)
927   $5
928 fi
929 ])
930
931 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
932
933 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
934 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
935 [changequote(, )dnl
936   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
937  changequote([, ])dnl
938  AC_DEFINE_UNQUOTED($ac_tr_lib)
939 ],
940 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
941 [changequote(, )dnl
942   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
943  changequote([, ])dnl
944  AC_DEFINE_UNQUOTED($ac_tr_lib)
945 ],
946 []
947 )])]
948 )
949
950 dnl check for prototypes
951 dnl
952 AC_DEFUN([AC_C_PROTOTYPES],
953 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
954 [AC_TRY_COMPILE([
955 void foo(int);
956 void foo(i)
957 int i; { 
958 return;
959 }
960 ],
961 [int i;], 
962 ac_cv_prototypes=yes,
963 ac_cv_prototypes=no)])
964 if test "$ac_cv_prototypes" = yes; then
965 AC_DEFINE([HAVE_PROTOTYPES])
966 fi
967 ])
968
969 dnl ** Check which CATALOG file we have to use with DocBook SGML.
970 dnl
971 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
972 dnl
973 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
974 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
975 dnl is set to "no".  JADE is the jade executable and STYLESHEET
976 dnl a DocBook style sheet.
977 dnl
978 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
979 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
980 [
981 cat > conftest.sgml << EOF
982 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
983 <Article>
984 <ArtHeader>
985 <Title>Test</Title>
986 <Author><OtherName>Test</OtherName></Author>
987 <Address>Test</Address>
988 <PubDate>Test</PubDate>
989 </ArtHeader>
990 <Sect1><Title>Test</Title>
991 <Para>
992 Test.
993 </Para>
994 </Sect1>
995 </Article>
996 EOF
997 fptools_cv_sgml_catalog=no
998 for fptools_catalog in $4; do
999   ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
1000   if AC_TRY_EVAL(ac_try); then
1001     fptools_cv_sgml_catalog=[$]fptools_catalog
1002     break
1003   fi
1004 done
1005 ])
1006 rm -rf conftest*
1007 if test $fptools_cv_sgml_catalog != "no"; then
1008   $1=$fptools_cv_sgml_catalog
1009 fi
1010 ])
1011
1012 dnl ######################################################################
1013 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
1014 dnl                     [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
1015 dnl Search for a library defining FUNC, if it's not already available.
1016 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
1017 dnl specified.
1018 dnl ######################################################################
1019
1020 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
1021 [AC_PREREQ([2.13])
1022 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
1023 [ac_func_search_save_LIBS="$LIBS"
1024 ac_cv_search_$2="no"
1025 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
1026 test "$ac_cv_search_$2" = "no" && for i in $3; do
1027 LIBS="-l$i $6 $ac_func_search_save_LIBS"
1028 AC_TRY_LINK([$1], [$2()],
1029 [ac_cv_search_$2="-l$i"
1030 break])
1031 done
1032 LIBS="$ac_func_search_save_LIBS"])
1033 if test "$ac_cv_search_$2" != "no"; then
1034   test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
1035   $4
1036 else :
1037   $5
1038 fi])
1039
1040 dnl ####################### -*- Mode: M4 -*- ###########################
1041 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1042 dnl
1043 dnl This file is free software; you can redistribute it and/or modify it
1044 dnl under the terms of the GNU General Public License as published by
1045 dnl the Free Software Foundation; either version 2 of the License, or
1046 dnl (at your option) any later version.
1047 dnl
1048 dnl This file is distributed in the hope that it will be useful, but
1049 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1050 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1051 dnl General Public License for more details.
1052 dnl
1053 dnl You should have received a copy of the GNU General Public License
1054 dnl along with this file; if not, write to:
1055 dnl
1056 dnl   Free Software Foundation, Inc.
1057 dnl   Suite 330
1058 dnl   59 Temple Place
1059 dnl   Boston, MA 02111-1307, USA.
1060 dnl ####################################################################
1061
1062
1063 dnl @synopsis FPTOOLS_CHECK_LIBM
1064 dnl 
1065 dnl Search for math library (typically -lm).
1066 dnl
1067 dnl The variable LIBM (which is not an output variable by default) is
1068 dnl set to a value which is suitable for use in a Makefile (for example,
1069 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
1070 dnl
1071 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1072
1073 # FPTOOLS_CHECK_LIBM - check for math library
1074 AC_DEFUN(FPTOOLS_CHECK_LIBM,
1075 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
1076 LIBM=
1077 case "$host" in
1078 *-*-beos*)
1079   # These system don't have libm
1080   ;;
1081 *-ncr-sysv4.3*)
1082   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
1083   AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
1084   ;;
1085 *)
1086   AC_CHECK_LIB(m, main, LIBM="-lm")
1087   ;;
1088 esac
1089 ])
1090
1091 dnl ######################################################################
1092 dnl NOTE: Because of portability issues between different autoconf
1093 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
1094 dnl Furthermore, caching has been completely rewritten.
1095 dnl ######################################################################
1096
1097 dnl ########################### -*- Mode: M4 -*- #######################
1098 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
1099 dnl
1100 dnl This file is free software; you can redistribute it and/or modify it
1101 dnl under the terms of the GNU General Public License as published by
1102 dnl the Free Software Foundation; either version 2 of the License, or
1103 dnl (at your option) any later version.
1104 dnl
1105 dnl This file is distributed in the hope that it will be useful, but
1106 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
1107 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1108 dnl General Public License for more details.
1109 dnl
1110 dnl You should have received a copy of the GNU General Public License
1111 dnl along with this file; if not, write to:
1112 dnl
1113 dnl   Free Software Foundation, Inc.
1114 dnl   Suite 330
1115 dnl   59 Temple Place
1116 dnl   Boston, MA 02111-1307, USA.
1117 dnl ####################################################################
1118
1119 dnl @synopsis FPTOOLS_HAVE_OPENGL
1120 dnl 
1121 dnl Search for OpenGL.  We search first for Mesa (a GPL'ed version of
1122 dnl OpenGL) before a vendor's version of OpenGL, unless we were
1123 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
1124 dnl
1125 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
1126 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
1127 dnl "-lglut".
1128 dnl
1129 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
1130 dnl be missing) are added to the shell output variable "GL_LIBS", along
1131 dnl with any other libraries that are necessary to successfully link an
1132 dnl OpenGL application (e.g. the X11 libraries).  Care has been taken to
1133 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
1134 dnl proper order.
1135 dnl
1136 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
1137 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
1138 dnl an OpenGL application.
1139 dnl
1140 dnl The following shell variable (which are not output variables) are
1141 dnl also set to either "yes" or "no" (depending on which libraries were
1142 dnl found) to help you determine exactly what was found.
1143 dnl
1144 dnl   have_GL
1145 dnl   have_GLU
1146 dnl   have_GLX
1147 dnl   have_glut
1148 dnl
1149 dnl A complete little toy "Automake `make distcheck'" package of how to
1150 dnl use this macro is available at:
1151 dnl
1152 dnl   ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
1153 dnl
1154 dnl Please note that as the ac_opengl macro and the toy example evolves,
1155 dnl the version number increases, so you may have to adjust the above
1156 dnl URL accordingly.
1157 dnl
1158 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
1159
1160 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
1161 [
1162   AC_REQUIRE([AC_PROG_CC])
1163   AC_REQUIRE([AC_PATH_X])
1164   AC_REQUIRE([AC_PATH_XTRA])
1165   AC_REQUIRE([FPTOOLS_CHECK_LIBM])
1166
1167 dnl Check for Mesa first, unless we were asked not to.
1168 dnl    AC_HELP_STRING([--with-Mesa],
1169 dnl                   [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
1170 dnl                   with_Mesa_help_string)
1171 dnl    AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
1172   AC_ARG_ENABLE(Mesa, [  --with-Mesa             Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
1173
1174   if test x"$use_Mesa" = xyes; then
1175      GL_search_list="MesaGL  GL  opengl32"
1176     GLU_search_list="MesaGLU GLU glu32"
1177     GLX_search_list="MesaGLX GLX"
1178   else
1179      GL_search_list="GL  opengl32 MesaGL"
1180     GLU_search_list="GLU glu32    MesaGLU"
1181     GLX_search_list="GLX          MesaGLX"
1182   fi      
1183
1184   AC_LANG_SAVE
1185   AC_LANG_C
1186
1187 dnl If we are running under X11 then add in the appropriate libraries.
1188   if ! test x"$no_x" = xyes; then
1189 dnl Add everything we need to compile and link X programs to GL_CFLAGS
1190 dnl and GL_X_LIBS.
1191     GL_CFLAGS="$X_CFLAGS"
1192     GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
1193   fi
1194   GL_save_CPPFLAGS="$CPPFLAGS"
1195   CPPFLAGS="$GL_CFLAGS"
1196
1197   GL_save_LIBS="$LIBS"
1198   LIBS="$GL_X_LIBS"
1199
1200   FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>],   glEnd,           $GL_search_list,  have_GL=yes,   have_GL=no)
1201   FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>],  gluNewQuadric,   $GLU_search_list, have_GLU=yes,  have_GLU=no)
1202   FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>],  glXChooseVisual, $GLX_search_list, have_GLX=yes,  have_GLX=no)
1203   FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop,    glut glut32,      have_glut=yes, have_glut=no)
1204
1205   if test -n "$LIBS"; then
1206     GL_LIBS="$LIBS"
1207   else
1208     GL_LIBS=
1209     GL_CFLAGS=
1210   fi
1211
1212   AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1213   GL_CFLAGS="$mdl_cv_gl_cflags"
1214   AC_SUBST(GL_CFLAGS)
1215   AC_CACHE_CHECK([OpenGL libs],  mdl_cv_gl_libs,   [mdl_cv_gl_libs="$GL_LIBS"])
1216   GL_LIBS="$mdl_cv_gl_libs"
1217   AC_SUBST(GL_LIBS)
1218
1219 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1220 dnl and we don't want to be global namespace polluters.
1221   GL_X_LIBS=
1222
1223   LIBS="$GL_save_LIBS"
1224   CPPFLAGS="$GL_save_CPPFLAGS"
1225
1226   AC_LANG_RESTORE
1227 ])
1228
1229 # LocalWords:  fi
1230
1231 dnl 
1232 dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
1233 dnl defaults to 'lex' if 'flex' isn't found (without checking whether
1234 dnl 'lex' is actually present along the user's PATH).
1235 dnl
1236 AC_DEFUN(AC_PROG_LEX_STRICT,
1237 [AC_CHECK_PROG(LEX, flex, flex)
1238 if test -z "$LEX"
1239 then
1240   AC_CHECK_PROG(LEX,lex,lex)
1241   test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
1242 fi
1243 ])
1244
1245 dnl
1246 dnl Check to see whether CC (gcc) supports a particular option.
1247 dnl 
1248 AC_DEFUN(FPTOOLS_CC_FLAG,
1249 [
1250 AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
1251 [save_CFLAGS="$CFLAGS"
1252  CFLAGS="$CFLAGS $1"
1253  AC_LANG_C
1254  AC_TRY_COMPILE(,[int main(){return(0);}],
1255                  [ac_cv_cc_$2=yes],
1256                  [ac_cv_cc_$2=no])
1257  CFLAGS="$save_CFLAGS"
1258 ])
1259 if test "$ac_cv_cc_$2"x = "yesx"; then
1260   $2=$1;
1261 else
1262   $2="";
1263 fi;
1264 ])