Remove unused code
[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)
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 if test ! -f utils/haddock/src/Haddock/Lex.hs
902 then
903     FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[3.0],
904       [AC_MSG_ERROR([Alex version 3.0 or later is required to compile Haddock.])])[]
905 fi
906 AlexVersion=$fptools_cv_alex_version;
907 AC_SUBST(AlexVersion)
908 AC_SUBST(Alex3)
909 ])
910
911
912 # FP_PROG_LD_FLAG
913 # ---------------
914 # Sets the output variable $2 to $1 if ld supports the $1 flag.
915 # Otherwise the variable's value is empty.
916 AC_DEFUN([FP_PROG_LD_FLAG],
917 [
918 AC_CACHE_CHECK([whether ld understands $1], [fp_cv_$2],
919 [echo 'int foo() { return 0; }' > conftest.c
920 ${CC-cc} -c conftest.c
921 if ${LdCmd} -r $1 -o conftest2.o conftest.o > /dev/null 2>&1; then
922    fp_cv_$2=$1
923 else
924    fp_cv_$2=
925 fi
926 rm -rf conftest*])
927 $2=$fp_cv_$2
928 ])# FP_PROG_LD_FLAG
929
930
931 # FP_PROG_LD_BUILD_ID
932 # ------------
933
934 # Sets the output variable LdHasBuildId to YES if ld supports
935 # --build-id, or NO otherwise.
936 AC_DEFUN([FP_PROG_LD_BUILD_ID],
937 [
938 AC_CACHE_CHECK([whether ld understands --build-id], [fp_cv_ld_build_id],
939 [echo 'int foo() { return 0; }' > conftest.c
940 ${CC-cc} -c conftest.c
941 if ${LdCmd} -r --build-id=none -o conftest2.o conftest.o > /dev/null 2>&1; then
942    fp_cv_ld_build_id=yes
943 else
944    fp_cv_ld_build_id=no
945 fi
946 rm -rf conftest*])
947 if test "$fp_cv_ld_build_id" = yes; then
948   LdHasBuildId=YES
949 else
950   LdHasBuildId=NO
951 fi
952 AC_SUBST([LdHasBuildId])
953 ])# FP_PROG_LD_BUILD_ID
954
955
956 # FP_PROG_LD_IS_GNU
957 # -----------------
958 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
959 # GNU ld or not.
960 AC_DEFUN([FP_PROG_LD_IS_GNU],
961 [
962 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
963 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
964   fp_cv_gnu_ld=yes
965 else
966   fp_cv_gnu_ld=no
967 fi])
968 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
969 ])# FP_PROG_LD_IS_GNU
970
971
972 # FP_PROG_LD_NO_COMPACT_UNWIND
973 # ----------------------------
974
975 # Sets the output variable LdHasNoCompactUnwind to YES if ld supports
976 # -no_compact_unwind, or NO otherwise.
977 AC_DEFUN([FP_PROG_LD_NO_COMPACT_UNWIND],
978 [
979 AC_CACHE_CHECK([whether ld understands -no_compact_unwind], [fp_cv_ld_no_compact_unwind],
980 [echo 'int foo() { return 0; }' > conftest.c
981 ${CC-cc} -c conftest.c
982 if ${LdCmd} -r -no_compact_unwind -o conftest2.o conftest.o > /dev/null 2>&1; then
983    fp_cv_ld_no_compact_unwind=yes
984 else
985    fp_cv_ld_no_compact_unwind=no
986 fi
987 rm -rf conftest*])
988 if test "$fp_cv_ld_no_compact_unwind" = yes; then
989   LdHasNoCompactUnwind=YES
990 else
991   LdHasNoCompactUnwind=NO
992 fi
993 AC_SUBST([LdHasNoCompactUnwind])
994 ])# FP_PROG_LD_NO_COMPACT_UNWIND
995
996
997 # FP_PROG_LD_FILELIST
998 # -------------------
999
1000 # Sets the output variable LdHasFilelist to YES if ld supports
1001 # -filelist, or NO otherwise.
1002 AC_DEFUN([FP_PROG_LD_FILELIST],
1003 [
1004 AC_CACHE_CHECK([whether ld understands -filelist], [fp_cv_ld_has_filelist],
1005 [
1006     echo 'int foo() { return 0; }' > conftest1.c
1007     echo 'int bar() { return 0; }' > conftest2.c
1008     ${CC-cc} -c conftest1.c
1009     ${CC-cc} -c conftest2.c
1010     echo conftest1.o  > conftest.o-files
1011     echo conftest2.o >> conftest.o-files
1012     if ${LdCmd} -r -filelist conftest.o-files -o conftest.o > /dev/null 2>&1
1013     then
1014         fp_cv_ld_has_filelist=yes
1015     else
1016         fp_cv_ld_has_filelist=no
1017     fi
1018     rm -rf conftest*
1019 ])
1020 if test "$fp_cv_ld_has_filelist" = yes; then
1021     LdHasFilelist=YES
1022 else
1023     LdHasFilelist=NO
1024 fi
1025 AC_SUBST([LdHasFilelist])
1026 ])# FP_PROG_LD_FILELIST
1027
1028
1029 # FP_PROG_AR
1030 # ----------
1031 # Sets fp_prog_ar to a (non-Cygwin) path to ar. Exits if no ar can be found
1032 AC_DEFUN([FP_PROG_AR],
1033 [FP_PATH_PROG([fp_prog_ar], [ar])
1034 if test -z "$fp_prog_ar"; then
1035   AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
1036 fi
1037 ])# FP_PROG_AR
1038
1039
1040 # FP_PROG_AR_IS_GNU
1041 # -----------------
1042 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
1043 AC_DEFUN([FP_PROG_AR_IS_GNU],
1044 [AC_REQUIRE([FP_PROG_AR])
1045 AC_CACHE_CHECK([whether $fp_prog_ar is GNU ar], [fp_cv_prog_ar_is_gnu],
1046 [if "$fp_prog_ar" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
1047   fp_cv_prog_ar_is_gnu=yes
1048 else
1049   fp_cv_prog_ar_is_gnu=no
1050 fi])
1051 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
1052 AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
1053 ])# FP_PROG_AR_IS_GNU
1054
1055
1056 # FP_PROG_AR_SUPPORTS_ATFILE
1057 # -----------------
1058 # Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
1059 # or not it supports the @file syntax
1060 AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
1061 [AC_REQUIRE([FP_PROG_AR])
1062  AC_REQUIRE([FP_PROG_AR_ARGS])
1063 AC_CACHE_CHECK([whether $fp_prog_ar supports @file], [fp_cv_prog_ar_supports_atfile],
1064 [
1065 rm -f conftest*
1066 touch conftest.file
1067 echo conftest.file  > conftest.atfile
1068 echo conftest.file >> conftest.atfile
1069 "$fp_prog_ar" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
1070 fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar" t conftest.a 2> /dev/null | grep -c conftest.file`
1071 rm -f conftest*
1072 if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
1073 then
1074   fp_cv_prog_ar_supports_atfile=yes
1075 else
1076   fp_cv_prog_ar_supports_atfile=no
1077 fi])
1078 fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
1079 AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
1080 ])# FP_PROG_AR_SUPPORTS_ATFILE
1081
1082 # FP_PROG_AR_ARGS
1083 # ---------------
1084 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
1085 # to a non-Cygwin invocation of ar including these arguments.
1086 AC_DEFUN([FP_PROG_AR_ARGS],
1087 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
1088 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
1089 [
1090 # GNU ar needs special treatment: it appears to have problems with
1091 # object files with the same name if you use the 's' modifier, but
1092 # simple 'ar q' works fine, and doesn't need a separate ranlib.
1093 if test $fp_prog_ar_is_gnu = yes; then
1094   fp_cv_prog_ar_args="q"
1095 else
1096   touch conftest.dummy
1097   for fp_var in clqsZ clqs cqs clq cq ; do
1098      rm -f conftest.a
1099      if "$fp_prog_ar" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
1100         fp_cv_prog_ar_args=$fp_var
1101         break
1102      fi
1103   done
1104   rm -f conftest*
1105   if test -z "$fp_cv_prog_ar_args"; then
1106     AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar])
1107   fi
1108 fi])
1109 fp_prog_ar_args=$fp_cv_prog_ar_args
1110 AC_SUBST([ArCmd], ["$fp_prog_ar"])
1111 AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
1112
1113 ])# FP_PROG_AR_ARGS
1114
1115
1116 # FP_PROG_AR_NEEDS_RANLIB
1117 # -----------------------
1118 # Sets the output variable RANLIB_CMD to "ranlib" if it is needed and
1119 # found, to "true" otherwise. Sets REAL_RANLIB_CMD to the ranlib program,
1120 # even if we don't need ranlib (libffi might still need it).
1121 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],[
1122     AC_REQUIRE([FP_PROG_AR_IS_GNU])
1123     AC_REQUIRE([FP_PROG_AR_ARGS])
1124     AC_REQUIRE([AC_PROG_CC])
1125
1126     AC_PROG_RANLIB
1127
1128     if test $fp_prog_ar_is_gnu = yes
1129     then
1130         fp_cv_prog_ar_needs_ranlib=no
1131     elif test "$TargetOS_CPP" = "darwin"
1132     then
1133         # It's quite tedious to check for Apple's crazy timestamps in
1134         # .a files, so we hardcode it.
1135         fp_cv_prog_ar_needs_ranlib=yes
1136     else
1137         case $fp_prog_ar_args in
1138         *s*)
1139             fp_cv_prog_ar_needs_ranlib=no;;
1140         *)
1141             fp_cv_prog_ar_needs_ranlib=yes;;
1142         esac
1143     fi
1144
1145     REAL_RANLIB_CMD="$RANLIB"
1146     if test $fp_cv_prog_ar_needs_ranlib = yes
1147     then
1148         RANLIB_CMD="$RANLIB"
1149     else
1150         RANLIB_CMD="true"
1151     fi
1152     AC_SUBST([REAL_RANLIB_CMD])
1153     AC_SUBST([RANLIB_CMD])
1154 ])# FP_PROG_AR_NEEDS_RANLIB
1155
1156
1157 # FP_GCC_VERSION
1158 # -----------
1159 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
1160 # output variable GccVersion.
1161 AC_DEFUN([FP_GCC_VERSION],
1162 [AC_REQUIRE([AC_PROG_CC])
1163 if test -z "$CC"
1164 then
1165   AC_MSG_ERROR([gcc is required])
1166 fi
1167 GccLT34=NO
1168 GccLT46=NO
1169 AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
1170 [
1171     fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
1172     FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
1173                         [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
1174     # See #2770: gcc 2.95 doesn't work any more, apparently.  There probably
1175     # isn't a very good reason for that, but for now just make configure
1176     # fail.
1177     FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
1178     FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [4.6], GccLT46=YES)
1179 ])
1180 AC_SUBST([GccVersion], [$fp_cv_gcc_version])
1181 AC_SUBST(GccLT34)
1182 AC_SUBST(GccLT46)
1183 ])# FP_GCC_VERSION
1184
1185 dnl Check to see if the C compiler is clang or llvm-gcc
1186 dnl
1187 GccIsClang=NO
1188 AC_DEFUN([FP_CC_LLVM_BACKEND],
1189 [AC_REQUIRE([AC_PROG_CC])
1190 AC_MSG_CHECKING([whether C compiler is clang])
1191 $CC -x c /dev/null -dM -E > conftest.txt 2>&1
1192 if grep "__clang__" conftest.txt >/dev/null 2>&1; then
1193   AC_SUBST([CC_CLANG_BACKEND], [1])
1194   AC_SUBST([CC_LLVM_BACKEND], [1])
1195   GccIsClang=YES
1196   AC_MSG_RESULT([yes])
1197 else
1198   AC_MSG_RESULT([no])
1199   AC_MSG_CHECKING([whether C compiler has an LLVM back end])
1200   if grep "__llvm__" conftest.txt >/dev/null 2>&1; then
1201     AC_SUBST([CC_CLANG_BACKEND], [0])
1202     AC_SUBST([CC_LLVM_BACKEND], [1])
1203     AC_MSG_RESULT([yes])
1204   else
1205     AC_SUBST([CC_CLANG_BACKEND], [0])
1206     AC_SUBST([CC_LLVM_BACKEND], [0])
1207     AC_MSG_RESULT([no])
1208   fi
1209 fi
1210 AC_SUBST(GccIsClang)
1211
1212 rm -f conftest.txt
1213 ])
1214
1215 dnl Small feature test for perl version. Assumes PerlCmd
1216 dnl contains path to perl binary.
1217 dnl
1218 dnl (Perl versions prior to v5.6 does not contain the string "v5";
1219 dnl instead they display version strings such as "version 5.005".)
1220 dnl
1221 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
1222 [$PerlCmd -v >conftest.out 2>&1
1223    if grep "v5" conftest.out >/dev/null 2>&1; then
1224       :
1225    else
1226       AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
1227    fi
1228 rm -fr conftest*
1229 ])
1230
1231
1232 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
1233 #               [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
1234 # -----------------------------------------------------
1235 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
1236 # of PROG-TO-CHECK-FOR when found.
1237 AC_DEFUN([FP_CHECK_PROG],
1238 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
1239 )# FP_CHECK_PROC
1240
1241
1242 # FP_PROG_FIND
1243 # ------------
1244 # Find a non-WinDoze version of the "find" utility.
1245 AC_DEFUN([FP_PROG_FIND],
1246 [AC_PATH_PROGS([fp_prog_find], [gfind find], find)
1247 echo foo > conftest.txt
1248 $fp_prog_find conftest.txt -print > conftest.out 2>&1
1249 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
1250   # OK, looks like a real "find".
1251   case $HostPlatform in
1252     *mingw32)
1253       if test x${OSTYPE} != xmsys
1254       then
1255             fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
1256         AC_MSG_NOTICE([normalized find command to $fp_prog_find])
1257       fi ;;
1258     *) ;;
1259   esac
1260   FindCmd="$fp_prog_find"
1261 else
1262   # Found a poor WinDoze version of "find", ignore it.
1263   AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
1264   FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
1265 fi
1266 rm -f conftest.txt conftest.out
1267 AC_SUBST([FindCmd])[]dnl
1268 ])# FP_PROG_FIND
1269
1270
1271 # FP_PROG_SORT
1272 # ------------
1273 # Find a Unix-like sort
1274 AC_DEFUN([FP_PROG_SORT],
1275 [AC_PATH_PROG([fp_prog_sort], [sort])
1276 echo conwip > conftest.txt
1277 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
1278 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
1279   # The goods
1280   SortCmd="$fp_prog_sort"
1281 else
1282   # Summink else..pick next one.
1283   AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
1284   FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
1285 fi
1286 rm -f conftest.txt conftest.out
1287 AC_SUBST([SortCmd])[]dnl
1288 ])# FP_PROG_SORT
1289
1290
1291 dnl
1292 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
1293 dnl values of the second argument to the result of running
1294 dnl the commands given by the third. It does not cache its
1295 dnl result, so it is suitable for checks which should be
1296 dnl run every time.
1297 dnl
1298 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
1299 [AC_MSG_CHECKING([$1])
1300  $3
1301  AC_MSG_RESULT([$][$2])
1302 ])
1303
1304 dnl
1305 dnl FPTOOLS_GHC_VERSION(version)
1306 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
1307 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
1308 dnl
1309 dnl Test for version of installed ghc.  Uses $GHC.
1310 dnl [original version pinched from c2hs]
1311 dnl
1312 AC_DEFUN([FPTOOLS_GHC_VERSION],
1313 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
1314 ["${WithGhc-ghc}" --version > conftestghc 2>&1
1315   cat conftestghc >&AS_MESSAGE_LOG_FD
1316 #Useless Use Of cat award...
1317   fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
1318   rm -fr conftest*
1319   if test "[$]fptools_version_of_ghc" = ""
1320   then
1321     fptools_version_of_ghc='unknown'
1322   fi
1323 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
1324 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
1325 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
1326 #
1327 if test "[$]fptools_version_of_ghc[_pl]" = ""
1328 then
1329   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
1330   fptools_version_of_ghc[_pl]="0"
1331 else
1332   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
1333 fi
1334 #
1335 ifelse($#, [1], [dnl
1336 [$1]="[$]fptools_version_of_ghc[_all]"
1337 ], $#, [2], [dnl
1338 [$1]="[$]fptools_version_of_ghc[_major]"
1339 [$2]="[$]fptools_version_of_ghc[_minor]"
1340 ], $#, [3], [dnl
1341 [$1]="[$]fptools_version_of_ghc[_major]"
1342 [$2]="[$]fptools_version_of_ghc[_minor]"
1343 [$3]="[$]fptools_version_of_ghc[_pl]"
1344 ], $#, [4], [dnl
1345 [$1]="[$]fptools_version_of_ghc[_all]"
1346 [$2]="[$]fptools_version_of_ghc[_major]"
1347 [$3]="[$]fptools_version_of_ghc[_minor]"
1348 [$4]="[$]fptools_version_of_ghc[_pl]"
1349 ])
1350 ])
1351 ])dnl
1352
1353
1354 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
1355 # ---------------------------------------------------------------------------------
1356 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
1357 # additional flexibility of specifying the PROLOGUE and BODY.
1358 AC_DEFUN([FP_CHECK_FUNC],
1359 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
1360 AC_CACHE_CHECK([for $1], fp_func,
1361 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
1362                 [AS_VAR_SET(fp_func, yes)],
1363                 [AS_VAR_SET(fp_func, no)])])
1364 AS_IF([test AS_VAR_GET(fp_func) = yes],
1365       [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
1366                 [Define to 1 if you have the `]$1[' function.]) $4],
1367       [$5])dnl
1368 AS_VAR_POPDEF([fp_func])dnl
1369 ])# FP_CHECK_FUNC
1370
1371
1372 # FP_GEN_DOCBOOK_XML
1373 # ------------------
1374 # Generates a DocBook XML V4.5 document in conftest.xml.
1375 #
1376 # It took a lot of experimentation to find a document that will cause
1377 # xsltproc to fail with an error code when the relevant
1378 # stylesheets/DTDs are not found.  I couldn't make xsltproc fail with
1379 # a single-file document, it seems a multi-file document is needed.
1380 # -- SDM 2009-06-03
1381 #
1382 AC_DEFUN([FP_GEN_DOCBOOK_XML],
1383 [rm -f conftest.xml conftest-book.xml
1384 cat > conftest.xml << EOF
1385 <?xml version="1.0" encoding="iso-8859-1"?>
1386 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
1387    "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [[
1388 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
1389 ]]>
1390 <book id="test">
1391 &conftest-book;
1392 </book>
1393 EOF
1394 cat >conftest-book.xml << EOF
1395 <?xml version="1.0" encoding="iso-8859-1"?>
1396   <title>A DocBook &ldquo;Test Document&rdquo;</title>
1397   <chapter id="id-one">
1398     <title>A Chapter Title</title>
1399     <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
1400   </chapter>
1401   <chapter id="id-two">
1402     <title>Another Chapter Title</title>
1403     <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
1404   </chapter>
1405 EOF
1406 ]) # FP_GEN_DOCBOOK_XML
1407
1408
1409 # FP_PROG_DBLATEX
1410 # ----------------
1411 # Sets the output variable DblatexCmd to the full path of dblatex,
1412 # which we use for building PDF and PS docs.
1413 # DblatexCmd is empty if dblatex could not be found.
1414 AC_DEFUN([FP_PROG_DBLATEX],
1415 [FP_PATH_PROG([DblatexCmd], [dblatex])
1416 if test -z "$DblatexCmd"; then
1417   AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
1418 fi
1419 ])# FP_PROG_DBLATEX
1420
1421
1422 # FP_PROG_XSLTPROC
1423 # ----------------
1424 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
1425 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
1426 AC_DEFUN([FP_PROG_XSLTPROC],
1427 [FP_PATH_PROG([XsltprocCmd], [xsltproc])
1428 if test -z "$XsltprocCmd"; then
1429   AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the HTML documentation])
1430 fi
1431 ])# FP_PROG_XSLTPROC
1432
1433
1434 # FP_DOCBOOK_XSL
1435 # ----------------------------
1436 # Check that we can process a DocBook XML document to HTML using xsltproc.
1437 AC_DEFUN([FP_DOCBOOK_XSL],
1438 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
1439 if test -n "$XsltprocCmd"; then
1440   AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
1441   [FP_GEN_DOCBOOK_XML
1442   fp_cv_dir_docbook_xsl=no
1443   if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
1444      fp_cv_dir_docbook_xsl=yes
1445   fi
1446   rm -rf conftest*])
1447 fi
1448 if test x"$fp_cv_dir_docbook_xsl" = xno; then
1449   AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
1450   HAVE_DOCBOOK_XSL=NO
1451 else
1452   HAVE_DOCBOOK_XSL=YES
1453 fi
1454 AC_SUBST([HAVE_DOCBOOK_XSL])
1455 ])# FP_DOCBOOK_XSL
1456
1457
1458 # FP_PROG_XMLLINT
1459 # ----------------
1460 # Sets the output variable XmllintCmd to the full path of the XSLT processor
1461 # xmllint. XmllintCmd is empty if xmllint could not be found.
1462 AC_DEFUN([FP_PROG_XMLLINT],
1463 [FP_PATH_PROG([XmllintCmd], [xmllint])
1464 if test -z "$XmllintCmd"; then
1465   AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
1466 fi
1467 ])# FP_PROG_XMLLINT
1468
1469
1470 # FP_CHECK_DOCBOOK_DTD
1471 # --------------------
1472 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
1473 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
1474 if test -n "$XmllintCmd"; then
1475   AC_MSG_CHECKING([for DocBook DTD])
1476   FP_GEN_DOCBOOK_XML
1477   if $XmllintCmd --nonet --valid --noout conftest.xml ; then
1478     AC_MSG_RESULT([ok])
1479   else
1480     AC_MSG_RESULT([failed])
1481     AC_MSG_WARN([cannot find a DTD for DocBook XML V4.5, you will not be able to validate your documentation])
1482     AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
1483   fi
1484   rm -rf conftest*
1485 fi
1486 ])# FP_CHECK_DOCBOOK_DTD
1487
1488
1489 # FP_PROG_GHC_PKG
1490 # ----------------
1491 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
1492 # WithGhc. Sets the output variable GhcPkgCmd.
1493 AC_DEFUN([FP_PROG_GHC_PKG],
1494 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
1495 [
1496 # If we are told to use ghc-stage2, then we're using an in-tree
1497 # compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
1498 # so we sed off -stage[0-9]$. However, if we are told to use
1499 # ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
1500 # other suffix.
1501 fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
1502 if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
1503   fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
1504 else
1505   AC_MSG_ERROR([Cannot find matching ghc-pkg])
1506 fi])
1507 GhcPkgCmd=$fp_cv_matching_ghc_pkg
1508 AC_SUBST([GhcPkgCmd])
1509 ])# FP_PROG_GHC_PKG
1510
1511
1512 # FP_GCC_EXTRA_FLAGS
1513 # ------------------
1514 # Determine which extra flags we need to pass gcc when we invoke it
1515 # to compile .hc code.
1516 #
1517 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
1518 # integer wrap around. (Trac #952)
1519 #
1520 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
1521 [AC_REQUIRE([FP_GCC_VERSION])
1522 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
1523 [fp_cv_gcc_extra_opts=
1524  FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
1525   [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
1526   [])
1527 ])
1528 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1529 ])
1530
1531
1532 # FP_SETUP_PROJECT_VERSION
1533 # ---------------------
1534 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1535 [
1536 if test "$RELEASE" = "NO"; then
1537     AC_MSG_CHECKING([for GHC version date])
1538     if test -f VERSION_DATE; then
1539         PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1540         AC_MSG_RESULT(given $PACKAGE_VERSION)
1541     elif test -d .git; then
1542         changequote(, )dnl
1543         ver_date=`git log -n 1 --date=short --pretty=format:%ci | cut -d ' ' -f 1 | tr -d -`
1544         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
1545         changequote([, ])dnl
1546                 AC_MSG_ERROR([failed to detect version date: check that git is in your path])
1547         fi
1548         PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1549         AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1550     elif test -f VERSION; then
1551         PACKAGE_VERSION=`cat VERSION`
1552         AC_MSG_RESULT(given $PACKAGE_VERSION)
1553     else
1554         AC_MSG_WARN([cannot determine snapshot version: no .git directory and no VERSION file])
1555         dnl We'd really rather this case didn't happen, but it might
1556         dnl do (in particular, people using lndir trees may find that
1557         dnl the build system can't find any other date). If it does
1558         dnl happen, then we use the current date.
1559         dnl This way we get some idea about how recent a build is.
1560         dnl It also means that packages built for 2 different builds
1561         dnl will probably use different version numbers, so things are
1562         dnl less likely to go wrong.
1563         PACKAGE_VERSION=${PACKAGE_VERSION}.`date +%Y%m%d`
1564     fi
1565 fi
1566
1567 # Some renamings
1568 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1569 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1570
1571 # Split PACKAGE_VERSION into (possibly empty) parts
1572 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1573 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1574 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1575 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1576
1577 # Calculate project version as an integer, using 2 digits for minor version
1578 case $VERSION_MINOR in
1579   ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1580   ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1581   *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1582 esac
1583 AC_SUBST([ProjectVersionInt])
1584
1585 # The project patchlevel is zero unless stated otherwise
1586 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1587
1588 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1589 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1590
1591 AC_SUBST([ProjectPatchLevel])
1592 ])# FP_SETUP_PROJECT_VERSION
1593
1594
1595 # Check for a working timer_create().  We need a pretty detailed check
1596 # here, because there exist partially-working implementations of
1597 # timer_create() in certain versions of Linux (see bug #1933).
1598 #
1599 AC_DEFUN([FP_CHECK_TIMER_CREATE],[
1600 AC_CHECK_FUNC([timer_create],[HAVE_timer_create=yes],[HAVE_timer_create=no])
1601
1602 if test "$HAVE_timer_create" = "yes"
1603 then
1604   if test "$cross_compiling" = "yes"
1605   then
1606     # We can't test timer_create when we're cross-compiling, so we
1607     # optimistiaclly assume that it actually works properly.
1608     AC_DEFINE([USE_TIMER_CREATE], 1,  [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)])
1609   else
1610   AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)],
1611     [fptools_cv_timer_create_works],
1612     [AC_TRY_RUN([
1613 #include <stdio.h>
1614 #ifdef HAVE_STDLIB_H
1615 #include <stdlib.h>
1616 #endif
1617 #ifdef HAVE_TIME_H
1618 #include <time.h>
1619 #endif
1620 #ifdef HAVE_SIGNAL_H
1621 #include <signal.h>
1622 #endif
1623 #ifdef HAVE_UNISTD_H
1624 #include <unistd.h>
1625 #endif
1626
1627 static volatile int tock = 0;
1628 static void handler(int i)
1629 {
1630    tock = 1;
1631 }
1632
1633 static void timeout(int i)
1634 {
1635   // timer_settime() has been known to hang, so just in case
1636   // we install a 1-second timeout (see #2257)
1637   exit(99);
1638 }
1639
1640 int main(int argc, char *argv[])
1641 {
1642
1643     struct sigevent ev;
1644     timer_t timer;
1645     struct itimerspec it;
1646     struct sigaction action;
1647     int m,n,count = 0;
1648
1649     ev.sigev_notify = SIGEV_SIGNAL;
1650     ev.sigev_signo  = SIGVTALRM;
1651
1652     action.sa_handler = handler;
1653     action.sa_flags = 0;
1654     sigemptyset(&action.sa_mask);
1655     if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1656         fprintf(stderr,"SIGVTALRM problem\n");
1657         exit(3);
1658     }
1659
1660     action.sa_handler = timeout;
1661     action.sa_flags = 0;
1662     sigemptyset(&action.sa_mask);
1663     if (sigaction(SIGALRM, &action, NULL) == -1) {
1664       fprintf(stderr,"SIGALRM problem\n");
1665       exit(3);
1666     }
1667     alarm(1);
1668
1669     if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1670         fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1671        exit(1);
1672     }
1673
1674     it.it_value.tv_sec = 0;
1675     it.it_value.tv_nsec = 1;
1676     it.it_interval = it.it_value;
1677     if (timer_settime(timer, 0, &it, NULL) != 0) {
1678         fprintf(stderr,"settime problem\n");
1679         exit(4);
1680     }
1681
1682     tock = 0;
1683
1684     for(n = 3; n < 20000; n++){
1685         for(m = 2; m <= n/2; m++){
1686             if (!(n%m)) count++;
1687             if (tock) goto out;
1688         }
1689     }
1690 out:
1691
1692     if (!tock) {
1693         fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1694         exit(5);
1695     }
1696
1697     timer_delete(timer);
1698
1699     if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1700         fprintf(stderr,"No CLOCK_REALTIME timer\n");
1701         exit(2);
1702     }
1703
1704     it.it_value.tv_sec = 0;
1705     it.it_value.tv_nsec = 1000000;
1706     it.it_interval = it.it_value;
1707     if (timer_settime(timer, 0, &it, NULL) != 0) {
1708         fprintf(stderr,"settime problem\n");
1709         exit(4);
1710     }
1711
1712     tock = 0;
1713
1714     usleep(3000);
1715
1716     if (!tock) {
1717         fprintf(stderr,"no CLOCK_REALTIME signal\n");
1718         exit(5);
1719     }
1720
1721     timer_delete(timer);
1722
1723     exit(0);
1724 }
1725      ],
1726      [fptools_cv_timer_create_works=yes],
1727      [fptools_cv_timer_create_works=no])
1728   ])
1729 case $fptools_cv_timer_create_works in
1730     yes) AC_DEFINE([USE_TIMER_CREATE], 1,
1731                    [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1732 esac
1733   fi
1734 fi
1735 ])
1736
1737 # FP_ICONV
1738 # -------------
1739 AC_DEFUN([FP_ICONV],
1740 [
1741   dnl--------------------------------------------------------------------
1742   dnl * Deal with arguments telling us iconv is somewhere odd
1743   dnl--------------------------------------------------------------------
1744
1745   dnl Note: ICONV_LIB_DIRS and ICONV_INCLUDE_DIRS are not predefined
1746   dnl to the empty string to allow them to be overridden from the
1747   dnl environment.
1748
1749   AC_ARG_WITH([iconv-includes],
1750     [AC_HELP_STRING([--with-iconv-includes],
1751       [directory containing iconv.h])],
1752       [ICONV_INCLUDE_DIRS=$withval])
1753
1754   AC_ARG_WITH([iconv-libraries],
1755     [AC_HELP_STRING([--with-iconv-libraries],
1756       [directory containing iconv library])],
1757       [ICONV_LIB_DIRS=$withval])
1758
1759   AC_SUBST(ICONV_INCLUDE_DIRS)
1760   AC_SUBST(ICONV_LIB_DIRS)
1761 ])# FP_ICONV
1762
1763 # FP_GMP
1764 # -------------
1765 AC_DEFUN([FP_GMP],
1766 [
1767   dnl--------------------------------------------------------------------
1768   dnl * Deal with arguments telling us gmp is somewhere odd
1769   dnl--------------------------------------------------------------------
1770
1771   AC_ARG_WITH([gmp-includes],
1772     [AC_HELP_STRING([--with-gmp-includes],
1773       [directory containing gmp.h])],
1774       [GMP_INCLUDE_DIRS=$withval])
1775
1776   AC_ARG_WITH([gmp-libraries],
1777     [AC_HELP_STRING([--with-gmp-libraries],
1778       [directory containing gmp library])],
1779       [GMP_LIB_DIRS=$withval])
1780
1781   AC_SUBST(GMP_INCLUDE_DIRS)
1782   AC_SUBST(GMP_LIB_DIRS)
1783 ])# FP_GMP
1784
1785 # --------------------------------------------------------------
1786 # Calculate absolute path to build tree
1787 # --------------------------------------------------------------
1788
1789 AC_DEFUN([FP_INTREE_GHC_PWD],[
1790 AC_MSG_NOTICE(Building in-tree ghc-pwd)
1791     dnl This would be
1792     dnl     make -C utils/ghc-pwd clean && make -C utils/ghc-pwd
1793     dnl except we don't want to have to know what make is called. Sigh.
1794     rm -rf utils/ghc-pwd/dist-boot
1795     mkdir  utils/ghc-pwd/dist-boot
1796     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
1797     then
1798         AC_MSG_ERROR([Building ghc-pwd failed])
1799     fi
1800
1801     GHC_PWD=utils/ghc-pwd/dist-boot/ghc-pwd
1802 ])
1803
1804 AC_DEFUN([FP_BINDIST_GHC_PWD],[
1805     GHC_PWD=utils/ghc-pwd/dist-install/build/tmp/ghc-pwd-bindist
1806 ])
1807
1808 AC_DEFUN([FP_FIND_ROOT],[
1809 AC_MSG_CHECKING(for path to top of build tree)
1810     hardtop=`$GHC_PWD`
1811
1812     dnl Remove common automounter nonsense
1813     hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1814
1815     if ! test -d "$hardtop"; then
1816         AC_MSG_ERROR([cannot determine current directory])
1817     fi
1818
1819     dnl We don't support building in directories with spaces.
1820     case "$hardtop" in
1821     *' '*)
1822         AC_MSG_ERROR([
1823         The build system does not support building in a directory
1824         containing space characters.
1825         Suggestion: move the build tree somewhere else.])
1826         ;;
1827     esac
1828
1829     AC_SUBST(hardtop)
1830
1831     AC_MSG_RESULT($hardtop)
1832 ])
1833
1834 # GHC_CONVERT_CPU(cpu, target_var)
1835 # --------------------------------
1836 # converts cpu from gnu to ghc naming, and assigns the result to $target_var
1837 AC_DEFUN([GHC_CONVERT_CPU],[
1838 case "$1" in
1839   alpha*)
1840     $2="alpha"
1841     ;;
1842   arm*)
1843     $2="arm"
1844     ;;
1845   hppa1.1*)
1846     $2="hppa1_1"
1847     ;;
1848   hppa*)
1849     $2="hppa"
1850     ;;
1851   i386|i486|i586|i686)
1852     $2="i386"
1853     ;;
1854   ia64)
1855     $2="ia64"
1856     ;;
1857   m68k*)
1858     $2="m68k"
1859     ;;
1860   mipseb*)
1861     $2="mipseb"
1862     ;;
1863   mipsel*)
1864     $2="mipsel"
1865     ;;
1866   mips*)
1867     $2="mips"
1868     ;;
1869   powerpc64*)
1870     $2="powerpc64"
1871     ;;
1872   powerpc*)
1873     $2="powerpc"
1874     ;;
1875   rs6000)
1876     $2="rs6000"
1877     ;;
1878   s390x*)
1879     $2="s390x"
1880     ;;
1881   s390*)
1882     $2="s390"
1883     ;;
1884   sparc64*)
1885     $2="sparc64"
1886     ;;
1887   sparc*)
1888     $2="sparc"
1889     ;;
1890   vax)
1891     $2="vax"
1892     ;;
1893   x86_64)
1894     $2="x86_64"
1895     ;;
1896   *)
1897     echo "Unknown CPU $1"
1898     exit 1
1899     ;;
1900   esac
1901 ])
1902
1903 # GHC_CONVERT_VENDOR(vendor, target_var)
1904 # --------------------------------
1905 # converts vendor from gnu to ghc naming, and assigns the result to $target_var
1906 AC_DEFUN([GHC_CONVERT_VENDOR],[
1907   case "$1" in
1908   pc|gentoo|w64) # like i686-pc-linux-gnu, i686-gentoo-freebsd8, x86_64-w64-mingw32
1909     $2="unknown"
1910     ;;
1911   softfloat) # like armv5tel-softfloat-linux-gnueabi
1912     $2="unknown"
1913     ;;
1914   *)
1915     #pass thru by default
1916     $2="$1"
1917     ;;
1918   esac
1919 ])
1920
1921 # GHC_CONVERT_OS(os, converted_cpu, target_var)
1922 # --------------------------------
1923 # converts os from gnu to ghc naming, and assigns the result to $target_var
1924 AC_DEFUN([GHC_CONVERT_OS],[
1925 case "$1-$2" in
1926   darwin10-arm|darwin11-i386)
1927     $3="ios"
1928     ;;
1929   *)
1930     case "$1" in
1931       linux-android*)
1932         $3="linux-android"
1933         ;;
1934       linux-*|linux)
1935         $3="linux"
1936         ;;
1937       # As far as I'm aware, none of these have relevant variants
1938       freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
1939         $3="$1"
1940         ;;
1941       freebsd*) # like i686-gentoo-freebsd7
1942                 #      i686-gentoo-freebsd8
1943                 #      i686-gentoo-freebsd8.2
1944         $3="freebsd"
1945         ;;
1946       nto-qnx*)
1947         $3="nto-qnx"
1948         ;;
1949       *)
1950         echo "Unknown OS $1"
1951         exit 1
1952         ;;
1953       esac
1954       ;;
1955   esac
1956 ])
1957
1958 # BOOTSTRAPPING_GHC_INFO_FIELD
1959 # --------------------------------
1960 # Set the variable $1 to the value of the ghc --info field $2.
1961 AC_DEFUN([BOOTSTRAPPING_GHC_INFO_FIELD],[
1962 $1=`"$WithGhc" --info | grep "^ ,(\"$2\"," | sed -e 's/.*","//' -e 's/")$//'`
1963 tmp=${$1#\$topdir/}
1964 if test "${$1}" != "$tmp"
1965 then
1966     topdir=`"$WithGhc" --print-libdir | sed 's#\\\\#/#g'`
1967     $1="$topdir/$tmp"
1968 fi
1969 AC_SUBST($1)
1970 ])
1971
1972 # LIBRARY_VERSION(lib, [dir])
1973 # --------------------------------
1974 # Gets the version number of a library.
1975 # If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3
1976 # $2 points to the directory under libraries/
1977 AC_DEFUN([LIBRARY_VERSION],[
1978 dir=m4_default([$2],[$1])
1979 LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/${dir}/$1.cabal | sed "s/.* //"`
1980 AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION)
1981 ])
1982
1983 # XCODE_VERSION()
1984 # --------------------------------
1985 # Gets the version number of XCode, if on a Mac
1986 AC_DEFUN([XCODE_VERSION],[
1987     if test "$TargetOS_CPP" = "darwin"
1988     then
1989         AC_MSG_CHECKING(XCode version)
1990         XCodeVersion=`xcodebuild -version | grep Xcode | sed "s/Xcode //"`
1991         # Old XCode versions don't actually give the XCode version
1992         if test "$XCodeVersion" = ""
1993         then
1994             AC_MSG_RESULT(not found (too old?))
1995             XCodeVersion1=0
1996             XCodeVersion2=0
1997         else
1998             AC_MSG_RESULT($XCodeVersion)
1999             XCodeVersion1=`echo "$XCodeVersion" | sed 's/\..*//'`
2000             changequote(, )dnl
2001             XCodeVersion2=`echo "$XCodeVersion" | sed 's/[^.]*\.\([^.]*\).*/\1/'`
2002             changequote([, ])dnl
2003             AC_MSG_NOTICE(XCode version component 1: $XCodeVersion1)
2004             AC_MSG_NOTICE(XCode version component 2: $XCodeVersion2)
2005         fi
2006     fi
2007 ])
2008
2009 # FIND_LLVM_PROG()
2010 # --------------------------------
2011 # Find where the llvm tools are. We have a special function to handle when they
2012 # are installed with a version suffix (e.g., llc-3.1).
2013 #
2014 # $1 = the variable to set
2015 # $2 = the with option name
2016 # $3 = the command to look for
2017 #
2018 AC_DEFUN([FIND_LLVM_PROG],[
2019     FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([$1], [$2], [$3])
2020     if test "$$1" == ""; then
2021         save_IFS=$IFS
2022         IFS=":;"
2023         for p in ${PATH}; do
2024             if test -d "${p}"; then
2025                 $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`
2026                 if test -n "$$1"; then
2027                     break
2028                 fi
2029             fi
2030         done
2031         IFS=$save_IFS
2032     fi
2033 ])
2034
2035 # FIND_GCC()
2036 # --------------------------------
2037 # Finds where gcc is
2038 #
2039 # $1 = the variable to set
2040 # $2 = the with option name
2041 # $3 = the command to look for
2042 AC_DEFUN([FIND_GCC],[
2043     if test "$TargetOS_CPP" = "darwin" &&
2044        test "$XCodeVersion1" -eq 4 &&
2045        test "$XCodeVersion2" -lt 2
2046     then
2047         # In Xcode 4.1, 'gcc-4.2' is the gcc legacy backend (rather
2048         # than the LLVM backend). We prefer the legacy gcc, but in
2049         # Xcode 4.2 'gcc-4.2' was removed.
2050         FP_ARG_WITH_PATH_GNU_PROG([$1], [gcc-4.2], [gcc-4.2])
2051     elif test "$windows" = YES
2052     then
2053         $1="$CC"
2054     else
2055         FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([$1], [$2], [$3])
2056         # From Xcode 5 on, OS X command line tools do not include gcc anymore. Use clang.
2057         if test -z "$$1"
2058         then
2059             FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([$1], [clang], [clang])
2060         fi
2061         if test -z "$$1"
2062         then
2063             AC_MSG_ERROR([cannot find $3 nor clang in your PATH])
2064         fi
2065     fi
2066     AC_SUBST($1)
2067 ])
2068
2069 # LocalWords:  fi