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