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