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