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_PLATFORM_VARS
8 # ----------------------------------
9 # Set the platform variables
10 AC_DEFUN([FPTOOLS_SET_PLATFORM_VARS],
12 # If no argument was given for a configuration variable, then discard
13 # the guessed canonical system and use the configuration of the
14 # bootstrapping ghc. If an argument was given, map it from gnu format
17 # For why we do it this way, see: #3637, #1717, #2951
19 # In bindists, we haven't called AC_CANONICAL_{BUILD,HOST,TARGET}
20 # so this justs uses $bootstrap_target.
22 if test "$build_alias" = ""
24 if test "$bootstrap_target" != ""
26 build=$bootstrap_target
27 echo "Build platform inferred as: $build"
29 echo "Can't work out build platform"
33 BuildArch=`echo "$build" | sed 's/-.*//'`
34 BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'`
35 BuildOS=`echo "$build" | sed 's/.*-//'`
37 GHC_CONVERT_CPU([$build_cpu], [BuildArch])
38 GHC_CONVERT_VENDOR([$build_vendor], [BuildVendor])
39 GHC_CONVERT_OS([$build_os], [BuildOS])
42 if test "$host_alias" = ""
44 if test "$bootstrap_target" != ""
46 host=$bootstrap_target
47 echo "Host platform inferred as: $host"
49 echo "Can't work out host platform"
53 HostArch=`echo "$host" | sed 's/-.*//'`
54 HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'`
55 HostOS=`echo "$host" | sed 's/.*-//'`
57 GHC_CONVERT_CPU([$host_cpu], [HostArch])
58 GHC_CONVERT_VENDOR([$host_vendor], [HostVendor])
59 GHC_CONVERT_OS([$host_os], [HostOS])
62 if test "$target_alias" = ""
64 if test "$bootstrap_target" != ""
66 target=$bootstrap_target
67 echo "Target platform inferred as: $target"
69 echo "Can't work out target platform"
73 TargetArch=`echo "$target" | sed 's/-.*//'`
74 TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'`
75 TargetOS=`echo "$target" | sed 's/.*-//'`
77 GHC_CONVERT_CPU([$target_cpu], [TargetArch])
78 GHC_CONVERT_VENDOR([$target_vendor], [TargetVendor])
79 GHC_CONVERT_OS([$target_os], [TargetOS])
84 # FPTOOLS_SET_C_LD_FLAGS
85 # ----------------------------------
86 # Set the C, LD and CPP flags for a given platform
88 # $2 is the name of the CC flags variable
89 # $3 is the name of the linker flags variable when linking with gcc
90 # $4 is the name of the linker flags variable when linking with ld
91 # $5 is the name of the CPP flags variable
92 AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
94 AC_MSG_CHECKING([Setting up $2, $3, $4 and $5])
97 # By default, gcc on OS X will generate SSE
98 # instructions, which need things 16-byte aligned,
99 # but we don't 16-byte align things. Thus drop
100 # back to generic i686 compatibility. Trac #2983.
101 $2="$$2 -march=i686 -m32"
102 $3="$$3 -march=i686 -m32"
104 $5="$$5 -march=i686 -m32"
109 $4="$$4 -arch x86_64"
114 # If gcc knows about the stack protector, turn it off.
115 # Otherwise the stack-smash handler gets triggered.
116 echo 'int main(void) {return 0;}' > conftest.c
117 if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
119 $2="$$2 -fno-stack-protector"
121 rm -f conftest.c conftest.o
122 AC_MSG_RESULT([done])
126 # FP_VISIBILITY_HIDDEN
127 # ----------------------------------
128 # Is the visibility hidden attribute supported?
129 AC_DEFUN([FP_VISIBILITY_HIDDEN],
131 AC_MSG_CHECKING([whether __attribute__((visibility("hidden"))) is supported])
132 echo '__attribute__((visibility("hidden"))) void foo(void) {}' > conftest.c
133 if $CC -Wall -Werror -c conftest.c > /dev/null 2>&1
136 AC_DEFINE(HAS_VISIBILITY_HIDDEN, 1, [Has visibility hidden])
140 rm -f conftest.c conftest.o
144 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
145 # ----------------------------------
146 # Little endian Arm on Linux with some ABIs has big endian word order
147 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
148 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
149 [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
152 [#include <endian.h>],
153 [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
156 not float word order big endian
159 [fptools_cv_float_word_order_bigendian=yes],
160 [fptools_cv_float_word_order_bigendian=no])
162 case $fptools_cv_float_word_order_bigendian in
164 AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
165 [Define to 1 if your processor stores words of floats with
166 the most significant byte first]) ;;
171 # FP_EVAL_STDERR(COMMAND)
172 # -----------------------
173 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
174 # into the file conftest.err and the exit status in the variable fp_status.
175 AC_DEFUN([FP_EVAL_STDERR],
176 [{ (eval $1) 2>conftest.er1
178 grep -v '^ *+' conftest.er1 >conftest.err
180 (exit $fp_status); }[]dnl
184 # FP_ARG_WITH_PATH_GNU_PROG
185 # --------------------
188 # $1 = the command to look for
189 # $2 = the variable to set
191 AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
194 [AC_HELP_STRING([--with-$2=ARG],
195 [Use ARG as the path to $2 [default=autodetect]])],
197 if test "$HostOS" = "mingw32"
199 AC_MSG_WARN([Request to use $withval will be ignored])
205 if test "$HostOS" != "mingw32"
207 AC_PATH_PROG([$1], [$2])
210 AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link])
215 ]) # FP_ARG_WITH_PATH_GNU_PROG
218 # FP_PROG_CONTEXT_DIFF
219 # --------------------
220 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
222 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
224 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
225 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
226 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
227 [echo foo > conftest1
229 fp_cv_context_diff=no
230 for fp_var in '-U 1' '-u1' '-C 1' '-c1'
232 if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
233 fp_cv_context_diff="diff $fp_var"
237 if test x"$fp_cv_context_diff" = xno; then
238 AC_MSG_ERROR([cannot figure out how to do context diffs])
240 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
241 ])# FP_PROG_CONTEXT_DIFF
244 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
245 # --------------------------------------------------------
246 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
247 # compilation. Execute IF-FAILS when unable to determine the value. Works for
248 # cross-compilation, too.
250 # Implementation note: We are lazy and use an internal autoconf macro, but it
251 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
253 AC_DEFUN([FP_COMPUTE_INT],
254 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
258 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
259 # ------------------------------------------------------------------
260 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
261 # given type. Defines ALIGNMENT_TYPE.
262 AC_DEFUN([FP_CHECK_ALIGNMENT],
263 [AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [],
264 [AC_FATAL([$0: requires literal arguments])])[]dnl
265 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
266 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
267 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
268 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
269 FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
271 [AC_INCLUDES_DEFAULT([$3])],
272 [AC_MSG_ERROR([cannot compute alignment ($1)
273 See `config.log' for more details.], [77])])
277 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
278 m4_popdef([fp_Cache])[]dnl
279 ])# FP_CHECK_ALIGNMENT
282 # FP_LEADING_UNDERSCORE
283 # ---------------------
284 # Test for determining whether symbol names have a leading underscore. We assume
285 # that they _haven't_ if anything goes wrong. Sets the output variable
286 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
288 # Some nlist implementations seem to try to be compatible by ignoring a leading
289 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
290 # checking for *no* leading underscore first. Sigh. --SDM
292 # Similarly on OpenBSD, but this test doesn't help. -- dons
293 AC_DEFUN([FP_LEADING_UNDERSCORE],
294 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
295 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
296 # Hack!: nlist() under Digital UNIX insist on there being an _,
297 # but symbol table listings shows none. What is going on here?!?
299 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
300 # the underscoredness of that "platform"
301 case $HostPlatform in
302 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
304 i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
305 *) fptools_cv_leading_underscore=no ;;
307 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
308 *cygwin32) fptools_cv_leading_underscore=yes;;
309 *mingw32) fptools_cv_leading_underscore=yes;;
311 # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
312 x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
314 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
316 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
317 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
325 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
327 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
331 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
334 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
335 if test x"$fptools_cv_leading_underscore" = xyes; then
336 AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
337 fi])# FP_LEADING_UNDERSCORE
340 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
341 # ----------------------------------------------------------------------------------
342 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
343 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
344 AC_DEFUN([FP_COMPARE_VERSIONS],
345 [fp_version1=$1; fp_version2=$3
346 fp_save_IFS=$IFS; IFS='.'
347 while test x"$fp_version1" != x || test x"$fp_version2" != x
350 set dummy $fp_version1; shift
352 test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
353 test x"$fp_num1" = x && fp_num1="0"
356 set dummy $fp_version2; shift
358 test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
359 test x"$fp_num2" = x && fp_num2="0"
362 test "$fp_num1" = "$fp_num2" || break;
365 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
366 ])# FP_COMPARE_VERSIONS
370 dnl Check for GreenCard and version.
372 AC_DEFUN([FPTOOLS_GREENCARD],
374 AC_PATH_PROG(GreenCardCmd,greencard)
375 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
377 [if test x"$GreenCardCmd" != x; then
378 fptools_cv_greencard_version="`$GreenCardCmd --version |
379 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
381 fptools_cv_greencard_version=""
385 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
386 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
387 GreenCardVersion=$fptools_cv_greencard_version
388 AC_SUBST(GreenCardVersion)
392 dnl Check for Happy and version. If we're building GHC, then we need
393 dnl at least Happy version 1.14. If there's no installed Happy, we look
394 dnl for a happy source tree and point the build system at that instead.
396 AC_DEFUN([FPTOOLS_HAPPY],
397 [AC_PATH_PROG(HappyCmd,happy,)
398 # Happy is passed to Cabal, so we need a native path
399 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
400 test "${OSTYPE}" != "msys" && \
401 test "${HappyCmd}" != ""
403 # Canonicalise to <drive>:/path/to/gcc
404 HappyCmd=`cygpath -m "${HappyCmd}"`
405 AC_MSG_NOTICE([normalized happy command to $HappyCmd])
408 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
410 [if test x"$HappyCmd" != x; then
411 fptools_cv_happy_version=`"$HappyCmd" -v |
412 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ;
414 fptools_cv_happy_version="";
418 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
420 FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.16],
421 [AC_MSG_ERROR([Happy version 1.16 or later is required to compile GHC.])])[]
423 HappyVersion=$fptools_cv_happy_version;
424 AC_SUBST(HappyVersion)
428 dnl Check for Alex and version. If we're building GHC, then we need
429 dnl at least Alex version 2.0.1.
431 AC_DEFUN([FPTOOLS_ALEX],
433 AC_PATH_PROG(AlexCmd,alex,)
434 # Alex is passed to Cabal, so we need a native path
435 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
436 test "${OSTYPE}" != "msys" && \
437 test "${AlexCmd}" != ""
439 # Canonicalise to <drive>:/path/to/gcc
440 AlexCmd=`cygpath -m "${AlexCmd}"`
443 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
445 [if test x"$AlexCmd" != x; then
446 fptools_cv_alex_version=`"$AlexCmd" -v |
447 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'` ;
449 fptools_cv_alex_version="";
453 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
455 FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.1.0],
456 [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[]
458 AlexVersion=$fptools_cv_alex_version;
459 AC_SUBST(AlexVersion)
465 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
466 # variable's value is empty.
467 AC_DEFUN([FP_PROG_LD_X],
469 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
470 [echo 'foo() {}' > conftest.c
471 ${CC-cc} -c conftest.c
472 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
478 if test "$fp_cv_ld_x" = yes; then
489 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
491 AC_DEFUN([FP_PROG_LD_IS_GNU],
493 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
494 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
499 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
500 ])# FP_PROG_LD_IS_GNU
505 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
506 # version of it. Exits if no ar can be found
507 AC_DEFUN([FP_PROG_AR],
508 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
509 if test -z "$fp_prog_ar_raw"; then
510 AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
512 fp_prog_ar="$fp_prog_ar_raw"
513 case $HostPlatform in
514 *mingw32) if test x${OSTYPE} != xmsys; then
515 fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`"
516 AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
525 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
526 AC_DEFUN([FP_PROG_AR_IS_GNU],
527 [AC_REQUIRE([FP_PROG_AR])
528 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
529 [if "$fp_prog_ar_raw" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
530 fp_cv_prog_ar_is_gnu=yes
532 fp_cv_prog_ar_is_gnu=no
534 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
535 AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
536 ])# FP_PROG_AR_IS_GNU
539 # FP_PROG_AR_SUPPORTS_ATFILE
541 # Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
542 # or not it supports the @file syntax
543 AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
544 [AC_REQUIRE([FP_PROG_AR])
545 AC_REQUIRE([FP_PROG_AR_ARGS])
546 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports @file], [fp_cv_prog_ar_supports_atfile],
550 echo conftest.file > conftest.atfile
551 echo conftest.file >> conftest.atfile
552 "$fp_prog_ar_raw" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
553 fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar_raw" t conftest.a 2> /dev/null | grep -c conftest.file`
555 if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
557 fp_cv_prog_ar_supports_atfile=yes
559 fp_cv_prog_ar_supports_atfile=no
561 fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
562 AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
563 ])# FP_PROG_AR_SUPPORTS_ATFILE
567 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
568 # to a non-Cygwin invocation of ar including these arguments.
569 AC_DEFUN([FP_PROG_AR_ARGS],
570 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
571 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
573 # GNU ar needs special treatment: it appears to have problems with
574 # object files with the same name if you use the 's' modifier, but
575 # simple 'ar q' works fine, and doesn't need a separate ranlib.
576 if test $fp_prog_ar_is_gnu = yes; then
577 fp_cv_prog_ar_args="q"
580 for fp_var in clqsZ clqs cqs clq cq ; do
582 if "$fp_prog_ar_raw" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
583 fp_cv_prog_ar_args=$fp_var
588 if test -z "$fp_cv_prog_ar_args"; then
589 AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
592 fp_prog_ar_args=$fp_cv_prog_ar_args
593 AC_SUBST([ArCmd], ["$fp_prog_ar"])
594 AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
599 # FP_PROG_AR_NEEDS_RANLIB
600 # -----------------------
601 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
603 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
604 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
605 AC_REQUIRE([FP_PROG_AR_ARGS])
606 AC_REQUIRE([AC_PROG_CC])
607 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
608 [if test $fp_prog_ar_is_gnu = yes; then
609 fp_cv_prog_ar_needs_ranlib=no
610 elif echo $TargetPlatform | grep "^.*-apple-darwin$" > /dev/null 2> /dev/null; then
611 # It's quite tedious to check for Apple's crazy timestamps in .a files,
613 fp_cv_prog_ar_needs_ranlib=yes
614 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
615 fp_cv_prog_ar_needs_ranlib=no
617 fp_cv_prog_ar_needs_ranlib=yes
619 if test $fp_cv_prog_ar_needs_ranlib = yes; then
625 ])# FP_PROG_AR_NEEDS_RANLIB
628 # FP_PROG_AR_SUPPORTS_INPUT
629 # -------------------------
630 # Sets the output variable ArSupportsInput to "-input" or "", depending on
631 # whether ar supports -input flag is supported or not.
632 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
633 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
634 AC_REQUIRE([FP_PROG_AR_ARGS])
635 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
636 [fp_cv_prog_ar_supports_input=no
637 if test $fp_prog_ar_is_gnu = no; then
640 if FP_EVAL_STDERR(["$fp_prog_ar_raw" $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
641 test -s conftest.err || fp_cv_prog_ar_supports_input=yes
645 if test $fp_cv_prog_ar_supports_input = yes; then
646 ArSupportsInput="-input"
650 AC_SUBST([ArSupportsInput])
651 ])# FP_PROG_AR_SUPPORTS_INPUT
655 dnl AC_SHEBANG_PERL - can we she-bang perl?
657 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
658 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
663 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
664 if test $? -ne 69; then
665 fptools_cv_shebang_perl=yes
667 fptools_cv_shebang_perl=no
675 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
676 # output variables HaveGcc and GccVersion.
677 AC_DEFUN([FP_HAVE_GCC],
678 [AC_REQUIRE([AC_PROG_CC])
679 if test -z "$GCC"; then
684 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
685 AC_MSG_ERROR([gcc is required])
688 AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
689 [if test "$fp_have_gcc" = "YES"; then
690 fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
691 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
692 [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
693 # See #2770: gcc 2.95 doesn't work any more, apparently. There probably
694 # isn't a very good reason for that, but for now just make configure
696 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
698 fp_cv_gcc_version="not-installed"
701 AC_SUBST([HaveGcc], [$fp_have_gcc])
702 AC_SUBST([GccVersion], [$fp_cv_gcc_version])
706 dnl Small feature test for perl version. Assumes PerlCmd
707 dnl contains path to perl binary.
709 dnl (Perl versions prior to v5.6 does not contain the string "v5";
710 dnl instead they display version strings such as "version 5.005".)
712 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
713 [$PerlCmd -v >conftest.out 2>&1
714 if grep "v5" conftest.out >/dev/null 2>&1; then
717 AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
723 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
724 # [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
725 # -----------------------------------------------------
726 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
727 # of PROG-TO-CHECK-FOR when found.
728 AC_DEFUN([FP_CHECK_PROG],
729 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
735 # Find a non-WinDoze version of the "find" utility.
736 AC_DEFUN([FP_PROG_FIND],
737 [AC_PATH_PROGS([fp_prog_find], [gfind find], find)
738 echo foo > conftest.txt
739 $fp_prog_find conftest.txt -print > conftest.out 2>&1
740 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
741 # OK, looks like a real "find".
742 case $HostPlatform in
744 if test x${OSTYPE} != xmsys
746 fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
747 AC_MSG_NOTICE([normalized find command to $fp_prog_find])
751 FindCmd="$fp_prog_find"
753 # Found a poor WinDoze version of "find", ignore it.
754 AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
755 FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
757 rm -f conftest.txt conftest.out
758 AC_SUBST([FindCmd])[]dnl
764 # Find a Unix-like sort
765 AC_DEFUN([FP_PROG_SORT],
766 [AC_PATH_PROG([fp_prog_sort], [sort])
767 echo conwip > conftest.txt
768 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
769 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
771 SortCmd="$fp_prog_sort"
773 # Summink else..pick next one.
774 AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
775 FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
777 rm -f conftest.txt conftest.out
778 AC_SUBST([SortCmd])[]dnl
782 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
783 dnl values of the second argument to the result of running
784 dnl the commands given by the third. It does not cache its
785 dnl result, so it is suitable for checks which should be
788 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
789 [AC_MSG_CHECKING([$1])
791 AC_MSG_RESULT([$][$2])
795 dnl FPTOOLS_GHC_VERSION(version)
796 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
797 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
799 dnl Test for version of installed ghc. Uses $GHC.
800 dnl [original version pinched from c2hs]
802 AC_DEFUN([FPTOOLS_GHC_VERSION],
803 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
804 ["${WithGhc-ghc}" --version > conftestghc 2>&1
805 cat conftestghc >&AS_MESSAGE_LOG_FD
806 #Useless Use Of cat award...
807 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
809 if test "[$]fptools_version_of_ghc" = ""
811 fptools_version_of_ghc='unknown'
813 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
814 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
815 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
817 if test "[$]fptools_version_of_ghc[_pl]" = ""
819 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
820 fptools_version_of_ghc[_pl]="0"
822 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
826 [$1]="[$]fptools_version_of_ghc[_all]"
828 [$1]="[$]fptools_version_of_ghc[_major]"
829 [$2]="[$]fptools_version_of_ghc[_minor]"
831 [$1]="[$]fptools_version_of_ghc[_major]"
832 [$2]="[$]fptools_version_of_ghc[_minor]"
833 [$3]="[$]fptools_version_of_ghc[_pl]"
835 [$1]="[$]fptools_version_of_ghc[_all]"
836 [$2]="[$]fptools_version_of_ghc[_major]"
837 [$3]="[$]fptools_version_of_ghc[_minor]"
838 [$4]="[$]fptools_version_of_ghc[_pl]"
844 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
845 # ---------------------------------------------------------------------------------
846 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
847 # additional flexibility of specifying the PROLOGUE and BODY.
848 AC_DEFUN([FP_CHECK_FUNC],
849 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
850 AC_CACHE_CHECK([for $1], fp_func,
851 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
852 [AS_VAR_SET(fp_func, yes)],
853 [AS_VAR_SET(fp_func, no)])])
854 AS_IF([test AS_VAR_GET(fp_func) = yes],
855 [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
856 [Define to 1 if you have the `]$1[' function.]) $4],
858 AS_VAR_POPDEF([fp_func])dnl
864 # Generates a DocBook XML V4.5 document in conftest.xml.
866 # It took a lot of experimentation to find a document that will cause
867 # xsltproc to fail with an error code when the relevant
868 # stylesheets/DTDs are not found. I couldn't make xsltproc fail with
869 # a single-file document, it seems a multi-file document is needed.
872 AC_DEFUN([FP_GEN_DOCBOOK_XML],
873 [rm -f conftest.xml conftest-book.xml
874 cat > conftest.xml << EOF
875 <?xml version="1.0" encoding="iso-8859-1"?>
876 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
877 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [[
878 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
884 cat >conftest-book.xml << EOF
885 <?xml version="1.0" encoding="iso-8859-1"?>
886 <title>A DocBook “Test Document”</title>
887 <chapter id="id-one">
888 <title>A Chapter Title</title>
889 <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
891 <chapter id="id-two">
892 <title>Another Chapter Title</title>
893 <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
896 ]) # FP_GEN_DOCBOOK_XML
901 # Sets the output variable DblatexCmd to the full path of dblatex,
902 # which we use for building PDF and PS docs.
903 # DblatexCmd is empty if dblatex could not be found.
904 AC_DEFUN([FP_PROG_DBLATEX],
905 [AC_PATH_PROG([DblatexCmd], [dblatex])
906 if test -z "$DblatexCmd"; then
907 AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
914 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
915 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
916 AC_DEFUN([FP_PROG_XSLTPROC],
917 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
918 if test -z "$XsltprocCmd"; then
919 AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the HTML documentation])
925 # ----------------------------
926 # Check that we can process a DocBook XML document to HTML using xsltproc.
927 AC_DEFUN([FP_DOCBOOK_XSL],
928 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
929 if test -n "$XsltprocCmd"; then
930 AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
932 fp_cv_dir_docbook_xsl=no
933 if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
934 fp_cv_dir_docbook_xsl=yes
938 if test x"$fp_cv_dir_docbook_xsl" = xno; then
939 AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
944 AC_SUBST([HAVE_DOCBOOK_XSL])
950 # Sets the output variable XmllintCmd to the full path of the XSLT processor
951 # xmllint. XmllintCmd is empty if xmllint could not be found.
952 AC_DEFUN([FP_PROG_XMLLINT],
953 [AC_PATH_PROG([XmllintCmd], [xmllint])
954 if test -z "$XmllintCmd"; then
955 AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
960 # FP_CHECK_DOCBOOK_DTD
961 # --------------------
962 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
963 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
964 if test -n "$XmllintCmd"; then
965 AC_MSG_CHECKING([for DocBook DTD])
967 if $XmllintCmd --nonet --valid --noout conftest.xml ; then
970 AC_MSG_RESULT([failed])
971 AC_MSG_WARN([cannot find a DTD for DocBook XML V4.5, you will not be able to validate your documentation])
972 AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
976 ])# FP_CHECK_DOCBOOK_DTD
981 # Generates a formatting objects document in conftest.fo.
982 AC_DEFUN([FP_GEN_FO],
984 cat > conftest.fo << EOF
985 <?xml version="1.0"?>
986 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
987 <fo:layout-master-set>
988 <fo:simple-page-master master-name="blank">
990 </fo:simple-page-master>
991 </fo:layout-master-set>
992 <fo:page-sequence master-reference="blank">
993 <fo:flow flow-name="xsl-region-body">
1006 # Set the output variable 'FopCmd' to the first working 'fop' in the current
1007 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
1008 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
1009 AC_DEFUN([FP_PROG_FOP],
1010 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
1011 if test -n "$FopCmd1"; then
1012 AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
1014 if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
1015 fp_cv_fop_usability=yes
1017 fp_cv_fop_usability=no
1020 if test x"$fp_cv_fop_usability" = xyes; then
1024 if test -z "$FopCmd"; then
1025 AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
1034 # Sets the output variable HstagsCmd to the full Haskell tags program path.
1035 # HstagsCmd is empty if no such program could be found.
1036 AC_DEFUN([FP_PROG_HSTAGS],
1037 [AC_PATH_PROG([HstagsCmd], [hasktags])
1038 if test -z "$HstagsCmd"; then
1039 AC_MSG_WARN([cannot find hasktags in your PATH, you will not be able to build the tags])
1046 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
1047 # WithGhc. Sets the output variable GhcPkgCmd.
1048 AC_DEFUN([FP_PROG_GHC_PKG],
1049 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
1051 # If we are told to use ghc-stage2, then we're using an in-tree
1052 # compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
1053 # so we sed off -stage[0-9]$. However, if we are told to use
1054 # ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
1056 fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
1057 if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
1058 fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
1060 AC_MSG_ERROR([Cannot find matching ghc-pkg])
1062 GhcPkgCmd=$fp_cv_matching_ghc_pkg
1063 AC_SUBST([GhcPkgCmd])
1067 # FP_GCC_EXTRA_FLAGS
1068 # ------------------
1069 # Determine which extra flags we need to pass gcc when we invoke it
1070 # to compile .hc code.
1072 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
1073 # integer wrap around. (Trac #952)
1075 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
1076 [AC_REQUIRE([FP_HAVE_GCC])
1077 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
1078 [fp_cv_gcc_extra_opts=
1079 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
1080 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
1083 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1087 # FP_SETUP_PROJECT_VERSION
1088 # ---------------------
1089 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1091 if test "$RELEASE" = "NO"; then
1092 AC_MSG_CHECKING([for GHC version date])
1093 if test -f VERSION_DATE; then
1094 PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1095 AC_MSG_RESULT(given $PACKAGE_VERSION)
1096 elif test -d .git; then
1098 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/"`
1099 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
1100 changequote([, ])dnl
1101 AC_MSG_ERROR([failed to detect version date: check that git is in your path])
1103 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1104 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1105 elif test -d _darcs; then
1106 # TODO: Remove this branch after conversion to Git
1108 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`
1109 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
1110 changequote([, ])dnl
1111 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
1113 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1114 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1115 elif test -f VERSION; then
1116 PACKAGE_VERSION=`cat VERSION`
1117 AC_MSG_RESULT(given $PACKAGE_VERSION)
1119 AC_MSG_WARN([cannot determine snapshot version: no .git or _darcs directory and no VERSION file])
1124 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1125 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1127 # Split PACKAGE_VERSION into (possibly empty) parts
1128 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1129 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1130 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1131 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1133 # Calculate project version as an integer, using 2 digits for minor version
1134 case $VERSION_MINOR in
1135 ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1136 ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1137 *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1139 AC_SUBST([ProjectVersionInt])
1141 # The project patchlevel is zero unless stated otherwise
1142 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1144 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1145 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1147 AC_SUBST([ProjectPatchLevel])
1148 ])# FP_SETUP_PROJECT_VERSION
1151 # Check for a working timer_create(). We need a pretty detailed check
1152 # here, because there exist partially-working implementations of
1153 # timer_create() in certain versions of Linux (see bug #1933).
1155 AC_DEFUN([FP_CHECK_TIMER_CREATE],
1156 [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)],
1157 [fptools_cv_timer_create_works],
1160 #ifdef HAVE_STDLIB_H
1166 #ifdef HAVE_SIGNAL_H
1169 #ifdef HAVE_UNISTD_H
1173 static volatile int tock = 0;
1174 static void handler(int i)
1179 static void timeout(int i)
1181 // timer_settime() has been known to hang, so just in case
1182 // we install a 1-second timeout (see #2257)
1186 int main(int argc, char *argv[])
1191 struct itimerspec it;
1192 struct sigaction action;
1195 ev.sigev_notify = SIGEV_SIGNAL;
1196 ev.sigev_signo = SIGVTALRM;
1198 action.sa_handler = handler;
1199 action.sa_flags = 0;
1200 sigemptyset(&action.sa_mask);
1201 if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1202 fprintf(stderr,"SIGVTALRM problem\n");
1206 action.sa_handler = timeout;
1207 action.sa_flags = 0;
1208 sigemptyset(&action.sa_mask);
1209 if (sigaction(SIGALRM, &action, NULL) == -1) {
1210 fprintf(stderr,"SIGALRM problem\n");
1215 if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1216 fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1220 it.it_value.tv_sec = 0;
1221 it.it_value.tv_nsec = 1;
1222 it.it_interval = it.it_value;
1223 if (timer_settime(timer, 0, &it, NULL) != 0) {
1224 fprintf(stderr,"settime problem\n");
1230 for(n = 3; n < 20000; n++){
1231 for(m = 2; m <= n/2; m++){
1232 if (!(n%m)) count++;
1239 fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1243 timer_delete(timer);
1245 if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1246 fprintf(stderr,"No CLOCK_REALTIME timer\n");
1250 it.it_value.tv_sec = 0;
1251 it.it_value.tv_nsec = 1000000;
1252 it.it_interval = it.it_value;
1253 if (timer_settime(timer, 0, &it, NULL) != 0) {
1254 fprintf(stderr,"settime problem\n");
1263 fprintf(stderr,"no CLOCK_REALTIME signal\n");
1267 timer_delete(timer);
1272 [fptools_cv_timer_create_works=yes],
1273 [fptools_cv_timer_create_works=no])
1275 case $fptools_cv_timer_create_works in
1276 yes) AC_DEFINE([USE_TIMER_CREATE], 1,
1277 [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1283 AC_DEFUN([FP_ICONV],
1285 dnl--------------------------------------------------------------------
1286 dnl * Deal with arguments telling us iconv is somewhere odd
1287 dnl--------------------------------------------------------------------
1289 dnl Note: ICONV_LIB_DIRS and ICONV_INCLUDE_DIRS are not predefined
1290 dnl to the empty string to allow them to be overridden from the
1293 AC_ARG_WITH([iconv-includes],
1294 [AC_HELP_STRING([--with-iconv-includes],
1295 [directory containing iconv.h])],
1296 [ICONV_INCLUDE_DIRS=$withval])
1298 AC_ARG_WITH([iconv-libraries],
1299 [AC_HELP_STRING([--with-iconv-libraries],
1300 [directory containing iconv library])],
1301 [ICONV_LIB_DIRS=$withval])
1303 AC_SUBST(ICONV_INCLUDE_DIRS)
1304 AC_SUBST(ICONV_LIB_DIRS)
1311 dnl--------------------------------------------------------------------
1312 dnl * Deal with arguments telling us gmp is somewhere odd
1313 dnl--------------------------------------------------------------------
1315 AC_ARG_WITH([gmp-includes],
1316 [AC_HELP_STRING([--with-gmp-includes],
1317 [directory containing gmp.h])],
1318 [GMP_INCLUDE_DIRS=$withval])
1320 AC_ARG_WITH([gmp-libraries],
1321 [AC_HELP_STRING([--with-gmp-libraries],
1322 [directory containing gmp library])],
1323 [GMP_LIB_DIRS=$withval])
1325 AC_SUBST(GMP_INCLUDE_DIRS)
1326 AC_SUBST(GMP_LIB_DIRS)
1329 # FP_CHECK_MACOSX_DEPLOYMENT_TARGET
1330 # ---------------------------------
1331 AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
1333 if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
1334 AC_MSG_CHECKING([Mac OS X deployment target])
1335 case $FP_MACOSX_DEPLOYMENT_TARGET in
1337 10.4) MACOSX_DEPLOYMENT_VERSION=10.4
1338 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1340 10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
1341 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1343 *) MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
1344 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
1347 if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
1350 if test ! -d $MACOSX_DEPLOYMENT_SDK; then
1351 AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
1353 AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
1358 # --------------------------------------------------------------
1359 # Calculate absolute path to build tree
1360 # --------------------------------------------------------------
1362 AC_DEFUN([FP_INTREE_GHC_PWD],[
1363 AC_MSG_NOTICE(Building in-tree ghc-pwd)
1365 dnl make -C utils/ghc-pwd clean && make -C utils/ghc-pwd
1366 dnl except we don't want to have to know what make is called. Sigh.
1367 rm -rf utils/ghc-pwd/dist-boot
1368 mkdir utils/ghc-pwd/dist-boot
1369 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
1371 AC_MSG_ERROR([Building ghc-pwd failed])
1374 GHC_PWD=utils/ghc-pwd/dist-boot/ghc-pwd
1377 AC_DEFUN([FP_BINDIST_GHC_PWD],[
1378 GHC_PWD=utils/ghc-pwd/dist/build/tmp/ghc-pwd
1381 AC_DEFUN([FP_FIND_ROOT],[
1382 AC_MSG_CHECKING(for path to top of build tree)
1385 dnl Remove common automounter nonsense
1386 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1388 if ! test -d "$hardtop"; then
1389 AC_MSG_ERROR([cannot determine current directory])
1392 dnl We don't support building in directories with spaces.
1396 The build system does not support building in a directory
1397 containing space characters.
1398 Suggestion: move the build tree somewhere else.])
1404 AC_MSG_RESULT($hardtop)
1407 # GHC_CONVERT_CPU(cpu, target_var)
1408 # --------------------------------
1409 # converts cpu from gnu to ghc naming, and assigns the result to $target_var
1410 AC_DEFUN([GHC_CONVERT_CPU],[
1424 i386|i486|i586|i686)
1467 echo "Unknown CPU $1"
1473 # GHC_CONVERT_VENDOR(vendor, target_var)
1474 # --------------------------------
1475 # converts vendor from gnu to ghc naming, and assigns the result to $target_var
1476 AC_DEFUN([GHC_CONVERT_VENDOR],[
1478 pc|gentoo) # like i686-pc-linux-gnu and i686-gentoo-freebsd8
1482 #pass thru by default
1488 # GHC_CONVERT_OS(os, target_var)
1489 # --------------------------------
1490 # converts os from gnu to ghc naming, and assigns the result to $target_var
1491 AC_DEFUN([GHC_CONVERT_OS],[
1496 # As far as I'm aware, none of these have relevant variants
1497 freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
1500 freebsd8) # like i686-gentoo-freebsd8
1504 echo "Unknown OS $1"
1510 # LIBRARY_VERSION(lib)
1511 # --------------------------------
1512 # Gets the version number of a library.
1513 # If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3
1514 AC_DEFUN([LIBRARY_VERSION],[
1515 LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/$1/$1.cabal | sed "s/.* //"`
1516 AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION)