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