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