[project @ 2004-09-09 05:42:26 by sseefried]
[ghc.git] / aclocal.m4
1 # Extra autoconf macros for the Glasgow fptools
2 #
3 # To be a good autoconf citizen, names of local macros have prefixed with FP_ to
4 # ensure we don't clash with any pre-supplied autoconf ones.
5
6
7 # FP_EVAL_STDERR(COMMAND)
8 # -----------------------
9 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
10 # into the file conftest.err and the exit status in the variable fp_status.
11 AC_DEFUN([FP_EVAL_STDERR],
12 [{ (eval $1) 2>conftest.er1
13   fp_status=$?
14   grep -v '^ *+' conftest.er1 >conftest.err
15   rm -f conftest.er1
16   (exit $fp_status); }[]dnl
17 ])# FP_EVAL_STDERR
18
19
20 # FP_CHECK_FLAG(FLAG, [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED])
21 # ---------------------------------------------------------------------
22 # Check to see whether the compiler for the current language supports a
23 # particular option.
24 #
25 # Implementation note: When given an unkown option, GCC issues an warning on
26 # stderr only, but returns an exit value of 0 nevertheless. Consequently we have
27 # to check stderr *and* the exit value.
28 #
29 # Used by ghc.
30 AC_DEFUN(FP_CHECK_FLAG,
31 [AC_LANG_COMPILER_REQUIRE()dnl
32 AC_LANG_CASE([C],          [fp_compiler="$CC"  m4_pushdef([fp_Flags], [CFLAGS])],
33              [C++],        [fp_compiler="$CXX" m4_pushdef([fp_Flags], [CXXFLAGS])],
34              [Fortran 77], [fp_compiler="$F77" m4_pushdef([fp_Flags], [FFLAGS])])
35 m4_pushdef([fp_Cache], [fp_cv_[]fp_Flags[]AS_TR_SH([$1])])[]dnl
36 AC_CACHE_CHECK([whether $fp_compiler accepts $1], [fp_Cache],
37 [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
38 fp_save_flags="$fp_Flags"
39 fp_Flags="$fp_Flags $1"
40 fp_Cache=no
41 if FP_EVAL_STDERR([$ac_compile conftest.$ac_ext]) >/dev/null; then
42   test -s conftest.err || fp_Cache=yes
43 fi
44 fp_Flags="$fp_save_flags"
45 rm -f conftest.err conftest.$ac_ext])
46 AS_IF([test $fp_Cache = yes], [$2], [$3])[]dnl
47 m4_popdef([fp_Cache])[]dnl
48 m4_popdef([fp_Flags])[]dnl
49 ])# FP_CHECK_FLAG
50
51
52 # FP_PROG_CONTEXT_DIFF
53 # --------------------
54 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
55 #
56 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
57 #
58 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
59 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
60 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
61 [echo foo > conftest1
62 echo foo > conftest2
63 fp_cv_context_diff=no
64 for fp_var in '-C 1' '-c1'
65 do
66   if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
67     fp_cv_context_diff="diff $fp_var"
68     break
69   fi
70 done])
71 if test x"$fp_cv_context_diff" = xno; then
72    AC_MSG_ERROR([cannot figure out how to do context diffs])
73 fi
74 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
75 ])# FP_PROG_CONTEXT_DIFF
76
77
78 # FP_DECL_ALTZONE
79 # ---------------
80 # Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise.
81 #
82 # Used by base package.
83 AC_DEFUN([FP_DECL_ALTZONE],
84 [AC_REQUIRE([AC_HEADER_TIME])dnl
85 AC_CHECK_HEADERS([sys/time.h])
86 AC_CHECK_DECLS([altzone], [], [],[#if TIME_WITH_SYS_TIME
87 # include <sys/time.h>
88 # include <time.h>
89 #else
90 # if HAVE_SYS_TIME_H
91 #  include <sys/time.h>
92 # else
93 #  include <time.h>
94 # endif
95 #endif])
96 ])# FP_DECL_ALTZONE
97
98
99 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
100 # --------------------------------------------------------
101 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
102 # compilation. Execute IF-FAILS when unable to determine the value. Works for
103 # cross-compilation, too.
104 #
105 # Implementation note: We are lazy and use an internal autoconf macro, but it
106 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
107 # little risk.
108 AC_DEFUN([FP_COMPUTE_INT],
109 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
110 ])# FP_COMPUTE_INT
111
112
113 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
114 # ------------------------------------------------------------------
115 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
116 # given type. Defines ALIGNMENT_TYPE.
117 AC_DEFUN([FP_CHECK_ALIGNMENT],
118 [AS_LITERAL_IF([$1], [],
119                [AC_FATAL([$0: requires literal arguments])])[]dnl
120 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
121 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
122 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
123 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
124   FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
125                  [fp_Cache],
126                  [AC_INCLUDES_DEFAULT([$3])],
127                  [AC_MSG_ERROR([cannot compute alignment ($1)
128 See `config.log' for more details.], [77])])
129 else
130   fp_Cache=0
131 fi])[]dnl
132 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
133 m4_popdef([fp_Cache])[]dnl
134 ])# FP_CHECK_ALIGNMENT
135
136
137 # FP_CHECK_CONST(EXPRESSION, [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = -1])
138 # -------------------------------------------------------------------------------
139 # Defines CONST_EXPRESSION to the value of the compile-time EXPRESSION, using
140 # INCLUDES. If the value cannot be determined, use VALUE-IF-FAIL.
141 AC_DEFUN([FP_CHECK_CONST],
142 [AS_VAR_PUSHDEF([fp_Cache], [fp_cv_const_$1])[]dnl
143 AC_CACHE_CHECK([value of $1], fp_Cache,
144 [FP_COMPUTE_INT([$1], fp_check_const_result, [AC_INCLUDES_DEFAULT([$2])],
145                 [fp_check_const_result=m4_default([$3], ['-1'])])
146 AS_VAR_SET(fp_Cache, [$fp_check_const_result])])[]dnl
147 AC_DEFINE_UNQUOTED(AS_TR_CPP([CONST_$1]), AS_VAR_GET(fp_Cache), [The value of $1.])[]dnl
148 AS_VAR_POPDEF([fp_Cache])[]dnl
149 ])# FP_CHECK_CONST
150
151
152 # FP_CHECK_CONSTS_TEMPLATE(EXPRESSION...)
153 # ---------------------------------------
154 # autoheader helper for FP_CHECK_CONSTS
155 m4_define([FP_CHECK_CONSTS_TEMPLATE],
156 [AC_FOREACH([fp_Const], [$1],
157   [AH_TEMPLATE(AS_TR_CPP(CONST_[]fp_Const),
158                [The value of ]fp_Const[.])])[]dnl
159 ])# FP_CHECK_CONSTS_TEMPLATE
160
161
162 # FP_CHECK_CONSTS(EXPRESSION..., [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = -1])
163 # -----------------------------------------------------------------------------------
164 # List version of FP_CHECK_CONST
165 AC_DEFUN(FP_CHECK_CONSTS,
166 [FP_CHECK_CONSTS_TEMPLATE([$1])dnl
167 for fp_const_name in $1
168 do
169 FP_CHECK_CONST([$fp_const_name], [$2], [$3])
170 done
171 ])# FP_CHECK_CONSTS
172
173
174 # FP_LEADING_UNDERSCORE
175 # ---------------------
176 # Test for determining whether symbol names have a leading underscore. We assume
177 # that they _haven't_ if anything goes wrong. Sets the output variable
178 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
179 #
180 # Some nlist implementations seem to try to be compatible by ignoring a leading
181 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
182 # checking for *no* leading underscore first. Sigh.  --SDM
183 #
184 # Similarly on OpenBSD, but this test doesn't help. -- dons
185 AC_DEFUN([FP_LEADING_UNDERSCORE],
186 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
187 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
188 # Hack!: nlist() under Digital UNIX insist on there being an _,
189 # but symbol table listings shows none. What is going on here?!?
190 #
191 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
192 # the underscoredness of that "platform"
193 case $HostPlatform in
194 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
195   case $build in
196     i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
197     *) fptools_cv_leading_underscore=no ;;
198   esac ;;
199 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
200 *cygwin32) fptools_cv_leading_underscore=yes;;
201 *mingw32) fptools_cv_leading_underscore=yes;;
202 *darwin)  fptools_cv_leading_underscore=yes;;
203 *) AC_TRY_RUN([#ifdef HAVE_NLIST_H
204 #include <nlist.h>
205 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
206 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
207 #endif
208
209 int main()
210 {
211 #ifdef HAVE_NLIST_H
212     if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
213         exit(1);
214     if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
215         exit(0);
216 #endif
217     exit(1);
218 }], [fptools_cv_leading_underscore=yes], [fptools_cv_leading_underscore=no], [fptools_cv_leading_underscore=no])
219 ;;
220 esac]);
221 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
222 if test x"$fptools_cv_leading_underscore" = xyes; then
223    AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
224 fi])# FP_LEADING_UNDERSCORE
225
226
227 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
228 # ----------------------------------------------------------------------------------
229 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
230 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
231 AC_DEFUN([FP_COMPARE_VERSIONS],
232 [fp_version1=$1; fp_version2=$3
233 fp_save_IFS=$IFS; IFS='.'
234 while test x"$fp_version1" != x || test x"$fp_version2" != x
235 do
236
237   set dummy $fp_version1; shift
238   fp_num1=""
239   test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
240   test x"$fp_num1" = x && fp_num1="0"
241   fp_version1="[$]*"
242
243   set dummy $fp_version2; shift
244   fp_num2=""
245   test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
246   test x"$fp_num2" = x && fp_num2="0"
247   fp_version2="[$]*"
248
249   test "$fp_num1" = "$fp_num2" || break;
250 done
251 IFS=$fp_save_IFS
252 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
253 ])# FP_COMPARE_VERSIONS
254
255
256 dnl
257 dnl Check for GreenCard and version.
258 dnl
259 AC_DEFUN(FPTOOLS_GREENCARD,
260 [
261 AC_PATH_PROG(GreenCardCmd,greencard)
262 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
263 changequote(, )dnl
264 [if test x"$GreenCardCmd" != x; then
265    fptools_cv_greencard_version="`$GreenCardCmd --version |
266                           grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
267 else
268    fptools_cv_greencard_version=""
269 fi
270 changequote([, ])dnl
271 ])
272 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
273   [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
274 GreenCardVersion=$fptools_cv_greencard_version
275 AC_SUBST(GreenCardVersion)
276 ])
277
278 dnl
279 dnl Check for Happy and version.  If we're building GHC, then we need
280 dnl at least Happy version 1.14.  If there's no installed Happy, we look
281 dnl for a happy source tree and point the build system at that instead.
282 dnl
283 AC_DEFUN(FPTOOLS_HAPPY,
284 [
285 if test -d $srcdir/happy; then
286    SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
287 fi
288 if test x"$UseSrcTreeHappy" = xYES; then
289   HappyCmd=$SrcTreeHappyCmd
290 else
291   AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
292 fi
293 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
294 changequote(, )dnl
295 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd" -a -e $srcdir/happy/mk/version.mk; then
296    fptools_cv_happy_version=`grep '^ProjectVersion[     ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
297 elif test x"$HappyCmd" != x; then
298    fptools_cv_happy_version="`$HappyCmd -v |
299                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
300 else
301    fptools_cv_happy_version="";
302 fi;
303 changequote([, ])dnl
304 ])
305 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
306   FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.14],
307   [AC_MSG_ERROR([Happy version 1.14 or later is required to compile GHC.])])[]dnl
308 fi
309 HappyVersion=$fptools_cv_happy_version;
310 AC_SUBST(HappyVersion)
311 ])
312
313 dnl
314 dnl Check for Haddock and version.  If there's no installed Haddock, we look
315 dnl for a haddock source tree and point the build system at that instead.
316 dnl
317 AC_DEFUN(FPTOOLS_HADDOCK,
318 [
319 if test -d $srcdir/haddock; then
320    SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
321 fi
322 if test x"$UseSrcTreeHaddock" = xYES; then
323   HaddockCmd=$SrcTreeHaddockCmd
324 else
325   AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
326 fi
327 dnl Darn, I forgot to make Haddock print out its version number when
328 dnl invoked with -v.  We could try generating some HTML and grepping
329 dnl through that to find the version number, but I think we'll make
330 dnl do without it for now.
331 ])
332
333 dnl
334 dnl Check for Alex and version.  If we're building GHC, then we need
335 dnl at least Alex version 2.0.  If there's no installed Alex, we look
336 dnl for a alex source tree and point the build system at that instead.
337 dnl
338 AC_DEFUN(FPTOOLS_ALEX,
339 [
340 if test -d $srcdir/alex; then
341    SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
342 fi
343 if test x"$UseSrcTreeAlex" = xYES; then
344   AlexCmd=$SrcTreeAlexCmd
345 else
346   AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
347 fi
348 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
349 changequote(, )dnl
350 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
351    fptools_cv_alex_version=`grep '^ProjectVersion[      ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
352 elif test x"$AlexCmd" != x; then
353    fptools_cv_alex_version="`$AlexCmd -v |
354                           grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
355 else
356    fptools_cv_alex_version="";
357 fi;
358 changequote([, ])dnl
359 ])
360 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
361   FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0],
362   [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])[]dnl
363 fi
364 AlexVersion=$fptools_cv_alex_version;
365 AC_SUBST(AlexVersion)
366 ])
367
368
369 dnl
370 dnl Check whether ld supports -x
371 dnl
372 AC_DEFUN(FPTOOLS_LD_X,
373 [AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
374 [
375 echo 'foo() {}' > conftest.c
376 ${CC-cc} -c conftest.c
377 if ${LdCmd} -r -x -o foo.o conftest.o; then
378    fptools_cv_ld_x=yes
379 else
380    fptools_cv_ld_x=no
381 fi
382 rm -rf conftest.c conftest.o foo.o
383 ])
384 if test "$fptools_cv_ld_x" = yes; then
385         LdXFlag=-x
386 else
387         LdXFlag=
388 fi
389 AC_SUBST(LdXFlag)
390 ])
391
392
393 # FP_PROG_AR
394 # ----------
395 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
396 # version of it. Exits if no ar can be found
397 AC_DEFUN([FP_PROG_AR],
398 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
399 if test -z "$fp_prog_ar_raw"; then
400   AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
401 fi
402 fp_prog_ar=$fp_prog_ar_raw
403 case $HostPlatform in
404   *mingw32) if test x${OSTYPE} != xmsys; then
405               fp_prog_ar="`cygpath -w ${fp_prog_ar_raw} | sed -e 's@\\\\@/@g'`"
406               AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
407             fi
408             ;;
409 esac
410 ])# FP_PROG_AR
411
412
413 # FP_PROG_AR_IS_GNU
414 # -----------------
415 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
416 AC_DEFUN([FP_PROG_AR_IS_GNU],
417 [AC_REQUIRE([FP_PROG_AR])
418 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
419 [if $fp_prog_ar_raw --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
420   fp_cv_prog_ar_is_gnu=yes
421 else
422   fp_cv_prog_ar_is_gnu=no
423 fi])
424 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
425 ])# FP_PROG_AR_IS_GNU
426
427
428 # FP_PROG_AR_ARGS
429 # ---------------
430 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
431 # to a non-Cygwin invocation of ar including these arguments.
432 AC_DEFUN([FP_PROG_AR_ARGS],
433 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
434 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
435 [
436 # GNU ar needs special treatment: it appears to have problems with
437 # object files with the same name if you use the 's' modifier, but
438 # simple 'ar q' works fine, and doesn't need a separate ranlib.
439 if test $fp_prog_ar_is_gnu = yes; then
440   fp_cv_prog_ar_args="q"
441 else
442   touch conftest.dummy
443   for fp_var in clqsZ clqs cqs clq cq ; do
444      rm -f conftest.a
445      if $fp_prog_ar_raw $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
446         fp_cv_prog_ar_args=$fp_var
447         break
448      fi
449   done
450   rm -f conftest*
451   if test -z "$fp_cv_prog_ar_args"; then
452     AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
453   fi
454 fi])
455 fp_prog_ar_args=$fp_cv_prog_ar_args
456 AC_SUBST([ArCmd], ["$fp_prog_ar $fp_prog_ar_args"])
457
458 ])# FP_PROG_AR_ARGS
459
460
461 # FP_PROG_AR_NEEDS_RANLIB
462 # -----------------------
463 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
464 # to ":" otherwise.
465 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
466 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
467 AC_REQUIRE([FP_PROG_AR_ARGS])
468 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
469 [if test $fp_prog_ar_is_gnu = yes; then
470   fp_cv_prog_ar_needs_ranlib=no
471 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
472   fp_cv_prog_ar_needs_ranlib=no
473 else
474   fp_cv_prog_ar_needs_ranlib=yes
475 fi])
476 if test $fp_cv_prog_ar_needs_ranlib = yes; then
477    AC_PROG_RANLIB
478 else
479   RANLIB=":"
480   AC_SUBST([RANLIB])
481 fi
482 ])# FP_PROG_AR_NEEDS_RANLIB
483
484
485 # FP_PROG_AR_SUPPORTS_INPUT
486 # -------------------------
487 # Sets the output variable ArSupportsInput to "-input" or "", depending on
488 # whether ar supports -input flag is supported or not.
489 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
490 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
491 AC_REQUIRE([FP_PROG_AR_ARGS])
492 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
493 [fp_cv_prog_ar_supports_input=no
494 if test $fp_prog_ar_is_gnu = no; then
495   rm -f conftest*
496   touch conftest.lst
497   if FP_EVAL_STDERR([$fp_prog_ar_raw $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
498     test -s conftest.err || fp_cv_prog_ar_supports_input=yes
499   fi
500   rm -f conftest*
501 fi])
502 if test $fp_cv_prog_ar_supports_input = yes; then
503     ArSupportsInput="-input"
504 else
505     ArSupportsInput=""
506 fi
507 AC_SUBST([ArSupportsInput])
508 ])# FP_PROG_AR_SUPPORTS_INPUT
509
510
511 dnl
512 dnl AC_SHEBANG_PERL - can we she-bang perl?
513 dnl
514 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
515 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
516 [echo "#!$PerlCmd"'
517 exit $1;
518 ' > conftest
519 chmod u+x conftest
520 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
521 if test $? -ne 69; then
522    fptools_cv_shebang_perl=yes
523 else
524    fptools_cv_shebang_perl=no
525 fi
526 rm -f conftest
527 ])])
528
529 dnl
530 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
531 dnl *Must* be called after AC_PROG_CC
532 dnl
533 AC_DEFUN(FPTOOLS_HAVE_GCC,
534 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
535 [if test -z "$GCC"; then
536     echo ''
537     echo "You would be better off with gcc"
538     echo "Perhaps it is already installed, but not in your PATH?"
539     fptools_cv_have_gcc='no'
540 else
541 changequote(, )dnl
542     gcc_version_str="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1\.\2/g' `"
543 changequote([, ])dnl
544     fptools_cv_have_gcc='yes'
545     FP_COMPARE_VERSIONS([$gcc_version_str], [-lt], [2.0],
546         [fptools_cv_have_gcc='no'
547         echo ""
548         echo "your gcc version appears to be ..."
549         $CC --version
550         echo "gcc prior to 2.0 and have never worked with ghc."
551         echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
552         AC_MSG_ERROR([gcc 1.X has never been supported])])
553 fi
554 ])
555 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
556 AC_SUBST(HaveGcc)
557 GccVersion=`gcc --version | grep mingw | cut -f 3 -d ' '`
558 AC_SUBST(GccVersion)
559 ])
560
561 dnl
562 dnl Some OSs (Mandrake Linux, in particular) configure GCC with
563 dnl -momit-leaf-frame-pointer on by default.  If this is the case, we
564 dnl need to turn it off for mangling to work.  The test is currently a bit
565 dnl crude, using only the version number of gcc.
566 dnl
567 AC_DEFUN([FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR],
568 [AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], [fptools_cv_gcc_needs_no_omit_lfptr],
569 [FP_COMPARE_VERSIONS([$gcc_version_str], [-ge], [3.2],
570   [fptools_cv_gcc_needs_no_omit_lfptr=yes],
571   [fptools_cv_gcc_needs_no_omit_lfptr=no])])
572 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
573    AC_DEFINE([HAVE_GCC_MNO_OMIT_LFPTR], [1], [Define to 1 if gcc supports -mno-omit-leaf-frame-pointer.])
574 fi])# FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR
575
576
577 dnl Small feature test for perl version. Assumes PerlCmd
578 dnl contains path to perl binary
579 dnl
580 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
581 [$PerlCmd -v >conftest.out 2>&1
582 if grep "version 5" conftest.out >/dev/null 2>&1; then
583    :
584 else
585    if grep "v5.6" conftest.out >/dev/null 2>&1; then
586       :
587    else
588       if grep "v5.8" conftest.out >/dev/null 2>&1; then
589          :
590       else
591          if grep "version 6" conftest.out >/dev/null 2>&1; then
592             :
593          else
594             echo "Your version of perl probably won't work."
595          fi  
596       fi
597    fi
598 fi
599 rm -fr conftest*
600 ])
601
602
603 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
604 #               [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
605 # -----------------------------------------------------
606 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
607 # of PROG-TO-CHECK-FOR when found.
608 AC_DEFUN([FP_CHECK_PROG],
609 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
610 )# FP_CHECK_PROC
611
612
613 # FP_PROG_FIND
614 # ------------
615 # Find a non-WinDoze version of the "find" utility.
616 AC_DEFUN([FP_PROG_FIND],
617 [AC_PATH_PROG([fp_prog_find], [find])
618 echo foo > conftest.txt
619 $fp_prog_find conftest.txt -print > conftest.out 2>&1
620 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
621   # OK, looks like a real "find".
622   FindCmd="$fp_prog_find"
623 else
624   # Found a poor WinDoze version of "find", ignore it.
625   AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
626   FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
627 fi
628 rm -f conftest.txt conftest.out
629 AC_SUBST([FindCmd])[]dnl
630 ])# FP_PROG_FIND
631
632
633 dnl
634 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
635 dnl values of the second argument to the result of running
636 dnl the commands given by the third. It does not cache its
637 dnl result, so it is suitable for checks which should be
638 dnl run every time.
639 dnl
640 AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
641 [AC_MSG_CHECKING([$1])
642  $3
643  AC_MSG_RESULT([$][$2])
644 ])
645
646 dnl
647 dnl FPTOOLS_GHC_VERSION(version)
648 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
649 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
650 dnl
651 dnl Test for version of installed ghc.  Uses $GHC.
652 dnl [original version pinched from c2hs]
653 dnl
654 AC_DEFUN(FPTOOLS_GHC_VERSION,
655 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
656 ["${WithGhc-ghc}" --version > conftestghc 2>&1
657   cat conftestghc >&AC_FD_CC
658 #Useless Use Of cat award...
659   fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
660   rm -fr conftest*
661   if test "[$]fptools_version_of_ghc" = ""
662   then
663     fptools_version_of_ghc='unknown'
664   fi
665 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
666 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
667 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
668 #
669 if test "[$]fptools_version_of_ghc[_pl]" = ""
670 then
671   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
672   fptools_version_of_ghc[_pl]="0"
673 else
674   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
675 fi
676 #
677 ifelse($#, [1], [dnl
678 [$1]="[$]fptools_version_of_ghc[_all]"
679 ], $#, [2], [dnl
680 [$1]="[$]fptools_version_of_ghc[_major]"
681 [$2]="[$]fptools_version_of_ghc[_minor]"
682 ], $#, [3], [dnl
683 [$1]="[$]fptools_version_of_ghc[_major]"
684 [$2]="[$]fptools_version_of_ghc[_minor]"
685 [$3]="[$]fptools_version_of_ghc[_pl]"
686 ], $#, [4], [dnl
687 [$1]="[$]fptools_version_of_ghc[_all]"
688 [$2]="[$]fptools_version_of_ghc[_major]"
689 [$3]="[$]fptools_version_of_ghc[_minor]"
690 [$4]="[$]fptools_version_of_ghc[_pl]"
691 ])
692 ])
693 ])dnl
694
695
696 dnl ** Map an arithmetic C type to a Haskell type.
697 dnl    Based on autconf's AC_CHECK_SIZEOF.
698
699 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
700 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
701 [changequote(<<, >>)dnl
702 dnl The name to #define.
703 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
704 dnl The cache variable name.
705 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
706 define(<<AC_CV_NAME_supported>>, translit(fptools_cv_htype_sup_$1, [ *], [_p]))dnl
707 changequote([, ])dnl
708 AC_MSG_CHECKING(Haskell type for $1)
709 AC_CACHE_VAL(AC_CV_NAME,
710 [AC_CV_NAME_supported=yes
711 fp_check_htype_save_cppflags="$CPPFLAGS"
712 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
713 AC_TRY_RUN([#include <stdio.h>
714 #include <stddef.h>
715
716 #if HAVE_SYS_TYPES_H
717 # include <sys/types.h>
718 #endif
719
720 #if HAVE_UNISTD_H
721 # include <unistd.h>
722 #endif
723
724 #if HAVE_SYS_STAT_H
725 # include <sys/stat.h>
726 #endif
727
728 #if HAVE_FCNTL_H
729 # include <fcntl.h>
730 #endif
731
732 #if HAVE_SIGNAL_H
733 # include <signal.h>
734 #endif
735
736 #if HAVE_TIME_H
737 # include <time.h>
738 #endif
739
740 #if HAVE_TERMIOS_H
741 # include <termios.h>
742 #endif
743
744 #if HAVE_STRING_H
745 # include <string.h>
746 #endif
747
748 #if HAVE_CTYPE_H
749 # include <ctype.h>
750 #endif
751
752 #if defined(HAVE_GL_GL_H)
753 # include <GL/gl.h>
754 #elif defined(HAVE_OPENGL_GL_H)
755 # include <OpenGL/gl.h>
756 #endif
757
758 #if defined(HAVE_AL_ALC_H)
759 # include <AL/alc.h>
760 #elif defined(HAVE_OPENAL_ALC_H)
761 # include <OpenAL/alc.h>
762 #endif
763
764 #if HAVE_SYS_RESOURCE_H
765 # include <sys/resource.h>
766 #endif
767
768 typedef $1 testing;
769
770 main() {
771   FILE *f=fopen("conftestval", "w");
772   if (!f) exit(1);
773   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
774     fprintf(f, "%s%d\n",
775            ((testing)(-1) < (testing)0) ? "Int" : "Word",
776            sizeof(testing)*8);
777   } else {
778     fprintf(f,"%s\n",
779            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
780            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
781   }
782   fclose(f);
783   exit(0);
784 }],AC_CV_NAME=`cat conftestval`,
785 ifelse([$2], , [AC_CV_NAME=NotReallyAType; AC_CV_NAME_supported=no], AC_CV_NAME=$2),
786 ifelse([$3], , [AC_CV_NAME=NotReallyATypeCross; AC_CV_NAME_supported=no], AC_CV_NAME=$3))]) dnl
787 CPPFLAGS="$fp_check_htype_save_cppflags"
788 if test "$AC_CV_NAME_supported" = yes; then
789   AC_MSG_RESULT($AC_CV_NAME)
790   AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1])
791 else
792   AC_MSG_RESULT([not supported])
793 fi
794 undefine([AC_TYPE_NAME])dnl
795 undefine([AC_CV_NAME])dnl
796 undefine([AC_CV_NAME_supported])dnl
797 ])
798
799
800 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
801 # ---------------------------------------------------------------------------------
802 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
803 # additional flexibility of specifying the PROLOGUE and BODY.
804 AC_DEFUN([FP_CHECK_FUNC],
805 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
806 AC_CACHE_CHECK([for $1], fp_func,
807 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
808                 [AS_VAR_SET(fp_func, yes)],
809                 [AS_VAR_SET(fp_func, no)])])
810 AS_IF([test AS_VAR_GET(fp_func) = yes],
811       [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
812                 [Define to 1 if you have the `]$1[' function.]) $4],
813       [$5])dnl
814 AS_VAR_POPDEF([fp_func])dnl
815 ])# FP_CHECK_FUNC
816
817
818 # FP_GEN_DOCBOOK_XML
819 # ------------------
820 # Generates a DocBook XML V4.2 document in conftest.xml.
821 AC_DEFUN([FP_GEN_DOCBOOK_XML],
822 [rm -f conftest.xml
823 cat > conftest.xml << EOF
824 <?xml version="1.0" encoding="iso-8859-1"?>
825 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
826    "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
827 <book id="test">
828   <title>A DocBook Test Document</title>
829   <chapter id="id-one">
830     <title>A Chapter Title</title>
831     <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
832   </chapter>
833   <chapter id="id-two">
834     <title>Another Chapter Title</title>
835     <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
836   </chapter>
837 </book>
838 EOF
839 ]) # FP_GEN_DOCBOOK_XML
840
841
842 # FP_PROG_XSLTPROC
843 # ----------------
844 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
845 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
846 AC_DEFUN([FP_PROG_XSLTPROC],
847 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
848 if test -z "$XsltprocCmd"; then
849   AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the documentation])
850 fi
851 ])# FP_PROG_XSLTPROC
852
853
854 # FP_DIR_DOCBOOK_XSL(XSL-DIRS)
855 # ----------------------------
856 # Check which of the directories XSL-DIRS contains DocBook XSL stylesheets. The
857 # output variable DIR_DOCBOOK_XSL will contain the first usable directory or
858 # will be empty if none could be found.
859 AC_DEFUN([FP_DIR_DOCBOOK_XSL],
860 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
861 if test -n "$XsltprocCmd"; then
862   AC_CACHE_CHECK([for DocBook XSL stylesheet directory], fp_cv_dir_docbook_xsl,
863   [FP_GEN_DOCBOOK_XML
864   fp_cv_dir_docbook_xsl=no
865   for fp_var in $1; do
866      if $XsltprocCmd ${fp_var}/html/docbook.xsl conftest.xml > /dev/null 2>&1; then
867         fp_cv_dir_docbook_xsl=$fp_var
868         break
869      fi
870   done
871   rm -rf conftest*])
872 fi
873 if test x"$fp_cv_dir_docbook_xsl" = xno; then
874   AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
875   DIR_DOCBOOK_XSL=
876 else
877   DIR_DOCBOOK_XSL=$fp_cv_dir_docbook_xsl
878 fi
879 AC_SUBST([DIR_DOCBOOK_XSL])
880 ])# FP_DIR_DOCBOOK_XSL
881
882
883 # FP_PROG_XMLLINT
884 # ----------------
885 # Sets the output variable XmllintCmd to the full path of the XSLT processor
886 # xmllint. XmllintCmd is empty if xmllint could not be found.
887 AC_DEFUN([FP_PROG_XMLLINT],
888 [AC_PATH_PROG([XmllintCmd], [xmllint])
889 if test -z "$XmllintCmd"; then
890   AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
891 fi
892 ])# FP_PROG_XMLLINT
893
894
895 # FP_CHECK_DOCBOOK_DTD
896 # --------------------
897 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
898 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
899 if test -n "$XmllintCmd"; then
900   AC_MSG_CHECKING([for DocBook DTD])
901   FP_GEN_DOCBOOK_XML
902   if $XmllintCmd --valid --noout conftest.xml > /dev/null 2>&1; then
903     AC_MSG_RESULT([ok])
904   else
905     AC_MSG_RESULT([failed])
906     AC_MSG_WARN([cannot find a DTD for DocBook XML V4.2, you will not be able to validate your documentation])
907     AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
908   fi
909   rm -rf conftest*
910 fi
911 ])# FP_CHECK_DOCBOOK_DTD
912
913
914 # FP_PROG_FO_PROCESSOR
915 # --------------------
916 # Try to find an FO processor. PassiveTeX output is sometimes a bit strange, so
917 # try FOP first.  Furthermore, /usr/bin/fop is broken in SuSE 9.1, so try the
918 # "real" fop.sh first. Sets the output variables FopCmd, XmltexCmd, DvipsCmd,
919 # and PdfxmltexCmd.
920 AC_DEFUN([FP_PROG_FO_PROCESSOR],
921 [AC_PATH_PROGS([FopCmd], [fop.sh fop], [], [$PATH:/usr/share/fop])
922 AC_PATH_PROG([XmltexCmd], [xmltex])
923 AC_PATH_PROG([DvipsCmd], [dvips])
924 if test -z "$FopCmd"; then
925   if test -z "$XmltexCmd"; then
926     AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI or PostScript documentation])
927   else
928     if test -z "$DvipsCmd"; then
929       AC_MSG_WARN([cannot find a DVI  => PS converter, you will not be able to build PostScript documentation])
930     fi
931   fi
932   AC_PATH_PROG([PdfxmltexCmd], [pdfxmltex])
933   if test -z "$PdfxmltexCmd"; then
934     AC_MSG_WARN([cannot find an FO => PDF converter, you will not be able to build PDF documentation])
935   fi
936 elif test -z "$XmltexCmd"; then
937   AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI documentation])
938 fi
939 ])# FP_PROG_FO_PROCESSOR
940
941
942 # FP_PROG_GHC_PKG
943 # ----------------
944 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
945 # WithGhc. If the latter is unset or no matching ghc-pkg can be found, try to
946 # find a plain ghc-pkg. Sets the output variable GhcPkgCmd.
947 AC_DEFUN([FP_PROG_GHC_PKG],
948 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
949 [fp_ghc_pkg_guess=`echo $WithGhc | sed 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
950 if "$fp_ghc_pkg_guess" -l > /dev/null 2>&1; then
951   fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
952 else
953   fp_cv_matching_ghc_pkg=no
954 fi])
955 if test x"$fp_cv_matching_ghc_pkg" = xno; then
956   AC_PATH_PROG([GhcPkgCmd], [ghc-pkg])
957 else
958   GhcPkgCmd=$fp_cv_matching_ghc_pkg
959 fi])# FP_PROG_GHC_PKG
960
961
962 # FP_CHECK_WIN32
963 # --------------
964 # If Windows is the target platform (e.g. MinGW/MSYS or Cygwin with
965 # -mno-cygwin), the variable "is_win32" is set to "yes", otherwise (e.g. *nix
966 # systems or plain Cygwin) it is set to "no".
967 AC_DEFUN([FP_CHECK_WIN32],
968 [AC_CACHE_CHECK([for Windows environment], [fp_cv_is_win32],
969   [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
970 #if !_WIN32
971    syntax error;
972 #endif
973 ])], [fp_cv_is_win32=yes], [fp_cv_is_win32=no])])
974 is_win32="$fp_cv_is_win32"[]dnl
975 ])# FP_CHECK_WIN32
976
977
978 # FP_PATH_X
979 # ---------
980 # Same as AC_PATH_X, but works even for broken Cygwins which try to include the
981 # non-existant <gl/mesa_wgl.h> header when -mno-cygwin is used.
982 AC_DEFUN([FP_PATH_X],
983 [AC_REQUIRE([FP_CHECK_WIN32])
984 if test x"$is_win32" = xyes; then
985   no_x=yes
986 else
987   AC_PATH_X
988 fi
989 ])# FP_PATH_X
990
991
992 # FP_PATH_XTRA
993 # ------------
994 # Same as AC_PATH_XTRA, but works even for broken Cygwins which try to include
995 # the non-existant <gl/mesa_wgl.h> header when -mno-cygwin is used.
996 AC_DEFUN([FP_PATH_XTRA],
997 [AC_REQUIRE([FP_CHECK_WIN32])
998 if test x"$is_win32" = xyes; then
999   no_x=yes
1000 else
1001   AC_PATH_XTRA
1002 fi
1003 ])# FP_PATH_XTRA
1004
1005
1006 # FP_CHECK_GL_HELPER(LIBNAME, LIBS, INCLUDES, FUNCTION-BODY)
1007 # ----------------------------------------------------------
1008 # Try each library in LIBS to successfully link INCLUDES plus FUNCTION-BODY,
1009 # setting LIBNAME_CFLAGS and LIBNAME_LIBS to the corresponding values. Sets
1010 # no_LIBNAME to "yes" if no suitable library was found. (LIBNAME_CFLAGS0
1011 # contains the value of LIBNAME_CFLAGS without CPPFLAGS, and LIBNAME_LIBS0
1012 # contains the value of LIBNAME_LIBS without LDFLAGS, but these are only
1013 # used internally.)
1014 AC_DEFUN([FP_CHECK_GL_HELPER],
1015 [AC_CACHE_CHECK([for $1 library], [fp_cv_check_$1_lib],
1016   [fp_cv_check_$1_lib="no"
1017   fp_save_CPPFLAGS="$CPPFLAGS"
1018   CPPFLAGS="$CPPFLAGS ${$1_CFLAGS}"
1019   fp_save_LIBS="$LIBS"
1020   for fp_try_lib in $2; do
1021     # transform "-lfoo" to "foo.lib" when using cl
1022     if test x"$CC" = xcl; then
1023       fp_try_lib=`echo $fp_try_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
1024     fi
1025     LIBS="$fp_try_lib ${$1_LIBS} $fp_save_LIBS"
1026     AC_TRY_LINK([$3], [$4], [fp_cv_check_$1_lib="$fp_try_lib ${$1_LIBS}"; break])
1027   done
1028   LIBS="$fp_save_LIBS"
1029   CPPFLAGS="$fp_save_CPPFLAGS"])
1030
1031   if test x"$fp_cv_check_$1_lib" = xno; then
1032     no_$1=yes
1033     $1_CFLAGS=
1034     $1_LIBS=
1035   else
1036     $1_CFLAGS0="${$1_CFLAGS}"
1037     $1_CFLAGS="$CPPFLAGS ${$1_CFLAGS0}"
1038     $1_LIBS0="$fp_cv_check_$1_lib"
1039     $1_LIBS="$LDFLAGS ${$1_LIBS0}"
1040   fi
1041 ])# FP_CHECK_GL_HELPER
1042
1043
1044 # FP_CHECK_GL
1045 # -----------
1046 AC_DEFUN([FP_CHECK_GL],
1047 [AC_REQUIRE([FP_PATH_X])
1048 AC_REQUIRE([AC_CANONICAL_SYSTEM])
1049
1050 AC_ARG_ENABLE([hopengl],
1051   [AC_HELP_STRING([--enable-hopengl],
1052     [build a Haskell binding for OpenGL (GL/GLU). On Mac OS X, use
1053      --enable-hopengl=x11 to use X11 instead of the "native" libraries.
1054      (default=no)])],
1055   [enable_opengl=$enableval], [enable_opengl=no])
1056
1057 if test x"$enable_opengl" = xno; then
1058    no_GL=yes
1059 else
1060   use_quartz_opengl=no
1061   case $target_os in
1062   darwin*)
1063     if test x"$enable_opengl" != xx11; then
1064       AC_DEFINE([USE_QUARTZ_OPENGL], [1],
1065                 [Define to 1 if native OpenGL should be used on Mac OS X])
1066       use_quartz_opengl=yes
1067     fi
1068     ;;
1069   esac
1070
1071   if test x"$use_quartz_opengl" != xyes; then
1072     AC_CHECK_LIB([m], [atan], [GL_LIBS="-lm $GL_LIBS"])
1073
1074     if test x"$no_x" != xyes; then
1075       test -n "$x_includes" && GL_CFLAGS="-I$x_includes $GL_CFLAGS"
1076       test -n "$x_libraries" && GL_LIBS="-L$x_libraries -lX11 $GL_LIBS"
1077     fi
1078
1079     FP_CHECK_GL_HELPER([GL], [-lGL -lopengl32], [@%:@include <GL/gl.h>], [glEnd()])
1080
1081     if test x"$no_GL" != xyes; then
1082       # Ugly: To get wglGetProcAddress on Windows, we have to link with
1083       # opengl32.dll, too, even when we are using Cygwin with X11.
1084       case "$GL_LIBS" in
1085         *-lopengl32*|*opengl32.lib*) ;;
1086         *) fp_save_LIBS="$LIBS"
1087            LIBS="$LIBS -lopengl32"
1088            AC_TRY_LINK([@%:@include <GL/gl.h>], [glEnd()],
1089              [GL_LIBS="$GL_LIBS -lopengl32"; GL_LIBS0="$GL_LIBS0 -lopengl32"])
1090            LIBS="$fp_save_LIBS"
1091            ;;
1092       esac
1093     fi
1094   fi
1095 fi
1096
1097 AC_SUBST([GL_CFLAGS])
1098 AC_SUBST([GL_LIBS])
1099 ])# FP_CHECK_GL
1100
1101
1102 # FP_CHECK_GLU
1103 # ------------
1104 AC_DEFUN([FP_CHECK_GLU],
1105 [AC_REQUIRE([FP_CHECK_GL])dnl
1106 GLU_CFLAGS="$GL_CFLAGS0"
1107 GLU_LIBS="$GL_LIBS0"
1108
1109 if test x"$enable_opengl" = xno; then
1110    no_GLU=yes
1111 elif test x"$use_quartz_opengl" != xyes; then
1112   FP_CHECK_GL_HELPER([GLU], [-lglu32 -lGLU], [@%:@include <GL/glu.h>], [gluNewQuadric()])
1113 fi
1114
1115 AC_SUBST([GLU_CFLAGS])
1116 AC_SUBST([GLU_LIBS])
1117 ])# FP_CHECK_GLU
1118
1119
1120 # FP_CHECK_GLUT
1121 # -------------
1122 AC_DEFUN([FP_CHECK_GLUT],
1123 [AC_REQUIRE([FP_CHECK_GLU])
1124 FP_PATH_XTRA
1125
1126 if test x"$enable_opengl" = xno; then
1127    no_GLUT=yes
1128 elif test x"$use_quartz_opengl" != xyes; then
1129   GLUT_CFLAGS="$GLU_CFLAGS0"
1130   GLUT_LIBS="$GLU_LIBS0"
1131
1132   if test x"$no_x" != xyes; then
1133     GLUT_LIBS="$X_PRE_LIBS -lXmu -lXi $X_EXTRA_LIBS $GLUT_LIBS"
1134   fi
1135
1136   AC_CHECK_HEADERS([windows.h GL/glut.h])
1137   # Note 1: On Cygwin with X11, GL/GLU functions use the "normal" calling
1138   # convention, but GLUT functions use stdcall. To get this right, it is
1139   # necessary to include <windows.h> first.
1140   # Note 2: MinGW/MSYS comes without a GLUT header, so we use Cygwin's one in
1141   # that case.
1142   FP_CHECK_GL_HELPER([GLUT], [-lglut32 -lglut], [
1143 #if HAVE_WINDOWS_H
1144 #include <windows.h>
1145 #endif
1146 #if HAVE_GL_GLUT_H
1147 #include <GL/glut.h>
1148 #else
1149 #include "glut_local.h"
1150 #endif
1151     ], [glutMainLoop()])
1152 fi
1153
1154 AC_SUBST([GLUT_CFLAGS])
1155 AC_SUBST([GLUT_LIBS])
1156 ])# FP_CHECK_GLUT
1157
1158
1159 dnl @synopsis FP_EMPTY_STRUCTS
1160 dnl 
1161 dnl Check whether empty structs is accepted by CC.
1162 dnl
1163 AC_DEFUN(FP_EMPTY_STRUCTS,
1164 [AC_CACHE_CHECK(empty struct support, fptools_cv_empty_structs,
1165 [AC_TRY_COMPILE([
1166 typedef struct { /*empty*/ } StgFoo;
1167 ],
1168 [int i;], 
1169 fptools_cv_empty_structs=yes,
1170 fptools_cv_empty_structs=no)])
1171 if test "$fptools_cv_empty_structs" = yes; then
1172 AC_DEFINE([SUPPORTS_EMPTY_STRUCTS], [1], [Define to 1 if C compiler supports declaration of empty structure types.])
1173 fi
1174 ])
1175
1176
1177 # LocalWords:  fi