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