1 # Extra autoconf macros for the Glasgow fptools
3 # To be a good autoconf citizen, names of local macros have prefixed with FP_ to
4 # ensure we don't clash with any pre-supplied autoconf ones.
7 # FPTOOLS_SET_C_LD_FLAGS
8 # ----------------------------------
9 # Set the C and LD flags for a given platform
10 AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
13 i386-apple-darwin|powerpc-apple-darwin)
25 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
26 # ----------------------------------
27 # Little endian Arm on Linux with some ABIs has big endian word order
28 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
29 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
30 [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
33 [#include <endian.h>],
34 [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
37 not float word order big endian
40 [fptools_cv_float_word_order_bigendian=yes],
41 [fptools_cv_float_word_order_bigendian=no])
43 case $fptools_cv_float_word_order_bigendian in
45 AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
46 [Define to 1 if your processor stores words of floats with
47 the most significant byte first]) ;;
52 # FP_EVAL_STDERR(COMMAND)
53 # -----------------------
54 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
55 # into the file conftest.err and the exit status in the variable fp_status.
56 AC_DEFUN([FP_EVAL_STDERR],
57 [{ (eval $1) 2>conftest.er1
59 grep -v '^ *+' conftest.er1 >conftest.err
61 (exit $fp_status); }[]dnl
65 # FP_ARG_WITH_PATH_GNU_PROG
66 # --------------------
69 # $1 = the command to look for
70 # $2 = the variable to set
72 AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
75 [AC_HELP_STRING([--with-$2=ARG],
76 [Use ARG as the path to $2 [default=autodetect]])],
78 if test "$HostOS" = "mingw32"
80 AC_MSG_WARN([Request to use $withval will be ignored])
86 if test "$HostOS" != "mingw32"
88 AC_PATH_PROG([$1], [$2])
91 AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link])
96 ]) # FP_ARG_WITH_PATH_GNU_PROG
99 # FP_PROG_CONTEXT_DIFF
100 # --------------------
101 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
103 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
105 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
106 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
107 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
108 [echo foo > conftest1
110 fp_cv_context_diff=no
111 for fp_var in '-U 1' '-u1' '-C 1' '-c1'
113 if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
114 fp_cv_context_diff="diff $fp_var"
118 if test x"$fp_cv_context_diff" = xno; then
119 AC_MSG_ERROR([cannot figure out how to do context diffs])
121 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
122 ])# FP_PROG_CONTEXT_DIFF
125 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
126 # --------------------------------------------------------
127 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
128 # compilation. Execute IF-FAILS when unable to determine the value. Works for
129 # cross-compilation, too.
131 # Implementation note: We are lazy and use an internal autoconf macro, but it
132 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
134 AC_DEFUN([FP_COMPUTE_INT],
135 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
139 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
140 # ------------------------------------------------------------------
141 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
142 # given type. Defines ALIGNMENT_TYPE.
143 AC_DEFUN([FP_CHECK_ALIGNMENT],
144 [AS_LITERAL_IF([$1], [],
145 [AC_FATAL([$0: requires literal arguments])])[]dnl
146 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
147 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
148 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
149 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
150 FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
152 [AC_INCLUDES_DEFAULT([$3])],
153 [AC_MSG_ERROR([cannot compute alignment ($1)
154 See `config.log' for more details.], [77])])
158 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
159 m4_popdef([fp_Cache])[]dnl
160 ])# FP_CHECK_ALIGNMENT
163 # FP_LEADING_UNDERSCORE
164 # ---------------------
165 # Test for determining whether symbol names have a leading underscore. We assume
166 # that they _haven't_ if anything goes wrong. Sets the output variable
167 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
169 # Some nlist implementations seem to try to be compatible by ignoring a leading
170 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
171 # checking for *no* leading underscore first. Sigh. --SDM
173 # Similarly on OpenBSD, but this test doesn't help. -- dons
174 AC_DEFUN([FP_LEADING_UNDERSCORE],
175 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
176 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
177 # Hack!: nlist() under Digital UNIX insist on there being an _,
178 # but symbol table listings shows none. What is going on here?!?
180 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
181 # the underscoredness of that "platform"
182 case $HostPlatform in
183 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
185 i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
186 *) fptools_cv_leading_underscore=no ;;
188 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
189 *cygwin32) fptools_cv_leading_underscore=yes;;
190 *mingw32) fptools_cv_leading_underscore=yes;;
192 # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
193 x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
195 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
197 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
198 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
206 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
208 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
212 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
215 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
216 if test x"$fptools_cv_leading_underscore" = xyes; then
217 AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
218 fi])# FP_LEADING_UNDERSCORE
221 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
222 # ----------------------------------------------------------------------------------
223 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
224 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
225 AC_DEFUN([FP_COMPARE_VERSIONS],
226 [fp_version1=$1; fp_version2=$3
227 fp_save_IFS=$IFS; IFS='.'
228 while test x"$fp_version1" != x || test x"$fp_version2" != x
231 set dummy $fp_version1; shift
233 test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
234 test x"$fp_num1" = x && fp_num1="0"
237 set dummy $fp_version2; shift
239 test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
240 test x"$fp_num2" = x && fp_num2="0"
243 test "$fp_num1" = "$fp_num2" || break;
246 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
247 ])# FP_COMPARE_VERSIONS
251 dnl Check for GreenCard and version.
253 AC_DEFUN([FPTOOLS_GREENCARD],
255 AC_PATH_PROG(GreenCardCmd,greencard)
256 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
258 [if test x"$GreenCardCmd" != x; then
259 fptools_cv_greencard_version="`$GreenCardCmd --version |
260 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
262 fptools_cv_greencard_version=""
266 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
267 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
268 GreenCardVersion=$fptools_cv_greencard_version
269 AC_SUBST(GreenCardVersion)
273 dnl Check for Happy and version. If we're building GHC, then we need
274 dnl at least Happy version 1.14. If there's no installed Happy, we look
275 dnl for a happy source tree and point the build system at that instead.
277 AC_DEFUN([FPTOOLS_HAPPY],
278 [AC_PATH_PROG(HappyCmd,happy,)
279 # Happy is passed to Cabal, so we need a native path
280 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
281 test "${OSTYPE}" != "msys" && \
282 test "${HappyCmd}" != ""
284 # Canonicalise to <drive>:/path/to/gcc
285 HappyCmd=`cygpath -m "${HappyCmd}"`
286 AC_MSG_NOTICE([normalized happy command to $HappyCmd])
289 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
291 [if test x"$HappyCmd" != x; then
292 fptools_cv_happy_version=`"$HappyCmd" -v |
293 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ;
295 fptools_cv_happy_version="";
299 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
301 FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.16],
302 [AC_MSG_ERROR([Happy version 1.16 or later is required to compile GHC.])])[]
304 HappyVersion=$fptools_cv_happy_version;
305 AC_SUBST(HappyVersion)
309 dnl Check for Alex and version. If we're building GHC, then we need
310 dnl at least Alex version 2.0.1.
312 AC_DEFUN([FPTOOLS_ALEX],
314 AC_PATH_PROG(AlexCmd,alex,)
315 # Alex is passed to Cabal, so we need a native path
316 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
317 test "${OSTYPE}" != "msys" && \
318 test "${AlexCmd}" != ""
320 # Canonicalise to <drive>:/path/to/gcc
321 AlexCmd=`cygpath -m "${AlexCmd}"`
324 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
326 [if test x"$AlexCmd" != x; then
327 fptools_cv_alex_version=`"$AlexCmd" -v |
328 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'` ;
330 fptools_cv_alex_version="";
334 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
336 FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.1.0],
337 [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[]
339 AlexVersion=$fptools_cv_alex_version;
340 AC_SUBST(AlexVersion)
346 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
347 # variable's value is empty.
348 AC_DEFUN([FP_PROG_LD_X],
350 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
351 [echo 'foo() {}' > conftest.c
352 ${CC-cc} -c conftest.c
353 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
359 if test "$fp_cv_ld_x" = yes; then
370 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
372 AC_DEFUN([FP_PROG_LD_IS_GNU],
374 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
375 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
380 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
381 ])# FP_PROG_LD_IS_GNU
386 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
387 # version of it. Exits if no ar can be found
388 AC_DEFUN([FP_PROG_AR],
389 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
390 if test -z "$fp_prog_ar_raw"; then
391 AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
393 fp_prog_ar="$fp_prog_ar_raw"
394 case $HostPlatform in
395 *mingw32) if test x${OSTYPE} != xmsys; then
396 fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`"
397 AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
406 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
407 AC_DEFUN([FP_PROG_AR_IS_GNU],
408 [AC_REQUIRE([FP_PROG_AR])
409 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
410 [if "$fp_prog_ar_raw" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
411 fp_cv_prog_ar_is_gnu=yes
413 fp_cv_prog_ar_is_gnu=no
415 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
416 AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
417 ])# FP_PROG_AR_IS_GNU
420 # FP_PROG_AR_SUPPORTS_ATFILE
422 # Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
423 # or not it supports the @file syntax
424 AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
425 [AC_REQUIRE([FP_PROG_AR])
426 AC_REQUIRE([FP_PROG_AR_ARGS])
427 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports @file], [fp_cv_prog_ar_supports_atfile],
431 echo conftest.file > conftest.atfile
432 echo conftest.file >> conftest.atfile
433 "$fp_prog_ar_raw" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
434 fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar_raw" t conftest.a 2> /dev/null | grep -c conftest.file`
436 if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
438 fp_cv_prog_ar_supports_atfile=yes
440 fp_cv_prog_ar_supports_atfile=no
442 fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
443 AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
444 ])# FP_PROG_AR_SUPPORTS_ATFILE
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],
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"
461 for fp_var in clqsZ clqs cqs clq cq ; do
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
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])
473 fp_prog_ar_args=$fp_cv_prog_ar_args
474 AC_SUBST([ArCmd], ["$fp_prog_ar"])
475 AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
480 # FP_PROG_AR_NEEDS_RANLIB
481 # -----------------------
482 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
484 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
485 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
486 AC_REQUIRE([FP_PROG_AR_ARGS])
487 AC_REQUIRE([AC_PROG_CC])
488 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
489 [if test $fp_prog_ar_is_gnu = yes; then
490 fp_cv_prog_ar_needs_ranlib=no
491 elif echo $TargetPlatform | grep "^.*-apple-darwin$" > /dev/null 2> /dev/null; then
492 # It's quite tedious to check for Apple's crazy timestamps in .a files,
494 fp_cv_prog_ar_needs_ranlib=yes
495 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
496 fp_cv_prog_ar_needs_ranlib=no
498 fp_cv_prog_ar_needs_ranlib=yes
500 if test $fp_cv_prog_ar_needs_ranlib = yes; then
506 ])# FP_PROG_AR_NEEDS_RANLIB
509 # FP_PROG_AR_SUPPORTS_INPUT
510 # -------------------------
511 # Sets the output variable ArSupportsInput to "-input" or "", depending on
512 # whether ar supports -input flag is supported or not.
513 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
514 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
515 AC_REQUIRE([FP_PROG_AR_ARGS])
516 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
517 [fp_cv_prog_ar_supports_input=no
518 if test $fp_prog_ar_is_gnu = no; then
521 if FP_EVAL_STDERR(["$fp_prog_ar_raw" $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
522 test -s conftest.err || fp_cv_prog_ar_supports_input=yes
526 if test $fp_cv_prog_ar_supports_input = yes; then
527 ArSupportsInput="-input"
531 AC_SUBST([ArSupportsInput])
532 ])# FP_PROG_AR_SUPPORTS_INPUT
536 dnl AC_SHEBANG_PERL - can we she-bang perl?
538 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
539 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
544 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
545 if test $? -ne 69; then
546 fptools_cv_shebang_perl=yes
548 fptools_cv_shebang_perl=no
556 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
557 # output variables HaveGcc and GccVersion.
558 AC_DEFUN([FP_HAVE_GCC],
559 [AC_REQUIRE([AC_PROG_CC])
560 if test -z "$GCC"; then
565 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
566 AC_MSG_ERROR([gcc is required])
569 AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
570 [if test "$fp_have_gcc" = "YES"; then
571 fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
572 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
573 [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
574 # See #2770: gcc 2.95 doesn't work any more, apparently. There probably
575 # isn't a very good reason for that, but for now just make configure
577 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
579 fp_cv_gcc_version="not-installed"
582 AC_SUBST([HaveGcc], [$fp_have_gcc])
583 AC_SUBST([GccVersion], [$fp_cv_gcc_version])
587 dnl Small feature test for perl version. Assumes PerlCmd
588 dnl contains path to perl binary.
590 dnl (Perl versions prior to v5.6 does not contain the string "v5";
591 dnl instead they display version strings such as "version 5.005".)
593 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
594 [$PerlCmd -v >conftest.out 2>&1
595 if grep "v5" conftest.out >/dev/null 2>&1; then
598 AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
604 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
605 # [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
606 # -----------------------------------------------------
607 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
608 # of PROG-TO-CHECK-FOR when found.
609 AC_DEFUN([FP_CHECK_PROG],
610 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
616 # Find a non-WinDoze version of the "find" utility.
617 AC_DEFUN([FP_PROG_FIND],
618 [AC_PATH_PROGS([fp_prog_find], [gfind find], find)
619 echo foo > conftest.txt
620 $fp_prog_find conftest.txt -print > conftest.out 2>&1
621 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
622 # OK, looks like a real "find".
623 case $HostPlatform in
625 if test x${OSTYPE} != xmsys
627 fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
628 AC_MSG_NOTICE([normalized find command to $fp_prog_find])
632 FindCmd="$fp_prog_find"
634 # Found a poor WinDoze version of "find", ignore it.
635 AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
636 FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
638 rm -f conftest.txt conftest.out
639 AC_SUBST([FindCmd])[]dnl
645 # Find a Unix-like sort
646 AC_DEFUN([FP_PROG_SORT],
647 [AC_PATH_PROG([fp_prog_sort], [sort])
648 echo conwip > conftest.txt
649 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
650 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
652 SortCmd="$fp_prog_sort"
654 # Summink else..pick next one.
655 AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
656 FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
658 rm -f conftest.txt conftest.out
659 AC_SUBST([SortCmd])[]dnl
663 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
664 dnl values of the second argument to the result of running
665 dnl the commands given by the third. It does not cache its
666 dnl result, so it is suitable for checks which should be
669 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
670 [AC_MSG_CHECKING([$1])
672 AC_MSG_RESULT([$][$2])
676 dnl FPTOOLS_GHC_VERSION(version)
677 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
678 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
680 dnl Test for version of installed ghc. Uses $GHC.
681 dnl [original version pinched from c2hs]
683 AC_DEFUN([FPTOOLS_GHC_VERSION],
684 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
685 ["${WithGhc-ghc}" --version > conftestghc 2>&1
686 cat conftestghc >&AS_MESSAGE_LOG_FD
687 #Useless Use Of cat award...
688 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
690 if test "[$]fptools_version_of_ghc" = ""
692 fptools_version_of_ghc='unknown'
694 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
695 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
696 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
698 if test "[$]fptools_version_of_ghc[_pl]" = ""
700 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
701 fptools_version_of_ghc[_pl]="0"
703 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
707 [$1]="[$]fptools_version_of_ghc[_all]"
709 [$1]="[$]fptools_version_of_ghc[_major]"
710 [$2]="[$]fptools_version_of_ghc[_minor]"
712 [$1]="[$]fptools_version_of_ghc[_major]"
713 [$2]="[$]fptools_version_of_ghc[_minor]"
714 [$3]="[$]fptools_version_of_ghc[_pl]"
716 [$1]="[$]fptools_version_of_ghc[_all]"
717 [$2]="[$]fptools_version_of_ghc[_major]"
718 [$3]="[$]fptools_version_of_ghc[_minor]"
719 [$4]="[$]fptools_version_of_ghc[_pl]"
725 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
726 # ---------------------------------------------------------------------------------
727 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
728 # additional flexibility of specifying the PROLOGUE and BODY.
729 AC_DEFUN([FP_CHECK_FUNC],
730 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
731 AC_CACHE_CHECK([for $1], fp_func,
732 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
733 [AS_VAR_SET(fp_func, yes)],
734 [AS_VAR_SET(fp_func, no)])])
735 AS_IF([test AS_VAR_GET(fp_func) = yes],
736 [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
737 [Define to 1 if you have the `]$1[' function.]) $4],
739 AS_VAR_POPDEF([fp_func])dnl
745 # Generates a DocBook XML V4.2 document in conftest.xml.
747 # It took a lot of experimentation to find a document that will cause
748 # xsltproc to fail with an error code when the relevant
749 # stylesheets/DTDs are not found. I couldn't make xsltproc fail with
750 # a single-file document, it seems a multi-file document is needed.
753 AC_DEFUN([FP_GEN_DOCBOOK_XML],
754 [rm -f conftest.xml conftest-book.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 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
765 cat >conftest-book.xml << EOF
766 <?xml version="1.0" encoding="iso-8859-1"?>
767 <title>A DocBook “Test Document”</title>
768 <chapter id="id-one">
769 <title>A Chapter Title</title>
770 <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
772 <chapter id="id-two">
773 <title>Another Chapter Title</title>
774 <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
777 ]) # FP_GEN_DOCBOOK_XML
782 # Sets the output variable DblatexCmd to the full path of dblatex,
783 # which we use for building PDF and PS docs.
784 # DblatexCmd is empty if dblatex could not be found.
785 AC_DEFUN([FP_PROG_DBLATEX],
786 [AC_PATH_PROG([DblatexCmd], [dblatex])
787 if test -z "$DblatexCmd"; then
788 AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
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 HTML documentation])
806 # ----------------------------
807 # Check that we can process a DocBook XML document to HTML using xsltproc.
808 AC_DEFUN([FP_DOCBOOK_XSL],
809 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
810 if test -n "$XsltprocCmd"; then
811 AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
813 fp_cv_dir_docbook_xsl=no
814 if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
815 fp_cv_dir_docbook_xsl=yes
819 if test x"$fp_cv_dir_docbook_xsl" = xno; then
820 AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
825 AC_SUBST([HAVE_DOCBOOK_XSL])
831 # Sets the output variable XmllintCmd to the full path of the XSLT processor
832 # xmllint. XmllintCmd is empty if xmllint could not be found.
833 AC_DEFUN([FP_PROG_XMLLINT],
834 [AC_PATH_PROG([XmllintCmd], [xmllint])
835 if test -z "$XmllintCmd"; then
836 AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
841 # FP_CHECK_DOCBOOK_DTD
842 # --------------------
843 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
844 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
845 if test -n "$XmllintCmd"; then
846 AC_MSG_CHECKING([for DocBook DTD])
848 if $XmllintCmd --nonet --valid --noout conftest.xml ; then
851 AC_MSG_RESULT([failed])
852 AC_MSG_WARN([cannot find a DTD for DocBook XML V4.2, you will not be able to validate your documentation])
853 AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
857 ])# FP_CHECK_DOCBOOK_DTD
862 # Generates a formatting objects document in conftest.fo.
863 AC_DEFUN([FP_GEN_FO],
865 cat > conftest.fo << EOF
866 <?xml version="1.0"?>
867 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
868 <fo:layout-master-set>
869 <fo:simple-page-master master-name="blank">
871 </fo:simple-page-master>
872 </fo:layout-master-set>
873 <fo:page-sequence master-reference="blank">
874 <fo:flow flow-name="xsl-region-body">
887 # Set the output variable 'FopCmd' to the first working 'fop' in the current
888 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
889 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
890 AC_DEFUN([FP_PROG_FOP],
891 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
892 if test -n "$FopCmd1"; then
893 AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
895 if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
896 fp_cv_fop_usability=yes
898 fp_cv_fop_usability=no
901 if test x"$fp_cv_fop_usability" = xyes; then
905 if test -z "$FopCmd"; then
906 AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
915 # Sets the output variable HstagsCmd to the full Haskell tags program path.
916 # HstagsCmd is empty if no such program could be found.
917 AC_DEFUN([FP_PROG_HSTAGS],
918 [AC_PATH_PROG([HstagsCmd], [hasktags])
919 if test -z "$HstagsCmd"; then
920 AC_MSG_WARN([cannot find hasktags in your PATH, you will not be able to build the tags])
927 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
928 # WithGhc. Sets the output variable GhcPkgCmd.
929 AC_DEFUN([FP_PROG_GHC_PKG],
930 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
932 # If we are told to use ghc-stage2, then we're using an in-tree
933 # compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
934 # so we sed off -stage[0-9]$. However, if we are told to use
935 # ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
937 fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
938 if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
939 fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
941 AC_MSG_ERROR([Cannot find matching ghc-pkg])
943 GhcPkgCmd=$fp_cv_matching_ghc_pkg
944 AC_SUBST([GhcPkgCmd])
950 # Determine which extra flags we need to pass gcc when we invoke it
951 # to compile .hc code.
953 # Some OSs (Mandrake Linux, in particular) configure GCC with
954 # -momit-leaf-frame-pointer on by default. If this is the case, we
955 # need to turn it off for mangling to work. The test is currently a
956 # bit crude, using only the version number of gcc.
958 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
959 # integer wrap around. (Trac #952)
961 # -fno-unit-at-a-time or -fno-toplevel-reoder is necessary to avoid gcc
962 # reordering things in the module and confusing the manger and/or splitter.
965 # If gcc knows about the stack protector, turn it off.
966 # Otherwise the stack-smash handler gets triggered.
968 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
969 [AC_REQUIRE([FP_HAVE_GCC])
970 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
971 [fp_cv_gcc_extra_opts=
972 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
973 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
975 case $TargetPlatform in
977 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.2],
978 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"],
980 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
981 [FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
982 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
983 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-unit-at-a-time"]
988 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
989 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
993 echo 'int main(void) {return 0;}' > conftest.c
994 if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
996 fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-stack-protector"
998 rm conftest.c conftest.o
1000 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1004 # FP_SETUP_PROJECT_VERSION
1005 # ---------------------
1006 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1008 if test "$RELEASE" = "NO"; then
1009 AC_MSG_CHECKING([for GHC version date])
1010 if test -f VERSION_DATE; then
1011 PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1012 AC_MSG_RESULT(given $PACKAGE_VERSION)
1013 elif test -d .git; then
1015 ver_date=`git log -n 1 --date=short --pretty=format:%ci | sed "s/^.*\([0-9][0-9][0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\).*$/\1\2\3/"`
1016 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
1017 changequote([, ])dnl
1018 AC_MSG_ERROR([failed to detect version date: check that git is in your path])
1020 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1021 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1022 elif test -d _darcs; then
1023 # TODO: Remove this branch after conversion to Git
1025 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" | ${SortCmd} -n | tail -1`
1026 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
1027 changequote([, ])dnl
1028 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
1030 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1031 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1032 elif test -f VERSION; then
1033 PACKAGE_VERSION=`cat VERSION`
1034 AC_MSG_RESULT(given $PACKAGE_VERSION)
1036 AC_MSG_WARN([cannot determine snapshot version: no .git or _darcs directory and no VERSION file])
1041 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1042 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1044 # Split PACKAGE_VERSION into (possibly empty) parts
1045 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1046 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1047 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1048 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1050 # Calculate project version as an integer, using 2 digits for minor version
1051 case $VERSION_MINOR in
1052 ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1053 ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1054 *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1056 AC_SUBST([ProjectVersionInt])
1058 # The project patchlevel is zero unless stated otherwise
1059 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1061 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1062 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1064 AC_SUBST([ProjectPatchLevel])
1065 ])# FP_SETUP_PROJECT_VERSION
1068 # Check for a working timer_create(). We need a pretty detailed check
1069 # here, because there exist partially-working implementations of
1070 # timer_create() in certain versions of Linux (see bug #1933).
1072 AC_DEFUN([FP_CHECK_TIMER_CREATE],
1073 [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)],
1074 [fptools_cv_timer_create_works],
1077 #ifdef HAVE_STDLIB_H
1083 #ifdef HAVE_SIGNAL_H
1086 #ifdef HAVE_UNISTD_H
1090 static volatile int tock = 0;
1091 static void handler(int i)
1096 static void timeout(int i)
1098 // timer_settime() has been known to hang, so just in case
1099 // we install a 1-second timeout (see #2257)
1103 int main(int argc, char *argv[])
1108 struct itimerspec it;
1109 struct sigaction action;
1112 ev.sigev_notify = SIGEV_SIGNAL;
1113 ev.sigev_signo = SIGVTALRM;
1115 action.sa_handler = handler;
1116 action.sa_flags = 0;
1117 sigemptyset(&action.sa_mask);
1118 if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1119 fprintf(stderr,"SIGVTALRM problem\n");
1123 action.sa_handler = timeout;
1124 action.sa_flags = 0;
1125 sigemptyset(&action.sa_mask);
1126 if (sigaction(SIGALRM, &action, NULL) == -1) {
1127 fprintf(stderr,"SIGALRM problem\n");
1132 if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1133 fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1137 it.it_value.tv_sec = 0;
1138 it.it_value.tv_nsec = 1;
1139 it.it_interval = it.it_value;
1140 if (timer_settime(timer, 0, &it, NULL) != 0) {
1141 fprintf(stderr,"settime problem\n");
1147 for(n = 3; n < 20000; n++){
1148 for(m = 2; m <= n/2; m++){
1149 if (!(n%m)) count++;
1156 fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1160 timer_delete(timer);
1162 if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1163 fprintf(stderr,"No CLOCK_REALTIME timer\n");
1167 it.it_value.tv_sec = 0;
1168 it.it_value.tv_nsec = 1000000;
1169 it.it_interval = it.it_value;
1170 if (timer_settime(timer, 0, &it, NULL) != 0) {
1171 fprintf(stderr,"settime problem\n");
1180 fprintf(stderr,"no CLOCK_REALTIME signal\n");
1184 timer_delete(timer);
1189 [fptools_cv_timer_create_works=yes],
1190 [fptools_cv_timer_create_works=no])
1192 case $fptools_cv_timer_create_works in
1193 yes) AC_DEFINE([USE_TIMER_CREATE], 1,
1194 [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1200 AC_DEFUN([FP_ARG_GMP],
1202 AC_ARG_WITH([gmp-includes],
1203 [AC_HELP_STRING([--with-gmp-includes],
1204 [directory containing gmp.h])],
1205 [gmp_includes=$withval],
1206 [gmp_includes=NONE])
1208 AC_ARG_WITH([gmp-libraries],
1209 [AC_HELP_STRING([--with-gmp-libraries],
1210 [directory containing gmp library])],
1211 [gmp_libraries=$withval],
1212 [gmp_libraries=NONE])
1215 AC_DEFUN([CHECK_GMP],
1216 [AC_REQUIRE([AC_PROG_CPP])
1217 AC_REQUIRE([AC_PROG_CC])
1220 # FP_CHECK_MACOSX_DEPLOYMENT_TARGET
1221 # ---------------------------------
1222 AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
1224 if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
1225 AC_MSG_CHECKING([Mac OS X deployment target])
1226 case $FP_MACOSX_DEPLOYMENT_TARGET in
1228 10.4) MACOSX_DEPLOYMENT_VERSION=10.4
1229 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1231 10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
1232 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1234 *) MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
1235 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
1238 if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
1241 if test ! -d $MACOSX_DEPLOYMENT_SDK; then
1242 AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
1244 AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
1249 # --------------------------------------------------------------
1250 # Calculate absolute path to build tree
1251 # --------------------------------------------------------------
1253 AC_DEFUN([FP_FIND_ROOT],[
1254 AC_MSG_CHECKING(for path to top of build tree)
1257 dnl make -C utils/ghc-pwd clean && make -C utils/ghc-pwd
1258 dnl except we don't want to have to know what make is called. Sigh.
1259 if test ! -f utils/ghc-pwd/ghc-pwd && test ! -f utils/ghc-pwd/ghc-pwd.exe; then
1265 "$WithGhc" -v0 --make ghc-pwd -o ghc-pwd
1269 hardtop=`utils/ghc-pwd/ghc-pwd`
1271 if ! test -d "$hardtop"; then
1272 AC_MSG_ERROR([cannot determine current directory])
1275 dnl Remove common automounter nonsense
1277 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1281 AC_MSG_RESULT(${hardtop})
1283 # We don't support building in directories with spaces.
1285 *' '*) AC_MSG_ERROR([
1286 The build system does not support building in a directory containing
1287 space characters. Suggestion: move the build tree somewhere else.])
1292 # GHC_CONVERT_CPU(cpu, target_var)
1293 # --------------------------------
1294 # converts cpu from gnu to ghc naming, and assigns the result to $target_var
1295 AC_DEFUN([GHC_CONVERT_CPU],[
1352 echo "Unknown CPU $1"
1358 # GHC_CONVERT_VENDOR(vendor, target_var)
1359 # --------------------------------
1360 # converts vendor from gnu to ghc naming, and assigns the result to $target_var
1361 AC_DEFUN([GHC_CONVERT_VENDOR],[
1365 # GHC_CONVERT_OS(os, target_var)
1366 # --------------------------------
1367 # converts os from gnu to ghc naming, and assigns the result to $target_var
1368 AC_DEFUN([GHC_CONVERT_OS],[
1373 # As far as I'm aware, none of these have relevant variants
1374 freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
1378 echo "Unknown OS $1"
1384 # LIBRARY_VERSION(lib)
1385 # --------------------------------
1386 # Gets the version number of a library.
1387 # If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3
1388 AC_DEFUN([LIBRARY_VERSION],[
1389 LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/$1/$1.cabal | sed "s/.* //"`
1390 AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION)