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