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],
14 # By default, gcc on OS X will generate SSE
15 # instructions, which need things 16-byte aligned,
16 # but we don't 16-byte align things. Thus drop
17 # back to generic i686 compatibility. Trac #2983.
18 $2="$$2 -march=i686 -m32"
19 $3="$$3 -march=i686 -m32"
27 # If gcc knows about the stack protector, turn it off.
28 # Otherwise the stack-smash handler gets triggered.
29 echo 'int main(void) {return 0;}' > conftest.c
30 if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
32 $2="$$2 -fno-stack-protector"
34 rm conftest.c conftest.o
38 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
39 # ----------------------------------
40 # Little endian Arm on Linux with some ABIs has big endian word order
41 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
42 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
43 [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
46 [#include <endian.h>],
47 [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
50 not float word order big endian
53 [fptools_cv_float_word_order_bigendian=yes],
54 [fptools_cv_float_word_order_bigendian=no])
56 case $fptools_cv_float_word_order_bigendian in
58 AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
59 [Define to 1 if your processor stores words of floats with
60 the most significant byte first]) ;;
65 # FP_EVAL_STDERR(COMMAND)
66 # -----------------------
67 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
68 # into the file conftest.err and the exit status in the variable fp_status.
69 AC_DEFUN([FP_EVAL_STDERR],
70 [{ (eval $1) 2>conftest.er1
72 grep -v '^ *+' conftest.er1 >conftest.err
74 (exit $fp_status); }[]dnl
78 # FP_ARG_WITH_PATH_GNU_PROG
79 # --------------------
82 # $1 = the command to look for
83 # $2 = the variable to set
85 AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
88 [AC_HELP_STRING([--with-$2=ARG],
89 [Use ARG as the path to $2 [default=autodetect]])],
91 if test "$HostOS" = "mingw32"
93 AC_MSG_WARN([Request to use $withval will be ignored])
99 if test "$HostOS" != "mingw32"
101 AC_PATH_PROG([$1], [$2])
104 AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link])
109 ]) # FP_ARG_WITH_PATH_GNU_PROG
112 # FP_PROG_CONTEXT_DIFF
113 # --------------------
114 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
116 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
118 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
119 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
120 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
121 [echo foo > conftest1
123 fp_cv_context_diff=no
124 for fp_var in '-U 1' '-u1' '-C 1' '-c1'
126 if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
127 fp_cv_context_diff="diff $fp_var"
131 if test x"$fp_cv_context_diff" = xno; then
132 AC_MSG_ERROR([cannot figure out how to do context diffs])
134 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
135 ])# FP_PROG_CONTEXT_DIFF
138 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
139 # --------------------------------------------------------
140 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
141 # compilation. Execute IF-FAILS when unable to determine the value. Works for
142 # cross-compilation, too.
144 # Implementation note: We are lazy and use an internal autoconf macro, but it
145 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
147 AC_DEFUN([FP_COMPUTE_INT],
148 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
152 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
153 # ------------------------------------------------------------------
154 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
155 # given type. Defines ALIGNMENT_TYPE.
156 AC_DEFUN([FP_CHECK_ALIGNMENT],
157 [AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [],
158 [AC_FATAL([$0: requires literal arguments])])[]dnl
159 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
160 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
161 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
162 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
163 FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
165 [AC_INCLUDES_DEFAULT([$3])],
166 [AC_MSG_ERROR([cannot compute alignment ($1)
167 See `config.log' for more details.], [77])])
171 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
172 m4_popdef([fp_Cache])[]dnl
173 ])# FP_CHECK_ALIGNMENT
176 # FP_LEADING_UNDERSCORE
177 # ---------------------
178 # Test for determining whether symbol names have a leading underscore. We assume
179 # that they _haven't_ if anything goes wrong. Sets the output variable
180 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
182 # Some nlist implementations seem to try to be compatible by ignoring a leading
183 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
184 # checking for *no* leading underscore first. Sigh. --SDM
186 # Similarly on OpenBSD, but this test doesn't help. -- dons
187 AC_DEFUN([FP_LEADING_UNDERSCORE],
188 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
189 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
190 # Hack!: nlist() under Digital UNIX insist on there being an _,
191 # but symbol table listings shows none. What is going on here?!?
193 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
194 # the underscoredness of that "platform"
195 case $HostPlatform in
196 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
198 i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
199 *) fptools_cv_leading_underscore=no ;;
201 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
202 *cygwin32) fptools_cv_leading_underscore=yes;;
203 *mingw32) fptools_cv_leading_underscore=yes;;
205 # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
206 x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
208 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
210 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
211 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
219 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
221 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
225 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
228 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
229 if test x"$fptools_cv_leading_underscore" = xyes; then
230 AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
231 fi])# FP_LEADING_UNDERSCORE
234 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
235 # ----------------------------------------------------------------------------------
236 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
237 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
238 AC_DEFUN([FP_COMPARE_VERSIONS],
239 [fp_version1=$1; fp_version2=$3
240 fp_save_IFS=$IFS; IFS='.'
241 while test x"$fp_version1" != x || test x"$fp_version2" != x
244 set dummy $fp_version1; shift
246 test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
247 test x"$fp_num1" = x && fp_num1="0"
250 set dummy $fp_version2; shift
252 test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
253 test x"$fp_num2" = x && fp_num2="0"
256 test "$fp_num1" = "$fp_num2" || break;
259 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
260 ])# FP_COMPARE_VERSIONS
264 dnl Check for GreenCard and version.
266 AC_DEFUN([FPTOOLS_GREENCARD],
268 AC_PATH_PROG(GreenCardCmd,greencard)
269 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
271 [if test x"$GreenCardCmd" != x; then
272 fptools_cv_greencard_version="`$GreenCardCmd --version |
273 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
275 fptools_cv_greencard_version=""
279 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
280 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
281 GreenCardVersion=$fptools_cv_greencard_version
282 AC_SUBST(GreenCardVersion)
286 dnl Check for Happy and version. If we're building GHC, then we need
287 dnl at least Happy version 1.14. If there's no installed Happy, we look
288 dnl for a happy source tree and point the build system at that instead.
290 AC_DEFUN([FPTOOLS_HAPPY],
291 [AC_PATH_PROG(HappyCmd,happy,)
292 # Happy is passed to Cabal, so we need a native path
293 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
294 test "${OSTYPE}" != "msys" && \
295 test "${HappyCmd}" != ""
297 # Canonicalise to <drive>:/path/to/gcc
298 HappyCmd=`cygpath -m "${HappyCmd}"`
299 AC_MSG_NOTICE([normalized happy command to $HappyCmd])
302 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
304 [if test x"$HappyCmd" != x; then
305 fptools_cv_happy_version=`"$HappyCmd" -v |
306 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ;
308 fptools_cv_happy_version="";
312 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
314 FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.16],
315 [AC_MSG_ERROR([Happy version 1.16 or later is required to compile GHC.])])[]
317 HappyVersion=$fptools_cv_happy_version;
318 AC_SUBST(HappyVersion)
322 dnl Check for Alex and version. If we're building GHC, then we need
323 dnl at least Alex version 2.0.1.
325 AC_DEFUN([FPTOOLS_ALEX],
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}" != ""
333 # Canonicalise to <drive>:/path/to/gcc
334 AlexCmd=`cygpath -m "${AlexCmd}"`
337 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
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'` ;
343 fptools_cv_alex_version="";
347 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
349 FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.1.0],
350 [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[]
352 AlexVersion=$fptools_cv_alex_version;
353 AC_SUBST(AlexVersion)
359 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
360 # variable's value is empty.
361 AC_DEFUN([FP_PROG_LD_X],
363 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
364 [echo 'foo() {}' > conftest.c
365 ${CC-cc} -c conftest.c
366 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
372 if test "$fp_cv_ld_x" = yes; then
383 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
385 AC_DEFUN([FP_PROG_LD_IS_GNU],
387 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
388 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
393 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
394 ])# FP_PROG_LD_IS_GNU
399 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
400 # version of it. Exits if no ar can be found
401 AC_DEFUN([FP_PROG_AR],
402 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
403 if test -z "$fp_prog_ar_raw"; then
404 AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
406 fp_prog_ar="$fp_prog_ar_raw"
407 case $HostPlatform in
408 *mingw32) if test x${OSTYPE} != xmsys; then
409 fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`"
410 AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
419 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
420 AC_DEFUN([FP_PROG_AR_IS_GNU],
421 [AC_REQUIRE([FP_PROG_AR])
422 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
423 [if "$fp_prog_ar_raw" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
424 fp_cv_prog_ar_is_gnu=yes
426 fp_cv_prog_ar_is_gnu=no
428 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
429 AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
430 ])# FP_PROG_AR_IS_GNU
433 # FP_PROG_AR_SUPPORTS_ATFILE
435 # Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
436 # or not it supports the @file syntax
437 AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
438 [AC_REQUIRE([FP_PROG_AR])
439 AC_REQUIRE([FP_PROG_AR_ARGS])
440 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports @file], [fp_cv_prog_ar_supports_atfile],
444 echo conftest.file > conftest.atfile
445 echo conftest.file >> conftest.atfile
446 "$fp_prog_ar_raw" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
447 fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar_raw" t conftest.a 2> /dev/null | grep -c conftest.file`
449 if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
451 fp_cv_prog_ar_supports_atfile=yes
453 fp_cv_prog_ar_supports_atfile=no
455 fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
456 AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
457 ])# FP_PROG_AR_SUPPORTS_ATFILE
461 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
462 # to a non-Cygwin invocation of ar including these arguments.
463 AC_DEFUN([FP_PROG_AR_ARGS],
464 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
465 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
467 # GNU ar needs special treatment: it appears to have problems with
468 # object files with the same name if you use the 's' modifier, but
469 # simple 'ar q' works fine, and doesn't need a separate ranlib.
470 if test $fp_prog_ar_is_gnu = yes; then
471 fp_cv_prog_ar_args="q"
474 for fp_var in clqsZ clqs cqs clq cq ; do
476 if "$fp_prog_ar_raw" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
477 fp_cv_prog_ar_args=$fp_var
482 if test -z "$fp_cv_prog_ar_args"; then
483 AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
486 fp_prog_ar_args=$fp_cv_prog_ar_args
487 AC_SUBST([ArCmd], ["$fp_prog_ar"])
488 AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
493 # FP_PROG_AR_NEEDS_RANLIB
494 # -----------------------
495 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
497 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
498 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
499 AC_REQUIRE([FP_PROG_AR_ARGS])
500 AC_REQUIRE([AC_PROG_CC])
501 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
502 [if test $fp_prog_ar_is_gnu = yes; then
503 fp_cv_prog_ar_needs_ranlib=no
504 elif echo $TargetPlatform | grep "^.*-apple-darwin$" > /dev/null 2> /dev/null; then
505 # It's quite tedious to check for Apple's crazy timestamps in .a files,
507 fp_cv_prog_ar_needs_ranlib=yes
508 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
509 fp_cv_prog_ar_needs_ranlib=no
511 fp_cv_prog_ar_needs_ranlib=yes
513 if test $fp_cv_prog_ar_needs_ranlib = yes; then
519 ])# FP_PROG_AR_NEEDS_RANLIB
522 # FP_PROG_AR_SUPPORTS_INPUT
523 # -------------------------
524 # Sets the output variable ArSupportsInput to "-input" or "", depending on
525 # whether ar supports -input flag is supported or not.
526 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
527 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
528 AC_REQUIRE([FP_PROG_AR_ARGS])
529 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
530 [fp_cv_prog_ar_supports_input=no
531 if test $fp_prog_ar_is_gnu = no; then
534 if FP_EVAL_STDERR(["$fp_prog_ar_raw" $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
535 test -s conftest.err || fp_cv_prog_ar_supports_input=yes
539 if test $fp_cv_prog_ar_supports_input = yes; then
540 ArSupportsInput="-input"
544 AC_SUBST([ArSupportsInput])
545 ])# FP_PROG_AR_SUPPORTS_INPUT
549 dnl AC_SHEBANG_PERL - can we she-bang perl?
551 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
552 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
557 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
558 if test $? -ne 69; then
559 fptools_cv_shebang_perl=yes
561 fptools_cv_shebang_perl=no
569 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
570 # output variables HaveGcc and GccVersion.
571 AC_DEFUN([FP_HAVE_GCC],
572 [AC_REQUIRE([AC_PROG_CC])
573 if test -z "$GCC"; then
578 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
579 AC_MSG_ERROR([gcc is required])
582 AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
583 [if test "$fp_have_gcc" = "YES"; then
584 fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
585 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
586 [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
587 # See #2770: gcc 2.95 doesn't work any more, apparently. There probably
588 # isn't a very good reason for that, but for now just make configure
590 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
592 fp_cv_gcc_version="not-installed"
595 AC_SUBST([HaveGcc], [$fp_have_gcc])
596 AC_SUBST([GccVersion], [$fp_cv_gcc_version])
600 dnl Small feature test for perl version. Assumes PerlCmd
601 dnl contains path to perl binary.
603 dnl (Perl versions prior to v5.6 does not contain the string "v5";
604 dnl instead they display version strings such as "version 5.005".)
606 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
607 [$PerlCmd -v >conftest.out 2>&1
608 if grep "v5" conftest.out >/dev/null 2>&1; then
611 AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
617 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
618 # [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
619 # -----------------------------------------------------
620 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
621 # of PROG-TO-CHECK-FOR when found.
622 AC_DEFUN([FP_CHECK_PROG],
623 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
629 # Find a non-WinDoze version of the "find" utility.
630 AC_DEFUN([FP_PROG_FIND],
631 [AC_PATH_PROGS([fp_prog_find], [gfind find], find)
632 echo foo > conftest.txt
633 $fp_prog_find conftest.txt -print > conftest.out 2>&1
634 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
635 # OK, looks like a real "find".
636 case $HostPlatform in
638 if test x${OSTYPE} != xmsys
640 fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
641 AC_MSG_NOTICE([normalized find command to $fp_prog_find])
645 FindCmd="$fp_prog_find"
647 # Found a poor WinDoze version of "find", ignore it.
648 AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
649 FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
651 rm -f conftest.txt conftest.out
652 AC_SUBST([FindCmd])[]dnl
658 # Find a Unix-like sort
659 AC_DEFUN([FP_PROG_SORT],
660 [AC_PATH_PROG([fp_prog_sort], [sort])
661 echo conwip > conftest.txt
662 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
663 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
665 SortCmd="$fp_prog_sort"
667 # Summink else..pick next one.
668 AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
669 FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
671 rm -f conftest.txt conftest.out
672 AC_SUBST([SortCmd])[]dnl
676 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
677 dnl values of the second argument to the result of running
678 dnl the commands given by the third. It does not cache its
679 dnl result, so it is suitable for checks which should be
682 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
683 [AC_MSG_CHECKING([$1])
685 AC_MSG_RESULT([$][$2])
689 dnl FPTOOLS_GHC_VERSION(version)
690 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
691 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
693 dnl Test for version of installed ghc. Uses $GHC.
694 dnl [original version pinched from c2hs]
696 AC_DEFUN([FPTOOLS_GHC_VERSION],
697 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
698 ["${WithGhc-ghc}" --version > conftestghc 2>&1
699 cat conftestghc >&AS_MESSAGE_LOG_FD
700 #Useless Use Of cat award...
701 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
703 if test "[$]fptools_version_of_ghc" = ""
705 fptools_version_of_ghc='unknown'
707 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
708 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
709 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
711 if test "[$]fptools_version_of_ghc[_pl]" = ""
713 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
714 fptools_version_of_ghc[_pl]="0"
716 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
720 [$1]="[$]fptools_version_of_ghc[_all]"
722 [$1]="[$]fptools_version_of_ghc[_major]"
723 [$2]="[$]fptools_version_of_ghc[_minor]"
725 [$1]="[$]fptools_version_of_ghc[_major]"
726 [$2]="[$]fptools_version_of_ghc[_minor]"
727 [$3]="[$]fptools_version_of_ghc[_pl]"
729 [$1]="[$]fptools_version_of_ghc[_all]"
730 [$2]="[$]fptools_version_of_ghc[_major]"
731 [$3]="[$]fptools_version_of_ghc[_minor]"
732 [$4]="[$]fptools_version_of_ghc[_pl]"
738 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
739 # ---------------------------------------------------------------------------------
740 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
741 # additional flexibility of specifying the PROLOGUE and BODY.
742 AC_DEFUN([FP_CHECK_FUNC],
743 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
744 AC_CACHE_CHECK([for $1], fp_func,
745 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
746 [AS_VAR_SET(fp_func, yes)],
747 [AS_VAR_SET(fp_func, no)])])
748 AS_IF([test AS_VAR_GET(fp_func) = yes],
749 [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
750 [Define to 1 if you have the `]$1[' function.]) $4],
752 AS_VAR_POPDEF([fp_func])dnl
758 # Generates a DocBook XML V4.5 document in conftest.xml.
760 # It took a lot of experimentation to find a document that will cause
761 # xsltproc to fail with an error code when the relevant
762 # stylesheets/DTDs are not found. I couldn't make xsltproc fail with
763 # a single-file document, it seems a multi-file document is needed.
766 AC_DEFUN([FP_GEN_DOCBOOK_XML],
767 [rm -f conftest.xml conftest-book.xml
768 cat > conftest.xml << EOF
769 <?xml version="1.0" encoding="iso-8859-1"?>
770 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
771 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [[
772 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
778 cat >conftest-book.xml << EOF
779 <?xml version="1.0" encoding="iso-8859-1"?>
780 <title>A DocBook “Test Document”</title>
781 <chapter id="id-one">
782 <title>A Chapter Title</title>
783 <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
785 <chapter id="id-two">
786 <title>Another Chapter Title</title>
787 <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
790 ]) # FP_GEN_DOCBOOK_XML
795 # Sets the output variable DblatexCmd to the full path of dblatex,
796 # which we use for building PDF and PS docs.
797 # DblatexCmd is empty if dblatex could not be found.
798 AC_DEFUN([FP_PROG_DBLATEX],
799 [AC_PATH_PROG([DblatexCmd], [dblatex])
800 if test -z "$DblatexCmd"; then
801 AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
808 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
809 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
810 AC_DEFUN([FP_PROG_XSLTPROC],
811 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
812 if test -z "$XsltprocCmd"; then
813 AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the HTML documentation])
819 # ----------------------------
820 # Check that we can process a DocBook XML document to HTML using xsltproc.
821 AC_DEFUN([FP_DOCBOOK_XSL],
822 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
823 if test -n "$XsltprocCmd"; then
824 AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
826 fp_cv_dir_docbook_xsl=no
827 if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
828 fp_cv_dir_docbook_xsl=yes
832 if test x"$fp_cv_dir_docbook_xsl" = xno; then
833 AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
838 AC_SUBST([HAVE_DOCBOOK_XSL])
844 # Sets the output variable XmllintCmd to the full path of the XSLT processor
845 # xmllint. XmllintCmd is empty if xmllint could not be found.
846 AC_DEFUN([FP_PROG_XMLLINT],
847 [AC_PATH_PROG([XmllintCmd], [xmllint])
848 if test -z "$XmllintCmd"; then
849 AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
854 # FP_CHECK_DOCBOOK_DTD
855 # --------------------
856 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
857 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
858 if test -n "$XmllintCmd"; then
859 AC_MSG_CHECKING([for DocBook DTD])
861 if $XmllintCmd --nonet --valid --noout conftest.xml ; then
864 AC_MSG_RESULT([failed])
865 AC_MSG_WARN([cannot find a DTD for DocBook XML V4.5, you will not be able to validate your documentation])
866 AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
870 ])# FP_CHECK_DOCBOOK_DTD
875 # Generates a formatting objects document in conftest.fo.
876 AC_DEFUN([FP_GEN_FO],
878 cat > conftest.fo << EOF
879 <?xml version="1.0"?>
880 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
881 <fo:layout-master-set>
882 <fo:simple-page-master master-name="blank">
884 </fo:simple-page-master>
885 </fo:layout-master-set>
886 <fo:page-sequence master-reference="blank">
887 <fo:flow flow-name="xsl-region-body">
900 # Set the output variable 'FopCmd' to the first working 'fop' in the current
901 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
902 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
903 AC_DEFUN([FP_PROG_FOP],
904 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
905 if test -n "$FopCmd1"; then
906 AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
908 if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
909 fp_cv_fop_usability=yes
911 fp_cv_fop_usability=no
914 if test x"$fp_cv_fop_usability" = xyes; then
918 if test -z "$FopCmd"; then
919 AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
928 # Sets the output variable HstagsCmd to the full Haskell tags program path.
929 # HstagsCmd is empty if no such program could be found.
930 AC_DEFUN([FP_PROG_HSTAGS],
931 [AC_PATH_PROG([HstagsCmd], [hasktags])
932 if test -z "$HstagsCmd"; then
933 AC_MSG_WARN([cannot find hasktags in your PATH, you will not be able to build the tags])
940 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
941 # WithGhc. Sets the output variable GhcPkgCmd.
942 AC_DEFUN([FP_PROG_GHC_PKG],
943 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
945 # If we are told to use ghc-stage2, then we're using an in-tree
946 # compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
947 # so we sed off -stage[0-9]$. However, if we are told to use
948 # ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
950 fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
951 if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
952 fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
954 AC_MSG_ERROR([Cannot find matching ghc-pkg])
956 GhcPkgCmd=$fp_cv_matching_ghc_pkg
957 AC_SUBST([GhcPkgCmd])
963 # Determine which extra flags we need to pass gcc when we invoke it
964 # to compile .hc code.
966 # Some OSs (Mandrake Linux, in particular) configure GCC with
967 # -momit-leaf-frame-pointer on by default. If this is the case, we
968 # need to turn it off for mangling to work. The test is currently a
969 # bit crude, using only the version number of gcc.
971 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
972 # integer wrap around. (Trac #952)
974 # -fno-unit-at-a-time or -fno-toplevel-reoder is necessary to avoid gcc
975 # reordering things in the module and confusing the manger and/or splitter.
978 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
979 [AC_REQUIRE([FP_HAVE_GCC])
980 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
981 [fp_cv_gcc_extra_opts=
982 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
983 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
985 case $TargetPlatform in
987 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.2],
988 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"],
990 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
991 [FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
992 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
993 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-unit-at-a-time"]
998 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
999 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
1004 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1008 # FP_SETUP_PROJECT_VERSION
1009 # ---------------------
1010 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1012 if test "$RELEASE" = "NO"; then
1013 AC_MSG_CHECKING([for GHC version date])
1014 if test -f VERSION_DATE; then
1015 PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1016 AC_MSG_RESULT(given $PACKAGE_VERSION)
1017 elif test -d .git; then
1019 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/"`
1020 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
1021 changequote([, ])dnl
1022 AC_MSG_ERROR([failed to detect version date: check that git is in your path])
1024 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1025 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1026 elif test -d _darcs; then
1027 # TODO: Remove this branch after conversion to Git
1029 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`
1030 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
1031 changequote([, ])dnl
1032 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
1034 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1035 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1036 elif test -f VERSION; then
1037 PACKAGE_VERSION=`cat VERSION`
1038 AC_MSG_RESULT(given $PACKAGE_VERSION)
1040 AC_MSG_WARN([cannot determine snapshot version: no .git or _darcs directory and no VERSION file])
1045 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1046 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1048 # Split PACKAGE_VERSION into (possibly empty) parts
1049 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1050 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1051 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1052 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1054 # Calculate project version as an integer, using 2 digits for minor version
1055 case $VERSION_MINOR in
1056 ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1057 ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1058 *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1060 AC_SUBST([ProjectVersionInt])
1062 # The project patchlevel is zero unless stated otherwise
1063 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1065 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1066 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1068 AC_SUBST([ProjectPatchLevel])
1069 ])# FP_SETUP_PROJECT_VERSION
1072 # Check for a working timer_create(). We need a pretty detailed check
1073 # here, because there exist partially-working implementations of
1074 # timer_create() in certain versions of Linux (see bug #1933).
1076 AC_DEFUN([FP_CHECK_TIMER_CREATE],
1077 [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)],
1078 [fptools_cv_timer_create_works],
1081 #ifdef HAVE_STDLIB_H
1087 #ifdef HAVE_SIGNAL_H
1090 #ifdef HAVE_UNISTD_H
1094 static volatile int tock = 0;
1095 static void handler(int i)
1100 static void timeout(int i)
1102 // timer_settime() has been known to hang, so just in case
1103 // we install a 1-second timeout (see #2257)
1107 int main(int argc, char *argv[])
1112 struct itimerspec it;
1113 struct sigaction action;
1116 ev.sigev_notify = SIGEV_SIGNAL;
1117 ev.sigev_signo = SIGVTALRM;
1119 action.sa_handler = handler;
1120 action.sa_flags = 0;
1121 sigemptyset(&action.sa_mask);
1122 if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1123 fprintf(stderr,"SIGVTALRM problem\n");
1127 action.sa_handler = timeout;
1128 action.sa_flags = 0;
1129 sigemptyset(&action.sa_mask);
1130 if (sigaction(SIGALRM, &action, NULL) == -1) {
1131 fprintf(stderr,"SIGALRM problem\n");
1136 if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1137 fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1141 it.it_value.tv_sec = 0;
1142 it.it_value.tv_nsec = 1;
1143 it.it_interval = it.it_value;
1144 if (timer_settime(timer, 0, &it, NULL) != 0) {
1145 fprintf(stderr,"settime problem\n");
1151 for(n = 3; n < 20000; n++){
1152 for(m = 2; m <= n/2; m++){
1153 if (!(n%m)) count++;
1160 fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1164 timer_delete(timer);
1166 if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1167 fprintf(stderr,"No CLOCK_REALTIME timer\n");
1171 it.it_value.tv_sec = 0;
1172 it.it_value.tv_nsec = 1000000;
1173 it.it_interval = it.it_value;
1174 if (timer_settime(timer, 0, &it, NULL) != 0) {
1175 fprintf(stderr,"settime problem\n");
1184 fprintf(stderr,"no CLOCK_REALTIME signal\n");
1188 timer_delete(timer);
1193 [fptools_cv_timer_create_works=yes],
1194 [fptools_cv_timer_create_works=no])
1196 case $fptools_cv_timer_create_works in
1197 yes) AC_DEFINE([USE_TIMER_CREATE], 1,
1198 [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1204 AC_DEFUN([FP_ARG_GMP],
1206 AC_ARG_WITH([gmp-includes],
1207 [AC_HELP_STRING([--with-gmp-includes],
1208 [directory containing gmp.h])],
1209 [gmp_includes=$withval],
1210 [gmp_includes=NONE])
1212 AC_ARG_WITH([gmp-libraries],
1213 [AC_HELP_STRING([--with-gmp-libraries],
1214 [directory containing gmp library])],
1215 [gmp_libraries=$withval],
1216 [gmp_libraries=NONE])
1219 AC_DEFUN([CHECK_GMP],
1220 [AC_REQUIRE([AC_PROG_CPP])
1221 AC_REQUIRE([AC_PROG_CC])
1224 # FP_CHECK_MACOSX_DEPLOYMENT_TARGET
1225 # ---------------------------------
1226 AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
1228 if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
1229 AC_MSG_CHECKING([Mac OS X deployment target])
1230 case $FP_MACOSX_DEPLOYMENT_TARGET in
1232 10.4) MACOSX_DEPLOYMENT_VERSION=10.4
1233 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1235 10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
1236 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1238 *) MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
1239 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
1242 if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
1245 if test ! -d $MACOSX_DEPLOYMENT_SDK; then
1246 AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
1248 AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
1253 # --------------------------------------------------------------
1254 # Calculate absolute path to build tree
1255 # --------------------------------------------------------------
1257 AC_DEFUN([FP_FIND_ROOT],[
1258 AC_MSG_CHECKING(for path to top of build tree)
1261 dnl make -C utils/ghc-pwd clean && make -C utils/ghc-pwd
1262 dnl except we don't want to have to know what make is called. Sigh.
1263 if test ! -f utils/ghc-pwd/ghc-pwd && test ! -f utils/ghc-pwd/ghc-pwd.exe; then
1269 "$WithGhc" -v0 -no-user-package-conf --make ghc-pwd -o ghc-pwd
1273 hardtop=`utils/ghc-pwd/ghc-pwd`
1275 if ! test -d "$hardtop"; then
1276 AC_MSG_ERROR([cannot determine current directory])
1279 dnl Remove common automounter nonsense
1281 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1285 AC_MSG_RESULT(${hardtop})
1287 # We don't support building in directories with spaces.
1289 *' '*) AC_MSG_ERROR([
1290 The build system does not support building in a directory containing
1291 space characters. Suggestion: move the build tree somewhere else.])
1296 # GHC_CONVERT_CPU(cpu, target_var)
1297 # --------------------------------
1298 # converts cpu from gnu to ghc naming, and assigns the result to $target_var
1299 AC_DEFUN([GHC_CONVERT_CPU],[
1356 echo "Unknown CPU $1"
1362 # GHC_CONVERT_VENDOR(vendor, target_var)
1363 # --------------------------------
1364 # converts vendor from gnu to ghc naming, and assigns the result to $target_var
1365 AC_DEFUN([GHC_CONVERT_VENDOR],[
1369 # GHC_CONVERT_OS(os, target_var)
1370 # --------------------------------
1371 # converts os from gnu to ghc naming, and assigns the result to $target_var
1372 AC_DEFUN([GHC_CONVERT_OS],[
1377 # As far as I'm aware, none of these have relevant variants
1378 freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
1382 echo "Unknown OS $1"
1388 # LIBRARY_VERSION(lib)
1389 # --------------------------------
1390 # Gets the version number of a library.
1391 # If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3
1392 AC_DEFUN([LIBRARY_VERSION],[
1393 LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/$1/$1.cabal | sed "s/.* //"`
1394 AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION)