On cygwin, convert alex'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 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
272 changequote(, )dnl
273 [if test x"$HappyCmd" != x; then
274    fptools_cv_happy_version="`$HappyCmd -v |
275                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
276 else
277    fptools_cv_happy_version="";
278 fi;
279 changequote([, ])dnl
280 ])
281 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
282 then
283     FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.15],
284       [AC_MSG_ERROR([Happy version 1.15 or later is required to compile GHC.])])[]dnl
285 fi
286 HappyVersion=$fptools_cv_happy_version;
287 AC_SUBST(HappyVersion)
288 ])
289
290 dnl
291 dnl Check for Haddock and version.  If there's no installed Haddock, we look
292 dnl for a haddock source tree and point the build system at that instead.
293 dnl
294 AC_DEFUN([FPTOOLS_HADDOCK],
295 [AC_PATH_PROG(HaddockCmd,haddock,)
296 dnl Darn, I forgot to make Haddock print out its version number when
297 dnl invoked with -v.  We could try generating some HTML and grepping
298 dnl through that to find the version number, but I think we'll make
299 dnl do without it for now.
300 ])
301
302 dnl
303 dnl Check for Alex and version.  If we're building GHC, then we need
304 dnl at least Alex version 2.0.1.
305 dnl
306 AC_DEFUN([FPTOOLS_ALEX],
307 [
308 AC_PATH_PROG(AlexCmd,alex,)
309 # Alex is passed to Cabal, so we need a native path
310 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
311    test "${OSTYPE}"      != "msys"                  && \
312    test "${AlexCmd}"     != ""
313 then
314     # Canonicalise to <drive>:/path/to/gcc
315     AlexCmd=`cygpath -m ${AlexCmd}`
316 fi
317
318 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
319 changequote(, )dnl
320 [if test x"$AlexCmd" != x; then
321    fptools_cv_alex_version="`$AlexCmd -v |
322                           grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
323 else
324    fptools_cv_alex_version="";
325 fi;
326 changequote([, ])dnl
327 ])
328 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
329 then
330     FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0.1],
331       [AC_MSG_ERROR([Alex version 2.0.1 or later is required to compile GHC.])])[]dnl
332 fi
333 AlexVersion=$fptools_cv_alex_version;
334 AC_SUBST(AlexVersion)
335 ])
336
337
338 # FP_PROG_LD
339 # ----------
340 # Sets the output variable LdCmd to the (non-Cygwin version of the) full path
341 # of ld. Exits if no ld can be found
342 AC_DEFUN([FP_PROG_LD],
343 [
344 if test -z "$1"
345 then
346   AC_PATH_PROG([fp_prog_ld_raw], [ld])
347   if test -z "$fp_prog_ld_raw"; then
348     AC_MSG_ERROR([cannot find ld in your PATH, no idea how to link])
349   fi
350   LdCmd=$fp_prog_ld_raw
351   case $HostPlatform in
352     *mingw32) if test x${OSTYPE} != xmsys; then
353               LdCmd="`cygpath -w ${fp_prog_ld_raw} | sed -e 's@\\\\@/@g'`"
354                 AC_MSG_NOTICE([normalized ld command to $LdCmd])
355               fi
356             # Insist on >= ld-2.15.x, since earlier versions doesn't handle
357             # the generation of relocatable object files with large amounts
358             # of relocations correctly. (cf. HSbase.o splittage-hack)
359             fp_prog_ld_version=`${LdCmd} --version | sed -n '/GNU ld/p' | tr -cd 0-9 | cut -b1-3`
360             FP_COMPARE_VERSIONS([$fp_prog_ld_version],[-lt],[214],
361                                   [AC_MSG_ERROR([GNU ld version later than 2.14 required to compile GHC on Windows.])])[]dnl
362               ;;
363   esac
364 else
365   LdCmd="$1"
366 fi
367 AC_SUBST([LdCmd])
368 ])# FP_PROG_LD
369
370
371 # FP_PROG_LD_X
372 # ------------
373 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
374 # variable's value is empty.
375 AC_DEFUN([FP_PROG_LD_X],
376 [AC_REQUIRE([FP_PROG_LD])
377 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
378 [echo 'foo() {}' > conftest.c
379 ${CC-cc} -c conftest.c
380 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
381    fp_cv_ld_x=yes
382 else
383    fp_cv_ld_x=no
384 fi
385 rm -rf conftest*])
386 if test "$fp_cv_ld_x" = yes; then
387   LdXFlag=-x
388 else
389   LdXFlag=
390 fi
391 AC_SUBST([LdXFlag])
392 ])# FP_PROG_LD_X
393
394
395 # FP_PROG_LD_IS_GNU
396 # -----------------
397 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
398 # GNU ld or not.
399 AC_DEFUN([FP_PROG_LD_IS_GNU],
400 [AC_REQUIRE([FP_PROG_LD])
401 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
402 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
403   fp_cv_gnu_ld=yes
404 else
405   fp_cv_gnu_ld=no
406 fi])
407 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
408 ])# FP_PROG_LD_IS_GNU
409
410
411 # FP_PROG_AR
412 # ----------
413 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
414 # version of it. Exits if no ar can be found
415 AC_DEFUN([FP_PROG_AR],
416 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
417 if test -z "$fp_prog_ar_raw"; then
418   AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
419 fi
420 fp_prog_ar=$fp_prog_ar_raw
421 case $HostPlatform in
422   *mingw32) if test x${OSTYPE} != xmsys; then
423               fp_prog_ar="`cygpath -w ${fp_prog_ar_raw} | sed -e 's@\\\\@/@g'`"
424               AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
425             fi
426             ;;
427 esac
428 ])# FP_PROG_AR
429
430
431 # FP_PROG_AR_IS_GNU
432 # -----------------
433 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
434 AC_DEFUN([FP_PROG_AR_IS_GNU],
435 [AC_REQUIRE([FP_PROG_AR])
436 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
437 [if $fp_prog_ar_raw --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
438   fp_cv_prog_ar_is_gnu=yes
439 else
440   fp_cv_prog_ar_is_gnu=no
441 fi])
442 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
443 ])# FP_PROG_AR_IS_GNU
444
445
446 # FP_PROG_AR_ARGS
447 # ---------------
448 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
449 # to a non-Cygwin invocation of ar including these arguments.
450 AC_DEFUN([FP_PROG_AR_ARGS],
451 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
452 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
453 [
454 # GNU ar needs special treatment: it appears to have problems with
455 # object files with the same name if you use the 's' modifier, but
456 # simple 'ar q' works fine, and doesn't need a separate ranlib.
457 if test $fp_prog_ar_is_gnu = yes; then
458   fp_cv_prog_ar_args="q"
459 else
460   touch conftest.dummy
461   for fp_var in clqsZ clqs cqs clq cq ; do
462      rm -f conftest.a
463      if $fp_prog_ar_raw $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
464         fp_cv_prog_ar_args=$fp_var
465         break
466      fi
467   done
468   rm -f conftest*
469   if test -z "$fp_cv_prog_ar_args"; then
470     AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
471   fi
472 fi])
473 fp_prog_ar_args=$fp_cv_prog_ar_args
474 AC_SUBST([ArCmd], ["$fp_prog_ar $fp_prog_ar_args"])
475
476 ])# FP_PROG_AR_ARGS
477
478
479 # FP_PROG_AR_NEEDS_RANLIB
480 # -----------------------
481 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
482 # to ":" otherwise.
483 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
484 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
485 AC_REQUIRE([FP_PROG_AR_ARGS])
486 AC_REQUIRE([AC_PROG_CC])
487 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
488 [if test $fp_prog_ar_is_gnu = yes; then
489   fp_cv_prog_ar_needs_ranlib=no
490 elif echo $TargetPlatform | grep "^.*-apple-darwin$"  > /dev/null 2> /dev/null; then
491   # It's quite tedious to check for Apple's crazy timestamps in .a files,
492   # so we hardcode it.
493   fp_cv_prog_ar_needs_ranlib=yes
494 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
495   fp_cv_prog_ar_needs_ranlib=no
496 else
497   fp_cv_prog_ar_needs_ranlib=yes
498 fi])
499 if test $fp_cv_prog_ar_needs_ranlib = yes; then
500    AC_PROG_RANLIB
501 else
502   RANLIB=":"
503   AC_SUBST([RANLIB])
504 fi
505 ])# FP_PROG_AR_NEEDS_RANLIB
506
507
508 # FP_PROG_AR_SUPPORTS_INPUT
509 # -------------------------
510 # Sets the output variable ArSupportsInput to "-input" or "", depending on
511 # whether ar supports -input flag is supported or not.
512 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
513 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
514 AC_REQUIRE([FP_PROG_AR_ARGS])
515 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
516 [fp_cv_prog_ar_supports_input=no
517 if test $fp_prog_ar_is_gnu = no; then
518   rm -f conftest*
519   touch conftest.lst
520   if FP_EVAL_STDERR([$fp_prog_ar_raw $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
521     test -s conftest.err || fp_cv_prog_ar_supports_input=yes
522   fi
523   rm -f conftest*
524 fi])
525 if test $fp_cv_prog_ar_supports_input = yes; then
526     ArSupportsInput="-input"
527 else
528     ArSupportsInput=""
529 fi
530 AC_SUBST([ArSupportsInput])
531 ])# FP_PROG_AR_SUPPORTS_INPUT
532
533
534 dnl
535 dnl AC_SHEBANG_PERL - can we she-bang perl?
536 dnl
537 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
538 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
539 [echo "#!$PerlCmd"'
540 exit $1;
541 ' > conftest
542 chmod u+x conftest
543 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
544 if test $? -ne 69; then
545    fptools_cv_shebang_perl=yes
546 else
547    fptools_cv_shebang_perl=no
548 fi
549 rm -f conftest
550 ])])
551
552
553 # FP_HAVE_GCC
554 # -----------
555 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
556 # output variables HaveGcc and GccVersion.
557 AC_DEFUN([FP_HAVE_GCC],
558 [AC_REQUIRE([AC_PROG_CC])
559 if test -z "$GCC"; then
560    fp_have_gcc=NO
561 else
562    fp_have_gcc=YES
563 fi
564 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
565   AC_MSG_ERROR([gcc is required])
566 fi
567 AC_CACHE_CHECK([version of gcc], [fp_gcc_version],
568 [if test "$fp_have_gcc" = "YES"; then
569    fp_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
570    FP_COMPARE_VERSIONS([$fp_gcc_version], [-lt], [2.0],
571      [AC_MSG_ERROR([Need at least gcc version 2.0 (3.4+ recommended)])])
572  else
573    fp_gcc_version="not-installed"
574  fi
575 ])
576 AC_SUBST([HaveGcc], [$fp_have_gcc])
577 AC_SUBST([GccVersion], [$fp_gcc_version])
578 ])# FP_HAVE_GCC
579
580 AC_DEFUN([FP_MINGW_GCC],
581 [
582   case $HostOS_CPP in
583     mingw*)  AC_MSG_CHECKING([whether $CC is a mingw gcc])
584              if $CC -v 2>&1 | grep mingw >/dev/null; then
585                 AC_MSG_RESULT([yes])
586              else
587                 AC_MSG_RESULT([no])
588                 AC_MSG_ERROR([Please use --with-gcc to specify a mingw gcc])
589              fi;;
590     *) ;;       
591   esac
592 ])
593
594 dnl Small feature test for perl version. Assumes PerlCmd
595 dnl contains path to perl binary.
596 dnl
597 dnl (Perl versions prior to v5.6 does not contain the string "v5";
598 dnl instead they display version strings such as "version 5.005".)
599 dnl
600 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
601 [$PerlCmd -v >conftest.out 2>&1
602    if grep "v5" conftest.out >/dev/null 2>&1; then
603       :
604    else
605       AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
606    fi
607 rm -fr conftest*
608 ])
609
610
611 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
612 #               [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
613 # -----------------------------------------------------
614 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
615 # of PROG-TO-CHECK-FOR when found.
616 AC_DEFUN([FP_CHECK_PROG],
617 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
618 )# FP_CHECK_PROC
619
620
621 # FP_PROG_FIND
622 # ------------
623 # Find a non-WinDoze version of the "find" utility.
624 AC_DEFUN([FP_PROG_FIND],
625 [AC_PATH_PROG([fp_prog_find], [find])
626 echo foo > conftest.txt
627 $fp_prog_find conftest.txt -print > conftest.out 2>&1
628 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
629   # OK, looks like a real "find".
630   case $HostPlatform in
631     *mingw32)
632       if test x${OSTYPE} != xmsys
633       then
634             fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
635         AC_MSG_NOTICE([normalized find command to $fp_prog_find])
636       fi ;;
637     *) ;;
638   esac
639   FindCmd="$fp_prog_find"
640 else
641   # Found a poor WinDoze version of "find", ignore it.
642   AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
643   FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
644 fi
645 rm -f conftest.txt conftest.out
646 AC_SUBST([FindCmd])[]dnl
647 ])# FP_PROG_FIND
648
649
650 # FP_PROG_SORT
651 # ------------
652 # Find a Unix-like sort
653 AC_DEFUN([FP_PROG_SORT],
654 [AC_PATH_PROG([fp_prog_sort], [sort])
655 echo conwip > conftest.txt
656 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
657 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
658   # The goods
659   SortCmd="$fp_prog_sort"
660 else
661   # Summink else..pick next one.
662   AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
663   FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
664 fi
665 rm -f conftest.txt conftest.out
666 AC_SUBST([SortCmd])[]dnl
667 ])# FP_PROG_SORT
668
669 dnl
670 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
671 dnl values of the second argument to the result of running
672 dnl the commands given by the third. It does not cache its
673 dnl result, so it is suitable for checks which should be
674 dnl run every time.
675 dnl
676 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
677 [AC_MSG_CHECKING([$1])
678  $3
679  AC_MSG_RESULT([$][$2])
680 ])
681
682 dnl
683 dnl FPTOOLS_GHC_VERSION(version)
684 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
685 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
686 dnl
687 dnl Test for version of installed ghc.  Uses $GHC.
688 dnl [original version pinched from c2hs]
689 dnl
690 AC_DEFUN([FPTOOLS_GHC_VERSION],
691 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
692 ["${WithGhc-ghc}" --version > conftestghc 2>&1
693   cat conftestghc >&AS_MESSAGE_LOG_FD
694 #Useless Use Of cat award...
695   fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
696   rm -fr conftest*
697   if test "[$]fptools_version_of_ghc" = ""
698   then
699     fptools_version_of_ghc='unknown'
700   fi
701 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
702 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
703 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
704 #
705 if test "[$]fptools_version_of_ghc[_pl]" = ""
706 then
707   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
708   fptools_version_of_ghc[_pl]="0"
709 else
710   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
711 fi
712 #
713 ifelse($#, [1], [dnl
714 [$1]="[$]fptools_version_of_ghc[_all]"
715 ], $#, [2], [dnl
716 [$1]="[$]fptools_version_of_ghc[_major]"
717 [$2]="[$]fptools_version_of_ghc[_minor]"
718 ], $#, [3], [dnl
719 [$1]="[$]fptools_version_of_ghc[_major]"
720 [$2]="[$]fptools_version_of_ghc[_minor]"
721 [$3]="[$]fptools_version_of_ghc[_pl]"
722 ], $#, [4], [dnl
723 [$1]="[$]fptools_version_of_ghc[_all]"
724 [$2]="[$]fptools_version_of_ghc[_major]"
725 [$3]="[$]fptools_version_of_ghc[_minor]"
726 [$4]="[$]fptools_version_of_ghc[_pl]"
727 ])
728 ])
729 ])dnl
730
731
732 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
733 # ---------------------------------------------------------------------------------
734 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
735 # additional flexibility of specifying the PROLOGUE and BODY.
736 AC_DEFUN([FP_CHECK_FUNC],
737 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
738 AC_CACHE_CHECK([for $1], fp_func,
739 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
740                 [AS_VAR_SET(fp_func, yes)],
741                 [AS_VAR_SET(fp_func, no)])])
742 AS_IF([test AS_VAR_GET(fp_func) = yes],
743       [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
744                 [Define to 1 if you have the `]$1[' function.]) $4],
745       [$5])dnl
746 AS_VAR_POPDEF([fp_func])dnl
747 ])# FP_CHECK_FUNC
748
749
750 # FP_GEN_DOCBOOK_XML
751 # ------------------
752 # Generates a DocBook XML V4.2 document in conftest.xml.
753 AC_DEFUN([FP_GEN_DOCBOOK_XML],
754 [rm -f conftest.xml
755 cat > conftest.xml << EOF
756 <?xml version="1.0" encoding="iso-8859-1"?>
757 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
758    "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
759 <book id="test">
760   <title>A DocBook Test Document</title>
761   <chapter id="id-one">
762     <title>A Chapter Title</title>
763     <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
764   </chapter>
765   <chapter id="id-two">
766     <title>Another Chapter Title</title>
767     <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
768   </chapter>
769 </book>
770 EOF
771 ]) # FP_GEN_DOCBOOK_XML
772
773
774 # FP_PROG_XSLTPROC
775 # ----------------
776 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
777 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
778 AC_DEFUN([FP_PROG_XSLTPROC],
779 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
780 if test -z "$XsltprocCmd"; then
781   AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the documentation])
782 fi
783 ])# FP_PROG_XSLTPROC
784
785
786 # FP_DIR_DOCBOOK_XSL(XSL-DIRS)
787 # ----------------------------
788 # Check which of the directories XSL-DIRS contains DocBook XSL stylesheets. The
789 # output variable DIR_DOCBOOK_XSL will contain the first usable directory or
790 # will be empty if none could be found.
791 AC_DEFUN([FP_DIR_DOCBOOK_XSL],
792 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
793 if test -n "$XsltprocCmd"; then
794   AC_CACHE_CHECK([for DocBook XSL stylesheet directory], fp_cv_dir_docbook_xsl,
795   [FP_GEN_DOCBOOK_XML
796   fp_cv_dir_docbook_xsl=no
797   for fp_var in $1; do
798      if $XsltprocCmd ${fp_var}/html/docbook.xsl conftest.xml > /dev/null 2>&1; then
799         fp_cv_dir_docbook_xsl=$fp_var
800         break
801      fi
802   done
803   rm -rf conftest*])
804 fi
805 if test x"$fp_cv_dir_docbook_xsl" = xno; then
806   AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
807   DIR_DOCBOOK_XSL=
808 else
809   DIR_DOCBOOK_XSL=$fp_cv_dir_docbook_xsl
810 fi
811 AC_SUBST([DIR_DOCBOOK_XSL])
812 ])# FP_DIR_DOCBOOK_XSL
813
814
815 # FP_PROG_XMLLINT
816 # ----------------
817 # Sets the output variable XmllintCmd to the full path of the XSLT processor
818 # xmllint. XmllintCmd is empty if xmllint could not be found.
819 AC_DEFUN([FP_PROG_XMLLINT],
820 [AC_PATH_PROG([XmllintCmd], [xmllint])
821 if test -z "$XmllintCmd"; then
822   AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
823 fi
824 ])# FP_PROG_XMLLINT
825
826
827 # FP_CHECK_DOCBOOK_DTD
828 # --------------------
829 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
830 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
831 if test -n "$XmllintCmd"; then
832   AC_MSG_CHECKING([for DocBook DTD])
833   FP_GEN_DOCBOOK_XML
834   if $XmllintCmd --valid --noout conftest.xml > /dev/null 2>&1; then
835     AC_MSG_RESULT([ok])
836   else
837     AC_MSG_RESULT([failed])
838     AC_MSG_WARN([cannot find a DTD for DocBook XML V4.2, you will not be able to validate your documentation])
839     AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
840   fi
841   rm -rf conftest*
842 fi
843 ])# FP_CHECK_DOCBOOK_DTD
844
845
846 # FP_GEN_FO
847 # ------------------
848 # Generates a formatting objects document in conftest.fo.
849 AC_DEFUN([FP_GEN_FO],
850 [rm -f conftest.fo
851 cat > conftest.fo << EOF
852 <?xml version="1.0"?>
853 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
854   <fo:layout-master-set>
855     <fo:simple-page-master master-name="blank">
856       <fo:region-body/>
857     </fo:simple-page-master>
858   </fo:layout-master-set>
859   <fo:page-sequence master-reference="blank">
860     <fo:flow flow-name="xsl-region-body">
861       <fo:block>
862         Test!
863       </fo:block>
864     </fo:flow>
865   </fo:page-sequence>
866 </fo:root>
867 EOF
868 ]) # FP_GEN_FO
869
870
871 # FP_PROG_FOP
872 # -----------
873 # Set the output variable 'FopCmd' to the first working 'fop' in the current
874 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
875 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
876 AC_DEFUN([FP_PROG_FOP],
877 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
878 if test -n "$FopCmd1"; then
879   AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
880     [FP_GEN_FO
881     if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
882       fp_cv_fop_usability=yes
883     else
884       fp_cv_fop_usability=no
885     fi
886     rm -rf conftest*])
887   if test x"$fp_cv_fop_usability" = xyes; then
888      FopCmd=$FopCmd1
889   fi
890 fi
891 if test -z "$FopCmd"; then
892   AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
893   FopCmd=$FopCmd2
894 fi
895 AC_SUBST([FopCmd])
896 ])# FP_PROG_FOP
897
898
899 # FP_PROG_FO_PROCESSOR
900 # --------------------
901 # Try to find an FO processor. PassiveTeX output is sometimes a bit strange, so
902 # try FOP first. Sets the output variables FopCmd, XmltexCmd, DvipsCmd, and
903 # PdfxmltexCmd.
904 AC_DEFUN([FP_PROG_FO_PROCESSOR],
905 [AC_REQUIRE([FP_PROG_FOP])
906 AC_PATH_PROG([XmltexCmd], [xmltex])
907 AC_PATH_PROG([DvipsCmd], [dvips])
908 if test -z "$FopCmd"; then
909   if test -z "$XmltexCmd"; then
910     AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI or PostScript documentation])
911   else
912     if test -z "$DvipsCmd"; then
913       AC_MSG_WARN([cannot find a DVI  => PS converter, you will not be able to build PostScript documentation])
914     fi
915   fi
916   AC_PATH_PROG([PdfxmltexCmd], [pdfxmltex])
917   if test -z "$PdfxmltexCmd"; then
918     AC_MSG_WARN([cannot find an FO => PDF converter, you will not be able to build PDF documentation])
919   fi
920 elif test -z "$XmltexCmd"; then
921   AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI documentation])
922 fi
923 ])# FP_PROG_FO_PROCESSOR
924
925
926 # FP_PROG_GHC_PKG
927 # ----------------
928 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
929 # WithGhc. If the latter is unset or no matching ghc-pkg can be found, try to
930 # find a plain ghc-pkg. Sets the output variable GhcPkgCmd.
931 AC_DEFUN([FP_PROG_GHC_PKG],
932 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
933 [fp_ghc_pkg_guess=`echo $WithGhc | sed 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
934 if "$fp_ghc_pkg_guess" -l > /dev/null 2>&1; then
935   fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
936 else
937   fp_cv_matching_ghc_pkg=no
938 fi])
939 if test x"$fp_cv_matching_ghc_pkg" = xno; then
940   AC_PATH_PROG([GhcPkgCmd], [ghc-pkg])
941 else
942   GhcPkgCmd=$fp_cv_matching_ghc_pkg
943 fi])# FP_PROG_GHC_PKG
944
945
946 # FP_GHC_HAS_EDITLINE
947 # -------------------
948 AC_DEFUN([FP_GHC_HAS_EDITLINE],
949 [AC_REQUIRE([FP_PROG_GHC_PKG])
950 AC_CACHE_CHECK([whether ghc has editline package], [fp_cv_ghc_has_editline],
951 [if "${GhcPkgCmd-ghc-pkg}" --show-package editline >/dev/null 2>&1; then
952   fp_cv_ghc_has_editline=yes
953 else
954   fp_cv_ghc_has_editline=no
955  fi])
956 AC_SUBST([GhcHasEditline], [`echo $fp_cv_ghc_has_editline | sed 'y/yesno/YESNO/'`])
957 ])# FP_GHC_HAS_EDITLINE
958
959
960 # FP_GCC_EXTRA_FLAGS
961 # ------------------
962 # Determine which extra flags we need to pass gcc when we invoke it
963 # to compile .hc code.
964 #
965 # Some OSs (Mandrake Linux, in particular) configure GCC with
966 # -momit-leaf-frame-pointer on by default. If this is the case, we
967 # need to turn it off for mangling to work. The test is currently a
968 # bit crude, using only the version number of gcc.
969
970 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
971 # integer wrap around. (Trac #952)
972 #
973 # -fno-unit-at-a-time or -fno-toplevel-reoder is necessary to avoid gcc
974 # reordering things in the module and confusing the manger and/or splitter.
975 # (eg. Trac #1427)
976 #
977 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
978 [AC_REQUIRE([FP_HAVE_GCC])
979 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
980 [fp_cv_gcc_extra_opts=
981  FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
982   [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
983   [])
984  case $TargetPlatform in
985   i386-*|x86_64-*) 
986      FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.2],
987       [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"],
988       [])
989     FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
990      [FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [4.2],
991        [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
992        [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-unit-at-a-time"]
993      )],
994      [])
995   ;;
996   sparc-*-solaris2) 
997     FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [4.2],
998       [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
999       [])
1000   ;;
1001  esac
1002 ])
1003 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1004 ])
1005
1006
1007 # FP_SETUP_PROJECT_VERSION
1008 # ---------------------
1009 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1010 [
1011 if test "$RELEASE" = "NO"; then
1012     AC_MSG_CHECKING([for GHC version date])
1013     if test -f VERSION_DATE; then
1014         PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1015         AC_MSG_RESULT(given $PACKAGE_VERSION)
1016     elif test -d _darcs; then
1017         changequote(, )dnl
1018         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`
1019         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
1020         changequote([, ])dnl
1021                 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
1022         fi
1023         PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1024         AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1025     elif test -f VERSION; then
1026         PACKAGE_VERSION=`cat VERSION`
1027         AC_MSG_RESULT(given $PACKAGE_VERSION)
1028     else
1029         AC_MSG_WARN([cannot determine snapshot version: no _darcs directory and no VERSION file])
1030     fi
1031 fi
1032
1033 # Some renamings
1034 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1035 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1036
1037 # Split PACKAGE_VERSION into (possibly empty) parts
1038 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1039 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1040 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1041 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1042
1043 # Calculate project version as an integer, using 2 digits for minor version
1044 case $VERSION_MINOR in
1045   ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1046   ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1047   *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1048 esac
1049 AC_SUBST([ProjectVersionInt])
1050
1051 # The project patchlevel is zero unless stated otherwise
1052 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1053
1054 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1055 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1056
1057 AC_SUBST([ProjectPatchLevel])
1058 ])# FP_SETUP_PROJECT_VERSION
1059
1060
1061 # Check for a working timer_create().  We need a pretty detailed check
1062 # here, because there exist partially-working implementations of
1063 # timer_create() in certain versions of Linux (see bug #1933).
1064 #
1065 AC_DEFUN([FP_CHECK_TIMER_CREATE],
1066   [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)], 
1067     [fptools_cv_timer_create_works],
1068     [AC_TRY_RUN([
1069 #include <stdio.h>
1070 #ifdef HAVE_STDLIB_H
1071 #include <stdlib.h>
1072 #endif
1073 #ifdef HAVE_TIME_H
1074 #include <time.h>
1075 #endif
1076 #ifdef HAVE_SIGNAL_H
1077 #include <signal.h>
1078 #endif
1079 #ifdef HAVE_UNISTD_H
1080 #include <unistd.h>
1081 #endif
1082
1083 static volatile int tock = 0;
1084 static void handler(int i)
1085 {
1086    tock = 1;
1087 }
1088
1089 static void timeout(int i)
1090 {
1091   // timer_settime() has been known to hang, so just in case
1092   // we install a 1-second timeout (see #2257)
1093   exit(99);
1094 }
1095
1096 int main(int argc, char *argv[])
1097 {
1098
1099     struct sigevent ev;
1100     timer_t timer;
1101     struct itimerspec it;
1102     struct sigaction action;
1103     int m,n,count = 0;
1104
1105     ev.sigev_notify = SIGEV_SIGNAL;
1106     ev.sigev_signo  = SIGVTALRM;
1107
1108     action.sa_handler = handler;
1109     action.sa_flags = 0;
1110     sigemptyset(&action.sa_mask);
1111     if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1112         fprintf(stderr,"SIGVTALRM problem\n");
1113         exit(3);
1114     }
1115
1116     action.sa_handler = timeout;
1117     action.sa_flags = 0;
1118     sigemptyset(&action.sa_mask);
1119     if (sigaction(SIGALRM, &action, NULL) == -1) {
1120       fprintf(stderr,"SIGALRM problem\n");
1121       exit(3);
1122     }
1123     alarm(1);
1124
1125     if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1126         fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1127        exit(1);
1128     }
1129
1130     it.it_value.tv_sec = 0;
1131     it.it_value.tv_nsec = 1;
1132     it.it_interval = it.it_value;
1133     if (timer_settime(timer, 0, &it, NULL) != 0) {
1134         fprintf(stderr,"settime problem\n");
1135         exit(4);
1136     }
1137
1138     tock = 0;
1139
1140     for(n = 3; n < 20000; n++){
1141         for(m = 2; m <= n/2; m++){
1142             if (!(n%m)) count++;
1143             if (tock) goto out;
1144         }
1145     }
1146 out:
1147
1148     if (!tock) {
1149         fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1150         exit(5);
1151     }
1152
1153     timer_delete(timer);
1154
1155     if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1156         fprintf(stderr,"No CLOCK_REALTIME timer\n");
1157         exit(2);
1158     }
1159
1160     it.it_value.tv_sec = 0;
1161     it.it_value.tv_nsec = 1000000;
1162     it.it_interval = it.it_value;
1163     if (timer_settime(timer, 0, &it, NULL) != 0) {
1164         fprintf(stderr,"settime problem\n");
1165         exit(4);
1166     }
1167
1168     tock = 0;
1169
1170     usleep(300);
1171
1172     if (!tock) {
1173         fprintf(stderr,"no CLOCK_REALTIME signal\n");
1174         exit(5);
1175     }
1176
1177     timer_delete(timer);
1178
1179     exit(0);
1180 }
1181      ],
1182      [fptools_cv_timer_create_works=yes],
1183      [fptools_cv_timer_create_works=no])
1184   ])
1185 case $fptools_cv_timer_create_works in
1186     yes) AC_DEFINE([USE_TIMER_CREATE], 1, 
1187                    [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1188 esac
1189 ])
1190
1191 # FP_ARG_GMP
1192 # -------------
1193 AC_DEFUN([FP_ARG_GMP],
1194 [
1195 AC_ARG_WITH([gmp-includes],
1196   [AC_HELP_STRING([--with-gmp-includes],
1197     [directory containing gmp.h])],
1198     [gmp_includes=$withval],
1199     [gmp_includes=NONE])
1200
1201 AC_ARG_WITH([gmp-libraries],
1202   [AC_HELP_STRING([--with-gmp-libraries],
1203     [directory containing gmp library])],
1204     [gmp_libraries=$withval],
1205     [gmp_libraries=NONE])
1206 ])# FP_ARG_GMP
1207
1208 AC_DEFUN([CHECK_GMP],
1209 [AC_REQUIRE([AC_PROG_CPP])
1210 AC_REQUIRE([AC_PROG_CC])
1211 ])
1212
1213 # FP_CHECK_MACOSX_DEPLOYMENT_TARGET
1214 # ---------------------------------
1215 AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
1216 [
1217 if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
1218   AC_MSG_CHECKING([Mac OS X deployment target])
1219   case $FP_MACOSX_DEPLOYMENT_TARGET in
1220     none)  ;;
1221     10.4)  MACOSX_DEPLOYMENT_VERSION=10.4
1222            MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1223            ;;
1224     10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
1225            MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1226            ;;
1227     *)     MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
1228            MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
1229            ;;
1230   esac
1231   if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
1232     AC_MSG_RESULT(none)
1233   else
1234     if test ! -d $MACOSX_DEPLOYMENT_SDK; then
1235       AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
1236     fi
1237     AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
1238   fi
1239 fi
1240 ])
1241
1242 # --------------------------------------------------------------
1243 # Calculate absolute path to build tree
1244 # --------------------------------------------------------------
1245
1246 AC_DEFUN([FP_FIND_ROOT],[
1247 AC_MSG_CHECKING(for path to top of build tree)
1248
1249 dnl This would be
1250 dnl     make -C utils/pwd clean && make -C utils/pwd
1251 dnl except we don't want to have to know what make is called. Sigh.
1252 if test ! -f utils/pwd/pwd && test ! -f utils/pwd/pwd.exe; then
1253   cd utils/pwd
1254   rm -f *.o
1255   rm -f *.hi
1256   rm -f pwd
1257   rm -f pwd.exe
1258   $WithGhc -v0 --make pwd -o pwd
1259   cd ../..
1260 fi
1261
1262 hardtop=`utils/pwd/pwd forwardslash`
1263
1264 if ! test -d "$hardtop"; then
1265   AC_MSG_ERROR([cannot determine current directory])
1266 fi   
1267
1268 dnl Remove common automounter nonsense
1269 dnl
1270 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1271
1272 AC_SUBST(hardtop)
1273
1274 AC_MSG_RESULT(${hardtop})
1275
1276 # We don't support building in directories with spaces.
1277 case "$hardtop" in
1278   *' '*) AC_MSG_ERROR([
1279    The build system does not support building in a directory containing
1280    space characters.  Suggestion: move the build tree somewhere else.])
1281  ;;
1282 esac
1283 ])
1284
1285 # LocalWords:  fi