On cygwin, convert happy's path to a native path
[ghc-hetmet.git] / aclocal.m4
1     struct sigevent ev;
2     timer_t timer;
3     ev.sigev_notify = SIGEV_SIGNAL;
4     ev.sigev_signo  = SIGVTALRM;
5     if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
6        exit(1);
7     }
8 #else
9     exit(1)
10 #endif
11     exit(0);
12 }
13 # Extra autoconf macros for the Glasgow fptools
14 #
15 # To be a good autoconf citizen, names of local macros have prefixed with FP_ to
16 # ensure we don't clash with any pre-supplied autoconf ones.
17
18
19 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
20 # ----------------------------------
21 # Little endian Arm on Linux with some ABIs has big endian word order
22 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
23 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
24   [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
25     [AC_COMPILE_IFELSE(
26       [AC_LANG_PROGRAM(
27         [#include <endian.h>],
28         [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
29              return 0;
30          #else
31              not float word order big endian
32          #endif]
33       )],
34       [fptools_cv_float_word_order_bigendian=yes],
35       [fptools_cv_float_word_order_bigendian=no])
36     ])
37   case $fptools_cv_float_word_order_bigendian in
38       yes)
39           AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
40           [Define to 1 if your processor stores words of floats with
41            the most significant byte first]) ;;
42   esac
43 ])
44
45
46 # FP_EVAL_STDERR(COMMAND)
47 # -----------------------
48 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
49 # into the file conftest.err and the exit status in the variable fp_status.
50 AC_DEFUN([FP_EVAL_STDERR],
51 [{ (eval $1) 2>conftest.er1
52   fp_status=$?
53   grep -v '^ *+' conftest.er1 >conftest.err
54   rm -f conftest.er1
55   (exit $fp_status); }[]dnl
56 ])# FP_EVAL_STDERR
57
58
59 # FP_CHECK_FLAG(FLAG, [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED])
60 # ---------------------------------------------------------------------
61 # Check to see whether the compiler for the current language supports a
62 # particular option.
63 #
64 # Implementation note: When given an unkown option, GCC issues an warning on
65 # stderr only, but returns an exit value of 0 nevertheless. Consequently we have
66 # to check stderr *and* the exit value.
67 #
68 # Used by ghc.
69 AC_DEFUN([FP_CHECK_FLAG],
70 [AC_LANG_COMPILER_REQUIRE()dnl
71 AC_LANG_CASE([C],          [fp_compiler="$CC"  m4_pushdef([fp_Flags], [CFLAGS])],
72              [C++],        [fp_compiler="$CXX" m4_pushdef([fp_Flags], [CXXFLAGS])],
73              [Fortran 77], [fp_compiler="$F77" m4_pushdef([fp_Flags], [FFLAGS])])
74 m4_pushdef([fp_Cache], [fp_cv_[]fp_Flags[]AS_TR_SH([$1])])[]dnl
75 AC_CACHE_CHECK([whether $fp_compiler accepts $1], [fp_Cache],
76 [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
77 fp_save_flags="$fp_Flags"
78 fp_Flags="$fp_Flags $1"
79 fp_Cache=no
80 if FP_EVAL_STDERR([$ac_compile conftest.$ac_ext]) >/dev/null; then
81   test -s conftest.err || fp_Cache=yes
82 fi
83 fp_Flags="$fp_save_flags"
84 rm -f conftest.err conftest.$ac_ext])
85 AS_IF([test $fp_Cache = yes], [$2], [$3])[]dnl
86 m4_popdef([fp_Cache])[]dnl
87 m4_popdef([fp_Flags])[]dnl
88 ])# FP_CHECK_FLAG
89
90
91 # FP_PROG_CONTEXT_DIFF
92 # --------------------
93 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
94 #
95 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
96 #
97 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
98 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
99 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
100 [echo foo > conftest1
101 echo foo > conftest2
102 fp_cv_context_diff=no
103 for fp_var in '-U 1' '-u1' '-C 1' '-c1'
104 do
105   if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
106     fp_cv_context_diff="diff $fp_var"
107     break
108   fi
109 done])
110 if test x"$fp_cv_context_diff" = xno; then
111    AC_MSG_ERROR([cannot figure out how to do context diffs])
112 fi
113 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
114 ])# FP_PROG_CONTEXT_DIFF
115
116
117 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
118 # --------------------------------------------------------
119 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
120 # compilation. Execute IF-FAILS when unable to determine the value. Works for
121 # cross-compilation, too.
122 #
123 # Implementation note: We are lazy and use an internal autoconf macro, but it
124 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
125 # little risk.
126 AC_DEFUN([FP_COMPUTE_INT],
127 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
128 ])# FP_COMPUTE_INT
129
130
131 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
132 # ------------------------------------------------------------------
133 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
134 # given type. Defines ALIGNMENT_TYPE.
135 AC_DEFUN([FP_CHECK_ALIGNMENT],
136 [AS_LITERAL_IF([$1], [],
137                [AC_FATAL([$0: requires literal arguments])])[]dnl
138 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
139 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
140 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
141 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
142   FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
143                  [fp_Cache],
144                  [AC_INCLUDES_DEFAULT([$3])],
145                  [AC_MSG_ERROR([cannot compute alignment ($1)
146 See `config.log' for more details.], [77])])
147 else
148   fp_Cache=0
149 fi])[]dnl
150 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
151 m4_popdef([fp_Cache])[]dnl
152 ])# FP_CHECK_ALIGNMENT
153
154
155 # FP_LEADING_UNDERSCORE
156 # ---------------------
157 # Test for determining whether symbol names have a leading underscore. We assume
158 # that they _haven't_ if anything goes wrong. Sets the output variable
159 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
160 #
161 # Some nlist implementations seem to try to be compatible by ignoring a leading
162 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
163 # checking for *no* leading underscore first. Sigh.  --SDM
164 #
165 # Similarly on OpenBSD, but this test doesn't help. -- dons
166 AC_DEFUN([FP_LEADING_UNDERSCORE],
167 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
168 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
169 # Hack!: nlist() under Digital UNIX insist on there being an _,
170 # but symbol table listings shows none. What is going on here?!?
171 #
172 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
173 # the underscoredness of that "platform"
174 case $HostPlatform in
175 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
176   case $build in
177     i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
178     *) fptools_cv_leading_underscore=no ;;
179   esac ;;
180 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
181 *cygwin32) fptools_cv_leading_underscore=yes;;
182 *mingw32) fptools_cv_leading_underscore=yes;;
183
184     # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
185 x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
186
187 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
188 #include <nlist.h>
189 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
190 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
191 #endif
192
193 int main(argc, argv)
194 int argc;
195 char **argv;
196 {
197 #ifdef HAVE_NLIST_H
198     if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
199         exit(1);
200     if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
201         exit(0);
202 #endif
203     exit(1);
204 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
205 ;;
206 esac]);
207 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
208 if test x"$fptools_cv_leading_underscore" = xyes; then
209    AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
210 fi])# FP_LEADING_UNDERSCORE
211
212
213 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
214 # ----------------------------------------------------------------------------------
215 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
216 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
217 AC_DEFUN([FP_COMPARE_VERSIONS],
218 [fp_version1=$1; fp_version2=$3
219 fp_save_IFS=$IFS; IFS='.'
220 while test x"$fp_version1" != x || test x"$fp_version2" != x
221 do
222
223   set dummy $fp_version1; shift
224   fp_num1=""
225   test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
226   test x"$fp_num1" = x && fp_num1="0"
227   fp_version1="[$]*"
228
229   set dummy $fp_version2; shift
230   fp_num2=""
231   test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
232   test x"$fp_num2" = x && fp_num2="0"
233   fp_version2="[$]*"
234
235   test "$fp_num1" = "$fp_num2" || break;
236 done
237 IFS=$fp_save_IFS
238 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
239 ])# FP_COMPARE_VERSIONS
240
241
242 dnl
243 dnl Check for GreenCard and version.
244 dnl
245 AC_DEFUN([FPTOOLS_GREENCARD],
246 [
247 AC_PATH_PROG(GreenCardCmd,greencard)
248 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
249 changequote(, )dnl
250 [if test x"$GreenCardCmd" != x; then
251    fptools_cv_greencard_version="`$GreenCardCmd --version |
252                           grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
253 else
254    fptools_cv_greencard_version=""
255 fi
256 changequote([, ])dnl
257 ])
258 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
259   [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
260 GreenCardVersion=$fptools_cv_greencard_version
261 AC_SUBST(GreenCardVersion)
262 ])
263
264 dnl
265 dnl Check for Happy and version.  If we're building GHC, then we need
266 dnl at least Happy version 1.14.  If there's no installed Happy, we look
267 dnl for a happy source tree and point the build system at that instead.
268 dnl
269 AC_DEFUN([FPTOOLS_HAPPY],
270 [AC_PATH_PROG(HappyCmd,happy,)
271 # Happy is passed to Cabal, so we need a native path
272 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
273    test "${OSTYPE}"      != "msys"                  && \
274    test "${HappyCmd}"    != ""
275 then
276     # Canonicalise to <drive>:/path/to/gcc
277     HappyCmd=`cygpath -m ${HappyCmd}`
278     AC_MSG_NOTICE([normalized happy command to $HappyCmd])
279 fi
280
281 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
282 changequote(, )dnl
283 [if test x"$HappyCmd" != x; then
284    fptools_cv_happy_version="`$HappyCmd -v |
285                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
286 else
287    fptools_cv_happy_version="";
288 fi;
289 changequote([, ])dnl
290 ])
291 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/main/ParsePkgConf.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
292 then
293     FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.15],
294       [AC_MSG_ERROR([Happy version 1.15 or later is required to compile GHC.])])[]dnl
295 fi
296 HappyVersion=$fptools_cv_happy_version;
297 AC_SUBST(HappyVersion)
298 ])
299
300 dnl
301 dnl Check for Haddock and version.  If there's no installed Haddock, we look
302 dnl for a haddock source tree and point the build system at that instead.
303 dnl
304 AC_DEFUN([FPTOOLS_HADDOCK],
305 [AC_PATH_PROG(HaddockCmd,haddock,)
306 dnl Darn, I forgot to make Haddock print out its version number when
307 dnl invoked with -v.  We could try generating some HTML and grepping
308 dnl through that to find the version number, but I think we'll make
309 dnl do without it for now.
310 # Haddock is passed to Cabal, so we need a native path
311 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
312    test "${OSTYPE}"      != "msys"                  && \
313    test "${HaddockCmd}"  != ""
314 then
315     # Canonicalise to <drive>:/path/to/gcc
316     HaddockCmd=`cygpath -m ${HaddockCmd}`
317     AC_MSG_NOTICE([normalized haddock command to $HaddockCmd])
318 fi
319 ])
320
321 dnl
322 dnl Check for Alex and version.  If we're building GHC, then we need
323 dnl at least Alex version 2.0.1.
324 dnl
325 AC_DEFUN([FPTOOLS_ALEX],
326 [
327 AC_PATH_PROG(AlexCmd,alex,)
328 # Alex is passed to Cabal, so we need a native path
329 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
330    test "${OSTYPE}"      != "msys"                  && \
331    test "${AlexCmd}"     != ""
332 then
333     # Canonicalise to <drive>:/path/to/gcc
334     AlexCmd=`cygpath -m ${AlexCmd}`
335 fi
336
337 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
338 changequote(, )dnl
339 [if test x"$AlexCmd" != x; then
340    fptools_cv_alex_version="`$AlexCmd -v |
341                           grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
342 else
343    fptools_cv_alex_version="";
344 fi;
345 changequote([, ])dnl
346 ])
347 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
348 then
349     FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0.1],
350       [AC_MSG_ERROR([Alex version 2.0.1 or later is required to compile GHC.])])[]dnl
351 fi
352 AlexVersion=$fptools_cv_alex_version;
353 AC_SUBST(AlexVersion)
354 ])
355
356
357 # FP_PROG_LD
358 # ----------
359 # Sets the output variable LdCmd to the (non-Cygwin version of the) full path
360 # of ld. Exits if no ld can be found
361 AC_DEFUN([FP_PROG_LD],
362 [
363 if test -z "$1"
364 then
365   AC_PATH_PROG([fp_prog_ld_raw], [ld])
366   if test -z "$fp_prog_ld_raw"; then
367     AC_MSG_ERROR([cannot find ld in your PATH, no idea how to link])
368   fi
369   LdCmd=$fp_prog_ld_raw
370   case $HostPlatform in
371     *mingw32) if test x${OSTYPE} != xmsys; then
372               LdCmd="`cygpath -w ${fp_prog_ld_raw} | sed -e 's@\\\\@/@g'`"
373                 AC_MSG_NOTICE([normalized ld command to $LdCmd])
374               fi
375             # Insist on >= ld-2.15.x, since earlier versions doesn't handle
376             # the generation of relocatable object files with large amounts
377             # of relocations correctly. (cf. HSbase.o splittage-hack)
378             fp_prog_ld_version=`${LdCmd} --version | sed -n '/GNU ld/p' | tr -cd 0-9 | cut -b1-3`
379             FP_COMPARE_VERSIONS([$fp_prog_ld_version],[-lt],[214],
380                                   [AC_MSG_ERROR([GNU ld version later than 2.14 required to compile GHC on Windows.])])[]dnl
381               ;;
382   esac
383 else
384   LdCmd="$1"
385 fi
386 AC_SUBST([LdCmd])
387 ])# FP_PROG_LD
388
389
390 # FP_PROG_LD_X
391 # ------------
392 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
393 # variable's value is empty.
394 AC_DEFUN([FP_PROG_LD_X],
395 [AC_REQUIRE([FP_PROG_LD])
396 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
397 [echo 'foo() {}' > conftest.c
398 ${CC-cc} -c conftest.c
399 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
400    fp_cv_ld_x=yes
401 else
402    fp_cv_ld_x=no
403 fi
404 rm -rf conftest*])
405 if test "$fp_cv_ld_x" = yes; then
406   LdXFlag=-x
407 else
408   LdXFlag=
409 fi
410 AC_SUBST([LdXFlag])
411 ])# FP_PROG_LD_X
412
413
414 # FP_PROG_LD_IS_GNU
415 # -----------------
416 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
417 # GNU ld or not.
418 AC_DEFUN([FP_PROG_LD_IS_GNU],
419 [AC_REQUIRE([FP_PROG_LD])
420 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
421 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
422   fp_cv_gnu_ld=yes
423 else
424   fp_cv_gnu_ld=no
425 fi])
426 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
427 ])# FP_PROG_LD_IS_GNU
428
429
430 # FP_PROG_AR
431 # ----------
432 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
433 # version of it. Exits if no ar can be found
434 AC_DEFUN([FP_PROG_AR],
435 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
436 if test -z "$fp_prog_ar_raw"; then
437   AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
438 fi
439 fp_prog_ar=$fp_prog_ar_raw
440 case $HostPlatform in
441   *mingw32) if test x${OSTYPE} != xmsys; then
442               fp_prog_ar="`cygpath -w ${fp_prog_ar_raw} | sed -e 's@\\\\@/@g'`"
443               AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
444             fi
445             ;;
446 esac
447 ])# FP_PROG_AR
448
449
450 # FP_PROG_AR_IS_GNU
451 # -----------------
452 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
453 AC_DEFUN([FP_PROG_AR_IS_GNU],
454 [AC_REQUIRE([FP_PROG_AR])
455 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
456 [if $fp_prog_ar_raw --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
457   fp_cv_prog_ar_is_gnu=yes
458 else
459   fp_cv_prog_ar_is_gnu=no
460 fi])
461 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
462 ])# FP_PROG_AR_IS_GNU
463
464
465 # FP_PROG_AR_ARGS
466 # ---------------
467 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
468 # to a non-Cygwin invocation of ar including these arguments.
469 AC_DEFUN([FP_PROG_AR_ARGS],
470 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
471 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
472 [
473 # GNU ar needs special treatment: it appears to have problems with
474 # object files with the same name if you use the 's' modifier, but
475 # simple 'ar q' works fine, and doesn't need a separate ranlib.
476 if test $fp_prog_ar_is_gnu = yes; then
477   fp_cv_prog_ar_args="q"
478 else
479   touch conftest.dummy
480   for fp_var in clqsZ clqs cqs clq cq ; do
481      rm -f conftest.a
482      if $fp_prog_ar_raw $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
483         fp_cv_prog_ar_args=$fp_var
484         break
485      fi
486   done
487   rm -f conftest*
488   if test -z "$fp_cv_prog_ar_args"; then
489     AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
490   fi
491 fi])
492 fp_prog_ar_args=$fp_cv_prog_ar_args
493 AC_SUBST([ArCmd], ["$fp_prog_ar $fp_prog_ar_args"])
494
495 ])# FP_PROG_AR_ARGS
496
497
498 # FP_PROG_AR_NEEDS_RANLIB
499 # -----------------------
500 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
501 # to ":" otherwise.
502 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
503 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
504 AC_REQUIRE([FP_PROG_AR_ARGS])
505 AC_REQUIRE([AC_PROG_CC])
506 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
507 [if test $fp_prog_ar_is_gnu = yes; then
508   fp_cv_prog_ar_needs_ranlib=no
509 elif echo $TargetPlatform | grep "^.*-apple-darwin$"  > /dev/null 2> /dev/null; then
510   # It's quite tedious to check for Apple's crazy timestamps in .a files,
511   # so we hardcode it.
512   fp_cv_prog_ar_needs_ranlib=yes
513 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
514   fp_cv_prog_ar_needs_ranlib=no
515 else
516   fp_cv_prog_ar_needs_ranlib=yes
517 fi])
518 if test $fp_cv_prog_ar_needs_ranlib = yes; then
519    AC_PROG_RANLIB
520 else
521   RANLIB=":"
522   AC_SUBST([RANLIB])
523 fi
524 ])# FP_PROG_AR_NEEDS_RANLIB
525
526
527 # FP_PROG_AR_SUPPORTS_INPUT
528 # -------------------------
529 # Sets the output variable ArSupportsInput to "-input" or "", depending on
530 # whether ar supports -input flag is supported or not.
531 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
532 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
533 AC_REQUIRE([FP_PROG_AR_ARGS])
534 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
535 [fp_cv_prog_ar_supports_input=no
536 if test $fp_prog_ar_is_gnu = no; then
537   rm -f conftest*
538   touch conftest.lst
539   if FP_EVAL_STDERR([$fp_prog_ar_raw $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
540     test -s conftest.err || fp_cv_prog_ar_supports_input=yes
541   fi
542   rm -f conftest*
543 fi])
544 if test $fp_cv_prog_ar_supports_input = yes; then
545     ArSupportsInput="-input"
546 else
547     ArSupportsInput=""
548 fi
549 AC_SUBST([ArSupportsInput])
550 ])# FP_PROG_AR_SUPPORTS_INPUT
551
552
553 dnl
554 dnl AC_SHEBANG_PERL - can we she-bang perl?
555 dnl
556 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
557 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
558 [echo "#!$PerlCmd"'
559 exit $1;
560 ' > conftest
561 chmod u+x conftest
562 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
563 if test $? -ne 69; then
564    fptools_cv_shebang_perl=yes
565 else
566    fptools_cv_shebang_perl=no
567 fi
568 rm -f conftest
569 ])])
570
571
572 # FP_HAVE_GCC
573 # -----------
574 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
575 # output variables HaveGcc and GccVersion.
576 AC_DEFUN([FP_HAVE_GCC],
577 [AC_REQUIRE([AC_PROG_CC])
578 if test -z "$GCC"; then
579    fp_have_gcc=NO
580 else
581    fp_have_gcc=YES
582 fi
583 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
584   AC_MSG_ERROR([gcc is required])
585 fi
586 AC_CACHE_CHECK([version of gcc], [fp_gcc_version],
587 [if test "$fp_have_gcc" = "YES"; then
588    fp_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
589    FP_COMPARE_VERSIONS([$fp_gcc_version], [-lt], [2.0],
590      [AC_MSG_ERROR([Need at least gcc version 2.0 (3.4+ recommended)])])
591  else
592    fp_gcc_version="not-installed"
593  fi
594 ])
595 AC_SUBST([HaveGcc], [$fp_have_gcc])
596 AC_SUBST([GccVersion], [$fp_gcc_version])
597 ])# FP_HAVE_GCC
598
599 AC_DEFUN([FP_MINGW_GCC],
600 [
601   case $HostOS_CPP in
602     mingw*)  AC_MSG_CHECKING([whether $CC is a mingw gcc])
603              if $CC -v 2>&1 | grep mingw >/dev/null; then
604                 AC_MSG_RESULT([yes])
605              else
606                 AC_MSG_RESULT([no])
607                 AC_MSG_ERROR([Please use --with-gcc to specify a mingw gcc])
608              fi;;
609     *) ;;       
610   esac
611 ])
612
613 dnl Small feature test for perl version. Assumes PerlCmd
614 dnl contains path to perl binary.
615 dnl
616 dnl (Perl versions prior to v5.6 does not contain the string "v5";
617 dnl instead they display version strings such as "version 5.005".)
618 dnl
619 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
620 [$PerlCmd -v >conftest.out 2>&1
621    if grep "v5" conftest.out >/dev/null 2>&1; then
622       :
623    else
624       AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
625    fi
626 rm -fr conftest*
627 ])
628
629
630 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
631 #               [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
632 # -----------------------------------------------------
633 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
634 # of PROG-TO-CHECK-FOR when found.
635 AC_DEFUN([FP_CHECK_PROG],
636 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
637 )# FP_CHECK_PROC
638
639
640 # FP_PROG_FIND
641 # ------------
642 # Find a non-WinDoze version of the "find" utility.
643 AC_DEFUN([FP_PROG_FIND],
644 [AC_PATH_PROG([fp_prog_find], [find])
645 echo foo > conftest.txt
646 $fp_prog_find conftest.txt -print > conftest.out 2>&1
647 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
648   # OK, looks like a real "find".
649   case $HostPlatform in
650     *mingw32)
651       if test x${OSTYPE} != xmsys
652       then
653             fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
654         AC_MSG_NOTICE([normalized find command to $fp_prog_find])
655       fi ;;
656     *) ;;
657   esac
658   FindCmd="$fp_prog_find"
659 else
660   # Found a poor WinDoze version of "find", ignore it.
661   AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
662   FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
663 fi
664 rm -f conftest.txt conftest.out
665 AC_SUBST([FindCmd])[]dnl
666 ])# FP_PROG_FIND
667
668
669 # FP_PROG_SORT
670 # ------------
671 # Find a Unix-like sort
672 AC_DEFUN([FP_PROG_SORT],
673 [AC_PATH_PROG([fp_prog_sort], [sort])
674 echo conwip > conftest.txt
675 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
676 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
677   # The goods
678   SortCmd="$fp_prog_sort"
679 else
680   # Summink else..pick next one.
681   AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
682   FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
683 fi
684 rm -f conftest.txt conftest.out
685 AC_SUBST([SortCmd])[]dnl
686 ])# FP_PROG_SORT
687
688 dnl
689 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
690 dnl values of the second argument to the result of running
691 dnl the commands given by the third. It does not cache its
692 dnl result, so it is suitable for checks which should be
693 dnl run every time.
694 dnl
695 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
696 [AC_MSG_CHECKING([$1])
697  $3
698  AC_MSG_RESULT([$][$2])
699 ])
700
701 dnl
702 dnl FPTOOLS_GHC_VERSION(version)
703 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
704 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
705 dnl
706 dnl Test for version of installed ghc.  Uses $GHC.
707 dnl [original version pinched from c2hs]
708 dnl
709 AC_DEFUN([FPTOOLS_GHC_VERSION],
710 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
711 ["${WithGhc-ghc}" --version > conftestghc 2>&1
712   cat conftestghc >&AS_MESSAGE_LOG_FD
713 #Useless Use Of cat award...
714   fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
715   rm -fr conftest*
716   if test "[$]fptools_version_of_ghc" = ""
717   then
718     fptools_version_of_ghc='unknown'
719   fi
720 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
721 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
722 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
723 #
724 if test "[$]fptools_version_of_ghc[_pl]" = ""
725 then
726   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
727   fptools_version_of_ghc[_pl]="0"
728 else
729   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
730 fi
731 #
732 ifelse($#, [1], [dnl
733 [$1]="[$]fptools_version_of_ghc[_all]"
734 ], $#, [2], [dnl
735 [$1]="[$]fptools_version_of_ghc[_major]"
736 [$2]="[$]fptools_version_of_ghc[_minor]"
737 ], $#, [3], [dnl
738 [$1]="[$]fptools_version_of_ghc[_major]"
739 [$2]="[$]fptools_version_of_ghc[_minor]"
740 [$3]="[$]fptools_version_of_ghc[_pl]"
741 ], $#, [4], [dnl
742 [$1]="[$]fptools_version_of_ghc[_all]"
743 [$2]="[$]fptools_version_of_ghc[_major]"
744 [$3]="[$]fptools_version_of_ghc[_minor]"
745 [$4]="[$]fptools_version_of_ghc[_pl]"
746 ])
747 ])
748 ])dnl
749
750
751 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
752 # ---------------------------------------------------------------------------------
753 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
754 # additional flexibility of specifying the PROLOGUE and BODY.
755 AC_DEFUN([FP_CHECK_FUNC],
756 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
757 AC_CACHE_CHECK([for $1], fp_func,
758 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
759                 [AS_VAR_SET(fp_func, yes)],
760                 [AS_VAR_SET(fp_func, no)])])
761 AS_IF([test AS_VAR_GET(fp_func) = yes],
762       [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
763                 [Define to 1 if you have the `]$1[' function.]) $4],
764       [$5])dnl
765 AS_VAR_POPDEF([fp_func])dnl
766 ])# FP_CHECK_FUNC
767
768
769 # FP_GEN_DOCBOOK_XML
770 # ------------------
771 # Generates a DocBook XML V4.2 document in conftest.xml.
772 AC_DEFUN([FP_GEN_DOCBOOK_XML],
773 [rm -f conftest.xml
774 cat > conftest.xml << EOF
775 <?xml version="1.0" encoding="iso-8859-1"?>
776 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
777    "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
778 <book id="test">
779   <title>A DocBook Test Document</title>
780   <chapter id="id-one">
781     <title>A Chapter Title</title>
782     <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
783   </chapter>
784   <chapter id="id-two">
785     <title>Another Chapter Title</title>
786     <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
787   </chapter>
788 </book>
789 EOF
790 ]) # FP_GEN_DOCBOOK_XML
791
792
793 # FP_PROG_XSLTPROC
794 # ----------------
795 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
796 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
797 AC_DEFUN([FP_PROG_XSLTPROC],
798 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
799 if test -z "$XsltprocCmd"; then
800   AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the documentation])
801 fi
802 ])# FP_PROG_XSLTPROC
803
804
805 # FP_DIR_DOCBOOK_XSL(XSL-DIRS)
806 # ----------------------------
807 # Check which of the directories XSL-DIRS contains DocBook XSL stylesheets. The
808 # output variable DIR_DOCBOOK_XSL will contain the first usable directory or
809 # will be empty if none could be found.
810 AC_DEFUN([FP_DIR_DOCBOOK_XSL],
811 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
812 if test -n "$XsltprocCmd"; then
813   AC_CACHE_CHECK([for DocBook XSL stylesheet directory], fp_cv_dir_docbook_xsl,
814   [FP_GEN_DOCBOOK_XML
815   fp_cv_dir_docbook_xsl=no
816   for fp_var in $1; do
817      if $XsltprocCmd ${fp_var}/html/docbook.xsl conftest.xml > /dev/null 2>&1; then
818         fp_cv_dir_docbook_xsl=$fp_var
819         break
820      fi
821   done
822   rm -rf conftest*])
823 fi
824 if test x"$fp_cv_dir_docbook_xsl" = xno; then
825   AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
826   DIR_DOCBOOK_XSL=
827 else
828   DIR_DOCBOOK_XSL=$fp_cv_dir_docbook_xsl
829 fi
830 AC_SUBST([DIR_DOCBOOK_XSL])
831 ])# FP_DIR_DOCBOOK_XSL
832
833
834 # FP_PROG_XMLLINT
835 # ----------------
836 # Sets the output variable XmllintCmd to the full path of the XSLT processor
837 # xmllint. XmllintCmd is empty if xmllint could not be found.
838 AC_DEFUN([FP_PROG_XMLLINT],
839 [AC_PATH_PROG([XmllintCmd], [xmllint])
840 if test -z "$XmllintCmd"; then
841   AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
842 fi
843 ])# FP_PROG_XMLLINT
844
845
846 # FP_CHECK_DOCBOOK_DTD
847 # --------------------
848 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
849 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
850 if test -n "$XmllintCmd"; then
851   AC_MSG_CHECKING([for DocBook DTD])
852   FP_GEN_DOCBOOK_XML
853   if $XmllintCmd --valid --noout conftest.xml > /dev/null 2>&1; then
854     AC_MSG_RESULT([ok])
855   else
856     AC_MSG_RESULT([failed])
857     AC_MSG_WARN([cannot find a DTD for DocBook XML V4.2, you will not be able to validate your documentation])
858     AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
859   fi
860   rm -rf conftest*
861 fi
862 ])# FP_CHECK_DOCBOOK_DTD
863
864
865 # FP_GEN_FO
866 # ------------------
867 # Generates a formatting objects document in conftest.fo.
868 AC_DEFUN([FP_GEN_FO],
869 [rm -f conftest.fo
870 cat > conftest.fo << EOF
871 <?xml version="1.0"?>
872 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
873   <fo:layout-master-set>
874     <fo:simple-page-master master-name="blank">
875       <fo:region-body/>
876     </fo:simple-page-master>
877   </fo:layout-master-set>
878   <fo:page-sequence master-reference="blank">
879     <fo:flow flow-name="xsl-region-body">
880       <fo:block>
881         Test!
882       </fo:block>
883     </fo:flow>
884   </fo:page-sequence>
885 </fo:root>
886 EOF
887 ]) # FP_GEN_FO
888
889
890 # FP_PROG_FOP
891 # -----------
892 # Set the output variable 'FopCmd' to the first working 'fop' in the current
893 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
894 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
895 AC_DEFUN([FP_PROG_FOP],
896 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
897 if test -n "$FopCmd1"; then
898   AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
899     [FP_GEN_FO
900     if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
901       fp_cv_fop_usability=yes
902     else
903       fp_cv_fop_usability=no
904     fi
905     rm -rf conftest*])
906   if test x"$fp_cv_fop_usability" = xyes; then
907      FopCmd=$FopCmd1
908   fi
909 fi
910 if test -z "$FopCmd"; then
911   AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
912   FopCmd=$FopCmd2
913 fi
914 AC_SUBST([FopCmd])
915 ])# FP_PROG_FOP
916
917
918 # FP_PROG_FO_PROCESSOR
919 # --------------------
920 # Try to find an FO processor. PassiveTeX output is sometimes a bit strange, so
921 # try FOP first. Sets the output variables FopCmd, XmltexCmd, DvipsCmd, and
922 # PdfxmltexCmd.
923 AC_DEFUN([FP_PROG_FO_PROCESSOR],
924 [AC_REQUIRE([FP_PROG_FOP])
925 AC_PATH_PROG([XmltexCmd], [xmltex])
926 AC_PATH_PROG([DvipsCmd], [dvips])
927 if test -z "$FopCmd"; then
928   if test -z "$XmltexCmd"; then
929     AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI or PostScript documentation])
930   else
931     if test -z "$DvipsCmd"; then
932       AC_MSG_WARN([cannot find a DVI  => PS converter, you will not be able to build PostScript documentation])
933     fi
934   fi
935   AC_PATH_PROG([PdfxmltexCmd], [pdfxmltex])
936   if test -z "$PdfxmltexCmd"; then
937     AC_MSG_WARN([cannot find an FO => PDF converter, you will not be able to build PDF documentation])
938   fi
939 elif test -z "$XmltexCmd"; then
940   AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI documentation])
941 fi
942 ])# FP_PROG_FO_PROCESSOR
943
944
945 # FP_PROG_GHC_PKG
946 # ----------------
947 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
948 # WithGhc. If the latter is unset or no matching ghc-pkg can be found, try to
949 # find a plain ghc-pkg. Sets the output variable GhcPkgCmd.
950 AC_DEFUN([FP_PROG_GHC_PKG],
951 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
952 [fp_ghc_pkg_guess=`echo $WithGhc | sed 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
953 if "$fp_ghc_pkg_guess" -l > /dev/null 2>&1; then
954   fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
955 else
956   fp_cv_matching_ghc_pkg=no
957 fi])
958 if test x"$fp_cv_matching_ghc_pkg" = xno; then
959   AC_PATH_PROG([GhcPkgCmd], [ghc-pkg])
960 else
961   GhcPkgCmd=$fp_cv_matching_ghc_pkg
962 fi])# FP_PROG_GHC_PKG
963
964
965 # FP_GHC_HAS_EDITLINE
966 # -------------------
967 AC_DEFUN([FP_GHC_HAS_EDITLINE],
968 [AC_REQUIRE([FP_PROG_GHC_PKG])
969 AC_CACHE_CHECK([whether ghc has editline package], [fp_cv_ghc_has_editline],
970 [if "${GhcPkgCmd-ghc-pkg}" --show-package editline >/dev/null 2>&1; then
971   fp_cv_ghc_has_editline=yes
972 else
973   fp_cv_ghc_has_editline=no
974  fi])
975 AC_SUBST([GhcHasEditline], [`echo $fp_cv_ghc_has_editline | sed 'y/yesno/YESNO/'`])
976 ])# FP_GHC_HAS_EDITLINE
977
978
979 # FP_GCC_EXTRA_FLAGS
980 # ------------------
981 # Determine which extra flags we need to pass gcc when we invoke it
982 # to compile .hc code.
983 #
984 # Some OSs (Mandrake Linux, in particular) configure GCC with
985 # -momit-leaf-frame-pointer on by default. If this is the case, we
986 # need to turn it off for mangling to work. The test is currently a
987 # bit crude, using only the version number of gcc.
988
989 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
990 # integer wrap around. (Trac #952)
991 #
992 # -fno-unit-at-a-time or -fno-toplevel-reoder is necessary to avoid gcc
993 # reordering things in the module and confusing the manger and/or splitter.
994 # (eg. Trac #1427)
995 #
996 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
997 [AC_REQUIRE([FP_HAVE_GCC])
998 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
999 [fp_cv_gcc_extra_opts=
1000  FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
1001   [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
1002   [])
1003  case $TargetPlatform in
1004   i386-*|x86_64-*) 
1005      FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.2],
1006       [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"],
1007       [])
1008     FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
1009      [FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [4.2],
1010        [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
1011        [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-unit-at-a-time"]
1012      )],
1013      [])
1014   ;;
1015   sparc-*-solaris2) 
1016     FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [4.2],
1017       [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
1018       [])
1019   ;;
1020  esac
1021 ])
1022 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1023 ])
1024
1025
1026 # FP_SETUP_PROJECT_VERSION
1027 # ---------------------
1028 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1029 [
1030 if test "$RELEASE" = "NO"; then
1031     AC_MSG_CHECKING([for GHC version date])
1032     if test -f VERSION_DATE; then
1033         PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1034         AC_MSG_RESULT(given $PACKAGE_VERSION)
1035     elif test -d _darcs; then
1036         changequote(, )dnl
1037         ver_date=`darcs changes --quiet --no-summary --xml | head -500 | grep 'date=' | sed "s/^.*date='\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*$/\1/g" | sort -n | tail -1`
1038         if echo $ver_date | grep '^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$' 2>&1 >/dev/null; then true; else
1039         changequote([, ])dnl
1040                 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
1041         fi
1042         PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1043         AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1044     elif test -f VERSION; then
1045         PACKAGE_VERSION=`cat VERSION`
1046         AC_MSG_RESULT(given $PACKAGE_VERSION)
1047     else
1048         AC_MSG_WARN([cannot determine snapshot version: no _darcs directory and no VERSION file])
1049     fi
1050 fi
1051
1052 # Some renamings
1053 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1054 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1055
1056 # Split PACKAGE_VERSION into (possibly empty) parts
1057 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1058 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1059 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1060 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1061
1062 # Calculate project version as an integer, using 2 digits for minor version
1063 case $VERSION_MINOR in
1064   ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1065   ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1066   *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1067 esac
1068 AC_SUBST([ProjectVersionInt])
1069
1070 # The project patchlevel is zero unless stated otherwise
1071 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1072
1073 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1074 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1075
1076 AC_SUBST([ProjectPatchLevel])
1077 ])# FP_SETUP_PROJECT_VERSION
1078
1079
1080 # Check for a working timer_create().  We need a pretty detailed check
1081 # here, because there exist partially-working implementations of
1082 # timer_create() in certain versions of Linux (see bug #1933).
1083 #
1084 AC_DEFUN([FP_CHECK_TIMER_CREATE],
1085   [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)], 
1086     [fptools_cv_timer_create_works],
1087     [AC_TRY_RUN([
1088 #include <stdio.h>
1089 #ifdef HAVE_STDLIB_H
1090 #include <stdlib.h>
1091 #endif
1092 #ifdef HAVE_TIME_H
1093 #include <time.h>
1094 #endif
1095 #ifdef HAVE_SIGNAL_H
1096 #include <signal.h>
1097 #endif
1098 #ifdef HAVE_UNISTD_H
1099 #include <unistd.h>
1100 #endif
1101
1102 static volatile int tock = 0;
1103 static void handler(int i)
1104 {
1105    tock = 1;
1106 }
1107
1108 static void timeout(int i)
1109 {
1110   // timer_settime() has been known to hang, so just in case
1111   // we install a 1-second timeout (see #2257)
1112   exit(99);
1113 }
1114
1115 int main(int argc, char *argv[])
1116 {
1117
1118     struct sigevent ev;
1119     timer_t timer;
1120     struct itimerspec it;
1121     struct sigaction action;
1122     int m,n,count = 0;
1123
1124     ev.sigev_notify = SIGEV_SIGNAL;
1125     ev.sigev_signo  = SIGVTALRM;
1126
1127     action.sa_handler = handler;
1128     action.sa_flags = 0;
1129     sigemptyset(&action.sa_mask);
1130     if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1131         fprintf(stderr,"SIGVTALRM problem\n");
1132         exit(3);
1133     }
1134
1135     action.sa_handler = timeout;
1136     action.sa_flags = 0;
1137     sigemptyset(&action.sa_mask);
1138     if (sigaction(SIGALRM, &action, NULL) == -1) {
1139       fprintf(stderr,"SIGALRM problem\n");
1140       exit(3);
1141     }
1142     alarm(1);
1143
1144     if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1145         fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1146        exit(1);
1147     }
1148
1149     it.it_value.tv_sec = 0;
1150     it.it_value.tv_nsec = 1;
1151     it.it_interval = it.it_value;
1152     if (timer_settime(timer, 0, &it, NULL) != 0) {
1153         fprintf(stderr,"settime problem\n");
1154         exit(4);
1155     }
1156
1157     tock = 0;
1158
1159     for(n = 3; n < 20000; n++){
1160         for(m = 2; m <= n/2; m++){
1161             if (!(n%m)) count++;
1162             if (tock) goto out;
1163         }
1164     }
1165 out:
1166
1167     if (!tock) {
1168         fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1169         exit(5);
1170     }
1171
1172     timer_delete(timer);
1173
1174     if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1175         fprintf(stderr,"No CLOCK_REALTIME timer\n");
1176         exit(2);
1177     }
1178
1179     it.it_value.tv_sec = 0;
1180     it.it_value.tv_nsec = 1000000;
1181     it.it_interval = it.it_value;
1182     if (timer_settime(timer, 0, &it, NULL) != 0) {
1183         fprintf(stderr,"settime problem\n");
1184         exit(4);
1185     }
1186
1187     tock = 0;
1188
1189     usleep(300);
1190
1191     if (!tock) {
1192         fprintf(stderr,"no CLOCK_REALTIME signal\n");
1193         exit(5);
1194     }
1195
1196     timer_delete(timer);
1197
1198     exit(0);
1199 }
1200      ],
1201      [fptools_cv_timer_create_works=yes],
1202      [fptools_cv_timer_create_works=no])
1203   ])
1204 case $fptools_cv_timer_create_works in
1205     yes) AC_DEFINE([USE_TIMER_CREATE], 1, 
1206                    [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1207 esac
1208 ])
1209
1210 # FP_ARG_GMP
1211 # -------------
1212 AC_DEFUN([FP_ARG_GMP],
1213 [
1214 AC_ARG_WITH([gmp-includes],
1215   [AC_HELP_STRING([--with-gmp-includes],
1216     [directory containing gmp.h])],
1217     [gmp_includes=$withval],
1218     [gmp_includes=NONE])
1219
1220 AC_ARG_WITH([gmp-libraries],
1221   [AC_HELP_STRING([--with-gmp-libraries],
1222     [directory containing gmp library])],
1223     [gmp_libraries=$withval],
1224     [gmp_libraries=NONE])
1225 ])# FP_ARG_GMP
1226
1227 AC_DEFUN([CHECK_GMP],
1228 [AC_REQUIRE([AC_PROG_CPP])
1229 AC_REQUIRE([AC_PROG_CC])
1230 ])
1231
1232 # FP_CHECK_MACOSX_DEPLOYMENT_TARGET
1233 # ---------------------------------
1234 AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
1235 [
1236 if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
1237   AC_MSG_CHECKING([Mac OS X deployment target])
1238   case $FP_MACOSX_DEPLOYMENT_TARGET in
1239     none)  ;;
1240     10.4)  MACOSX_DEPLOYMENT_VERSION=10.4
1241            MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1242            ;;
1243     10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
1244            MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1245            ;;
1246     *)     MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
1247            MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
1248            ;;
1249   esac
1250   if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
1251     AC_MSG_RESULT(none)
1252   else
1253     if test ! -d $MACOSX_DEPLOYMENT_SDK; then
1254       AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
1255     fi
1256     AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
1257   fi
1258 fi
1259 ])
1260
1261 # --------------------------------------------------------------
1262 # Calculate absolute path to build tree
1263 # --------------------------------------------------------------
1264
1265 AC_DEFUN([FP_FIND_ROOT],[
1266 AC_MSG_CHECKING(for path to top of build tree)
1267
1268 dnl This would be
1269 dnl     make -C utils/pwd clean && make -C utils/pwd
1270 dnl except we don't want to have to know what make is called. Sigh.
1271 if test ! -f utils/pwd/pwd && test ! -f utils/pwd/pwd.exe; then
1272   cd utils/pwd
1273   rm -f *.o
1274   rm -f *.hi
1275   rm -f pwd
1276   rm -f pwd.exe
1277   $WithGhc -v0 --make pwd -o pwd
1278   cd ../..
1279 fi
1280
1281 hardtop=`utils/pwd/pwd forwardslash`
1282
1283 if ! test -d "$hardtop"; then
1284   AC_MSG_ERROR([cannot determine current directory])
1285 fi   
1286
1287 dnl Remove common automounter nonsense
1288 dnl
1289 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1290
1291 AC_SUBST(hardtop)
1292
1293 AC_MSG_RESULT(${hardtop})
1294
1295 # We don't support building in directories with spaces.
1296 case "$hardtop" in
1297   *' '*) AC_MSG_ERROR([
1298    The build system does not support building in a directory containing
1299    space characters.  Suggestion: move the build tree somewhere else.])
1300  ;;
1301 esac
1302 ])
1303
1304 # LocalWords:  fi