Fix typo
[ghc.git] / aclocal.m4
1 # Extra autoconf macros for the Glasgow fptools
2 #
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.
5
6
7 AC_DEFUN([GHC_SELECT_FILE_EXTENSIONS],
8 [
9     $2=''
10     $3='.so'
11     case $1 in
12     *-unknown-cygwin32)
13         AC_MSG_WARN([GHC does not support the Cygwin target at the moment])
14         AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32])
15         exit 1
16         ;;
17     *-unknown-mingw32)
18         windows=YES
19         $2='.exe'
20         $3='.dll'
21         ;;
22     i386-apple-darwin|powerpc-apple-darwin)
23         $3='.dylib'
24         ;;
25     x86_64-apple-darwin)
26         $3='.dylib'
27         ;;
28     arm-apple-darwin10|i386-apple-darwin11)
29         $2='.a'
30         $3='.dylib'
31         ;;
32     esac
33 ])
34
35 # FPTOOLS_SET_PLATFORM_VARS
36 # ----------------------------------
37 # Set the platform variables
38 AC_DEFUN([FPTOOLS_SET_PLATFORM_VARS],
39 [
40     # If no argument was given for a configuration variable, then discard
41     # the guessed canonical system and use the configuration of the
42     # bootstrapping ghc. If an argument was given, map it from gnu format
43     # to ghc format.
44     #
45     # For why we do it this way, see: #3637, #1717, #2951
46     #
47     # In bindists, we haven't called AC_CANONICAL_{BUILD,HOST,TARGET}
48     # so this justs uses $bootstrap_target.
49
50     if test "$build_alias" = ""
51     then
52         if test "$bootstrap_target" != ""
53         then
54             build=$bootstrap_target
55             echo "Build platform inferred as: $build"
56         else
57             echo "Can't work out build platform"
58             exit 1
59         fi
60
61         BuildArch=`echo "$build" | sed 's/-.*//'`
62         BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'`
63         BuildOS=`echo "$build" | sed 's/.*-//'`
64     else
65         GHC_CONVERT_CPU([$build_cpu], [BuildArch])
66         GHC_CONVERT_VENDOR([$build_vendor], [BuildVendor])
67         GHC_CONVERT_OS([$build_os], [$BuildArch], [BuildOS])
68     fi
69
70     if test "$host_alias" = ""
71     then
72         if test "$bootstrap_target" != ""
73         then
74             host=$bootstrap_target
75             echo "Host platform inferred as: $host"
76         else
77             echo "Can't work out host platform"
78             exit 1
79         fi
80
81         HostArch=`echo "$host" | sed 's/-.*//'`
82         HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'`
83         HostOS=`echo "$host" | sed 's/.*-//'`
84     else
85         GHC_CONVERT_CPU([$host_cpu], [HostArch])
86         GHC_CONVERT_VENDOR([$host_vendor], [HostVendor])
87         GHC_CONVERT_OS([$host_os], [$HostArch], [HostOS])
88     fi
89
90     if test "$target_alias" = ""
91     then
92         if test "$host_alias" != ""
93         then
94             GHC_CONVERT_CPU([$host_cpu], [TargetArch])
95             GHC_CONVERT_VENDOR([$host_vendor], [TargetVendor])
96             GHC_CONVERT_OS([$host_os], [$TargetArch],[TargetOS])
97         else
98             if test "$bootstrap_target" != ""
99             then
100                 target=$bootstrap_target
101                 echo "Target platform inferred as: $target"
102             else
103                 echo "Can't work out target platform"
104                 exit 1
105             fi
106
107             TargetArch=`echo "$target" | sed 's/-.*//'`
108             TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'`
109             TargetOS=`echo "$target" | sed 's/.*-//'`
110         fi
111     else
112         GHC_CONVERT_CPU([$target_cpu], [TargetArch])
113         GHC_CONVERT_VENDOR([$target_vendor], [TargetVendor])
114         GHC_CONVERT_OS([$target_os], [$TargetArch], [TargetOS])
115     fi
116
117     GHC_SELECT_FILE_EXTENSIONS([$host], [exeext_host], [soext_host])
118     GHC_SELECT_FILE_EXTENSIONS([$target], [exeext_target], [soext_target])
119     windows=NO
120     case $host in
121     *-unknown-mingw32)
122         windows=YES
123         ;;
124     esac
125
126     BuildPlatform="$BuildArch-$BuildVendor-$BuildOS"
127     BuildPlatform_CPP=`echo "$BuildPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
128     BuildArch_CPP=`    echo "$BuildArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
129     BuildVendor_CPP=`  echo "$BuildVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
130     BuildOS_CPP=`      echo "$BuildOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
131
132     HostPlatform="$HostArch-$HostVendor-$HostOS"
133     HostPlatform_CPP=`echo "$HostPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
134     HostArch_CPP=`    echo "$HostArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
135     HostVendor_CPP=`  echo "$HostVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
136     HostOS_CPP=`      echo "$HostOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
137
138     TargetPlatform="$TargetArch-$TargetVendor-$TargetOS"
139     TargetPlatform_CPP=`echo "$TargetPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
140     TargetArch_CPP=`    echo "$TargetArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
141     TargetVendor_CPP=`  echo "$TargetVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
142     TargetOS_CPP=`      echo "$TargetOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
143
144     echo "GHC build  : $BuildPlatform"
145     echo "GHC host   : $HostPlatform"
146     echo "GHC target : $TargetPlatform"
147
148     AC_SUBST(BuildPlatform)
149     AC_SUBST(HostPlatform)
150     AC_SUBST(TargetPlatform)
151     AC_SUBST(HostPlatform_CPP)
152     AC_SUBST(BuildPlatform_CPP)
153     AC_SUBST(TargetPlatform_CPP)
154
155     AC_SUBST(HostArch_CPP)
156     AC_SUBST(BuildArch_CPP)
157     AC_SUBST(TargetArch_CPP)
158
159     AC_SUBST(HostOS_CPP)
160     AC_SUBST(BuildOS_CPP)
161     AC_SUBST(TargetOS_CPP)
162
163     AC_SUBST(HostVendor_CPP)
164     AC_SUBST(BuildVendor_CPP)
165     AC_SUBST(TargetVendor_CPP)
166
167     AC_SUBST(exeext_host)
168     AC_SUBST(exeext_target)
169     AC_SUBST(soext_host)
170     AC_SUBST(soext_target)
171 ])
172
173
174 # FPTOOLS_SET_HASKELL_PLATFORM_VARS
175 # ----------------------------------
176 # Set the Haskell platform variables
177 AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
178 [
179     checkArch() {
180         case [$]1 in
181         i386)
182             test -z "[$]2" || eval "[$]2=ArchX86"
183             ;;
184         x86_64|amd64)
185             test -z "[$]2" || eval "[$]2=ArchX86_64"
186             ;;
187         powerpc)
188             test -z "[$]2" || eval "[$]2=ArchPPC"
189             ;;
190         powerpc64)
191             test -z "[$]2" || eval "[$]2=ArchPPC_64"
192             ;;
193         sparc)
194             test -z "[$]2" || eval "[$]2=ArchSPARC"
195             ;;
196         arm)
197             GET_ARM_ISA()
198             test -z "[$]2" || eval "[$]2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT, armABI = \$ARM_ABI}\""
199             ;;
200         alpha)
201             test -z "[$]2" || eval "[$]2=ArchAlpha"
202             ;;
203         mips|mipseb)
204             test -z "[$]2" || eval "[$]2=ArchMipseb"
205             ;;
206         mipsel)
207             test -z "[$]2" || eval "[$]2=ArchMipsel"
208             ;;
209         hppa|hppa1_1|ia64|m68k|rs6000|s390|s390x|sparc64|vax)
210             test -z "[$]2" || eval "[$]2=ArchUnknown"
211             ;;
212         *)
213             echo "Unknown arch [$]1"
214             exit 1
215             ;;
216         esac
217     }
218
219     checkVendor() {
220         case [$]1 in
221         dec|unknown|hp|apple|next|sun|sgi|ibm|montavista|portbld)
222             ;;
223         *)
224             echo "Unknown vendor [$]1"
225             exit 1
226             ;;
227         esac
228     }
229
230     checkOS() {
231         case [$]1 in
232         linux)
233             test -z "[$]2" || eval "[$]2=OSLinux"
234             ;;
235         ios)
236             test -z "[$]2" || eval "[$]2=OSiOS"
237             ;;
238         darwin)
239             test -z "[$]2" || eval "[$]2=OSDarwin"
240             ;;
241         solaris2)
242             test -z "[$]2" || eval "[$]2=OSSolaris2"
243             ;;
244         mingw32)
245             test -z "[$]2" || eval "[$]2=OSMinGW32"
246             ;;
247         freebsd)
248             test -z "[$]2" || eval "[$]2=OSFreeBSD"
249             ;;
250         dragonfly)
251             test -z "[$]2" || eval "[$]2=OSDragonFly"
252             ;;
253         kfreebsdgnu)
254             test -z "[$]2" || eval "[$]2=OSKFreeBSD"
255             ;;
256         openbsd)
257             test -z "[$]2" || eval "[$]2=OSOpenBSD"
258             ;;
259         netbsd)
260             test -z "[$]2" || eval "[$]2=OSNetBSD"
261             ;;
262         haiku)
263             test -z "[$]2" || eval "[$]2=OSHaiku"
264             ;;
265         osf3)
266             test -z "[$]2" || eval "[$]2=OSOsf3"
267             ;;
268         nto-qnx)
269             test -z "[$]2" || eval "[$]2=OSQNXNTO"
270             ;;
271         dragonfly|osf1|hpux|linuxaout|freebsd2|cygwin32|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix)
272             test -z "[$]2" || eval "[$]2=OSUnknown"
273             ;;
274         linux-android)
275             test -z "[$]2" || eval "[$]2=OSAndroid"
276             ;;
277         *)
278             echo "Unknown OS '[$]1'"
279             exit 1
280             ;;
281         esac
282     }
283
284     dnl ** check for Apple-style dead-stripping support
285     dnl    (.subsections-via-symbols assembler directive)
286
287     AC_MSG_CHECKING(for .subsections_via_symbols)
288     AC_COMPILE_IFELSE(
289         [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
290         [AC_MSG_RESULT(yes)
291          HaskellHaveSubsectionsViaSymbols=True
292          AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
293                    [Define to 1 if Apple-style dead-stripping is supported.])
294         ],
295         [HaskellHaveSubsectionsViaSymbols=False
296          AC_MSG_RESULT(no)])
297
298     dnl ** check for .ident assembler directive
299
300     AC_MSG_CHECKING(whether your assembler supports .ident directive)
301     AC_COMPILE_IFELSE(
302         [AC_LANG_SOURCE([__asm__ (".ident \"GHC x.y.z\"");])],
303         [AC_MSG_RESULT(yes)
304          HaskellHaveIdentDirective=True],
305         [AC_MSG_RESULT(no)
306          HaskellHaveIdentDirective=False])
307
308     dnl *** check for GNU non-executable stack note support (ELF only)
309     dnl     (.section .note.GNU-stack,"",@progbits)
310
311     dnl This test doesn't work with "gcc -g" in gcc 4.4 (GHC trac #3889:
312     dnl     Error: can't resolve `.note.GNU-stack' {.note.GNU-stack section} - `.Ltext0' {.text section}
313     dnl so we empty CFLAGS while running this test
314     CFLAGS2="$CFLAGS"
315     CFLAGS=
316     AC_MSG_CHECKING(for GNU non-executable stack support)
317     AC_COMPILE_IFELSE(
318         [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
319         [AC_MSG_RESULT(yes)
320          HaskellHaveGnuNonexecStack=True],
321         [AC_MSG_RESULT(no)
322          HaskellHaveGnuNonexecStack=False])
323     CFLAGS="$CFLAGS2"
324
325     checkArch "$BuildArch" "HaskellBuildArch"
326     checkVendor "$BuildVendor"
327     checkOS "$BuildOS" ""
328
329     checkArch "$HostArch" "HaskellHostArch"
330     checkVendor "$HostVendor"
331     checkOS "$HostOS" ""
332
333     checkArch "$TargetArch" "HaskellTargetArch"
334     checkVendor "$TargetVendor"
335     checkOS "$TargetOS" "HaskellTargetOs"
336
337     AC_SUBST(HaskellTargetArch)
338     AC_SUBST(HaskellTargetOs)
339     AC_SUBST(HaskellHaveSubsectionsViaSymbols)
340     AC_SUBST(HaskellHaveIdentDirective)
341     AC_SUBST(HaskellHaveGnuNonexecStack)
342 ])
343
344
345 # GET_ARM_ISA
346 # ----------------------------------
347 # Get info about the ISA on the ARM arch
348 AC_DEFUN([GET_ARM_ISA],
349 [
350     AC_COMPILE_IFELSE([
351         AC_LANG_PROGRAM(
352             [],
353             [#if defined(__ARM_ARCH_2__)  || \
354                  defined(__ARM_ARCH_3__)  || \
355                  defined(__ARM_ARCH_3M__) || \
356                  defined(__ARM_ARCH_4__)  || \
357                  defined(__ARM_ARCH_4T__) || \
358                  defined(__ARM_ARCH_5__)  || \
359                  defined(__ARM_ARCH_5T__) || \
360                  defined(__ARM_ARCH_5E__) || \
361                  defined(__ARM_ARCH_5TE__)
362                  return 0;
363              #else
364                  not pre arm v6
365              #endif]
366         )],
367         [AC_DEFINE(arm_HOST_ARCH_PRE_ARMv6, 1, [ARM pre v6])
368          AC_DEFINE(arm_HOST_ARCH_PRE_ARMv7, 1, [ARM pre v7])
369          changequote(, )dnl
370          ARM_ISA=ARMv5
371          ARM_ISA_EXT="[]"
372          changequote([, ])dnl
373         ],
374         [
375             AC_COMPILE_IFELSE([
376                 AC_LANG_PROGRAM(
377                     [],
378                     [#if defined(__ARM_ARCH_6__)   || \
379                          defined(__ARM_ARCH_6J__)  || \
380                          defined(__ARM_ARCH_6T2__) || \
381                          defined(__ARM_ARCH_6Z__)  || \
382                          defined(__ARM_ARCH_6ZK__) || \
383                          defined(__ARM_ARCH_6M__)
384                          return 0;
385                      #else
386                          not pre arm v7
387                      #endif]
388                 )],
389                 [AC_DEFINE(arm_HOST_ARCH_PRE_ARMv7, 1, [ARM pre v7])
390                  ARM_ISA=ARMv6
391                  AC_COMPILE_IFELSE([
392                         AC_LANG_PROGRAM(
393                                 [],
394                                 [#if defined(__VFP_FP__)
395                                      return 0;
396                                 #else
397                                      no vfp
398                                 #endif]
399                         )],
400                         [changequote(, )dnl
401                          ARM_ISA_EXT="[VFPv2]"
402                          changequote([, ])dnl
403                         ],
404                         [changequote(, )dnl
405                          ARM_ISA_EXT="[]"
406                          changequote([, ])dnl
407                         ]
408                 )],
409                 [changequote(, )dnl
410                  ARM_ISA=ARMv7
411                  ARM_ISA_EXT="[VFPv3,NEON]"
412                  changequote([, ])dnl
413                 ])
414         ])
415
416         AC_COMPILE_IFELSE(
417                [AC_LANG_PROGRAM(
418                        [],
419                        [#if defined(__SOFTFP__)
420                             return 0;
421                        #else
422                             not softfp
423                        #endif]
424                )],
425                [changequote(, )dnl
426                 ARM_ABI="SOFT"
427                 changequote([, ])dnl
428                ],
429                [AC_COMPILE_IFELSE(
430                     [AC_LANG_PROGRAM(
431                        [],
432                        [#if defined(__ARM_PCS_VFP)
433                             return 0;
434                        #else
435                             no hard float ABI
436                        #endif]
437                     )],
438                     [ARM_ABI="HARD"],
439                     [ARM_ABI="SOFTFP"]
440                )]
441         )
442 ])
443
444
445 # FP_SETTINGS
446 # ----------------------------------
447 # Set the variables used in the settings file
448 AC_DEFUN([FP_SETTINGS],
449 [
450     if test "$windows" = YES
451     then
452         mingw_bin_prefix=mingw/bin/
453         SettingsCCompilerCommand="\$topdir/../${mingw_bin_prefix}gcc.exe"
454         SettingsLdCommand="\$topdir/../${mingw_bin_prefix}ld.exe"
455         SettingsArCommand="\$topdir/../${mingw_bin_prefix}ar.exe"
456         SettingsPerlCommand='$topdir/../perl/perl.exe'
457         SettingsDllWrapCommand="\$topdir/../${mingw_bin_prefix}dllwrap.exe"
458         SettingsWindresCommand="\$topdir/../${mingw_bin_prefix}windres.exe"
459         SettingsTouchCommand='$topdir/touchy.exe'
460     else
461         SettingsCCompilerCommand="$WhatGccIsCalled"
462         SettingsLdCommand="$LdCmd"
463         SettingsArCommand="$ArCmd"
464         SettingsPerlCommand="$PerlCmd"
465         SettingsDllWrapCommand="/bin/false"
466         SettingsWindresCommand="/bin/false"
467         SettingsLibtoolCommand="libtool"
468         SettingsTouchCommand='touch'
469         if test -z "$LlcCmd"
470         then
471           SettingsLlcCommand="llc"
472         else
473           SettingsLlcCommand="$LlcCmd"
474         fi
475         if test -z "$OptCmd"
476         then
477           SettingsOptCommand="opt"
478         else
479           SettingsOptCommand="$OptCmd"
480         fi
481     fi
482     SettingsCCompilerFlags="$CONF_CC_OPTS_STAGE2"
483     SettingsCCompilerLinkFlags="$CONF_GCC_LINKER_OPTS_STAGE2"
484     SettingsLdFlags="$CONF_LD_LINKER_OPTS_STAGE2"
485     AC_SUBST(SettingsCCompilerCommand)
486     AC_SUBST(SettingsCCompilerFlags)
487     AC_SUBST(SettingsCCompilerLinkFlags)
488     AC_SUBST(SettingsLdCommand)
489     AC_SUBST(SettingsLdFlags)
490     AC_SUBST(SettingsArCommand)
491     AC_SUBST(SettingsPerlCommand)
492     AC_SUBST(SettingsDllWrapCommand)
493     AC_SUBST(SettingsWindresCommand)
494     AC_SUBST(SettingsLibtoolCommand)
495     AC_SUBST(SettingsTouchCommand)
496     AC_SUBST(SettingsLlcCommand)
497     AC_SUBST(SettingsOptCommand)
498 ])
499
500
501 # FPTOOLS_SET_C_LD_FLAGS
502 # ----------------------------------
503 # Set the C, LD and CPP flags for a given platform
504 # $1 is the platform
505 # $2 is the name of the CC flags variable
506 # $3 is the name of the linker flags variable when linking with gcc
507 # $4 is the name of the linker flags variable when linking with ld
508 # $5 is the name of the CPP flags variable
509 AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
510 [
511     AC_MSG_CHECKING([Setting up $2, $3, $4 and $5])
512     case $$1 in
513     i386-*)
514         # Workaround for #7799
515         $2="$$2 -U__i686"
516         ;;
517     esac
518
519     case $$1 in
520     i386-apple-darwin)
521         $2="$$2 -m32"
522         $3="$$3 -m32"
523         $4="$$4 -arch i386"
524         $5="$$5 -m32"
525         ;;
526     x86_64-apple-darwin)
527         $2="$$2 -m64"
528         $3="$$3 -m64"
529         $4="$$4 -arch x86_64"
530         $5="$$5 -m64"
531         ;;
532     alpha-*)
533         # For now, to suppress the gcc warning "call-clobbered
534         # register used for global register variable", we simply
535         # disable all warnings altogether using the -w flag. Oh well.
536         $2="$$2 -w -mieee -D_REENTRANT"
537         $3="$$3 -w -mieee -D_REENTRANT"
538         $5="$$5 -w -mieee -D_REENTRANT"
539         ;;
540     hppa*)
541         # ___HPUX_SOURCE, not _HPUX_SOURCE, is #defined if -ansi!
542         # (very nice, but too bad the HP /usr/include files don't agree.)
543         $2="$$2 -D_HPUX_SOURCE"
544         $3="$$3 -D_HPUX_SOURCE"
545         $5="$$5 -D_HPUX_SOURCE"
546         ;;
547     esac
548
549     # If gcc knows about the stack protector, turn it off.
550     # Otherwise the stack-smash handler gets triggered.
551     echo 'int main(void) {return 0;}' > conftest.c
552     if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
553     then
554         $2="$$2 -fno-stack-protector"
555     fi
556
557     rm -f conftest.c conftest.o
558     AC_MSG_RESULT([done])
559 ])
560
561
562 AC_DEFUN([FP_PATH_PROG],[
563     AC_PATH_PROG($1,$2,$3,$4,$5,$6)
564     # If we have a cygwin path for something, and we try to run it
565     # from cabal or python, then it'll fail. So we convert to a
566     # native path.
567     if test "$HostOS"     = "mingw32" && \
568        test "${OSTYPE}"  != "msys"    && \
569        test "${$1}" != ""
570     then
571         # Canonicalise to <drive>:/path/to/gcc
572         $1=`cygpath -m "${$1}"`
573     fi
574 ])
575
576
577 # FP_VISIBILITY_HIDDEN
578 # ----------------------------------
579 # Is the visibility hidden attribute supported?
580 AC_DEFUN([FP_VISIBILITY_HIDDEN],
581 [
582     AC_MSG_CHECKING([whether __attribute__((visibility("hidden"))) is supported])
583     echo '__attribute__((visibility("hidden"))) void foo(void) {}' > conftest.c
584     if $CC -Wall -Werror -c conftest.c > /dev/null 2>&1
585     then
586         AC_MSG_RESULT([yes])
587         AC_DEFINE(HAS_VISIBILITY_HIDDEN, 1, [Has visibility hidden])
588     else
589         AC_MSG_RESULT([no])
590     fi
591     rm -f conftest.c conftest.o
592 ])
593
594
595 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
596 # ----------------------------------
597 # Little endian ARM on Linux with some ABIs has big endian word order
598 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
599 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
600   [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
601     [AC_COMPILE_IFELSE(
602       [AC_LANG_PROGRAM(
603         [#include <endian.h>],
604         [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
605              return 0;
606          #else
607              not float word order big endian
608          #endif]
609       )],
610       [fptools_cv_float_word_order_bigendian=yes],
611       [fptools_cv_float_word_order_bigendian=no])
612     ])
613   case $fptools_cv_float_word_order_bigendian in
614       yes)
615           AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
616           [Define to 1 if your processor stores words of floats with
617            the most significant byte first]) ;;
618   esac
619 ])
620
621
622 # FP_ARG_WITH_PATH_GNU_PROG
623 # --------------------
624 # Find the specified command on the path or allow a user to set it manually
625 # with a --with-<command> option. An error will be thrown if the command isn't
626 # found.
627 #
628 # This is ignored on the mingw32 platform.
629 #
630 # $1 = the variable to set
631 # $2 = the with option name
632 # $3 = the command to look for
633 #
634 AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
635 [
636 AC_ARG_WITH($2,
637 [AC_HELP_STRING([--with-$2=ARG],
638         [Use ARG as the path to $2 [default=autodetect]])],
639 [
640     if test "$HostOS" = "mingw32"
641     then
642         AC_MSG_WARN([Request to use $withval will be ignored])
643     else
644         $1=$withval
645     fi
646 ],
647 [
648     if test "$HostOS" != "mingw32"
649     then
650         if test "$target_alias" = "" ; then
651             AC_PATH_PROG([$1], [$3])
652         else
653             AC_PATH_PROG([$1], [$target_alias-$3])
654         fi
655         if test -z "$$1"
656         then
657             AC_MSG_ERROR([cannot find $3 in your PATH])
658         fi
659     fi
660 ]
661 )
662 ]) # FP_ARG_WITH_PATH_GNU_PROG
663
664
665 # FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL
666 # --------------------
667 # Same as FP_ARG_WITH_PATH_GNU_PROG but no error will be thrown if the command
668 # isn't found.
669 #
670 # This is ignored on the mingw32 platform.
671 #
672 # $1 = the variable to set
673 # $2 = the with option name
674 # $3 = the command to look for
675 #
676 AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL],
677 [
678 AC_ARG_WITH($2,
679 [AC_HELP_STRING([--with-$2=ARG],
680         [Use ARG as the path to $2 [default=autodetect]])],
681 [
682     if test "$HostOS" = "mingw32"
683     then
684         AC_MSG_WARN([Request to use $withval will be ignored])
685     else
686         $1=$withval
687     fi
688 ],
689 [
690     if test "$HostOS" != "mingw32"
691     then
692         AC_PATH_PROG([$1], [$3])
693     fi
694 ]
695 )
696 ]) # FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL
697
698 # FP_PROG_CONTEXT_DIFF
699 # --------------------
700 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
701 #
702 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
703 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
704 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
705 [echo foo > conftest1
706 echo foo > conftest2
707 fp_cv_context_diff=no
708 for fp_var in '-U 1' '-u1' '-C 1' '-c1'
709 do
710   if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
711     fp_cv_context_diff="diff $fp_var"
712     break
713   fi
714 done])
715 if test x"$fp_cv_context_diff" = xno; then
716    AC_MSG_ERROR([cannot figure out how to do context diffs])
717 fi
718 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
719 ])# FP_PROG_CONTEXT_DIFF
720
721
722 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
723 # --------------------------------------------------------
724 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
725 # compilation. Execute IF-FAILS when unable to determine the value. Works for
726 # cross-compilation, too.
727 #
728 # Implementation note: We are lazy and use an internal autoconf macro, but it
729 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
730 # little risk.
731 AC_DEFUN([FP_COMPUTE_INT],
732 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
733 ])# FP_COMPUTE_INT
734
735
736 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
737 # ------------------------------------------------------------------
738 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
739 # given type. Defines ALIGNMENT_TYPE.
740 AC_DEFUN([FP_CHECK_ALIGNMENT],
741 [AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [],
742                [AC_FATAL([$0: requires literal arguments])])[]dnl
743 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
744 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
745 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
746 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
747   FP_COMPUTE_INT([offsetof(struct { char c; $1 ty; },ty)],
748                  [fp_Cache],
749                  [AC_INCLUDES_DEFAULT([$3])],
750                  [AC_MSG_ERROR([cannot compute alignment ($1)
751 See `config.log' for more details.], [77])])
752 else
753   fp_Cache=0
754 fi])[]dnl
755 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
756 m4_popdef([fp_Cache])[]dnl
757 ])# FP_CHECK_ALIGNMENT
758
759
760 # FP_LEADING_UNDERSCORE
761 # ---------------------
762 # Test for determining whether symbol names have a leading underscore. We assume
763 # that they _haven't_ if anything goes wrong. Sets the output variable
764 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
765 #
766 # Some nlist implementations seem to try to be compatible by ignoring a leading
767 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
768 # checking for *no* leading underscore first. Sigh.  --SDM
769 #
770 # Similarly on OpenBSD, but this test doesn't help. -- dons
771 AC_DEFUN([FP_LEADING_UNDERSCORE],
772 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
773 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
774 # Hack!: nlist() under Digital UNIX insist on there being an _,
775 # but symbol table listings shows none. What is going on here?!?
776 #
777 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
778 # the underscoredness of that "platform"
779 case $HostPlatform in
780 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
781   case $build in
782     i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
783     *) fptools_cv_leading_underscore=no ;;
784   esac ;;
785 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
786 *cygwin32) fptools_cv_leading_underscore=yes;;
787 i386-unknown-mingw32) fptools_cv_leading_underscore=yes;;
788 x86_64-unknown-mingw32) fptools_cv_leading_underscore=no;;
789
790     # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
791 x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
792 *-apple-ios) fptools_cv_leading_underscore=yes;;
793
794 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
795 #include <nlist.h>
796 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
797 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
798 #endif
799
800 int main(argc, argv)
801 int argc;
802 char **argv;
803 {
804 #ifdef HAVE_NLIST_H
805     if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
806         exit(1);
807     if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
808         exit(0);
809 #endif
810     exit(1);
811 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
812 ;;
813 esac]);
814 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
815 if test x"$fptools_cv_leading_underscore" = xyes; then
816    AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
817 fi])# FP_LEADING_UNDERSCORE
818
819
820 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
821 # ----------------------------------------------------------------------------------
822 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
823 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
824 AC_DEFUN([FP_COMPARE_VERSIONS],
825 [fp_version1=$1; fp_version2=$3
826 fp_save_IFS=$IFS; IFS='.'
827 while test x"$fp_version1" != x || test x"$fp_version2" != x
828 do
829
830   set dummy $fp_version1; shift
831   fp_num1=""
832   test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
833   test x"$fp_num1" = x && fp_num1="0"
834   fp_version1="[$]*"
835
836   set dummy $fp_version2; shift
837   fp_num2=""
838   test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
839   test x"$fp_num2" = x && fp_num2="0"
840   fp_version2="[$]*"
841
842   test "$fp_num1" = "$fp_num2" || break;
843 done
844 IFS=$fp_save_IFS
845 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
846 ])# FP_COMPARE_VERSIONS
847
848
849 dnl
850 dnl Check for Happy and version.  If we're building GHC, then we need
851 dnl at least Happy version 1.19.  If there's no installed Happy, we look
852 dnl for a happy source tree and point the build system at that instead.
853 dnl
854 AC_DEFUN([FPTOOLS_HAPPY],
855 [FP_PATH_PROG(HappyCmd,happy,)
856
857 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
858 changequote(, )dnl
859 [if test x"$HappyCmd" != x; then
860    fptools_cv_happy_version=`"$HappyCmd" -v |
861                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ;
862 else
863    fptools_cv_happy_version="";
864 fi;
865 changequote([, ])dnl
866 ])
867 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
868 then
869     FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.19],
870       [AC_MSG_ERROR([Happy version 1.19 or later is required to compile GHC.])])[]
871 fi
872 HappyVersion=$fptools_cv_happy_version;
873 AC_SUBST(HappyVersion)
874 ])
875
876 dnl
877 dnl Check for Alex and version.  If we're building GHC, then we need
878 dnl at least Alex version 2.1.1.
879 dnl
880 AC_DEFUN([FPTOOLS_ALEX],
881 [
882 FP_PATH_PROG(AlexCmd,alex,)
883
884 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
885 changequote(, )dnl
886 [if test x"$AlexCmd" != x; then
887    fptools_cv_alex_version=`"$AlexCmd" -v |
888                           grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'` ;
889 else
890    fptools_cv_alex_version="";
891 fi;
892 changequote([, ])dnl
893 ])
894 FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-ge],[3.0],
895   [Alex3=YES],[Alex3=NO])
896 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
897 then
898     FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[3.1.0],
899       [AC_MSG_ERROR([Alex version 3.1.0 or later is required to compile GHC.])])[]
900 fi
901 AlexVersion=$fptools_cv_alex_version;
902 AC_SUBST(AlexVersion)
903 AC_SUBST(Alex3)
904 ])
905
906
907 # FP_PROG_LD_FLAG
908 # ---------------
909 # Sets the output variable $2 to $1 if ld supports the $1 flag.
910 # Otherwise the variable's value is empty.
911 AC_DEFUN([FP_PROG_LD_FLAG],
912 [
913 AC_CACHE_CHECK([whether ld understands $1], [fp_cv_$2],
914 [echo 'int foo() { return 0; }' > conftest.c
915 ${CC-cc} -c conftest.c
916 if ${LdCmd} -r $1 -o conftest2.o conftest.o > /dev/null 2>&1; then
917    fp_cv_$2=$1
918 else
919    fp_cv_$2=
920 fi
921 rm -rf conftest*])
922 $2=$fp_cv_$2
923 ])# FP_PROG_LD_FLAG
924
925
926 # FP_PROG_LD_BUILD_ID
927 # ------------
928
929 # Sets the output variable LdHasBuildId to YES if ld supports
930 # --build-id, or NO otherwise.
931 AC_DEFUN([FP_PROG_LD_BUILD_ID],
932 [
933 AC_CACHE_CHECK([whether ld understands --build-id], [fp_cv_ld_build_id],
934 [echo 'int foo() { return 0; }' > conftest.c
935 ${CC-cc} -c conftest.c
936 if ${LdCmd} -r --build-id=none -o conftest2.o conftest.o > /dev/null 2>&1; then
937    fp_cv_ld_build_id=yes
938 else
939    fp_cv_ld_build_id=no
940 fi
941 rm -rf conftest*])
942 if test "$fp_cv_ld_build_id" = yes; then
943   LdHasBuildId=YES
944 else
945   LdHasBuildId=NO
946 fi
947 AC_SUBST([LdHasBuildId])
948 ])# FP_PROG_LD_BUILD_ID
949
950
951 # FP_PROG_LD_IS_GNU
952 # -----------------
953 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
954 # GNU ld or not.
955 AC_DEFUN([FP_PROG_LD_IS_GNU],
956 [
957 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
958 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
959   fp_cv_gnu_ld=yes
960 else
961   fp_cv_gnu_ld=no
962 fi])
963 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
964 ])# FP_PROG_LD_IS_GNU
965
966
967 # FP_PROG_LD_NO_COMPACT_UNWIND
968 # ----------------------------
969
970 # Sets the output variable LdHasNoCompactUnwind to YES if ld supports
971 # -no_compact_unwind, or NO otherwise.
972 AC_DEFUN([FP_PROG_LD_NO_COMPACT_UNWIND],
973 [
974 AC_CACHE_CHECK([whether ld understands -no_compact_unwind], [fp_cv_ld_no_compact_unwind],
975 [echo 'int foo() { return 0; }' > conftest.c
976 ${CC-cc} -c conftest.c
977 if ${LdCmd} -r -no_compact_unwind -o conftest2.o conftest.o > /dev/null 2>&1; then
978    fp_cv_ld_no_compact_unwind=yes
979 else
980    fp_cv_ld_no_compact_unwind=no
981 fi
982 rm -rf conftest*])
983 if test "$fp_cv_ld_no_compact_unwind" = yes; then
984   LdHasNoCompactUnwind=YES
985 else
986   LdHasNoCompactUnwind=NO
987 fi
988 AC_SUBST([LdHasNoCompactUnwind])
989 ])# FP_PROG_LD_NO_COMPACT_UNWIND
990
991
992 # FP_PROG_LD_FILELIST
993 # -------------------
994
995 # Sets the output variable LdHasFilelist to YES if ld supports
996 # -filelist, or NO otherwise.
997 AC_DEFUN([FP_PROG_LD_FILELIST],
998 [
999 AC_CACHE_CHECK([whether ld understands -filelist], [fp_cv_ld_has_filelist],
1000 [
1001     echo 'int foo() { return 0; }' > conftest1.c
1002     echo 'int bar() { return 0; }' > conftest2.c
1003     ${CC-cc} -c conftest1.c
1004     ${CC-cc} -c conftest2.c
1005     echo conftest1.o  > conftest.o-files
1006     echo conftest2.o >> conftest.o-files
1007     if ${LdCmd} -r -filelist conftest.o-files -o conftest.o > /dev/null 2>&1
1008     then
1009         fp_cv_ld_has_filelist=yes
1010     else
1011         fp_cv_ld_has_filelist=no
1012     fi
1013     rm -rf conftest*
1014 ])
1015 if test "$fp_cv_ld_has_filelist" = yes; then
1016     LdHasFilelist=YES
1017 else
1018     LdHasFilelist=NO
1019 fi
1020 AC_SUBST([LdHasFilelist])
1021 ])# FP_PROG_LD_FILELIST
1022
1023
1024 # FP_PROG_AR
1025 # ----------
1026 # Sets fp_prog_ar to a (non-Cygwin) path to ar. Exits if no ar can be found
1027 AC_DEFUN([FP_PROG_AR],
1028 [FP_PATH_PROG([fp_prog_ar], [ar])
1029 if test -z "$fp_prog_ar"; then
1030   AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
1031 fi
1032 ])# FP_PROG_AR
1033
1034
1035 # FP_PROG_AR_IS_GNU
1036 # -----------------
1037 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
1038 AC_DEFUN([FP_PROG_AR_IS_GNU],
1039 [AC_REQUIRE([FP_PROG_AR])
1040 AC_CACHE_CHECK([whether $fp_prog_ar is GNU ar], [fp_cv_prog_ar_is_gnu],
1041 [if "$fp_prog_ar" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
1042   fp_cv_prog_ar_is_gnu=yes
1043 else
1044   fp_cv_prog_ar_is_gnu=no
1045 fi])
1046 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
1047 AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
1048 ])# FP_PROG_AR_IS_GNU
1049
1050
1051 # FP_PROG_AR_SUPPORTS_ATFILE
1052 # -----------------
1053 # Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
1054 # or not it supports the @file syntax
1055 AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
1056 [AC_REQUIRE([FP_PROG_AR])
1057  AC_REQUIRE([FP_PROG_AR_ARGS])
1058 AC_CACHE_CHECK([whether $fp_prog_ar supports @file], [fp_cv_prog_ar_supports_atfile],
1059 [
1060 rm -f conftest*
1061 touch conftest.file
1062 echo conftest.file  > conftest.atfile
1063 echo conftest.file >> conftest.atfile
1064 "$fp_prog_ar" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
1065 fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar" t conftest.a 2> /dev/null | grep -c conftest.file`
1066 rm -f conftest*
1067 if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
1068 then
1069   fp_cv_prog_ar_supports_atfile=yes
1070 else
1071   fp_cv_prog_ar_supports_atfile=no
1072 fi])
1073 fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
1074 AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
1075 ])# FP_PROG_AR_SUPPORTS_ATFILE
1076
1077 # FP_PROG_AR_ARGS
1078 # ---------------
1079 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
1080 # to a non-Cygwin invocation of ar including these arguments.
1081 AC_DEFUN([FP_PROG_AR_ARGS],
1082 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
1083 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
1084 [
1085 # GNU ar needs special treatment: it appears to have problems with
1086 # object files with the same name if you use the 's' modifier, but
1087 # simple 'ar q' works fine, and doesn't need a separate ranlib.
1088 if test $fp_prog_ar_is_gnu = yes; then
1089   fp_cv_prog_ar_args="q"
1090 else
1091   touch conftest.dummy
1092   for fp_var in clqsZ clqs cqs clq cq ; do
1093      rm -f conftest.a
1094      if "$fp_prog_ar" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
1095         fp_cv_prog_ar_args=$fp_var
1096         break
1097      fi
1098   done
1099   rm -f conftest*
1100   if test -z "$fp_cv_prog_ar_args"; then
1101     AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar])
1102   fi
1103 fi])
1104 fp_prog_ar_args=$fp_cv_prog_ar_args
1105 AC_SUBST([ArCmd], ["$fp_prog_ar"])
1106 AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
1107
1108 ])# FP_PROG_AR_ARGS
1109
1110
1111 # FP_PROG_AR_NEEDS_RANLIB
1112 # -----------------------
1113 # Sets the output variable RANLIB_CMD to "ranlib" if it is needed and
1114 # found, to "true" otherwise. Sets REAL_RANLIB_CMD to the ranlib program,
1115 # even if we don't need ranlib (libffi might still need it).
1116 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],[
1117     AC_REQUIRE([FP_PROG_AR_IS_GNU])
1118     AC_REQUIRE([FP_PROG_AR_ARGS])
1119     AC_REQUIRE([AC_PROG_CC])
1120
1121     AC_PROG_RANLIB
1122
1123     if test $fp_prog_ar_is_gnu = yes
1124     then
1125         fp_cv_prog_ar_needs_ranlib=no
1126     elif test "$TargetOS_CPP" = "darwin"
1127     then
1128         # It's quite tedious to check for Apple's crazy timestamps in
1129         # .a files, so we hardcode it.
1130         fp_cv_prog_ar_needs_ranlib=yes
1131     else
1132         case $fp_prog_ar_args in
1133         *s*)
1134             fp_cv_prog_ar_needs_ranlib=no;;
1135         *)
1136             fp_cv_prog_ar_needs_ranlib=yes;;
1137         esac
1138     fi
1139
1140     # workaround for AC_PROG_RANLIB which sets RANLIB to `:' when
1141     # ranlib is missing on the target OS. The problem is that
1142     # ghc-cabal cannot execute `:' which is a shell built-in but can
1143     # execute `true' which is usually simple program supported by the
1144     # OS.
1145     # Fixes #8795
1146     if test "$RANLIB" = ":"
1147     then
1148         RANLIB="true"
1149     fi
1150     REAL_RANLIB_CMD="$RANLIB"
1151     if test $fp_cv_prog_ar_needs_ranlib = yes
1152     then
1153         RANLIB_CMD="$RANLIB"
1154     else
1155         RANLIB_CMD="true"
1156     fi
1157     AC_SUBST([REAL_RANLIB_CMD])
1158     AC_SUBST([RANLIB_CMD])
1159 ])# FP_PROG_AR_NEEDS_RANLIB
1160
1161
1162 # FP_GCC_VERSION
1163 # -----------
1164 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
1165 # output variable GccVersion.
1166 AC_DEFUN([FP_GCC_VERSION],
1167 [AC_REQUIRE([AC_PROG_CC])
1168 if test -z "$CC"
1169 then
1170   AC_MSG_ERROR([gcc is required])
1171 fi
1172 GccLT34=NO
1173 GccLT46=NO
1174 AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
1175 [
1176     fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
1177     FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
1178                         [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
1179     # See #2770: gcc 2.95 doesn't work any more, apparently.  There probably
1180     # isn't a very good reason for that, but for now just make configure
1181     # fail.
1182     FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
1183     FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [4.6], GccLT46=YES)
1184 ])
1185 AC_SUBST([GccVersion], [$fp_cv_gcc_version])
1186 AC_SUBST(GccLT34)
1187 AC_SUBST(GccLT46)
1188 ])# FP_GCC_VERSION
1189
1190 dnl Check to see if the C compiler is clang or llvm-gcc
1191 dnl
1192 GccIsClang=NO
1193 AC_DEFUN([FP_CC_LLVM_BACKEND],
1194 [AC_REQUIRE([AC_PROG_CC])
1195 AC_MSG_CHECKING([whether C compiler is clang])
1196 $CC -x c /dev/null -dM -E > conftest.txt 2>&1
1197 if grep "__clang__" conftest.txt >/dev/null 2>&1; then
1198   AC_SUBST([CC_CLANG_BACKEND], [1])
1199   AC_SUBST([CC_LLVM_BACKEND], [1])
1200   GccIsClang=YES
1201   AC_MSG_RESULT([yes])
1202 else
1203   AC_MSG_RESULT([no])
1204   AC_MSG_CHECKING([whether C compiler has an LLVM back end])
1205   if grep "__llvm__" conftest.txt >/dev/null 2>&1; then
1206     AC_SUBST([CC_CLANG_BACKEND], [0])
1207     AC_SUBST([CC_LLVM_BACKEND], [1])
1208     AC_MSG_RESULT([yes])
1209   else
1210     AC_SUBST([CC_CLANG_BACKEND], [0])
1211     AC_SUBST([CC_LLVM_BACKEND], [0])
1212     AC_MSG_RESULT([no])
1213   fi
1214 fi
1215 AC_SUBST(GccIsClang)
1216
1217 rm -f conftest.txt
1218 ])
1219
1220 dnl Small feature test for perl version. Assumes PerlCmd
1221 dnl contains path to perl binary.
1222 dnl
1223 dnl (Perl versions prior to v5.6 does not contain the string "v5";
1224 dnl instead they display version strings such as "version 5.005".)
1225 dnl
1226 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
1227 [$PerlCmd -v >conftest.out 2>&1
1228    if grep "v5" conftest.out >/dev/null 2>&1; then
1229       :
1230    else
1231       AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
1232    fi
1233 rm -fr conftest*
1234 ])
1235
1236
1237 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
1238 #               [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
1239 # -----------------------------------------------------
1240 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
1241 # of PROG-TO-CHECK-FOR when found.
1242 AC_DEFUN([FP_CHECK_PROG],
1243 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
1244 )# FP_CHECK_PROC
1245
1246
1247 # FP_PROG_FIND
1248 # ------------
1249 # Find a non-WinDoze version of the "find" utility.
1250 AC_DEFUN([FP_PROG_FIND],
1251 [AC_PATH_PROGS([fp_prog_find], [gfind find], find)
1252 echo foo > conftest.txt
1253 $fp_prog_find conftest.txt -print > conftest.out 2>&1
1254 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
1255   # OK, looks like a real "find".
1256   case $HostPlatform in
1257     *mingw32)
1258       if test x${OSTYPE} != xmsys
1259       then
1260             fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
1261         AC_MSG_NOTICE([normalized find command to $fp_prog_find])
1262       fi ;;
1263     *) ;;
1264   esac
1265   FindCmd="$fp_prog_find"
1266 else
1267   # Found a poor WinDoze version of "find", ignore it.
1268   AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
1269   FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
1270 fi
1271 rm -f conftest.txt conftest.out
1272 AC_SUBST([FindCmd])[]dnl
1273 ])# FP_PROG_FIND
1274
1275
1276 # FP_PROG_SORT
1277 # ------------
1278 # Find a Unix-like sort
1279 AC_DEFUN([FP_PROG_SORT],
1280 [AC_PATH_PROG([fp_prog_sort], [sort])
1281 echo conwip > conftest.txt
1282 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
1283 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
1284   # The goods
1285   SortCmd="$fp_prog_sort"
1286 else
1287   # Summink else..pick next one.
1288   AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
1289   FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
1290 fi
1291 rm -f conftest.txt conftest.out
1292 AC_SUBST([SortCmd])[]dnl
1293 ])# FP_PROG_SORT
1294
1295
1296 dnl
1297 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
1298 dnl values of the second argument to the result of running
1299 dnl the commands given by the third. It does not cache its
1300 dnl result, so it is suitable for checks which should be
1301 dnl run every time.
1302 dnl
1303 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
1304 [AC_MSG_CHECKING([$1])
1305  $3
1306  AC_MSG_RESULT([$][$2])
1307 ])
1308
1309 dnl
1310 dnl FPTOOLS_GHC_VERSION(version)
1311 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
1312 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
1313 dnl
1314 dnl Test for version of installed ghc.  Uses $GHC.
1315 dnl [original version pinched from c2hs]
1316 dnl
1317 AC_DEFUN([FPTOOLS_GHC_VERSION],
1318 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
1319 ["${WithGhc-ghc}" --version > conftestghc 2>&1
1320   cat conftestghc >&AS_MESSAGE_LOG_FD
1321 #Useless Use Of cat award...
1322   fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
1323   rm -fr conftest*
1324   if test "[$]fptools_version_of_ghc" = ""
1325   then
1326     fptools_version_of_ghc='unknown'
1327   fi
1328 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
1329 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
1330 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
1331 #
1332 if test "[$]fptools_version_of_ghc[_pl]" = ""
1333 then
1334   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
1335   fptools_version_of_ghc[_pl]="0"
1336 else
1337   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
1338 fi
1339 #
1340 ifelse($#, [1], [dnl
1341 [$1]="[$]fptools_version_of_ghc[_all]"
1342 ], $#, [2], [dnl
1343 [$1]="[$]fptools_version_of_ghc[_major]"
1344 [$2]="[$]fptools_version_of_ghc[_minor]"
1345 ], $#, [3], [dnl
1346 [$1]="[$]fptools_version_of_ghc[_major]"
1347 [$2]="[$]fptools_version_of_ghc[_minor]"
1348 [$3]="[$]fptools_version_of_ghc[_pl]"
1349 ], $#, [4], [dnl
1350 [$1]="[$]fptools_version_of_ghc[_all]"
1351 [$2]="[$]fptools_version_of_ghc[_major]"
1352 [$3]="[$]fptools_version_of_ghc[_minor]"
1353 [$4]="[$]fptools_version_of_ghc[_pl]"
1354 ])
1355 ])
1356 ])dnl
1357
1358
1359 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
1360 # ---------------------------------------------------------------------------------
1361 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
1362 # additional flexibility of specifying the PROLOGUE and BODY.
1363 AC_DEFUN([FP_CHECK_FUNC],
1364 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
1365 AC_CACHE_CHECK([for $1], fp_func,
1366 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
1367                 [AS_VAR_SET(fp_func, yes)],
1368                 [AS_VAR_SET(fp_func, no)])])
1369 AS_IF([test AS_VAR_GET(fp_func) = yes],
1370       [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
1371                 [Define to 1 if you have the `]$1[' function.]) $4],
1372       [$5])dnl
1373 AS_VAR_POPDEF([fp_func])dnl
1374 ])# FP_CHECK_FUNC
1375
1376
1377 # FP_GEN_DOCBOOK_XML
1378 # ------------------
1379 # Generates a DocBook XML V4.5 document in conftest.xml.
1380 #
1381 # It took a lot of experimentation to find a document that will cause
1382 # xsltproc to fail with an error code when the relevant
1383 # stylesheets/DTDs are not found.  I couldn't make xsltproc fail with
1384 # a single-file document, it seems a multi-file document is needed.
1385 # -- SDM 2009-06-03
1386 #
1387 AC_DEFUN([FP_GEN_DOCBOOK_XML],
1388 [rm -f conftest.xml conftest-book.xml
1389 cat > conftest.xml << EOF
1390 <?xml version="1.0" encoding="iso-8859-1"?>
1391 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
1392    "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [[
1393 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
1394 ]]>
1395 <book id="test">
1396 &conftest-book;
1397 </book>
1398 EOF
1399 cat >conftest-book.xml << EOF
1400 <?xml version="1.0" encoding="iso-8859-1"?>
1401   <title>A DocBook &ldquo;Test Document&rdquo;</title>
1402   <chapter id="id-one">
1403     <title>A Chapter Title</title>
1404     <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
1405   </chapter>
1406   <chapter id="id-two">
1407     <title>Another Chapter Title</title>
1408     <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
1409   </chapter>
1410 EOF
1411 ]) # FP_GEN_DOCBOOK_XML
1412
1413
1414 # FP_PROG_DBLATEX
1415 # ----------------
1416 # Sets the output variable DblatexCmd to the full path of dblatex,
1417 # which we use for building PDF and PS docs.
1418 # DblatexCmd is empty if dblatex could not be found.
1419 AC_DEFUN([FP_PROG_DBLATEX],
1420 [FP_PATH_PROG([DblatexCmd], [dblatex])
1421 if test -z "$DblatexCmd"; then
1422   AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
1423 fi
1424 ])# FP_PROG_DBLATEX
1425
1426
1427 # FP_PROG_XSLTPROC
1428 # ----------------
1429 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
1430 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
1431 AC_DEFUN([FP_PROG_XSLTPROC],
1432 [FP_PATH_PROG([XsltprocCmd], [xsltproc])
1433 if test -z "$XsltprocCmd"; then
1434   AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the HTML documentation])
1435 fi
1436 ])# FP_PROG_XSLTPROC
1437
1438
1439 # FP_DOCBOOK_XSL
1440 # ----------------------------
1441 # Check that we can process a DocBook XML document to HTML using xsltproc.
1442 AC_DEFUN([FP_DOCBOOK_XSL],
1443 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
1444 if test -n "$XsltprocCmd"; then
1445   AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
1446   [FP_GEN_DOCBOOK_XML
1447   fp_cv_dir_docbook_xsl=no
1448   if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
1449      fp_cv_dir_docbook_xsl=yes
1450   fi
1451   rm -rf conftest*])
1452 fi
1453 if test x"$fp_cv_dir_docbook_xsl" = xno; then
1454   AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
1455   HAVE_DOCBOOK_XSL=NO
1456 else
1457   HAVE_DOCBOOK_XSL=YES
1458 fi
1459 AC_SUBST([HAVE_DOCBOOK_XSL])
1460 ])# FP_DOCBOOK_XSL
1461
1462
1463 # FP_PROG_XMLLINT
1464 # ----------------
1465 # Sets the output variable XmllintCmd to the full path of the XSLT processor
1466 # xmllint. XmllintCmd is empty if xmllint could not be found.
1467 AC_DEFUN([FP_PROG_XMLLINT],
1468 [FP_PATH_PROG([XmllintCmd], [xmllint])
1469 if test -z "$XmllintCmd"; then
1470   AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
1471 fi
1472 ])# FP_PROG_XMLLINT
1473
1474
1475 # FP_CHECK_DOCBOOK_DTD
1476 # --------------------
1477 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
1478 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
1479 if test -n "$XmllintCmd"; then
1480   AC_MSG_CHECKING([for DocBook DTD])
1481   FP_GEN_DOCBOOK_XML
1482   if $XmllintCmd --nonet --valid --noout conftest.xml ; then
1483     AC_MSG_RESULT([ok])
1484   else
1485     AC_MSG_RESULT([failed])
1486     AC_MSG_WARN([cannot find a DTD for DocBook XML V4.5, you will not be able to validate your documentation])
1487     AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
1488   fi
1489   rm -rf conftest*
1490 fi
1491 ])# FP_CHECK_DOCBOOK_DTD
1492
1493
1494 # FP_PROG_GHC_PKG
1495 # ----------------
1496 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
1497 # WithGhc. Sets the output variable GhcPkgCmd.
1498 AC_DEFUN([FP_PROG_GHC_PKG],
1499 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
1500 [
1501 # If we are told to use ghc-stage2, then we're using an in-tree
1502 # compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
1503 # so we sed off -stage[0-9]$. However, if we are told to use
1504 # ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
1505 # other suffix.
1506 fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
1507 if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
1508   fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
1509 else
1510   AC_MSG_ERROR([Cannot find matching ghc-pkg])
1511 fi])
1512 GhcPkgCmd=$fp_cv_matching_ghc_pkg
1513 AC_SUBST([GhcPkgCmd])
1514 ])# FP_PROG_GHC_PKG
1515
1516
1517 # FP_GCC_EXTRA_FLAGS
1518 # ------------------
1519 # Determine which extra flags we need to pass gcc when we invoke it
1520 # to compile .hc code.
1521 #
1522 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
1523 # integer wrap around. (Trac #952)
1524 #
1525 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
1526 [AC_REQUIRE([FP_GCC_VERSION])
1527 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
1528 [fp_cv_gcc_extra_opts=
1529  FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
1530   [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
1531   [])
1532 ])
1533 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1534 ])
1535
1536
1537 # FP_SETUP_PROJECT_VERSION
1538 # ---------------------
1539 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1540 [
1541 if test "$RELEASE" = "NO"; then
1542     AC_MSG_CHECKING([for GHC version date])
1543     if test -f VERSION_DATE; then
1544         PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1545         AC_MSG_RESULT(given $PACKAGE_VERSION)
1546     elif test -d .git; then
1547         changequote(, )dnl
1548         ver_date=`git log -n 1 --date=short --pretty=format:%ci | cut -d ' ' -f 1 | tr -d -`
1549         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
1550         changequote([, ])dnl
1551                 AC_MSG_ERROR([failed to detect version date: check that git is in your path])
1552         fi
1553         PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1554         AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1555     elif test -f VERSION; then
1556         PACKAGE_VERSION=`cat VERSION`
1557         AC_MSG_RESULT(given $PACKAGE_VERSION)
1558     else
1559         AC_MSG_WARN([cannot determine snapshot version: no .git directory and no VERSION file])
1560         dnl We'd really rather this case didn't happen, but it might
1561         dnl do (in particular, people using lndir trees may find that
1562         dnl the build system can't find any other date). If it does
1563         dnl happen, then we use the current date.
1564         dnl This way we get some idea about how recent a build is.
1565         dnl It also means that packages built for 2 different builds
1566         dnl will probably use different version numbers, so things are
1567         dnl less likely to go wrong.
1568         PACKAGE_VERSION=${PACKAGE_VERSION}.`date +%Y%m%d`
1569     fi
1570 fi
1571
1572 # Some renamings
1573 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1574 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1575
1576 # Split PACKAGE_VERSION into (possibly empty) parts
1577 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1578 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1579 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1580 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1581
1582 # Calculate project version as an integer, using 2 digits for minor version
1583 case $VERSION_MINOR in
1584   ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1585   ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1586   *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1587 esac
1588 AC_SUBST([ProjectVersionInt])
1589
1590 # The project patchlevel is zero unless stated otherwise
1591 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1592
1593 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1594 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1595
1596 AC_SUBST([ProjectPatchLevel])
1597 ])# FP_SETUP_PROJECT_VERSION
1598
1599
1600 # Check for a working timer_create().  We need a pretty detailed check
1601 # here, because there exist partially-working implementations of
1602 # timer_create() in certain versions of Linux (see bug #1933).
1603 #
1604 AC_DEFUN([FP_CHECK_TIMER_CREATE],[
1605 AC_CHECK_FUNC([timer_create],[HAVE_timer_create=yes],[HAVE_timer_create=no])
1606
1607 if test "$HAVE_timer_create" = "yes"
1608 then
1609   if test "$cross_compiling" = "yes"
1610   then
1611     # We can't test timer_create when we're cross-compiling, so we
1612     # optimistiaclly assume that it actually works properly.
1613     AC_DEFINE([USE_TIMER_CREATE], 1,  [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)])
1614   else
1615   AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)],
1616     [fptools_cv_timer_create_works],
1617     [AC_TRY_RUN([
1618 #include <stdio.h>
1619 #ifdef HAVE_STDLIB_H
1620 #include <stdlib.h>
1621 #endif
1622 #ifdef HAVE_TIME_H
1623 #include <time.h>
1624 #endif
1625 #ifdef HAVE_SIGNAL_H
1626 #include <signal.h>
1627 #endif
1628 #ifdef HAVE_UNISTD_H
1629 #include <unistd.h>
1630 #endif
1631
1632 static volatile int tock = 0;
1633 static void handler(int i)
1634 {
1635    tock = 1;
1636 }
1637
1638 static void timeout(int i)
1639 {
1640   // timer_settime() has been known to hang, so just in case
1641   // we install a 1-second timeout (see #2257)
1642   exit(99);
1643 }
1644
1645 int main(int argc, char *argv[])
1646 {
1647
1648     struct sigevent ev;
1649     timer_t timer;
1650     struct itimerspec it;
1651     struct sigaction action;
1652     int m,n,count = 0;
1653
1654     ev.sigev_notify = SIGEV_SIGNAL;
1655     ev.sigev_signo  = SIGVTALRM;
1656
1657     action.sa_handler = handler;
1658     action.sa_flags = 0;
1659     sigemptyset(&action.sa_mask);
1660     if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1661         fprintf(stderr,"SIGVTALRM problem\n");
1662         exit(3);
1663     }
1664
1665     action.sa_handler = timeout;
1666     action.sa_flags = 0;
1667     sigemptyset(&action.sa_mask);
1668     if (sigaction(SIGALRM, &action, NULL) == -1) {
1669       fprintf(stderr,"SIGALRM problem\n");
1670       exit(3);
1671     }
1672     alarm(1);
1673
1674     if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1675         fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1676        exit(1);
1677     }
1678
1679     it.it_value.tv_sec = 0;
1680     it.it_value.tv_nsec = 1;
1681     it.it_interval = it.it_value;
1682     if (timer_settime(timer, 0, &it, NULL) != 0) {
1683         fprintf(stderr,"settime problem\n");
1684         exit(4);
1685     }
1686
1687     tock = 0;
1688
1689     for(n = 3; n < 20000; n++){
1690         for(m = 2; m <= n/2; m++){
1691             if (!(n%m)) count++;
1692             if (tock) goto out;
1693         }
1694     }
1695 out:
1696
1697     if (!tock) {
1698         fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1699         exit(5);
1700     }
1701
1702     timer_delete(timer);
1703
1704     if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1705         fprintf(stderr,"No CLOCK_REALTIME timer\n");
1706         exit(2);
1707     }
1708
1709     it.it_value.tv_sec = 0;
1710     it.it_value.tv_nsec = 1000000;
1711     it.it_interval = it.it_value;
1712     if (timer_settime(timer, 0, &it, NULL) != 0) {
1713         fprintf(stderr,"settime problem\n");
1714         exit(4);
1715     }
1716
1717     tock = 0;
1718
1719     usleep(3000);
1720
1721     if (!tock) {
1722         fprintf(stderr,"no CLOCK_REALTIME signal\n");
1723         exit(5);
1724     }
1725
1726     timer_delete(timer);
1727
1728     exit(0);
1729 }
1730      ],
1731      [fptools_cv_timer_create_works=yes],
1732      [fptools_cv_timer_create_works=no])
1733   ])
1734 case $fptools_cv_timer_create_works in
1735     yes) AC_DEFINE([USE_TIMER_CREATE], 1,
1736                    [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1737 esac
1738   fi
1739 fi
1740 ])
1741
1742 # FP_ICONV
1743 # -------------
1744 AC_DEFUN([FP_ICONV],
1745 [
1746   dnl--------------------------------------------------------------------
1747   dnl * Deal with arguments telling us iconv is somewhere odd
1748   dnl--------------------------------------------------------------------
1749
1750   dnl Note: ICONV_LIB_DIRS and ICONV_INCLUDE_DIRS are not predefined
1751   dnl to the empty string to allow them to be overridden from the
1752   dnl environment.
1753
1754   AC_ARG_WITH([iconv-includes],
1755     [AC_HELP_STRING([--with-iconv-includes],
1756       [directory containing iconv.h])],
1757       [ICONV_INCLUDE_DIRS=$withval])
1758
1759   AC_ARG_WITH([iconv-libraries],
1760     [AC_HELP_STRING([--with-iconv-libraries],
1761       [directory containing iconv library])],
1762       [ICONV_LIB_DIRS=$withval])
1763
1764   AC_SUBST(ICONV_INCLUDE_DIRS)
1765   AC_SUBST(ICONV_LIB_DIRS)
1766 ])# FP_ICONV
1767
1768 # FP_GMP
1769 # -------------
1770 AC_DEFUN([FP_GMP],
1771 [
1772   dnl--------------------------------------------------------------------
1773   dnl * Deal with arguments telling us gmp is somewhere odd
1774   dnl--------------------------------------------------------------------
1775
1776   AC_ARG_WITH([gmp-includes],
1777     [AC_HELP_STRING([--with-gmp-includes],
1778       [directory containing gmp.h])],
1779       [GMP_INCLUDE_DIRS=$withval])
1780
1781   AC_ARG_WITH([gmp-libraries],
1782     [AC_HELP_STRING([--with-gmp-libraries],
1783       [directory containing gmp library])],
1784       [GMP_LIB_DIRS=$withval])
1785
1786   AC_SUBST(GMP_INCLUDE_DIRS)
1787   AC_SUBST(GMP_LIB_DIRS)
1788 ])# FP_GMP
1789
1790 # --------------------------------------------------------------
1791 # Calculate absolute path to build tree
1792 # --------------------------------------------------------------
1793
1794 AC_DEFUN([FP_INTREE_GHC_PWD],[
1795 AC_MSG_NOTICE(Building in-tree ghc-pwd)
1796     dnl This would be
1797     dnl     make -C utils/ghc-pwd clean && make -C utils/ghc-pwd
1798     dnl except we don't want to have to know what make is called. Sigh.
1799     rm -rf utils/ghc-pwd/dist-boot
1800     mkdir  utils/ghc-pwd/dist-boot
1801     if ! "$WithGhc" -v0 -no-user-$GHC_PACKAGE_DB_FLAG -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
1802     then
1803         AC_MSG_ERROR([Building ghc-pwd failed])
1804     fi
1805
1806     GHC_PWD=utils/ghc-pwd/dist-boot/ghc-pwd
1807 ])
1808
1809 AC_DEFUN([FP_BINDIST_GHC_PWD],[
1810     GHC_PWD=utils/ghc-pwd/dist-install/build/tmp/ghc-pwd-bindist
1811 ])
1812
1813 AC_DEFUN([FP_FIND_ROOT],[
1814 AC_MSG_CHECKING(for path to top of build tree)
1815     hardtop=`$GHC_PWD`
1816
1817     dnl Remove common automounter nonsense
1818     hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1819
1820     if ! test -d "$hardtop"; then
1821         AC_MSG_ERROR([cannot determine current directory])
1822     fi
1823
1824     dnl We don't support building in directories with spaces.
1825     case "$hardtop" in
1826     *' '*)
1827         AC_MSG_ERROR([
1828         The build system does not support building in a directory
1829         containing space characters.
1830         Suggestion: move the build tree somewhere else.])
1831         ;;
1832     esac
1833
1834     AC_SUBST(hardtop)
1835
1836     AC_MSG_RESULT($hardtop)
1837 ])
1838
1839 # GHC_CONVERT_CPU(cpu, target_var)
1840 # --------------------------------
1841 # converts cpu from gnu to ghc naming, and assigns the result to $target_var
1842 AC_DEFUN([GHC_CONVERT_CPU],[
1843 case "$1" in
1844   alpha*)
1845     $2="alpha"
1846     ;;
1847   arm*)
1848     $2="arm"
1849     ;;
1850   hppa1.1*)
1851     $2="hppa1_1"
1852     ;;
1853   hppa*)
1854     $2="hppa"
1855     ;;
1856   i386|i486|i586|i686)
1857     $2="i386"
1858     ;;
1859   ia64)
1860     $2="ia64"
1861     ;;
1862   m68k*)
1863     $2="m68k"
1864     ;;
1865   mipseb*)
1866     $2="mipseb"
1867     ;;
1868   mipsel*)
1869     $2="mipsel"
1870     ;;
1871   mips*)
1872     $2="mips"
1873     ;;
1874   powerpc64*)
1875     $2="powerpc64"
1876     ;;
1877   powerpc*)
1878     $2="powerpc"
1879     ;;
1880   rs6000)
1881     $2="rs6000"
1882     ;;
1883   s390x*)
1884     $2="s390x"
1885     ;;
1886   s390*)
1887     $2="s390"
1888     ;;
1889   sparc64*)
1890     $2="sparc64"
1891     ;;
1892   sparc*)
1893     $2="sparc"
1894     ;;
1895   vax)
1896     $2="vax"
1897     ;;
1898   x86_64|amd64)
1899     $2="x86_64"
1900     ;;
1901   *)
1902     echo "Unknown CPU $1"
1903     exit 1
1904     ;;
1905   esac
1906 ])
1907
1908 # GHC_CONVERT_VENDOR(vendor, target_var)
1909 # --------------------------------
1910 # converts vendor from gnu to ghc naming, and assigns the result to $target_var
1911 AC_DEFUN([GHC_CONVERT_VENDOR],[
1912   case "$1" in
1913   pc|gentoo|w64) # like i686-pc-linux-gnu, i686-gentoo-freebsd8, x86_64-w64-mingw32
1914     $2="unknown"
1915     ;;
1916   softfloat) # like armv5tel-softfloat-linux-gnueabi
1917     $2="unknown"
1918     ;;
1919   *)
1920     #pass thru by default
1921     $2="$1"
1922     ;;
1923   esac
1924 ])
1925
1926 # GHC_CONVERT_OS(os, converted_cpu, target_var)
1927 # --------------------------------
1928 # converts os from gnu to ghc naming, and assigns the result to $target_var
1929 AC_DEFUN([GHC_CONVERT_OS],[
1930 case "$1-$2" in
1931   darwin10-arm|darwin11-i386)
1932     $3="ios"
1933     ;;
1934   *)
1935     case "$1" in
1936       linux-android*)
1937         $3="linux-android"
1938         ;;
1939       linux-*|linux)
1940         $3="linux"
1941         ;;
1942       # As far as I'm aware, none of these have relevant variants
1943       freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
1944         $3="$1"
1945         ;;
1946       freebsd*) # like i686-gentoo-freebsd7
1947                 #      i686-gentoo-freebsd8
1948                 #      i686-gentoo-freebsd8.2
1949         $3="freebsd"
1950         ;;
1951       nto-qnx*)
1952         $3="nto-qnx"
1953         ;;
1954       *)
1955         echo "Unknown OS $1"
1956         exit 1
1957         ;;
1958       esac
1959       ;;
1960   esac
1961 ])
1962
1963 # BOOTSTRAPPING_GHC_INFO_FIELD
1964 # --------------------------------
1965 # Set the variable $1 to the value of the ghc --info field $2.
1966 AC_DEFUN([BOOTSTRAPPING_GHC_INFO_FIELD],[
1967 $1=`"$WithGhc" --info | grep "^ ,(\"$2\"," | sed -e 's/.*","//' -e 's/")$//'`
1968 tmp=${$1#\$topdir/}
1969 if test "${$1}" != "$tmp"
1970 then
1971     topdir=`"$WithGhc" --print-libdir | sed 's#\\\\#/#g'`
1972     $1="$topdir/$tmp"
1973 fi
1974 AC_SUBST($1)
1975 ])
1976
1977 # LIBRARY_VERSION(lib, [dir])
1978 # --------------------------------
1979 # Gets the version number of a library.
1980 # If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3
1981 # $2 points to the directory under libraries/
1982 AC_DEFUN([LIBRARY_VERSION],[
1983 dir=m4_default([$2],[$1])
1984 LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/${dir}/$1.cabal | sed "s/.* //"`
1985 AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION)
1986 ])
1987
1988 # XCODE_VERSION()
1989 # --------------------------------
1990 # Gets the version number of XCode, if on a Mac
1991 AC_DEFUN([XCODE_VERSION],[
1992     if test "$TargetOS_CPP" = "darwin"
1993     then
1994         AC_MSG_CHECKING(XCode version)
1995         XCodeVersion=`xcodebuild -version | grep Xcode | sed "s/Xcode //"`
1996         # Old XCode versions don't actually give the XCode version
1997         if test "$XCodeVersion" = ""
1998         then
1999             AC_MSG_RESULT(not found (too old?))
2000             XCodeVersion1=0
2001             XCodeVersion2=0
2002         else
2003             AC_MSG_RESULT($XCodeVersion)
2004             XCodeVersion1=`echo "$XCodeVersion" | sed 's/\..*//'`
2005             changequote(, )dnl
2006             XCodeVersion2=`echo "$XCodeVersion" | sed 's/[^.]*\.\([^.]*\).*/\1/'`
2007             changequote([, ])dnl
2008             AC_MSG_NOTICE(XCode version component 1: $XCodeVersion1)
2009             AC_MSG_NOTICE(XCode version component 2: $XCodeVersion2)
2010         fi
2011     fi
2012 ])
2013
2014 # FIND_LLVM_PROG()
2015 # --------------------------------
2016 # Find where the llvm tools are. We have a special function to handle when they
2017 # are installed with a version suffix (e.g., llc-3.1).
2018 #
2019 # $1 = the variable to set
2020 # $2 = the with option name
2021 # $3 = the command to look for
2022 #
2023 AC_DEFUN([FIND_LLVM_PROG],[
2024     FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([$1], [$2], [$3])
2025     if test "$$1" == ""; then
2026         save_IFS=$IFS
2027         IFS=":;"
2028         for p in ${PATH}; do
2029             if test -d "${p}"; then
2030                 $1=`${FindCmd} "${p}" -type f -perm +111 -maxdepth 1 -regex '.*/$3-[[0-9]]\.[[0-9]]' -or -type l -perm +111 -maxdepth 1 -regex '.*/$3-[[0-9]]\.[[0-9]]' | ${SortCmd} -n | tail -1`
2031                 if test -n "$$1"; then
2032                     break
2033                 fi
2034             fi
2035         done
2036         IFS=$save_IFS
2037     fi
2038 ])
2039
2040 # FIND_GCC()
2041 # --------------------------------
2042 # Finds where gcc is
2043 #
2044 # $1 = the variable to set
2045 # $2 = the with option name
2046 # $3 = the command to look for
2047 AC_DEFUN([FIND_GCC],[
2048     if test "$TargetOS_CPP" = "darwin" &&
2049        test "$XCodeVersion1" -eq 4 &&
2050        test "$XCodeVersion2" -lt 2
2051     then
2052         # In Xcode 4.1, 'gcc-4.2' is the gcc legacy backend (rather
2053         # than the LLVM backend). We prefer the legacy gcc, but in
2054         # Xcode 4.2 'gcc-4.2' was removed.
2055         FP_ARG_WITH_PATH_GNU_PROG([$1], [gcc-4.2], [gcc-4.2])
2056     elif test "$windows" = YES
2057     then
2058         $1="$CC"
2059     else
2060         FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([$1], [$2], [$3])
2061         # From Xcode 5 on, OS X command line tools do not include gcc anymore. Use clang.
2062         if test -z "$$1"
2063         then
2064             FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([$1], [clang], [clang])
2065         fi
2066         if test -z "$$1"
2067         then
2068             AC_MSG_ERROR([cannot find $3 nor clang in your PATH])
2069         fi
2070     fi
2071     AC_SUBST($1)
2072 ])
2073
2074 # LocalWords:  fi