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