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