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])
87 AC_MSG_WARN([GHC does not support the Cygwin target at the moment])
88 AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32])
96 i386-apple-darwin|powerpc-apple-darwin)
107 # ----------------------------------
108 # Set the variables used in the settings file
109 AC_DEFUN([FP_SETTINGS],
111 if test "$windows" = YES
113 SettingsCCompilerCommand='$topdir/../mingw/bin/gcc.exe'
114 SettingsCCompilerFlags=''
115 SettingsPerlCommand='$topdir/../perl/perl.exe'
116 SettingsDllWrapCommand='$topdir/../mingw/bin/dllwrap.exe'
117 SettingsWindresCommand='$topdir/../mingw/bin/windres.exe'
118 SettingsTouchCommand='$topdir/touchy.exe'
120 SettingsCCompilerCommand="$WhatGccIsCalled"
121 SettingsCCompilerFlags="$CONF_CC_OPTS_STAGE2"
122 SettingsPerlCommand="$PerlCmd"
123 SettingsDllWrapCommand="/bin/false"
124 SettingsWindresCommand="/bin/false"
125 SettingsTouchCommand='touch'
127 AC_SUBST(SettingsCCompilerCommand)
128 AC_SUBST(SettingsCCompilerFlags)
129 AC_SUBST(SettingsPerlCommand)
130 AC_SUBST(SettingsDllWrapCommand)
131 AC_SUBST(SettingsWindresCommand)
132 AC_SUBST(SettingsTouchCommand)
136 # FPTOOLS_SET_C_LD_FLAGS
137 # ----------------------------------
138 # Set the C, LD and CPP flags for a given platform
140 # $2 is the name of the CC flags variable
141 # $3 is the name of the linker flags variable when linking with gcc
142 # $4 is the name of the linker flags variable when linking with ld
143 # $5 is the name of the CPP flags variable
144 AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
146 AC_MSG_CHECKING([Setting up $2, $3, $4 and $5])
157 $4="$$4 -arch x86_64"
161 # For now, to suppress the gcc warning "call-clobbered
162 # register used for global register variable", we simply
163 # disable all warnings altogether using the -w flag. Oh well.
164 $2="$$2 -w -mieee -D_REENTRANT"
165 $3="$$3 -w -mieee -D_REENTRANT"
166 $5="$$5 -w -mieee -D_REENTRANT"
169 # ___HPUX_SOURCE, not _HPUX_SOURCE, is #defined if -ansi!
170 # (very nice, but too bad the HP /usr/include files don't agree.)
171 $2="$$2 -D_HPUX_SOURCE"
172 $3="$$3 -D_HPUX_SOURCE"
173 $5="$$5 -D_HPUX_SOURCE"
177 # If gcc knows about the stack protector, turn it off.
178 # Otherwise the stack-smash handler gets triggered.
179 echo 'int main(void) {return 0;}' > conftest.c
180 if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
182 $2="$$2 -fno-stack-protector"
184 rm -f conftest.c conftest.o
185 AC_MSG_RESULT([done])
189 # FP_VISIBILITY_HIDDEN
190 # ----------------------------------
191 # Is the visibility hidden attribute supported?
192 AC_DEFUN([FP_VISIBILITY_HIDDEN],
194 AC_MSG_CHECKING([whether __attribute__((visibility("hidden"))) is supported])
195 echo '__attribute__((visibility("hidden"))) void foo(void) {}' > conftest.c
196 if $CC -Wall -Werror -c conftest.c > /dev/null 2>&1
199 AC_DEFINE(HAS_VISIBILITY_HIDDEN, 1, [Has visibility hidden])
203 rm -f conftest.c conftest.o
207 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
208 # ----------------------------------
209 # Little endian Arm on Linux with some ABIs has big endian word order
210 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
211 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
212 [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
215 [#include <endian.h>],
216 [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
219 not float word order big endian
222 [fptools_cv_float_word_order_bigendian=yes],
223 [fptools_cv_float_word_order_bigendian=no])
225 case $fptools_cv_float_word_order_bigendian in
227 AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
228 [Define to 1 if your processor stores words of floats with
229 the most significant byte first]) ;;
234 # FP_EVAL_STDERR(COMMAND)
235 # -----------------------
236 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
237 # into the file conftest.err and the exit status in the variable fp_status.
238 AC_DEFUN([FP_EVAL_STDERR],
239 [{ (eval $1) 2>conftest.er1
241 grep -v '^ *+' conftest.er1 >conftest.err
243 (exit $fp_status); }[]dnl
247 # FP_ARG_WITH_PATH_GNU_PROG
248 # --------------------
251 # $1 = the variable to set
252 # $2 = the command to look for
254 AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
257 [AC_HELP_STRING([--with-$2=ARG],
258 [Use ARG as the path to $2 [default=autodetect]])],
260 if test "$HostOS" = "mingw32"
262 AC_MSG_WARN([Request to use $withval will be ignored])
268 if test "$HostOS" != "mingw32"
270 AC_PATH_PROG([$1], [$2])
273 AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link])
278 ]) # FP_ARG_WITH_PATH_GNU_PROG
281 # FP_PROG_CONTEXT_DIFF
282 # --------------------
283 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
285 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
287 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
288 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
289 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
290 [echo foo > conftest1
292 fp_cv_context_diff=no
293 for fp_var in '-U 1' '-u1' '-C 1' '-c1'
295 if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
296 fp_cv_context_diff="diff $fp_var"
300 if test x"$fp_cv_context_diff" = xno; then
301 AC_MSG_ERROR([cannot figure out how to do context diffs])
303 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
304 ])# FP_PROG_CONTEXT_DIFF
307 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
308 # --------------------------------------------------------
309 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
310 # compilation. Execute IF-FAILS when unable to determine the value. Works for
311 # cross-compilation, too.
313 # Implementation note: We are lazy and use an internal autoconf macro, but it
314 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
316 AC_DEFUN([FP_COMPUTE_INT],
317 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
321 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
322 # ------------------------------------------------------------------
323 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
324 # given type. Defines ALIGNMENT_TYPE.
325 AC_DEFUN([FP_CHECK_ALIGNMENT],
326 [AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [],
327 [AC_FATAL([$0: requires literal arguments])])[]dnl
328 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
329 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
330 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
331 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
332 FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
334 [AC_INCLUDES_DEFAULT([$3])],
335 [AC_MSG_ERROR([cannot compute alignment ($1)
336 See `config.log' for more details.], [77])])
340 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
341 m4_popdef([fp_Cache])[]dnl
342 ])# FP_CHECK_ALIGNMENT
345 # FP_LEADING_UNDERSCORE
346 # ---------------------
347 # Test for determining whether symbol names have a leading underscore. We assume
348 # that they _haven't_ if anything goes wrong. Sets the output variable
349 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
351 # Some nlist implementations seem to try to be compatible by ignoring a leading
352 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
353 # checking for *no* leading underscore first. Sigh. --SDM
355 # Similarly on OpenBSD, but this test doesn't help. -- dons
356 AC_DEFUN([FP_LEADING_UNDERSCORE],
357 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
358 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
359 # Hack!: nlist() under Digital UNIX insist on there being an _,
360 # but symbol table listings shows none. What is going on here?!?
362 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
363 # the underscoredness of that "platform"
364 case $HostPlatform in
365 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
367 i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
368 *) fptools_cv_leading_underscore=no ;;
370 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
371 *cygwin32) fptools_cv_leading_underscore=yes;;
372 *mingw32) fptools_cv_leading_underscore=yes;;
374 # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
375 x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
377 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
379 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
380 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
388 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
390 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
394 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
397 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
398 if test x"$fptools_cv_leading_underscore" = xyes; then
399 AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
400 fi])# FP_LEADING_UNDERSCORE
403 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
404 # ----------------------------------------------------------------------------------
405 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
406 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
407 AC_DEFUN([FP_COMPARE_VERSIONS],
408 [fp_version1=$1; fp_version2=$3
409 fp_save_IFS=$IFS; IFS='.'
410 while test x"$fp_version1" != x || test x"$fp_version2" != x
413 set dummy $fp_version1; shift
415 test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
416 test x"$fp_num1" = x && fp_num1="0"
419 set dummy $fp_version2; shift
421 test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
422 test x"$fp_num2" = x && fp_num2="0"
425 test "$fp_num1" = "$fp_num2" || break;
428 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
429 ])# FP_COMPARE_VERSIONS
433 dnl Check for GreenCard and version.
435 AC_DEFUN([FPTOOLS_GREENCARD],
437 AC_PATH_PROG(GreenCardCmd,greencard)
438 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
440 [if test x"$GreenCardCmd" != x; then
441 fptools_cv_greencard_version="`$GreenCardCmd --version |
442 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
444 fptools_cv_greencard_version=""
448 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
449 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
450 GreenCardVersion=$fptools_cv_greencard_version
451 AC_SUBST(GreenCardVersion)
455 dnl Check for Happy and version. If we're building GHC, then we need
456 dnl at least Happy version 1.14. If there's no installed Happy, we look
457 dnl for a happy source tree and point the build system at that instead.
459 AC_DEFUN([FPTOOLS_HAPPY],
460 [AC_PATH_PROG(HappyCmd,happy,)
461 # Happy is passed to Cabal, so we need a native path
462 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
463 test "${OSTYPE}" != "msys" && \
464 test "${HappyCmd}" != ""
466 # Canonicalise to <drive>:/path/to/gcc
467 HappyCmd=`cygpath -m "${HappyCmd}"`
468 AC_MSG_NOTICE([normalized happy command to $HappyCmd])
471 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
473 [if test x"$HappyCmd" != x; then
474 fptools_cv_happy_version=`"$HappyCmd" -v |
475 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ;
477 fptools_cv_happy_version="";
481 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
483 FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.16],
484 [AC_MSG_ERROR([Happy version 1.16 or later is required to compile GHC.])])[]
486 HappyVersion=$fptools_cv_happy_version;
487 AC_SUBST(HappyVersion)
491 dnl Check for Alex and version. If we're building GHC, then we need
492 dnl at least Alex version 2.0.1.
494 AC_DEFUN([FPTOOLS_ALEX],
496 AC_PATH_PROG(AlexCmd,alex,)
497 # Alex is passed to Cabal, so we need a native path
498 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
499 test "${OSTYPE}" != "msys" && \
500 test "${AlexCmd}" != ""
502 # Canonicalise to <drive>:/path/to/gcc
503 AlexCmd=`cygpath -m "${AlexCmd}"`
506 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
508 [if test x"$AlexCmd" != x; then
509 fptools_cv_alex_version=`"$AlexCmd" -v |
510 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'` ;
512 fptools_cv_alex_version="";
516 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
518 FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.1.0],
519 [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[]
520 FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-ge],[3.0],
521 [Alex3=YES],[Alex3=NO])
523 AlexVersion=$fptools_cv_alex_version;
524 AC_SUBST(AlexVersion)
531 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
532 # variable's value is empty.
533 AC_DEFUN([FP_PROG_LD_X],
535 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
536 [echo 'foo() {}' > conftest.c
537 ${CC-cc} -c conftest.c
538 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
544 if test "$fp_cv_ld_x" = yes; then
553 # FP_PROG_LD_BUILD_ID
556 # Sets the output variable LdHasBuildId to YES if ld supports
557 # --build-id, or NO otherwise.
558 AC_DEFUN([FP_PROG_LD_BUILD_ID],
560 AC_CACHE_CHECK([whether ld understands --build-id], [fp_cv_ld_build_id],
561 [echo 'foo() {}' > conftest.c
562 ${CC-cc} -c conftest.c
563 if ${LdCmd} -r --build-id=none -o conftest2.o conftest.o > /dev/null 2>&1; then
564 fp_cv_ld_build_id=yes
569 if test "$fp_cv_ld_build_id" = yes; then
574 AC_SUBST([LdHasBuildId])
575 ])# FP_PROG_LD_BUILD_ID
580 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
582 AC_DEFUN([FP_PROG_LD_IS_GNU],
584 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
585 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
590 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
591 ])# FP_PROG_LD_IS_GNU
596 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
597 # version of it. Exits if no ar can be found
598 AC_DEFUN([FP_PROG_AR],
599 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
600 if test -z "$fp_prog_ar_raw"; then
601 AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
603 fp_prog_ar="$fp_prog_ar_raw"
604 case $HostPlatform in
605 *mingw32) if test x${OSTYPE} != xmsys; then
606 fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`"
607 AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
616 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
617 AC_DEFUN([FP_PROG_AR_IS_GNU],
618 [AC_REQUIRE([FP_PROG_AR])
619 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
620 [if "$fp_prog_ar_raw" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
621 fp_cv_prog_ar_is_gnu=yes
623 fp_cv_prog_ar_is_gnu=no
625 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
626 AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
627 ])# FP_PROG_AR_IS_GNU
630 # FP_PROG_AR_SUPPORTS_ATFILE
632 # Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
633 # or not it supports the @file syntax
634 AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
635 [AC_REQUIRE([FP_PROG_AR])
636 AC_REQUIRE([FP_PROG_AR_ARGS])
637 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports @file], [fp_cv_prog_ar_supports_atfile],
641 echo conftest.file > conftest.atfile
642 echo conftest.file >> conftest.atfile
643 "$fp_prog_ar_raw" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
644 fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar_raw" t conftest.a 2> /dev/null | grep -c conftest.file`
646 if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
648 fp_cv_prog_ar_supports_atfile=yes
650 fp_cv_prog_ar_supports_atfile=no
652 fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
653 AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
654 ])# FP_PROG_AR_SUPPORTS_ATFILE
658 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
659 # to a non-Cygwin invocation of ar including these arguments.
660 AC_DEFUN([FP_PROG_AR_ARGS],
661 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
662 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
664 # GNU ar needs special treatment: it appears to have problems with
665 # object files with the same name if you use the 's' modifier, but
666 # simple 'ar q' works fine, and doesn't need a separate ranlib.
667 if test $fp_prog_ar_is_gnu = yes; then
668 fp_cv_prog_ar_args="q"
671 for fp_var in clqsZ clqs cqs clq cq ; do
673 if "$fp_prog_ar_raw" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
674 fp_cv_prog_ar_args=$fp_var
679 if test -z "$fp_cv_prog_ar_args"; then
680 AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
683 fp_prog_ar_args=$fp_cv_prog_ar_args
684 AC_SUBST([ArCmd], ["$fp_prog_ar"])
685 AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
690 # FP_PROG_AR_NEEDS_RANLIB
691 # -----------------------
692 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
693 # to "true" otherwise.
694 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
695 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
696 AC_REQUIRE([FP_PROG_AR_ARGS])
697 AC_REQUIRE([AC_PROG_CC])
698 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
699 [if test $fp_prog_ar_is_gnu = yes; then
700 fp_cv_prog_ar_needs_ranlib=no
701 elif echo $TargetPlatform | grep "^.*-apple-darwin$" > /dev/null 2> /dev/null; then
702 # It's quite tedious to check for Apple's crazy timestamps in .a files,
704 fp_cv_prog_ar_needs_ranlib=yes
705 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
706 fp_cv_prog_ar_needs_ranlib=no
708 fp_cv_prog_ar_needs_ranlib=yes
710 if test $fp_cv_prog_ar_needs_ranlib = yes; then
716 ])# FP_PROG_AR_NEEDS_RANLIB
720 dnl AC_SHEBANG_PERL - can we she-bang perl?
722 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
723 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
728 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
729 if test $? -ne 69; then
730 fptools_cv_shebang_perl=yes
732 fptools_cv_shebang_perl=no
740 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
741 # output variable GccVersion.
742 AC_DEFUN([FP_GCC_VERSION],
743 [AC_REQUIRE([AC_PROG_CC])
746 AC_MSG_ERROR([gcc is required])
750 AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
752 fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
753 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
754 [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
755 # See #2770: gcc 2.95 doesn't work any more, apparently. There probably
756 # isn't a very good reason for that, but for now just make configure
758 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
759 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [4.6], GccLT46=YES)
761 AC_SUBST([GccVersion], [$fp_cv_gcc_version])
766 dnl Small feature test for perl version. Assumes PerlCmd
767 dnl contains path to perl binary.
769 dnl (Perl versions prior to v5.6 does not contain the string "v5";
770 dnl instead they display version strings such as "version 5.005".)
772 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
773 [$PerlCmd -v >conftest.out 2>&1
774 if grep "v5" conftest.out >/dev/null 2>&1; then
777 AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
783 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
784 # [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
785 # -----------------------------------------------------
786 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
787 # of PROG-TO-CHECK-FOR when found.
788 AC_DEFUN([FP_CHECK_PROG],
789 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
795 # Find a non-WinDoze version of the "find" utility.
796 AC_DEFUN([FP_PROG_FIND],
797 [AC_PATH_PROGS([fp_prog_find], [gfind find], find)
798 echo foo > conftest.txt
799 $fp_prog_find conftest.txt -print > conftest.out 2>&1
800 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
801 # OK, looks like a real "find".
802 case $HostPlatform in
804 if test x${OSTYPE} != xmsys
806 fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
807 AC_MSG_NOTICE([normalized find command to $fp_prog_find])
811 FindCmd="$fp_prog_find"
813 # Found a poor WinDoze version of "find", ignore it.
814 AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
815 FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
817 rm -f conftest.txt conftest.out
818 AC_SUBST([FindCmd])[]dnl
824 # Find a Unix-like sort
825 AC_DEFUN([FP_PROG_SORT],
826 [AC_PATH_PROG([fp_prog_sort], [sort])
827 echo conwip > conftest.txt
828 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
829 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
831 SortCmd="$fp_prog_sort"
833 # Summink else..pick next one.
834 AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
835 FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
837 rm -f conftest.txt conftest.out
838 AC_SUBST([SortCmd])[]dnl
842 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
843 dnl values of the second argument to the result of running
844 dnl the commands given by the third. It does not cache its
845 dnl result, so it is suitable for checks which should be
848 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
849 [AC_MSG_CHECKING([$1])
851 AC_MSG_RESULT([$][$2])
855 dnl FPTOOLS_GHC_VERSION(version)
856 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
857 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
859 dnl Test for version of installed ghc. Uses $GHC.
860 dnl [original version pinched from c2hs]
862 AC_DEFUN([FPTOOLS_GHC_VERSION],
863 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
864 ["${WithGhc-ghc}" --version > conftestghc 2>&1
865 cat conftestghc >&AS_MESSAGE_LOG_FD
866 #Useless Use Of cat award...
867 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
869 if test "[$]fptools_version_of_ghc" = ""
871 fptools_version_of_ghc='unknown'
873 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
874 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
875 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
877 if test "[$]fptools_version_of_ghc[_pl]" = ""
879 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
880 fptools_version_of_ghc[_pl]="0"
882 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
886 [$1]="[$]fptools_version_of_ghc[_all]"
888 [$1]="[$]fptools_version_of_ghc[_major]"
889 [$2]="[$]fptools_version_of_ghc[_minor]"
891 [$1]="[$]fptools_version_of_ghc[_major]"
892 [$2]="[$]fptools_version_of_ghc[_minor]"
893 [$3]="[$]fptools_version_of_ghc[_pl]"
895 [$1]="[$]fptools_version_of_ghc[_all]"
896 [$2]="[$]fptools_version_of_ghc[_major]"
897 [$3]="[$]fptools_version_of_ghc[_minor]"
898 [$4]="[$]fptools_version_of_ghc[_pl]"
904 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
905 # ---------------------------------------------------------------------------------
906 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
907 # additional flexibility of specifying the PROLOGUE and BODY.
908 AC_DEFUN([FP_CHECK_FUNC],
909 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
910 AC_CACHE_CHECK([for $1], fp_func,
911 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
912 [AS_VAR_SET(fp_func, yes)],
913 [AS_VAR_SET(fp_func, no)])])
914 AS_IF([test AS_VAR_GET(fp_func) = yes],
915 [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
916 [Define to 1 if you have the `]$1[' function.]) $4],
918 AS_VAR_POPDEF([fp_func])dnl
924 # Generates a DocBook XML V4.5 document in conftest.xml.
926 # It took a lot of experimentation to find a document that will cause
927 # xsltproc to fail with an error code when the relevant
928 # stylesheets/DTDs are not found. I couldn't make xsltproc fail with
929 # a single-file document, it seems a multi-file document is needed.
932 AC_DEFUN([FP_GEN_DOCBOOK_XML],
933 [rm -f conftest.xml conftest-book.xml
934 cat > conftest.xml << EOF
935 <?xml version="1.0" encoding="iso-8859-1"?>
936 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
937 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [[
938 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
944 cat >conftest-book.xml << EOF
945 <?xml version="1.0" encoding="iso-8859-1"?>
946 <title>A DocBook “Test Document”</title>
947 <chapter id="id-one">
948 <title>A Chapter Title</title>
949 <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
951 <chapter id="id-two">
952 <title>Another Chapter Title</title>
953 <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
956 ]) # FP_GEN_DOCBOOK_XML
961 # Sets the output variable DblatexCmd to the full path of dblatex,
962 # which we use for building PDF and PS docs.
963 # DblatexCmd is empty if dblatex could not be found.
964 AC_DEFUN([FP_PROG_DBLATEX],
965 [AC_PATH_PROG([DblatexCmd], [dblatex])
966 if test -z "$DblatexCmd"; then
967 AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
974 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
975 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
976 AC_DEFUN([FP_PROG_XSLTPROC],
977 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
978 if test -z "$XsltprocCmd"; then
979 AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the HTML documentation])
985 # ----------------------------
986 # Check that we can process a DocBook XML document to HTML using xsltproc.
987 AC_DEFUN([FP_DOCBOOK_XSL],
988 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
989 if test -n "$XsltprocCmd"; then
990 AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
992 fp_cv_dir_docbook_xsl=no
993 if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
994 fp_cv_dir_docbook_xsl=yes
998 if test x"$fp_cv_dir_docbook_xsl" = xno; then
999 AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
1002 HAVE_DOCBOOK_XSL=YES
1004 AC_SUBST([HAVE_DOCBOOK_XSL])
1010 # Sets the output variable XmllintCmd to the full path of the XSLT processor
1011 # xmllint. XmllintCmd is empty if xmllint could not be found.
1012 AC_DEFUN([FP_PROG_XMLLINT],
1013 [AC_PATH_PROG([XmllintCmd], [xmllint])
1014 if test -z "$XmllintCmd"; then
1015 AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
1020 # FP_CHECK_DOCBOOK_DTD
1021 # --------------------
1022 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
1023 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
1024 if test -n "$XmllintCmd"; then
1025 AC_MSG_CHECKING([for DocBook DTD])
1027 if $XmllintCmd --nonet --valid --noout conftest.xml ; then
1030 AC_MSG_RESULT([failed])
1031 AC_MSG_WARN([cannot find a DTD for DocBook XML V4.5, you will not be able to validate your documentation])
1032 AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
1036 ])# FP_CHECK_DOCBOOK_DTD
1040 # ------------------
1041 # Generates a formatting objects document in conftest.fo.
1042 AC_DEFUN([FP_GEN_FO],
1044 cat > conftest.fo << EOF
1045 <?xml version="1.0"?>
1046 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
1047 <fo:layout-master-set>
1048 <fo:simple-page-master master-name="blank">
1050 </fo:simple-page-master>
1051 </fo:layout-master-set>
1052 <fo:page-sequence master-reference="blank">
1053 <fo:flow flow-name="xsl-region-body">
1066 # Set the output variable 'FopCmd' to the first working 'fop' in the current
1067 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
1068 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
1069 AC_DEFUN([FP_PROG_FOP],
1070 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
1071 if test -n "$FopCmd1"; then
1072 AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
1074 if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
1075 fp_cv_fop_usability=yes
1077 fp_cv_fop_usability=no
1080 if test x"$fp_cv_fop_usability" = xyes; then
1084 if test -z "$FopCmd"; then
1085 AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
1094 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
1095 # WithGhc. Sets the output variable GhcPkgCmd.
1096 AC_DEFUN([FP_PROG_GHC_PKG],
1097 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
1099 # If we are told to use ghc-stage2, then we're using an in-tree
1100 # compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
1101 # so we sed off -stage[0-9]$. However, if we are told to use
1102 # ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
1104 fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
1105 if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
1106 fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
1108 AC_MSG_ERROR([Cannot find matching ghc-pkg])
1110 GhcPkgCmd=$fp_cv_matching_ghc_pkg
1111 AC_SUBST([GhcPkgCmd])
1115 # FP_GCC_EXTRA_FLAGS
1116 # ------------------
1117 # Determine which extra flags we need to pass gcc when we invoke it
1118 # to compile .hc code.
1120 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
1121 # integer wrap around. (Trac #952)
1123 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
1124 [AC_REQUIRE([FP_GCC_VERSION])
1125 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
1126 [fp_cv_gcc_extra_opts=
1127 FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
1128 [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
1131 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1135 # FP_SETUP_PROJECT_VERSION
1136 # ---------------------
1137 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1139 if test "$RELEASE" = "NO"; then
1140 AC_MSG_CHECKING([for GHC version date])
1141 if test -f VERSION_DATE; then
1142 PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1143 AC_MSG_RESULT(given $PACKAGE_VERSION)
1144 elif test -d .git; then
1146 ver_date=`git log -n 1 --date=short --pretty=format:%ci | cut -d ' ' -f 1 | tr -d -`
1147 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
1148 changequote([, ])dnl
1149 AC_MSG_ERROR([failed to detect version date: check that git is in your path])
1151 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1152 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1153 elif test -d _darcs; then
1154 # TODO: Remove this branch after conversion to Git
1156 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`
1157 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
1158 changequote([, ])dnl
1159 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
1161 PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1162 AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1163 elif test -f VERSION; then
1164 PACKAGE_VERSION=`cat VERSION`
1165 AC_MSG_RESULT(given $PACKAGE_VERSION)
1167 AC_MSG_WARN([cannot determine snapshot version: no .git or _darcs directory and no VERSION file])
1172 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1173 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1175 # Split PACKAGE_VERSION into (possibly empty) parts
1176 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1177 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1178 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1179 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1181 # Calculate project version as an integer, using 2 digits for minor version
1182 case $VERSION_MINOR in
1183 ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1184 ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1185 *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1187 AC_SUBST([ProjectVersionInt])
1189 # The project patchlevel is zero unless stated otherwise
1190 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1192 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1193 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1195 AC_SUBST([ProjectPatchLevel])
1196 ])# FP_SETUP_PROJECT_VERSION
1199 # Check for a working timer_create(). We need a pretty detailed check
1200 # here, because there exist partially-working implementations of
1201 # timer_create() in certain versions of Linux (see bug #1933).
1203 AC_DEFUN([FP_CHECK_TIMER_CREATE],
1204 [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)],
1205 [fptools_cv_timer_create_works],
1208 #ifdef HAVE_STDLIB_H
1214 #ifdef HAVE_SIGNAL_H
1217 #ifdef HAVE_UNISTD_H
1221 static volatile int tock = 0;
1222 static void handler(int i)
1227 static void timeout(int i)
1229 // timer_settime() has been known to hang, so just in case
1230 // we install a 1-second timeout (see #2257)
1234 int main(int argc, char *argv[])
1239 struct itimerspec it;
1240 struct sigaction action;
1243 ev.sigev_notify = SIGEV_SIGNAL;
1244 ev.sigev_signo = SIGVTALRM;
1246 action.sa_handler = handler;
1247 action.sa_flags = 0;
1248 sigemptyset(&action.sa_mask);
1249 if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1250 fprintf(stderr,"SIGVTALRM problem\n");
1254 action.sa_handler = timeout;
1255 action.sa_flags = 0;
1256 sigemptyset(&action.sa_mask);
1257 if (sigaction(SIGALRM, &action, NULL) == -1) {
1258 fprintf(stderr,"SIGALRM problem\n");
1263 if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1264 fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1268 it.it_value.tv_sec = 0;
1269 it.it_value.tv_nsec = 1;
1270 it.it_interval = it.it_value;
1271 if (timer_settime(timer, 0, &it, NULL) != 0) {
1272 fprintf(stderr,"settime problem\n");
1278 for(n = 3; n < 20000; n++){
1279 for(m = 2; m <= n/2; m++){
1280 if (!(n%m)) count++;
1287 fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1291 timer_delete(timer);
1293 if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1294 fprintf(stderr,"No CLOCK_REALTIME timer\n");
1298 it.it_value.tv_sec = 0;
1299 it.it_value.tv_nsec = 1000000;
1300 it.it_interval = it.it_value;
1301 if (timer_settime(timer, 0, &it, NULL) != 0) {
1302 fprintf(stderr,"settime problem\n");
1311 fprintf(stderr,"no CLOCK_REALTIME signal\n");
1315 timer_delete(timer);
1320 [fptools_cv_timer_create_works=yes],
1321 [fptools_cv_timer_create_works=no])
1323 case $fptools_cv_timer_create_works in
1324 yes) AC_DEFINE([USE_TIMER_CREATE], 1,
1325 [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1331 AC_DEFUN([FP_ICONV],
1333 dnl--------------------------------------------------------------------
1334 dnl * Deal with arguments telling us iconv is somewhere odd
1335 dnl--------------------------------------------------------------------
1337 dnl Note: ICONV_LIB_DIRS and ICONV_INCLUDE_DIRS are not predefined
1338 dnl to the empty string to allow them to be overridden from the
1341 AC_ARG_WITH([iconv-includes],
1342 [AC_HELP_STRING([--with-iconv-includes],
1343 [directory containing iconv.h])],
1344 [ICONV_INCLUDE_DIRS=$withval])
1346 AC_ARG_WITH([iconv-libraries],
1347 [AC_HELP_STRING([--with-iconv-libraries],
1348 [directory containing iconv library])],
1349 [ICONV_LIB_DIRS=$withval])
1351 AC_SUBST(ICONV_INCLUDE_DIRS)
1352 AC_SUBST(ICONV_LIB_DIRS)
1359 dnl--------------------------------------------------------------------
1360 dnl * Deal with arguments telling us gmp is somewhere odd
1361 dnl--------------------------------------------------------------------
1363 AC_ARG_WITH([gmp-includes],
1364 [AC_HELP_STRING([--with-gmp-includes],
1365 [directory containing gmp.h])],
1366 [GMP_INCLUDE_DIRS=$withval])
1368 AC_ARG_WITH([gmp-libraries],
1369 [AC_HELP_STRING([--with-gmp-libraries],
1370 [directory containing gmp library])],
1371 [GMP_LIB_DIRS=$withval])
1373 AC_SUBST(GMP_INCLUDE_DIRS)
1374 AC_SUBST(GMP_LIB_DIRS)
1377 # FP_CHECK_MACOSX_DEPLOYMENT_TARGET
1378 # ---------------------------------
1379 AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
1381 if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
1382 AC_MSG_CHECKING([Mac OS X deployment target])
1383 case $FP_MACOSX_DEPLOYMENT_TARGET in
1385 10.4) MACOSX_DEPLOYMENT_VERSION=10.4
1386 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1388 10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
1389 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1391 *) MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
1392 MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
1395 if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
1398 if test ! -d $MACOSX_DEPLOYMENT_SDK; then
1399 AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
1401 AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
1406 # --------------------------------------------------------------
1407 # Calculate absolute path to build tree
1408 # --------------------------------------------------------------
1410 AC_DEFUN([FP_INTREE_GHC_PWD],[
1411 AC_MSG_NOTICE(Building in-tree ghc-pwd)
1413 dnl make -C utils/ghc-pwd clean && make -C utils/ghc-pwd
1414 dnl except we don't want to have to know what make is called. Sigh.
1415 rm -rf utils/ghc-pwd/dist-boot
1416 mkdir utils/ghc-pwd/dist-boot
1417 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
1419 AC_MSG_ERROR([Building ghc-pwd failed])
1422 GHC_PWD=utils/ghc-pwd/dist-boot/ghc-pwd
1425 AC_DEFUN([FP_BINDIST_GHC_PWD],[
1426 GHC_PWD=utils/ghc-pwd/dist-install/build/tmp/ghc-pwd
1429 AC_DEFUN([FP_FIND_ROOT],[
1430 AC_MSG_CHECKING(for path to top of build tree)
1433 dnl Remove common automounter nonsense
1434 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1436 if ! test -d "$hardtop"; then
1437 AC_MSG_ERROR([cannot determine current directory])
1440 dnl We don't support building in directories with spaces.
1444 The build system does not support building in a directory
1445 containing space characters.
1446 Suggestion: move the build tree somewhere else.])
1452 AC_MSG_RESULT($hardtop)
1455 # GHC_CONVERT_CPU(cpu, target_var)
1456 # --------------------------------
1457 # converts cpu from gnu to ghc naming, and assigns the result to $target_var
1458 AC_DEFUN([GHC_CONVERT_CPU],[
1472 i386|i486|i586|i686)
1515 echo "Unknown CPU $1"
1521 # GHC_CONVERT_VENDOR(vendor, target_var)
1522 # --------------------------------
1523 # converts vendor from gnu to ghc naming, and assigns the result to $target_var
1524 AC_DEFUN([GHC_CONVERT_VENDOR],[
1526 pc|gentoo) # like i686-pc-linux-gnu and i686-gentoo-freebsd8
1529 softfloat) # like armv5tel-softfloat-linux-gnueabi
1533 #pass thru by default
1539 # GHC_CONVERT_OS(os, target_var)
1540 # --------------------------------
1541 # converts os from gnu to ghc naming, and assigns the result to $target_var
1542 AC_DEFUN([GHC_CONVERT_OS],[
1547 # As far as I'm aware, none of these have relevant variants
1548 freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
1551 freebsd8) # like i686-gentoo-freebsd8
1555 echo "Unknown OS $1"
1561 # BOOTSTRAPPING_GHC_INFO_FIELD
1562 # --------------------------------
1563 # If the bootstrapping compiler is >= 7.1, then set the variable
1564 # $1 to the value of the ghc --info field $2. Otherwise, set it to
1566 AC_DEFUN([BOOTSTRAPPING_GHC_INFO_FIELD],[
1567 if test $GhcCanonVersion -ge 701
1569 $1=`"$WithGhc" --info | grep "^ ,(\"$2\"," | sed -e 's/.*","//' -e 's/")$//'`
1576 # LIBRARY_VERSION(lib, [dir])
1577 # --------------------------------
1578 # Gets the version number of a library.
1579 # If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3
1580 # $2 points to the directory under libraries/
1581 AC_DEFUN([LIBRARY_VERSION],[
1582 dir=m4_default([$2],[$1])
1583 LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/${dir}/$1.cabal | sed "s/.* //"`
1584 AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION)
1588 # --------------------------------
1589 # Gets the version number of XCode, if on a Mac
1590 AC_DEFUN([XCODE_VERSION],[
1591 if test "$TargetOS_CPP" = "darwin"
1593 AC_MSG_CHECKING(XCode version)
1594 XCodeVersion=`xcodebuild -version | grep Xcode | sed "s/Xcode //"`
1595 # Old XCode versions don't actually give the XCode version
1596 if test "$XCodeVersion" = ""
1598 AC_MSG_RESULT(not found (too old?))
1602 AC_MSG_RESULT($XCodeVersion)
1603 XCodeVersion1=`echo "$XCodeVersion" | sed 's/\..*//'`
1605 XCodeVersion2=`echo "$XCodeVersion" | sed 's/[^.]*\.\([^.]*\).*/\1/'`
1606 changequote([, ])dnl
1607 AC_MSG_NOTICE(XCode version component 1: $XCodeVersion1)
1608 AC_MSG_NOTICE(XCode version component 2: $XCodeVersion2)
1614 # --------------------------------
1615 # Finds where gcc is
1616 AC_DEFUN([FIND_GCC],[
1617 if test "$TargetOS_CPP" = "darwin" &&
1618 test "$XCodeVersion1" -ge 4
1620 # From Xcode 4, use 'gcc-4.2' to force the use of the gcc legacy
1621 # backend (instead of the LLVM backend)
1622 FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc-4.2])
1624 FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc])
1627 WhatGccIsCalled="$CC"
1628 AC_SUBST(WhatGccIsCalled)