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