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)
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"
29 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
30 # ----------------------------------
31 # Little endian Arm on Linux with some ABIs has big endian word order
32 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
33 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
34 [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
37 [#include <endian.h>],
38 [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
41 not float word order big endian
44 [fptools_cv_float_word_order_bigendian=yes],
45 [fptools_cv_float_word_order_bigendian=no])
47 case $fptools_cv_float_word_order_bigendian in
49 AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
50 [Define to 1 if your processor stores words of floats with
51 the most significant byte first]) ;;
56 # FP_EVAL_STDERR(COMMAND)
57 # -----------------------
58 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
59 # into the file conftest.err and the exit status in the variable fp_status.
60 AC_DEFUN([FP_EVAL_STDERR],
61 [{ (eval $1) 2>conftest.er1
63 grep -v '^ *+' conftest.er1 >conftest.err
65 (exit $fp_status); }[]dnl
69 # FP_ARG_WITH_PATH_GNU_PROG
70 # --------------------
73 # $1 = the command to look for
74 # $2 = the variable to set
76 AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
79 [AC_HELP_STRING([--with-$2=ARG],
80 [Use ARG as the path to $2 [default=autodetect]])],
82 if test "$HostOS" = "mingw32"
84 AC_MSG_WARN([Request to use $withval will be ignored])
90 if test "$HostOS" != "mingw32"
92 AC_PATH_PROG([$1], [$2])
95 AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link])
100 ]) # FP_ARG_WITH_PATH_GNU_PROG
103 # FP_PROG_CONTEXT_DIFF
104 # --------------------
105 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
107 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
109 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
110 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
111 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
112 [echo foo > conftest1
114 fp_cv_context_diff=no
115 for fp_var in '-U 1' '-u1' '-C 1' '-c1'
117 if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
118 fp_cv_context_diff="diff $fp_var"
122 if test x"$fp_cv_context_diff" = xno; then
123 AC_MSG_ERROR([cannot figure out how to do context diffs])
125 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
126 ])# FP_PROG_CONTEXT_DIFF
129 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
130 # --------------------------------------------------------
131 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
132 # compilation. Execute IF-FAILS when unable to determine the value. Works for
133 # cross-compilation, too.
135 # Implementation note: We are lazy and use an internal autoconf macro, but it
136 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
138 AC_DEFUN([FP_COMPUTE_INT],
139 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
143 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
144 # ------------------------------------------------------------------
145 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
146 # given type. Defines ALIGNMENT_TYPE.
147 AC_DEFUN([FP_CHECK_ALIGNMENT],
148 [AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [],
149 [AC_FATAL([$0: requires literal arguments])])[]dnl
150 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
151 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
152 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
153 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
154 FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
156 [AC_INCLUDES_DEFAULT([$3])],
157 [AC_MSG_ERROR([cannot compute alignment ($1)
158 See `config.log' for more details.], [77])])
162 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
163 m4_popdef([fp_Cache])[]dnl
164 ])# FP_CHECK_ALIGNMENT
167 # FP_LEADING_UNDERSCORE
168 # ---------------------
169 # Test for determining whether symbol names have a leading underscore. We assume
170 # that they _haven't_ if anything goes wrong. Sets the output variable
171 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
173 # Some nlist implementations seem to try to be compatible by ignoring a leading
174 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
175 # checking for *no* leading underscore first. Sigh. --SDM
177 # Similarly on OpenBSD, but this test doesn't help. -- dons
178 AC_DEFUN([FP_LEADING_UNDERSCORE],
179 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
180 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
181 # Hack!: nlist() under Digital UNIX insist on there being an _,
182 # but symbol table listings shows none. What is going on here?!?
184 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
185 # the underscoredness of that "platform"
186 case $HostPlatform in
187 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
189 i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
190 *) fptools_cv_leading_underscore=no ;;
192 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
193 *cygwin32) fptools_cv_leading_underscore=yes;;
194 *mingw32) fptools_cv_leading_underscore=yes;;
196 # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
197 x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
199 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
201 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
202 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
210 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
212 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
216 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
219 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
220 if test x"$fptools_cv_leading_underscore" = xyes; then
221 AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
222 fi])# FP_LEADING_UNDERSCORE
225 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
226 # ----------------------------------------------------------------------------------
227 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
228 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
229 AC_DEFUN([FP_COMPARE_VERSIONS],
230 [fp_version1=$1; fp_version2=$3
231 fp_save_IFS=$IFS; IFS='.'
232 while test x"$fp_version1" != x || test x"$fp_version2" != x
235 set dummy $fp_version1; shift
237 test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
238 test x"$fp_num1" = x && fp_num1="0"
241 set dummy $fp_version2; shift
243 test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
244 test x"$fp_num2" = x && fp_num2="0"
247 test "$fp_num1" = "$fp_num2" || break;
250 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
251 ])# FP_COMPARE_VERSIONS
255 dnl Check for GreenCard and version.
257 AC_DEFUN([FPTOOLS_GREENCARD],
259 AC_PATH_PROG(GreenCardCmd,greencard)
260 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
262 [if test x"$GreenCardCmd" != x; then
263 fptools_cv_greencard_version="`$GreenCardCmd --version |
264 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
266 fptools_cv_greencard_version=""
270 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
271 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
272 GreenCardVersion=$fptools_cv_greencard_version
273 AC_SUBST(GreenCardVersion)
277 dnl Check for Happy and version. If we're building GHC, then we need
278 dnl at least Happy version 1.14. If there's no installed Happy, we look
279 dnl for a happy source tree and point the build system at that instead.
281 AC_DEFUN([FPTOOLS_HAPPY],
282 [AC_PATH_PROG(HappyCmd,happy,)
283 # Happy is passed to Cabal, so we need a native path
284 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
285 test "${OSTYPE}" != "msys" && \
286 test "${HappyCmd}" != ""
288 # Canonicalise to <drive>:/path/to/gcc
289 HappyCmd=`cygpath -m "${HappyCmd}"`
290 AC_MSG_NOTICE([normalized happy command to $HappyCmd])
293 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
295 [if test x"$HappyCmd" != x; then
296 fptools_cv_happy_version=`"$HappyCmd" -v |
297 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ;
299 fptools_cv_happy_version="";
303 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
305 FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.16],
306 [AC_MSG_ERROR([Happy version 1.16 or later is required to compile GHC.])])[]
308 HappyVersion=$fptools_cv_happy_version;
309 AC_SUBST(HappyVersion)
313 dnl Check for Alex and version. If we're building GHC, then we need
314 dnl at least Alex version 2.0.1.
316 AC_DEFUN([FPTOOLS_ALEX],
318 AC_PATH_PROG(AlexCmd,alex,)
319 # Alex is passed to Cabal, so we need a native path
320 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
321 test "${OSTYPE}" != "msys" && \
322 test "${AlexCmd}" != ""
324 # Canonicalise to <drive>:/path/to/gcc
325 AlexCmd=`cygpath -m "${AlexCmd}"`
328 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
330 [if test x"$AlexCmd" != x; then
331 fptools_cv_alex_version=`"$AlexCmd" -v |
332 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'` ;
334 fptools_cv_alex_version="";
338 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
340 FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.1.0],
341 [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[]
343 AlexVersion=$fptools_cv_alex_version;
344 AC_SUBST(AlexVersion)
350 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
351 # variable's value is empty.
352 AC_DEFUN([FP_PROG_LD_X],
354 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
355 [echo 'foo() {}' > conftest.c
356 ${CC-cc} -c conftest.c
357 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
363 if test "$fp_cv_ld_x" = yes; then
374 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
376 AC_DEFUN([FP_PROG_LD_IS_GNU],
378 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
379 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
384 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
385 ])# FP_PROG_LD_IS_GNU
390 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
391 # version of it. Exits if no ar can be found
392 AC_DEFUN([FP_PROG_AR],
393 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
394 if test -z "$fp_prog_ar_raw"; then
395 AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
397 fp_prog_ar="$fp_prog_ar_raw"
398 case $HostPlatform in
399 *mingw32) if test x${OSTYPE} != xmsys; then
400 fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`"
401 AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
410 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
411 AC_DEFUN([FP_PROG_AR_IS_GNU],
412 [AC_REQUIRE([FP_PROG_AR])
413 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
414 [if "$fp_prog_ar_raw" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
415 fp_cv_prog_ar_is_gnu=yes
417 fp_cv_prog_ar_is_gnu=no
419 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
420 AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
421 ])# FP_PROG_AR_IS_GNU
424 # FP_PROG_AR_SUPPORTS_ATFILE
426 # Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
427 # or not it supports the @file syntax
428 AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
429 [AC_REQUIRE([FP_PROG_AR])
430 AC_REQUIRE([FP_PROG_AR_ARGS])
431 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports @file], [fp_cv_prog_ar_supports_atfile],
435 echo conftest.file > conftest.atfile
436 echo conftest.file >> conftest.atfile
437 "$fp_prog_ar_raw" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
438 fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar_raw" t conftest.a 2> /dev/null | grep -c conftest.file`
440 if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
442 fp_cv_prog_ar_supports_atfile=yes
444 fp_cv_prog_ar_supports_atfile=no
446 fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
447 AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
448 ])# FP_PROG_AR_SUPPORTS_ATFILE
452 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
453 # to a non-Cygwin invocation of ar including these arguments.
454 AC_DEFUN([FP_PROG_AR_ARGS],
455 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
456 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
458 # GNU ar needs special treatment: it appears to have problems with
459 # object files with the same name if you use the 's' modifier, but
460 # simple 'ar q' works fine, and doesn't need a separate ranlib.
461 if test $fp_prog_ar_is_gnu = yes; then
462 fp_cv_prog_ar_args="q"
465 for fp_var in clqsZ clqs cqs clq cq ; do
467 if "$fp_prog_ar_raw" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
468 fp_cv_prog_ar_args=$fp_var
473 if test -z "$fp_cv_prog_ar_args"; then
474 AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
477 fp_prog_ar_args=$fp_cv_prog_ar_args
478 AC_SUBST([ArCmd], ["$fp_prog_ar"])
479 AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
484 # FP_PROG_AR_NEEDS_RANLIB
485 # -----------------------
486 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
488 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
489 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
490 AC_REQUIRE([FP_PROG_AR_ARGS])
491 AC_REQUIRE([AC_PROG_CC])
492 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
493 [if test $fp_prog_ar_is_gnu = yes; then
494 fp_cv_prog_ar_needs_ranlib=no
495 elif echo $TargetPlatform | grep "^.*-apple-darwin$" > /dev/null 2> /dev/null; then
496 # It's quite tedious to check for Apple's crazy timestamps in .a files,
498 fp_cv_prog_ar_needs_ranlib=yes
499 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
500 fp_cv_prog_ar_needs_ranlib=no
502 fp_cv_prog_ar_needs_ranlib=yes
504 if test $fp_cv_prog_ar_needs_ranlib = yes; then
510 ])# FP_PROG_AR_NEEDS_RANLIB
513 # FP_PROG_AR_SUPPORTS_INPUT
514 # -------------------------
515 # Sets the output variable ArSupportsInput to "-input" or "", depending on
516 # whether ar supports -input flag is supported or not.
517 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
518 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
519 AC_REQUIRE([FP_PROG_AR_ARGS])
520 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
521 [fp_cv_prog_ar_supports_input=no
522 if test $fp_prog_ar_is_gnu = no; then
525 if FP_EVAL_STDERR(["$fp_prog_ar_raw" $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
526 test -s conftest.err || fp_cv_prog_ar_supports_input=yes
530 if test $fp_cv_prog_ar_supports_input = yes; then
531 ArSupportsInput="-input"
535 AC_SUBST([ArSupportsInput])
536 ])# FP_PROG_AR_SUPPORTS_INPUT
540 dnl AC_SHEBANG_PERL - can we she-bang perl?
542 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
543 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
548 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
549 if test $? -ne 69; then
550 fptools_cv_shebang_perl=yes
552 fptools_cv_shebang_perl=no
560 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
561 # output variables HaveGcc and GccVersion.
562 AC_DEFUN([FP_HAVE_GCC],
563 [AC_REQUIRE([AC_PROG_CC])
564 if test -z "$GCC"; then
569 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
570 AC_MSG_ERROR([gcc is required])
573 AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
574 [if test "$fp_have_gcc" = "YES"; then
575 fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
576 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
577 [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
578 # See #2770: gcc 2.95 doesn't work any more, apparently. There probably
579 # isn't a very good reason for that, but for now just make configure
581 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
583 fp_cv_gcc_version="not-installed"
586 AC_SUBST([HaveGcc], [$fp_have_gcc])
587 AC_SUBST([GccVersion], [$fp_cv_gcc_version])
591 dnl Small feature test for perl version. Assumes PerlCmd
592 dnl contains path to perl binary.
594 dnl (Perl versions prior to v5.6 does not contain the string "v5";
595 dnl instead they display version strings such as "version 5.005".)
597 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
598 [$PerlCmd -v >conftest.out 2>&1
599 if grep "v5" conftest.out >/dev/null 2>&1; then
602 AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
608 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
609 # [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
610 # -----------------------------------------------------
611 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
612 # of PROG-TO-CHECK-FOR when found.
613 AC_DEFUN([FP_CHECK_PROG],
614 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
620 # Find a non-WinDoze version of the "find" utility.
621 AC_DEFUN([FP_PROG_FIND],
622 [AC_PATH_PROGS([fp_prog_find], [gfind find], find)
623 echo foo > conftest.txt
624 $fp_prog_find conftest.txt -print > conftest.out 2>&1
625 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
626 # OK, looks like a real "find".
627 case $HostPlatform in
629 if test x${OSTYPE} != xmsys
631 fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
632 AC_MSG_NOTICE([normalized find command to $fp_prog_find])
636 FindCmd="$fp_prog_find"
638 # Found a poor WinDoze version of "find", ignore it.
639 AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
640 FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
642 rm -f conftest.txt conftest.out
643 AC_SUBST([FindCmd])[]dnl
649 # Find a Unix-like sort
650 AC_DEFUN([FP_PROG_SORT],
651 [AC_PATH_PROG([fp_prog_sort], [sort])
652 echo conwip > conftest.txt
653 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
654 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
656 SortCmd="$fp_prog_sort"
658 # Summink else..pick next one.
659 AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
660 FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
662 rm -f conftest.txt conftest.out
663 AC_SUBST([SortCmd])[]dnl
667 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
668 dnl values of the second argument to the result of running
669 dnl the commands given by the third. It does not cache its
670 dnl result, so it is suitable for checks which should be
673 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
674 [AC_MSG_CHECKING([$1])
676 AC_MSG_RESULT([$][$2])
680 dnl FPTOOLS_GHC_VERSION(version)
681 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
682 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
684 dnl Test for version of installed ghc. Uses $GHC.
685 dnl [original version pinched from c2hs]
687 AC_DEFUN([FPTOOLS_GHC_VERSION],
688 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
689 ["${WithGhc-ghc}" --version > conftestghc 2>&1
690 cat conftestghc >&AS_MESSAGE_LOG_FD
691 #Useless Use Of cat award...
692 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
694 if test "[$]fptools_version_of_ghc" = ""
696 fptools_version_of_ghc='unknown'
698 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
699 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
700 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
702 if test "[$]fptools_version_of_ghc[_pl]" = ""
704 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
705 fptools_version_of_ghc[_pl]="0"
707 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
711 [$1]="[$]fptools_version_of_ghc[_all]"
713 [$1]="[$]fptools_version_of_ghc[_major]"
714 [$2]="[$]fptools_version_of_ghc[_minor]"
716 [$1]="[$]fptools_version_of_ghc[_major]"
717 [$2]="[$]fptools_version_of_ghc[_minor]"
718 [$3]="[$]fptools_version_of_ghc[_pl]"
720 [$1]="[$]fptools_version_of_ghc[_all]"
721 [$2]="[$]fptools_version_of_ghc[_major]"
722 [$3]="[$]fptools_version_of_ghc[_minor]"
723 [$4]="[$]fptools_version_of_ghc[_pl]"
729 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
730 # ---------------------------------------------------------------------------------
731 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
732 # additional flexibility of specifying the PROLOGUE and BODY.
733 AC_DEFUN([FP_CHECK_FUNC],
734 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
735 AC_CACHE_CHECK([for $1], fp_func,
736 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
737 [AS_VAR_SET(fp_func, yes)],
738 [AS_VAR_SET(fp_func, no)])])
739 AS_IF([test AS_VAR_GET(fp_func) = yes],
740 [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
741 [Define to 1 if you have the `]$1[' function.]) $4],
743 AS_VAR_POPDEF([fp_func])dnl
749 # Generates a DocBook XML V4.2 document in conftest.xml.
751 # It took a lot of experimentation to find a document that will cause
752 # xsltproc to fail with an error code when the relevant
753 # stylesheets/DTDs are not found. I couldn't make xsltproc fail with
754 # a single-file document, it seems a multi-file document is needed.
757 AC_DEFUN([FP_GEN_DOCBOOK_XML],
758 [rm -f conftest.xml conftest-book.xml
759 cat > conftest.xml << EOF
760 <?xml version="1.0" encoding="iso-8859-1"?>
761 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
762 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [[
763 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
769 cat >conftest-book.xml << EOF
770 <?xml version="1.0" encoding="iso-8859-1"?>
771 <title>A DocBook “Test Document”</title>
772 <chapter id="id-one">
773 <title>A Chapter Title</title>
774 <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
776 <chapter id="id-two">
777 <title>Another Chapter Title</title>
778 <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
781 ]) # FP_GEN_DOCBOOK_XML
786 # Sets the output variable DblatexCmd to the full path of dblatex,
787 # which we use for building PDF and PS docs.
788 # DblatexCmd is empty if dblatex could not be found.
789 AC_DEFUN([FP_PROG_DBLATEX],
790 [AC_PATH_PROG([DblatexCmd], [dblatex])
791 if test -z "$DblatexCmd"; then
792 AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
799 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
800 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
801 AC_DEFUN([FP_PROG_XSLTPROC],
802 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
803 if test -z "$XsltprocCmd"; then
804 AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the HTML documentation])
810 # ----------------------------
811 # Check that we can process a DocBook XML document to HTML using xsltproc.
812 AC_DEFUN([FP_DOCBOOK_XSL],
813 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
814 if test -n "$XsltprocCmd"; then
815 AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
817 fp_cv_dir_docbook_xsl=no
818 if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
819 fp_cv_dir_docbook_xsl=yes
823 if test x"$fp_cv_dir_docbook_xsl" = xno; then
824 AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
829 AC_SUBST([HAVE_DOCBOOK_XSL])
835 # Sets the output variable XmllintCmd to the full path of the XSLT processor
836 # xmllint. XmllintCmd is empty if xmllint could not be found.
837 AC_DEFUN([FP_PROG_XMLLINT],
838 [AC_PATH_PROG([XmllintCmd], [xmllint])
839 if test -z "$XmllintCmd"; then
840 AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
845 # FP_CHECK_DOCBOOK_DTD
846 # --------------------
847 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
848 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
849 if test -n "$XmllintCmd"; then
850 AC_MSG_CHECKING([for DocBook DTD])
852 if $XmllintCmd --nonet --valid --noout conftest.xml ; then
855 AC_MSG_RESULT([failed])
856 AC_MSG_WARN([cannot find a DTD for DocBook XML V4.2, you will not be able to validate your documentation])
857 AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
861 ])# FP_CHECK_DOCBOOK_DTD
866 # Generates a formatting objects document in conftest.fo.
867 AC_DEFUN([FP_GEN_FO],
869 cat > conftest.fo << EOF
870 <?xml version="1.0"?>
871 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
872 <fo:layout-master-set>
873 <fo:simple-page-master master-name="blank">
875 </fo:simple-page-master>
876 </fo:layout-master-set>
877 <fo:page-sequence master-reference="blank">
878 <fo:flow flow-name="xsl-region-body">
891 # Set the output variable 'FopCmd' to the first working 'fop' in the current
892 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
893 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
894 AC_DEFUN([FP_PROG_FOP],
895 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
896 if test -n "$FopCmd1"; then
897 AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
899 if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
900 fp_cv_fop_usability=yes
902 fp_cv_fop_usability=no
905 if test x"$fp_cv_fop_usability" = xyes; then
909 if test -z "$FopCmd"; then
910 AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
919 # Sets the output variable HstagsCmd to the full Haskell tags program path.
920 # HstagsCmd is empty if no such program could be found.
921 AC_DEFUN([FP_PROG_HSTAGS],
922 [AC_PATH_PROG([HstagsCmd], [hasktags])
923 if test -z "$HstagsCmd"; then
924 AC_MSG_WARN([cannot find hasktags in your PATH, you will not be able to build the tags])
931 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
932 # WithGhc. Sets the output variable GhcPkgCmd.
933 AC_DEFUN([FP_PROG_GHC_PKG],
934 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
936 # If we are told to use ghc-stage2, then we're using an in-tree
937 # compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
938 # so we sed off -stage[0-9]$. However, if we are told to use
939 # ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
941 fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
942 if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
943 fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
945 AC_MSG_ERROR([Cannot find matching ghc-pkg])
947 GhcPkgCmd=$fp_cv_matching_ghc_pkg
948 AC_SUBST([GhcPkgCmd])
954 # Determine which extra flags we need to pass gcc when we invoke it
955 # to compile .hc code.
957 # Some OSs (Mandrake Linux, in particular) configure GCC with
958 # -momit-leaf-frame-pointer on by default. If this is the case, we
959 # need to turn it off for mangling to work. The test is currently a
960 # bit crude, using only the version number of gcc.
962 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
963 # integer wrap around. (Trac #952)
965 # -fno-unit-at-a-time or -fno-toplevel-reoder is necessary to avoid gcc
966 # reordering things in the module and confusing the manger and/or splitter.
969 # If gcc knows about the stack protector, turn it off.
970 # Otherwise the stack-smash handler gets triggered.
972 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
973 [AC_REQUIRE([FP_HAVE_GCC])
974 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
975 [fp_cv_gcc_extra_opts=
976 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
977 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
979 case $TargetPlatform in
981 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.2],
982 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"],
984 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
985 [FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
986 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
987 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-unit-at-a-time"]
992 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
993 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
997 echo 'int main(void) {return 0;}' > conftest.c
998 if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
1000 fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-stack-protector"
1002 rm conftest.c conftest.o
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 --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)