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],
12 AC_MSG_CHECKING([Setting up $2 and $3])
15 # By default, gcc on OS X will generate SSE
16 # instructions, which need things 16-byte aligned,
17 # but we don't 16-byte align things. Thus drop
18 # back to generic i686 compatibility. Trac #2983.
19 $2="$$2 -march=i686 -m32"
20 $3="$$3 -march=i686 -m32"
29 i386-apple-darwin|x86_64-apple-darwin)
30 # We support back to OS X 10.5
31 $2="$$2 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
32 $3="$$3 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
36 # If gcc knows about the stack protector, turn it off.
37 # Otherwise the stack-smash handler gets triggered.
38 echo 'int main(void) {return 0;}' > conftest.c
39 if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
41 $2="$$2 -fno-stack-protector"
43 rm -f conftest.c conftest.o
48 # FP_VISIBILITY_HIDDEN
49 # ----------------------------------
50 # Is the visibility hidden attribute supported?
51 AC_DEFUN([FP_VISIBILITY_HIDDEN],
53 AC_MSG_CHECKING([whether __attribute__((visibility("hidden"))) is supported])
54 echo '__attribute__((visibility("hidden"))) void foo(void) {}' > conftest.c
55 if $CC -Wall -Werror -c conftest.c > /dev/null 2>&1
58 AC_DEFINE(HAS_VISIBILITY_HIDDEN, 1, [Has visibility hidden])
62 rm -f conftest.c conftest.o
66 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
67 # ----------------------------------
68 # Little endian Arm on Linux with some ABIs has big endian word order
69 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
70 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
71 [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
74 [#include <endian.h>],
75 [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
78 not float word order big endian
81 [fptools_cv_float_word_order_bigendian=yes],
82 [fptools_cv_float_word_order_bigendian=no])
84 case $fptools_cv_float_word_order_bigendian in
86 AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
87 [Define to 1 if your processor stores words of floats with
88 the most significant byte first]) ;;
93 # FP_EVAL_STDERR(COMMAND)
94 # -----------------------
95 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
96 # into the file conftest.err and the exit status in the variable fp_status.
97 AC_DEFUN([FP_EVAL_STDERR],
98 [{ (eval $1) 2>conftest.er1
100 grep -v '^ *+' conftest.er1 >conftest.err
102 (exit $fp_status); }[]dnl
106 # FP_ARG_WITH_PATH_GNU_PROG
107 # --------------------
110 # $1 = the command to look for
111 # $2 = the variable to set
113 AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
116 [AC_HELP_STRING([--with-$2=ARG],
117 [Use ARG as the path to $2 [default=autodetect]])],
119 if test "$HostOS" = "mingw32"
121 AC_MSG_WARN([Request to use $withval will be ignored])
127 if test "$HostOS" != "mingw32"
129 AC_PATH_PROG([$1], [$2])
132 AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link])
137 ]) # FP_ARG_WITH_PATH_GNU_PROG
140 # FP_PROG_CONTEXT_DIFF
141 # --------------------
142 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
144 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
146 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
147 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
148 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
149 [echo foo > conftest1
151 fp_cv_context_diff=no
152 for fp_var in '-U 1' '-u1' '-C 1' '-c1'
154 if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
155 fp_cv_context_diff="diff $fp_var"
159 if test x"$fp_cv_context_diff" = xno; then
160 AC_MSG_ERROR([cannot figure out how to do context diffs])
162 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
163 ])# FP_PROG_CONTEXT_DIFF
166 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
167 # --------------------------------------------------------
168 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
169 # compilation. Execute IF-FAILS when unable to determine the value. Works for
170 # cross-compilation, too.
172 # Implementation note: We are lazy and use an internal autoconf macro, but it
173 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
175 AC_DEFUN([FP_COMPUTE_INT],
176 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
180 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
181 # ------------------------------------------------------------------
182 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
183 # given type. Defines ALIGNMENT_TYPE.
184 AC_DEFUN([FP_CHECK_ALIGNMENT],
185 [AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [],
186 [AC_FATAL([$0: requires literal arguments])])[]dnl
187 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
188 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
189 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
190 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
191 FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
193 [AC_INCLUDES_DEFAULT([$3])],
194 [AC_MSG_ERROR([cannot compute alignment ($1)
195 See `config.log' for more details.], [77])])
199 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
200 m4_popdef([fp_Cache])[]dnl
201 ])# FP_CHECK_ALIGNMENT
204 # FP_LEADING_UNDERSCORE
205 # ---------------------
206 # Test for determining whether symbol names have a leading underscore. We assume
207 # that they _haven't_ if anything goes wrong. Sets the output variable
208 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
210 # Some nlist implementations seem to try to be compatible by ignoring a leading
211 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
212 # checking for *no* leading underscore first. Sigh. --SDM
214 # Similarly on OpenBSD, but this test doesn't help. -- dons
215 AC_DEFUN([FP_LEADING_UNDERSCORE],
216 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
217 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
218 # Hack!: nlist() under Digital UNIX insist on there being an _,
219 # but symbol table listings shows none. What is going on here?!?
221 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
222 # the underscoredness of that "platform"
223 case $HostPlatform in
224 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
226 i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
227 *) fptools_cv_leading_underscore=no ;;
229 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
230 *cygwin32) fptools_cv_leading_underscore=yes;;
231 *mingw32) fptools_cv_leading_underscore=yes;;
233 # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
234 x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
236 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
238 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
239 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
247 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
249 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
253 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
256 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
257 if test x"$fptools_cv_leading_underscore" = xyes; then
258 AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
259 fi])# FP_LEADING_UNDERSCORE
262 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
263 # ----------------------------------------------------------------------------------
264 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
265 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
266 AC_DEFUN([FP_COMPARE_VERSIONS],
267 [fp_version1=$1; fp_version2=$3
268 fp_save_IFS=$IFS; IFS='.'
269 while test x"$fp_version1" != x || test x"$fp_version2" != x
272 set dummy $fp_version1; shift
274 test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
275 test x"$fp_num1" = x && fp_num1="0"
278 set dummy $fp_version2; shift
280 test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
281 test x"$fp_num2" = x && fp_num2="0"
284 test "$fp_num1" = "$fp_num2" || break;
287 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
288 ])# FP_COMPARE_VERSIONS
292 dnl Check for GreenCard and version.
294 AC_DEFUN([FPTOOLS_GREENCARD],
296 AC_PATH_PROG(GreenCardCmd,greencard)
297 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
299 [if test x"$GreenCardCmd" != x; then
300 fptools_cv_greencard_version="`$GreenCardCmd --version |
301 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
303 fptools_cv_greencard_version=""
307 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
308 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
309 GreenCardVersion=$fptools_cv_greencard_version
310 AC_SUBST(GreenCardVersion)
314 dnl Check for Happy and version. If we're building GHC, then we need
315 dnl at least Happy version 1.14. If there's no installed Happy, we look
316 dnl for a happy source tree and point the build system at that instead.
318 AC_DEFUN([FPTOOLS_HAPPY],
319 [AC_PATH_PROG(HappyCmd,happy,)
320 # Happy is passed to Cabal, so we need a native path
321 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
322 test "${OSTYPE}" != "msys" && \
323 test "${HappyCmd}" != ""
325 # Canonicalise to <drive>:/path/to/gcc
326 HappyCmd=`cygpath -m "${HappyCmd}"`
327 AC_MSG_NOTICE([normalized happy command to $HappyCmd])
330 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
332 [if test x"$HappyCmd" != x; then
333 fptools_cv_happy_version=`"$HappyCmd" -v |
334 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ;
336 fptools_cv_happy_version="";
340 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
342 FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.16],
343 [AC_MSG_ERROR([Happy version 1.16 or later is required to compile GHC.])])[]
345 HappyVersion=$fptools_cv_happy_version;
346 AC_SUBST(HappyVersion)
350 dnl Check for Alex and version. If we're building GHC, then we need
351 dnl at least Alex version 2.0.1.
353 AC_DEFUN([FPTOOLS_ALEX],
355 AC_PATH_PROG(AlexCmd,alex,)
356 # Alex is passed to Cabal, so we need a native path
357 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
358 test "${OSTYPE}" != "msys" && \
359 test "${AlexCmd}" != ""
361 # Canonicalise to <drive>:/path/to/gcc
362 AlexCmd=`cygpath -m "${AlexCmd}"`
365 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
367 [if test x"$AlexCmd" != x; then
368 fptools_cv_alex_version=`"$AlexCmd" -v |
369 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'` ;
371 fptools_cv_alex_version="";
375 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
377 FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.1.0],
378 [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[]
380 AlexVersion=$fptools_cv_alex_version;
381 AC_SUBST(AlexVersion)
387 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
388 # variable's value is empty.
389 AC_DEFUN([FP_PROG_LD_X],
391 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
392 [echo 'foo() {}' > conftest.c
393 ${CC-cc} -c conftest.c
394 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
400 if test "$fp_cv_ld_x" = yes; then
411 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
413 AC_DEFUN([FP_PROG_LD_IS_GNU],
415 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
416 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
421 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
422 ])# FP_PROG_LD_IS_GNU
427 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
428 # version of it. Exits if no ar can be found
429 AC_DEFUN([FP_PROG_AR],
430 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
431 if test -z "$fp_prog_ar_raw"; then
432 AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
434 fp_prog_ar="$fp_prog_ar_raw"
435 case $HostPlatform in
436 *mingw32) if test x${OSTYPE} != xmsys; then
437 fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`"
438 AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
447 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
448 AC_DEFUN([FP_PROG_AR_IS_GNU],
449 [AC_REQUIRE([FP_PROG_AR])
450 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
451 [if "$fp_prog_ar_raw" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
452 fp_cv_prog_ar_is_gnu=yes
454 fp_cv_prog_ar_is_gnu=no
456 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
457 AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
458 ])# FP_PROG_AR_IS_GNU
461 # FP_PROG_AR_SUPPORTS_ATFILE
463 # Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
464 # or not it supports the @file syntax
465 AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
466 [AC_REQUIRE([FP_PROG_AR])
467 AC_REQUIRE([FP_PROG_AR_ARGS])
468 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports @file], [fp_cv_prog_ar_supports_atfile],
472 echo conftest.file > conftest.atfile
473 echo conftest.file >> conftest.atfile
474 "$fp_prog_ar_raw" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
475 fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar_raw" t conftest.a 2> /dev/null | grep -c conftest.file`
477 if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
479 fp_cv_prog_ar_supports_atfile=yes
481 fp_cv_prog_ar_supports_atfile=no
483 fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
484 AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
485 ])# FP_PROG_AR_SUPPORTS_ATFILE
489 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
490 # to a non-Cygwin invocation of ar including these arguments.
491 AC_DEFUN([FP_PROG_AR_ARGS],
492 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
493 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
495 # GNU ar needs special treatment: it appears to have problems with
496 # object files with the same name if you use the 's' modifier, but
497 # simple 'ar q' works fine, and doesn't need a separate ranlib.
498 if test $fp_prog_ar_is_gnu = yes; then
499 fp_cv_prog_ar_args="q"
502 for fp_var in clqsZ clqs cqs clq cq ; do
504 if "$fp_prog_ar_raw" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
505 fp_cv_prog_ar_args=$fp_var
510 if test -z "$fp_cv_prog_ar_args"; then
511 AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
514 fp_prog_ar_args=$fp_cv_prog_ar_args
515 AC_SUBST([ArCmd], ["$fp_prog_ar"])
516 AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
521 # FP_PROG_AR_NEEDS_RANLIB
522 # -----------------------
523 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
525 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
526 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
527 AC_REQUIRE([FP_PROG_AR_ARGS])
528 AC_REQUIRE([AC_PROG_CC])
529 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
530 [if test $fp_prog_ar_is_gnu = yes; then
531 fp_cv_prog_ar_needs_ranlib=no
532 elif echo $TargetPlatform | grep "^.*-apple-darwin$" > /dev/null 2> /dev/null; then
533 # It's quite tedious to check for Apple's crazy timestamps in .a files,
535 fp_cv_prog_ar_needs_ranlib=yes
536 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
537 fp_cv_prog_ar_needs_ranlib=no
539 fp_cv_prog_ar_needs_ranlib=yes
541 if test $fp_cv_prog_ar_needs_ranlib = yes; then
547 ])# FP_PROG_AR_NEEDS_RANLIB
550 # FP_PROG_AR_SUPPORTS_INPUT
551 # -------------------------
552 # Sets the output variable ArSupportsInput to "-input" or "", depending on
553 # whether ar supports -input flag is supported or not.
554 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
555 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
556 AC_REQUIRE([FP_PROG_AR_ARGS])
557 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
558 [fp_cv_prog_ar_supports_input=no
559 if test $fp_prog_ar_is_gnu = no; then
562 if FP_EVAL_STDERR(["$fp_prog_ar_raw" $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
563 test -s conftest.err || fp_cv_prog_ar_supports_input=yes
567 if test $fp_cv_prog_ar_supports_input = yes; then
568 ArSupportsInput="-input"
572 AC_SUBST([ArSupportsInput])
573 ])# FP_PROG_AR_SUPPORTS_INPUT
577 dnl AC_SHEBANG_PERL - can we she-bang perl?
579 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
580 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
585 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
586 if test $? -ne 69; then
587 fptools_cv_shebang_perl=yes
589 fptools_cv_shebang_perl=no
597 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
598 # output variables HaveGcc and GccVersion.
599 AC_DEFUN([FP_HAVE_GCC],
600 [AC_REQUIRE([AC_PROG_CC])
601 if test -z "$GCC"; then
606 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
607 AC_MSG_ERROR([gcc is required])
610 AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
611 [if test "$fp_have_gcc" = "YES"; then
612 fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
613 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
614 [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
615 # See #2770: gcc 2.95 doesn't work any more, apparently. There probably
616 # isn't a very good reason for that, but for now just make configure
618 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
620 fp_cv_gcc_version="not-installed"
623 AC_SUBST([HaveGcc], [$fp_have_gcc])
624 AC_SUBST([GccVersion], [$fp_cv_gcc_version])
628 dnl Small feature test for perl version. Assumes PerlCmd
629 dnl contains path to perl binary.
631 dnl (Perl versions prior to v5.6 does not contain the string "v5";
632 dnl instead they display version strings such as "version 5.005".)
634 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
635 [$PerlCmd -v >conftest.out 2>&1
636 if grep "v5" conftest.out >/dev/null 2>&1; then
639 AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
645 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
646 # [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
647 # -----------------------------------------------------
648 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
649 # of PROG-TO-CHECK-FOR when found.
650 AC_DEFUN([FP_CHECK_PROG],
651 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
657 # Find a non-WinDoze version of the "find" utility.
658 AC_DEFUN([FP_PROG_FIND],
659 [AC_PATH_PROGS([fp_prog_find], [gfind find], find)
660 echo foo > conftest.txt
661 $fp_prog_find conftest.txt -print > conftest.out 2>&1
662 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
663 # OK, looks like a real "find".
664 case $HostPlatform in
666 if test x${OSTYPE} != xmsys
668 fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
669 AC_MSG_NOTICE([normalized find command to $fp_prog_find])
673 FindCmd="$fp_prog_find"
675 # Found a poor WinDoze version of "find", ignore it.
676 AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
677 FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
679 rm -f conftest.txt conftest.out
680 AC_SUBST([FindCmd])[]dnl
686 # Find a Unix-like sort
687 AC_DEFUN([FP_PROG_SORT],
688 [AC_PATH_PROG([fp_prog_sort], [sort])
689 echo conwip > conftest.txt
690 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
691 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
693 SortCmd="$fp_prog_sort"
695 # Summink else..pick next one.
696 AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
697 FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
699 rm -f conftest.txt conftest.out
700 AC_SUBST([SortCmd])[]dnl
704 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
705 dnl values of the second argument to the result of running
706 dnl the commands given by the third. It does not cache its
707 dnl result, so it is suitable for checks which should be
710 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
711 [AC_MSG_CHECKING([$1])
713 AC_MSG_RESULT([$][$2])
717 dnl FPTOOLS_GHC_VERSION(version)
718 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
719 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
721 dnl Test for version of installed ghc. Uses $GHC.
722 dnl [original version pinched from c2hs]
724 AC_DEFUN([FPTOOLS_GHC_VERSION],
725 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
726 ["${WithGhc-ghc}" --version > conftestghc 2>&1
727 cat conftestghc >&AS_MESSAGE_LOG_FD
728 #Useless Use Of cat award...
729 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
731 if test "[$]fptools_version_of_ghc" = ""
733 fptools_version_of_ghc='unknown'
735 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
736 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
737 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
739 if test "[$]fptools_version_of_ghc[_pl]" = ""
741 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
742 fptools_version_of_ghc[_pl]="0"
744 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
748 [$1]="[$]fptools_version_of_ghc[_all]"
750 [$1]="[$]fptools_version_of_ghc[_major]"
751 [$2]="[$]fptools_version_of_ghc[_minor]"
753 [$1]="[$]fptools_version_of_ghc[_major]"
754 [$2]="[$]fptools_version_of_ghc[_minor]"
755 [$3]="[$]fptools_version_of_ghc[_pl]"
757 [$1]="[$]fptools_version_of_ghc[_all]"
758 [$2]="[$]fptools_version_of_ghc[_major]"
759 [$3]="[$]fptools_version_of_ghc[_minor]"
760 [$4]="[$]fptools_version_of_ghc[_pl]"
766 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
767 # ---------------------------------------------------------------------------------
768 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
769 # additional flexibility of specifying the PROLOGUE and BODY.
770 AC_DEFUN([FP_CHECK_FUNC],
771 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
772 AC_CACHE_CHECK([for $1], fp_func,
773 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
774 [AS_VAR_SET(fp_func, yes)],
775 [AS_VAR_SET(fp_func, no)])])
776 AS_IF([test AS_VAR_GET(fp_func) = yes],
777 [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
778 [Define to 1 if you have the `]$1[' function.]) $4],
780 AS_VAR_POPDEF([fp_func])dnl
786 # Generates a DocBook XML V4.5 document in conftest.xml.
788 # It took a lot of experimentation to find a document that will cause
789 # xsltproc to fail with an error code when the relevant
790 # stylesheets/DTDs are not found. I couldn't make xsltproc fail with
791 # a single-file document, it seems a multi-file document is needed.
794 AC_DEFUN([FP_GEN_DOCBOOK_XML],
795 [rm -f conftest.xml conftest-book.xml
796 cat > conftest.xml << EOF
797 <?xml version="1.0" encoding="iso-8859-1"?>
798 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
799 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [[
800 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
806 cat >conftest-book.xml << EOF
807 <?xml version="1.0" encoding="iso-8859-1"?>
808 <title>A DocBook “Test Document”</title>
809 <chapter id="id-one">
810 <title>A Chapter Title</title>
811 <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
813 <chapter id="id-two">
814 <title>Another Chapter Title</title>
815 <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
818 ]) # FP_GEN_DOCBOOK_XML
823 # Sets the output variable DblatexCmd to the full path of dblatex,
824 # which we use for building PDF and PS docs.
825 # DblatexCmd is empty if dblatex could not be found.
826 AC_DEFUN([FP_PROG_DBLATEX],
827 [AC_PATH_PROG([DblatexCmd], [dblatex])
828 if test -z "$DblatexCmd"; then
829 AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
836 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
837 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
838 AC_DEFUN([FP_PROG_XSLTPROC],
839 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
840 if test -z "$XsltprocCmd"; then
841 AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the HTML documentation])
847 # ----------------------------
848 # Check that we can process a DocBook XML document to HTML using xsltproc.
849 AC_DEFUN([FP_DOCBOOK_XSL],
850 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
851 if test -n "$XsltprocCmd"; then
852 AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
854 fp_cv_dir_docbook_xsl=no
855 if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
856 fp_cv_dir_docbook_xsl=yes
860 if test x"$fp_cv_dir_docbook_xsl" = xno; then
861 AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
866 AC_SUBST([HAVE_DOCBOOK_XSL])
872 # Sets the output variable XmllintCmd to the full path of the XSLT processor
873 # xmllint. XmllintCmd is empty if xmllint could not be found.
874 AC_DEFUN([FP_PROG_XMLLINT],
875 [AC_PATH_PROG([XmllintCmd], [xmllint])
876 if test -z "$XmllintCmd"; then
877 AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
882 # FP_CHECK_DOCBOOK_DTD
883 # --------------------
884 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
885 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
886 if test -n "$XmllintCmd"; then
887 AC_MSG_CHECKING([for DocBook DTD])
889 if $XmllintCmd --nonet --valid --noout conftest.xml ; then
892 AC_MSG_RESULT([failed])
893 AC_MSG_WARN([cannot find a DTD for DocBook XML V4.5, you will not be able to validate your documentation])
894 AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
898 ])# FP_CHECK_DOCBOOK_DTD
903 # Generates a formatting objects document in conftest.fo.
904 AC_DEFUN([FP_GEN_FO],
906 cat > conftest.fo << EOF
907 <?xml version="1.0"?>
908 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
909 <fo:layout-master-set>
910 <fo:simple-page-master master-name="blank">
912 </fo:simple-page-master>
913 </fo:layout-master-set>
914 <fo:page-sequence master-reference="blank">
915 <fo:flow flow-name="xsl-region-body">
928 # Set the output variable 'FopCmd' to the first working 'fop' in the current
929 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
930 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
931 AC_DEFUN([FP_PROG_FOP],
932 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
933 if test -n "$FopCmd1"; then
934 AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
936 if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
937 fp_cv_fop_usability=yes
939 fp_cv_fop_usability=no
942 if test x"$fp_cv_fop_usability" = xyes; then
946 if test -z "$FopCmd"; then
947 AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
956 # Sets the output variable HstagsCmd to the full Haskell tags program path.
957 # HstagsCmd is empty if no such program could be found.
958 AC_DEFUN([FP_PROG_HSTAGS],
959 [AC_PATH_PROG([HstagsCmd], [hasktags])
960 if test -z "$HstagsCmd"; then
961 AC_MSG_WARN([cannot find hasktags in your PATH, you will not be able to build the tags])
968 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
969 # WithGhc. Sets the output variable GhcPkgCmd.
970 AC_DEFUN([FP_PROG_GHC_PKG],
971 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
973 # If we are told to use ghc-stage2, then we're using an in-tree
974 # compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
975 # so we sed off -stage[0-9]$. However, if we are told to use
976 # ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
978 fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
979 if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
980 fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
982 AC_MSG_ERROR([Cannot find matching ghc-pkg])
984 GhcPkgCmd=$fp_cv_matching_ghc_pkg
985 AC_SUBST([GhcPkgCmd])
991 # Determine which extra flags we need to pass gcc when we invoke it
992 # to compile .hc code.
994 # Some OSs (Mandrake Linux, in particular) configure GCC with
995 # -momit-leaf-frame-pointer on by default. If this is the case, we
996 # need to turn it off for mangling to work. The test is currently a
997 # bit crude, using only the version number of gcc.
999 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
1000 # integer wrap around. (Trac #952)
1002 # -fno-unit-at-a-time or -fno-toplevel-reoder is necessary to avoid gcc
1003 # reordering things in the module and confusing the manger and/or splitter.
1006 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
1007 [AC_REQUIRE([FP_HAVE_GCC])
1008 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
1009 [fp_cv_gcc_extra_opts=
1010 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
1011 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
1013 case $TargetPlatform in
1015 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.2],
1016 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"],
1018 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
1019 [FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
1020 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
1021 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-unit-at-a-time"]
1026 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.2],
1027 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"],
1032 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1036 # FP_SETUP_PROJECT_VERSION
1037 # ---------------------
1038 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1040 if test "$RELEASE" = "NO"; then
1041 AC_MSG_CHECKING([for GHC version date])
1042 if test -f VERSION_DATE; then
1043 PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1044 AC_MSG_RESULT(given $PACKAGE_VERSION)
1045 elif test -d .git; then
1047 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/"`
1048 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
1049 changequote([, ])dnl
1050 AC_MSG_ERROR([failed to detect version date: check that git is in your path])
1052 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1053 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1054 elif test -d _darcs; then
1055 # TODO: Remove this branch after conversion to Git
1057 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`
1058 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
1059 changequote([, ])dnl
1060 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
1062 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1063 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1064 elif test -f VERSION; then
1065 PACKAGE_VERSION=`cat VERSION`
1066 AC_MSG_RESULT(given $PACKAGE_VERSION)
1068 AC_MSG_WARN([cannot determine snapshot version: no .git or _darcs directory and no VERSION file])
1073 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1074 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1076 # Split PACKAGE_VERSION into (possibly empty) parts
1077 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1078 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1079 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1080 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1082 # Calculate project version as an integer, using 2 digits for minor version
1083 case $VERSION_MINOR in
1084 ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1085 ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1086 *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1088 AC_SUBST([ProjectVersionInt])
1090 # The project patchlevel is zero unless stated otherwise
1091 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1093 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1094 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1096 AC_SUBST([ProjectPatchLevel])
1097 ])# FP_SETUP_PROJECT_VERSION
1100 # Check for a working timer_create(). We need a pretty detailed check
1101 # here, because there exist partially-working implementations of
1102 # timer_create() in certain versions of Linux (see bug #1933).
1104 AC_DEFUN([FP_CHECK_TIMER_CREATE],
1105 [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)],
1106 [fptools_cv_timer_create_works],
1109 #ifdef HAVE_STDLIB_H
1115 #ifdef HAVE_SIGNAL_H
1118 #ifdef HAVE_UNISTD_H
1122 static volatile int tock = 0;
1123 static void handler(int i)
1128 static void timeout(int i)
1130 // timer_settime() has been known to hang, so just in case
1131 // we install a 1-second timeout (see #2257)
1135 int main(int argc, char *argv[])
1140 struct itimerspec it;
1141 struct sigaction action;
1144 ev.sigev_notify = SIGEV_SIGNAL;
1145 ev.sigev_signo = SIGVTALRM;
1147 action.sa_handler = handler;
1148 action.sa_flags = 0;
1149 sigemptyset(&action.sa_mask);
1150 if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1151 fprintf(stderr,"SIGVTALRM problem\n");
1155 action.sa_handler = timeout;
1156 action.sa_flags = 0;
1157 sigemptyset(&action.sa_mask);
1158 if (sigaction(SIGALRM, &action, NULL) == -1) {
1159 fprintf(stderr,"SIGALRM problem\n");
1164 if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1165 fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1169 it.it_value.tv_sec = 0;
1170 it.it_value.tv_nsec = 1;
1171 it.it_interval = it.it_value;
1172 if (timer_settime(timer, 0, &it, NULL) != 0) {
1173 fprintf(stderr,"settime problem\n");
1179 for(n = 3; n < 20000; n++){
1180 for(m = 2; m <= n/2; m++){
1181 if (!(n%m)) count++;
1188 fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1192 timer_delete(timer);
1194 if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1195 fprintf(stderr,"No CLOCK_REALTIME timer\n");
1199 it.it_value.tv_sec = 0;
1200 it.it_value.tv_nsec = 1000000;
1201 it.it_interval = it.it_value;
1202 if (timer_settime(timer, 0, &it, NULL) != 0) {
1203 fprintf(stderr,"settime problem\n");
1212 fprintf(stderr,"no CLOCK_REALTIME signal\n");
1216 timer_delete(timer);
1221 [fptools_cv_timer_create_works=yes],
1222 [fptools_cv_timer_create_works=no])
1224 case $fptools_cv_timer_create_works in
1225 yes) AC_DEFINE([USE_TIMER_CREATE], 1,
1226 [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1232 AC_DEFUN([FP_ICONV],
1234 dnl--------------------------------------------------------------------
1235 dnl * Deal with arguments telling us iconv is somewhere odd
1236 dnl--------------------------------------------------------------------
1238 dnl Note: ICONV_LIB_DIRS and ICONV_INCLUDE_DIRS are not predefined
1239 dnl to the empty string to allow them to be overridden from the
1242 AC_ARG_WITH([iconv-includes],
1243 [AC_HELP_STRING([--with-iconv-includes],
1244 [directory containing iconv.h])],
1245 [ICONV_INCLUDE_DIRS=$withval])
1247 AC_ARG_WITH([iconv-libraries],
1248 [AC_HELP_STRING([--with-iconv-libraries],
1249 [directory containing iconv library])],
1250 [ICONV_LIB_DIRS=$withval])
1252 AC_SUBST(ICONV_INCLUDE_DIRS)
1253 AC_SUBST(ICONV_LIB_DIRS)
1260 dnl--------------------------------------------------------------------
1261 dnl * Deal with arguments telling us gmp is somewhere odd
1262 dnl--------------------------------------------------------------------
1264 AC_ARG_WITH([gmp-includes],
1265 [AC_HELP_STRING([--with-gmp-includes],
1266 [directory containing gmp.h])],
1267 [GMP_INCLUDE_DIRS=$withval])
1269 AC_ARG_WITH([gmp-libraries],
1270 [AC_HELP_STRING([--with-gmp-libraries],
1271 [directory containing gmp library])],
1272 [GMP_LIB_DIRS=$withval])
1274 AC_SUBST(GMP_INCLUDE_DIRS)
1275 AC_SUBST(GMP_LIB_DIRS)
1278 # FP_CHECK_MACOSX_DEPLOYMENT_TARGET
1279 # ---------------------------------
1280 AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
1282 if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
1283 AC_MSG_CHECKING([Mac OS X deployment target])
1284 case $FP_MACOSX_DEPLOYMENT_TARGET in
1286 10.4) MACOSX_DEPLOYMENT_VERSION=10.4
1287 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1289 10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
1290 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1292 *) MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
1293 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
1296 if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
1299 if test ! -d $MACOSX_DEPLOYMENT_SDK; then
1300 AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
1302 AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
1307 # --------------------------------------------------------------
1308 # Calculate absolute path to build tree
1309 # --------------------------------------------------------------
1311 AC_DEFUN([FP_INTREE_GHC_PWD],[
1312 AC_MSG_NOTICE(Building in-tree ghc-pwd)
1314 dnl make -C utils/ghc-pwd clean && make -C utils/ghc-pwd
1315 dnl except we don't want to have to know what make is called. Sigh.
1316 rm -rf utils/ghc-pwd/dist-boot
1317 mkdir utils/ghc-pwd/dist-boot
1318 if ! "$WithGhc" -v0 -no-user-package-conf -hidir utils/ghc-pwd/dist-boot -odir utils/ghc-pwd/dist-boot -stubdir utils/ghc-pwd/dist-boot --make utils/ghc-pwd/Main.hs -o utils/ghc-pwd/dist-boot/ghc-pwd
1320 AC_MSG_ERROR([Building ghc-pwd failed])
1323 GHC_PWD=utils/ghc-pwd/dist-boot/ghc-pwd
1326 AC_DEFUN([FP_BINDIST_GHC_PWD],[
1327 GHC_PWD=utils/ghc-pwd/dist/build/tmp/ghc-pwd
1330 AC_DEFUN([FP_FIND_ROOT],[
1331 AC_MSG_CHECKING(for path to top of build tree)
1334 dnl Remove common automounter nonsense
1335 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1337 if ! test -d "$hardtop"; then
1338 AC_MSG_ERROR([cannot determine current directory])
1341 dnl We don't support building in directories with spaces.
1345 The build system does not support building in a directory
1346 containing space characters.
1347 Suggestion: move the build tree somewhere else.])
1353 AC_MSG_RESULT($hardtop)
1356 # GHC_CONVERT_CPU(cpu, target_var)
1357 # --------------------------------
1358 # converts cpu from gnu to ghc naming, and assigns the result to $target_var
1359 AC_DEFUN([GHC_CONVERT_CPU],[
1416 echo "Unknown CPU $1"
1422 # GHC_CONVERT_VENDOR(vendor, target_var)
1423 # --------------------------------
1424 # converts vendor from gnu to ghc naming, and assigns the result to $target_var
1425 AC_DEFUN([GHC_CONVERT_VENDOR],[
1429 # GHC_CONVERT_OS(os, target_var)
1430 # --------------------------------
1431 # converts os from gnu to ghc naming, and assigns the result to $target_var
1432 AC_DEFUN([GHC_CONVERT_OS],[
1437 # As far as I'm aware, none of these have relevant variants
1438 freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
1442 echo "Unknown OS $1"
1448 # LIBRARY_VERSION(lib)
1449 # --------------------------------
1450 # Gets the version number of a library.
1451 # If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3
1452 AC_DEFUN([LIBRARY_VERSION],[
1453 LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/$1/$1.cabal | sed "s/.* //"`
1454 AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION)