Remove dead code, now that -fvia-c is a no-op
[ghc-hetmet.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], [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], [HostOS])
60     fi
61
62     if test "$target_alias" = ""
63     then
64         if test "$bootstrap_target" != ""
65         then
66             target=$bootstrap_target
67             echo "Target platform inferred as: $target"
68         else
69             echo "Can't work out target platform"
70             exit 1
71         fi
72
73         TargetArch=`echo "$target" | sed 's/-.*//'`
74         TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'`
75         TargetOS=`echo "$target" | sed 's/.*-//'`
76     else
77         GHC_CONVERT_CPU([$target_cpu], [TargetArch])
78         GHC_CONVERT_VENDOR([$target_vendor], [TargetVendor])
79         GHC_CONVERT_OS([$target_os], [TargetOS])
80     fi
81 ])
82
83
84 # FPTOOLS_SET_C_LD_FLAGS
85 # ----------------------------------
86 # Set the C, LD and CPP flags for a given platform
87 # $1 is the platform
88 # $2 is the name of the CC flags variable
89 # $3 is the name of the linker flags variable when linking with gcc
90 # $4 is the name of the linker flags variable when linking with ld
91 # $5 is the name of the CPP flags variable
92 AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
93 [
94     AC_MSG_CHECKING([Setting up $2, $3, $4 and $5])
95     case $$1 in
96     i386-apple-darwin)
97         # By default, gcc on OS X will generate SSE
98         # instructions, which need things 16-byte aligned,
99         # but we don't 16-byte align things. Thus drop
100         # back to generic i686 compatibility. Trac #2983.
101         $2="$$2 -march=i686 -m32"
102         $3="$$3 -march=i686 -m32"
103         $4="$$4 -arch i386"
104         $5="$$5 -march=i686 -m32"
105         ;;
106     x86_64-apple-darwin)
107         $2="$$2 -m64"
108         $3="$$3 -m64"
109         $4="$$4 -arch x86_64"
110         $5="$$5 -m64"
111         ;;
112     esac
113
114     # If gcc knows about the stack protector, turn it off.
115     # Otherwise the stack-smash handler gets triggered.
116     echo 'int main(void) {return 0;}' > conftest.c
117     if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
118     then
119         $2="$$2 -fno-stack-protector"
120     fi
121     rm -f conftest.c conftest.o
122     AC_MSG_RESULT([done])
123 ])
124
125
126 # FP_VISIBILITY_HIDDEN
127 # ----------------------------------
128 # Is the visibility hidden attribute supported?
129 AC_DEFUN([FP_VISIBILITY_HIDDEN],
130 [
131     AC_MSG_CHECKING([whether __attribute__((visibility("hidden"))) is supported])
132     echo '__attribute__((visibility("hidden"))) void foo(void) {}' > conftest.c
133     if $CC -Wall -Werror -c conftest.c > /dev/null 2>&1
134     then
135         AC_MSG_RESULT([yes])
136         AC_DEFINE(HAS_VISIBILITY_HIDDEN, 1, [Has visibility hidden])
137     else
138         AC_MSG_RESULT([no])
139     fi
140     rm -f conftest.c conftest.o
141 ])
142
143
144 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
145 # ----------------------------------
146 # Little endian Arm on Linux with some ABIs has big endian word order
147 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
148 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
149   [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
150     [AC_COMPILE_IFELSE(
151       [AC_LANG_PROGRAM(
152         [#include <endian.h>],
153         [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
154              return 0;
155          #else
156              not float word order big endian
157          #endif]
158       )],
159       [fptools_cv_float_word_order_bigendian=yes],
160       [fptools_cv_float_word_order_bigendian=no])
161     ])
162   case $fptools_cv_float_word_order_bigendian in
163       yes)
164           AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
165           [Define to 1 if your processor stores words of floats with
166            the most significant byte first]) ;;
167   esac
168 ])
169
170
171 # FP_EVAL_STDERR(COMMAND)
172 # -----------------------
173 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
174 # into the file conftest.err and the exit status in the variable fp_status.
175 AC_DEFUN([FP_EVAL_STDERR],
176 [{ (eval $1) 2>conftest.er1
177   fp_status=$?
178   grep -v '^ *+' conftest.er1 >conftest.err
179   rm -f conftest.er1
180   (exit $fp_status); }[]dnl
181 ])# FP_EVAL_STDERR
182
183
184 # FP_ARG_WITH_PATH_GNU_PROG
185 # --------------------
186 # XXX
187 #
188 # $1 = the command to look for
189 # $2 = the variable to set
190 #
191 AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG],
192 [
193 AC_ARG_WITH($2,
194 [AC_HELP_STRING([--with-$2=ARG],
195         [Use ARG as the path to $2 [default=autodetect]])],
196 [
197     if test "$HostOS" = "mingw32"
198     then
199         AC_MSG_WARN([Request to use $withval will be ignored])
200     else
201         $1=$withval
202     fi
203 ],
204 [
205     if test "$HostOS" != "mingw32"
206     then
207         AC_PATH_PROG([$1], [$2])
208         if test -z "$$1"
209         then
210             AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link])
211         fi
212     fi
213 ]
214 )
215 ]) # FP_ARG_WITH_PATH_GNU_PROG
216
217
218 # FP_PROG_CONTEXT_DIFF
219 # --------------------
220 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
221 #
222 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
223 #
224 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
225 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
226 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
227 [echo foo > conftest1
228 echo foo > conftest2
229 fp_cv_context_diff=no
230 for fp_var in '-U 1' '-u1' '-C 1' '-c1'
231 do
232   if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
233     fp_cv_context_diff="diff $fp_var"
234     break
235   fi
236 done])
237 if test x"$fp_cv_context_diff" = xno; then
238    AC_MSG_ERROR([cannot figure out how to do context diffs])
239 fi
240 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
241 ])# FP_PROG_CONTEXT_DIFF
242
243
244 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
245 # --------------------------------------------------------
246 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
247 # compilation. Execute IF-FAILS when unable to determine the value. Works for
248 # cross-compilation, too.
249 #
250 # Implementation note: We are lazy and use an internal autoconf macro, but it
251 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
252 # little risk.
253 AC_DEFUN([FP_COMPUTE_INT],
254 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
255 ])# FP_COMPUTE_INT
256
257
258 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
259 # ------------------------------------------------------------------
260 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
261 # given type. Defines ALIGNMENT_TYPE.
262 AC_DEFUN([FP_CHECK_ALIGNMENT],
263 [AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [],
264                [AC_FATAL([$0: requires literal arguments])])[]dnl
265 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
266 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
267 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
268 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
269   FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
270                  [fp_Cache],
271                  [AC_INCLUDES_DEFAULT([$3])],
272                  [AC_MSG_ERROR([cannot compute alignment ($1)
273 See `config.log' for more details.], [77])])
274 else
275   fp_Cache=0
276 fi])[]dnl
277 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
278 m4_popdef([fp_Cache])[]dnl
279 ])# FP_CHECK_ALIGNMENT
280
281
282 # FP_LEADING_UNDERSCORE
283 # ---------------------
284 # Test for determining whether symbol names have a leading underscore. We assume
285 # that they _haven't_ if anything goes wrong. Sets the output variable
286 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
287 #
288 # Some nlist implementations seem to try to be compatible by ignoring a leading
289 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
290 # checking for *no* leading underscore first. Sigh.  --SDM
291 #
292 # Similarly on OpenBSD, but this test doesn't help. -- dons
293 AC_DEFUN([FP_LEADING_UNDERSCORE],
294 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
295 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
296 # Hack!: nlist() under Digital UNIX insist on there being an _,
297 # but symbol table listings shows none. What is going on here?!?
298 #
299 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
300 # the underscoredness of that "platform"
301 case $HostPlatform in
302 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
303   case $build in
304     i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
305     *) fptools_cv_leading_underscore=no ;;
306   esac ;;
307 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
308 *cygwin32) fptools_cv_leading_underscore=yes;;
309 *mingw32) fptools_cv_leading_underscore=yes;;
310
311     # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
312 x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
313
314 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
315 #include <nlist.h>
316 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
317 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
318 #endif
319
320 int main(argc, argv)
321 int argc;
322 char **argv;
323 {
324 #ifdef HAVE_NLIST_H
325     if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
326         exit(1);
327     if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
328         exit(0);
329 #endif
330     exit(1);
331 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
332 ;;
333 esac]);
334 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
335 if test x"$fptools_cv_leading_underscore" = xyes; then
336    AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
337 fi])# FP_LEADING_UNDERSCORE
338
339
340 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
341 # ----------------------------------------------------------------------------------
342 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
343 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
344 AC_DEFUN([FP_COMPARE_VERSIONS],
345 [fp_version1=$1; fp_version2=$3
346 fp_save_IFS=$IFS; IFS='.'
347 while test x"$fp_version1" != x || test x"$fp_version2" != x
348 do
349
350   set dummy $fp_version1; shift
351   fp_num1=""
352   test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
353   test x"$fp_num1" = x && fp_num1="0"
354   fp_version1="[$]*"
355
356   set dummy $fp_version2; shift
357   fp_num2=""
358   test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
359   test x"$fp_num2" = x && fp_num2="0"
360   fp_version2="[$]*"
361
362   test "$fp_num1" = "$fp_num2" || break;
363 done
364 IFS=$fp_save_IFS
365 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
366 ])# FP_COMPARE_VERSIONS
367
368
369 dnl
370 dnl Check for GreenCard and version.
371 dnl
372 AC_DEFUN([FPTOOLS_GREENCARD],
373 [
374 AC_PATH_PROG(GreenCardCmd,greencard)
375 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
376 changequote(, )dnl
377 [if test x"$GreenCardCmd" != x; then
378    fptools_cv_greencard_version="`$GreenCardCmd --version |
379                           grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
380 else
381    fptools_cv_greencard_version=""
382 fi
383 changequote([, ])dnl
384 ])
385 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
386   [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
387 GreenCardVersion=$fptools_cv_greencard_version
388 AC_SUBST(GreenCardVersion)
389 ])
390
391 dnl
392 dnl Check for Happy and version.  If we're building GHC, then we need
393 dnl at least Happy version 1.14.  If there's no installed Happy, we look
394 dnl for a happy source tree and point the build system at that instead.
395 dnl
396 AC_DEFUN([FPTOOLS_HAPPY],
397 [AC_PATH_PROG(HappyCmd,happy,)
398 # Happy is passed to Cabal, so we need a native path
399 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
400    test "${OSTYPE}"      != "msys"                  && \
401    test "${HappyCmd}"    != ""
402 then
403     # Canonicalise to <drive>:/path/to/gcc
404     HappyCmd=`cygpath -m "${HappyCmd}"`
405     AC_MSG_NOTICE([normalized happy command to $HappyCmd])
406 fi
407
408 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
409 changequote(, )dnl
410 [if test x"$HappyCmd" != x; then
411    fptools_cv_happy_version=`"$HappyCmd" -v |
412                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'` ;
413 else
414    fptools_cv_happy_version="";
415 fi;
416 changequote([, ])dnl
417 ])
418 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
419 then
420     FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.16],
421       [AC_MSG_ERROR([Happy version 1.16 or later is required to compile GHC.])])[]
422 fi
423 HappyVersion=$fptools_cv_happy_version;
424 AC_SUBST(HappyVersion)
425 ])
426
427 dnl
428 dnl Check for Alex and version.  If we're building GHC, then we need
429 dnl at least Alex version 2.0.1.
430 dnl
431 AC_DEFUN([FPTOOLS_ALEX],
432 [
433 AC_PATH_PROG(AlexCmd,alex,)
434 # Alex is passed to Cabal, so we need a native path
435 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
436    test "${OSTYPE}"      != "msys"                  && \
437    test "${AlexCmd}"     != ""
438 then
439     # Canonicalise to <drive>:/path/to/gcc
440     AlexCmd=`cygpath -m "${AlexCmd}"`
441 fi
442
443 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
444 changequote(, )dnl
445 [if test x"$AlexCmd" != x; then
446    fptools_cv_alex_version=`"$AlexCmd" -v |
447                           grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'` ;
448 else
449    fptools_cv_alex_version="";
450 fi;
451 changequote([, ])dnl
452 ])
453 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
454 then
455     FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.1.0],
456       [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[]
457 fi
458 AlexVersion=$fptools_cv_alex_version;
459 AC_SUBST(AlexVersion)
460 ])
461
462
463 # FP_PROG_LD_X
464 # ------------
465 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
466 # variable's value is empty.
467 AC_DEFUN([FP_PROG_LD_X],
468 [
469 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
470 [echo 'foo() {}' > conftest.c
471 ${CC-cc} -c conftest.c
472 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
473    fp_cv_ld_x=yes
474 else
475    fp_cv_ld_x=no
476 fi
477 rm -rf conftest*])
478 if test "$fp_cv_ld_x" = yes; then
479   LdXFlag=-x
480 else
481   LdXFlag=
482 fi
483 AC_SUBST([LdXFlag])
484 ])# FP_PROG_LD_X
485
486
487 # FP_PROG_LD_IS_GNU
488 # -----------------
489 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
490 # GNU ld or not.
491 AC_DEFUN([FP_PROG_LD_IS_GNU],
492 [
493 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
494 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
495   fp_cv_gnu_ld=yes
496 else
497   fp_cv_gnu_ld=no
498 fi])
499 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
500 ])# FP_PROG_LD_IS_GNU
501
502
503 # FP_PROG_AR
504 # ----------
505 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
506 # version of it. Exits if no ar can be found
507 AC_DEFUN([FP_PROG_AR],
508 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
509 if test -z "$fp_prog_ar_raw"; then
510   AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
511 fi
512 fp_prog_ar="$fp_prog_ar_raw"
513 case $HostPlatform in
514   *mingw32) if test x${OSTYPE} != xmsys; then
515               fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`"
516               AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
517             fi
518             ;;
519 esac
520 ])# FP_PROG_AR
521
522
523 # FP_PROG_AR_IS_GNU
524 # -----------------
525 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
526 AC_DEFUN([FP_PROG_AR_IS_GNU],
527 [AC_REQUIRE([FP_PROG_AR])
528 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
529 [if "$fp_prog_ar_raw" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
530   fp_cv_prog_ar_is_gnu=yes
531 else
532   fp_cv_prog_ar_is_gnu=no
533 fi])
534 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
535 AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`])
536 ])# FP_PROG_AR_IS_GNU
537
538
539 # FP_PROG_AR_SUPPORTS_ATFILE
540 # -----------------
541 # Sets fp_prog_ar_supports_atfile to yes or no, depending on whether
542 # or not it supports the @file syntax
543 AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE],
544 [AC_REQUIRE([FP_PROG_AR])
545  AC_REQUIRE([FP_PROG_AR_ARGS])
546 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports @file], [fp_cv_prog_ar_supports_atfile],
547 [
548 rm -f conftest*
549 touch conftest.file
550 echo conftest.file  > conftest.atfile
551 echo conftest.file >> conftest.atfile
552 "$fp_prog_ar_raw" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1
553 fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar_raw" t conftest.a 2> /dev/null | grep -c conftest.file`
554 rm -f conftest*
555 if test "$fp_prog_ar_supports_atfile_tmp" -eq 2
556 then
557   fp_cv_prog_ar_supports_atfile=yes
558 else
559   fp_cv_prog_ar_supports_atfile=no
560 fi])
561 fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile
562 AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`])
563 ])# FP_PROG_AR_SUPPORTS_ATFILE
564
565 # FP_PROG_AR_ARGS
566 # ---------------
567 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
568 # to a non-Cygwin invocation of ar including these arguments.
569 AC_DEFUN([FP_PROG_AR_ARGS],
570 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
571 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
572 [
573 # GNU ar needs special treatment: it appears to have problems with
574 # object files with the same name if you use the 's' modifier, but
575 # simple 'ar q' works fine, and doesn't need a separate ranlib.
576 if test $fp_prog_ar_is_gnu = yes; then
577   fp_cv_prog_ar_args="q"
578 else
579   touch conftest.dummy
580   for fp_var in clqsZ clqs cqs clq cq ; do
581      rm -f conftest.a
582      if "$fp_prog_ar_raw" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
583         fp_cv_prog_ar_args=$fp_var
584         break
585      fi
586   done
587   rm -f conftest*
588   if test -z "$fp_cv_prog_ar_args"; then
589     AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
590   fi
591 fi])
592 fp_prog_ar_args=$fp_cv_prog_ar_args
593 AC_SUBST([ArCmd], ["$fp_prog_ar"])
594 AC_SUBST([ArArgs], ["$fp_prog_ar_args"])
595
596 ])# FP_PROG_AR_ARGS
597
598
599 # FP_PROG_AR_NEEDS_RANLIB
600 # -----------------------
601 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
602 # to ":" otherwise.
603 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
604 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
605 AC_REQUIRE([FP_PROG_AR_ARGS])
606 AC_REQUIRE([AC_PROG_CC])
607 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
608 [if test $fp_prog_ar_is_gnu = yes; then
609   fp_cv_prog_ar_needs_ranlib=no
610 elif echo $TargetPlatform | grep "^.*-apple-darwin$"  > /dev/null 2> /dev/null; then
611   # It's quite tedious to check for Apple's crazy timestamps in .a files,
612   # so we hardcode it.
613   fp_cv_prog_ar_needs_ranlib=yes
614 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
615   fp_cv_prog_ar_needs_ranlib=no
616 else
617   fp_cv_prog_ar_needs_ranlib=yes
618 fi])
619 if test $fp_cv_prog_ar_needs_ranlib = yes; then
620    AC_PROG_RANLIB
621 else
622   RANLIB=":"
623   AC_SUBST([RANLIB])
624 fi
625 ])# FP_PROG_AR_NEEDS_RANLIB
626
627
628 # FP_PROG_AR_SUPPORTS_INPUT
629 # -------------------------
630 # Sets the output variable ArSupportsInput to "-input" or "", depending on
631 # whether ar supports -input flag is supported or not.
632 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
633 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
634 AC_REQUIRE([FP_PROG_AR_ARGS])
635 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
636 [fp_cv_prog_ar_supports_input=no
637 if test $fp_prog_ar_is_gnu = no; then
638   rm -f conftest*
639   touch conftest.lst
640   if FP_EVAL_STDERR(["$fp_prog_ar_raw" $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
641     test -s conftest.err || fp_cv_prog_ar_supports_input=yes
642   fi
643   rm -f conftest*
644 fi])
645 if test $fp_cv_prog_ar_supports_input = yes; then
646     ArSupportsInput="-input"
647 else
648     ArSupportsInput=""
649 fi
650 AC_SUBST([ArSupportsInput])
651 ])# FP_PROG_AR_SUPPORTS_INPUT
652
653
654 dnl
655 dnl AC_SHEBANG_PERL - can we she-bang perl?
656 dnl
657 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
658 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
659 [echo "#!$PerlCmd"'
660 exit $1;
661 ' > conftest
662 chmod u+x conftest
663 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
664 if test $? -ne 69; then
665    fptools_cv_shebang_perl=yes
666 else
667    fptools_cv_shebang_perl=no
668 fi
669 rm -f conftest
670 ])])
671
672
673 # FP_HAVE_GCC
674 # -----------
675 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
676 # output variables HaveGcc and GccVersion.
677 AC_DEFUN([FP_HAVE_GCC],
678 [AC_REQUIRE([AC_PROG_CC])
679 if test -z "$GCC"; then
680    fp_have_gcc=NO
681 else
682    fp_have_gcc=YES
683 fi
684 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
685   AC_MSG_ERROR([gcc is required])
686 fi
687 GccLT34=
688 AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
689 [if test "$fp_have_gcc" = "YES"; then
690    fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
691    FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
692      [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
693    # See #2770: gcc 2.95 doesn't work any more, apparently.  There probably
694    # isn't a very good reason for that, but for now just make configure
695    # fail.
696    FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
697  else
698    fp_cv_gcc_version="not-installed"
699  fi
700 ])
701 AC_SUBST([HaveGcc], [$fp_have_gcc])
702 AC_SUBST([GccVersion], [$fp_cv_gcc_version])
703 AC_SUBST(GccLT34)
704 ])# FP_HAVE_GCC
705
706 dnl Small feature test for perl version. Assumes PerlCmd
707 dnl contains path to perl binary.
708 dnl
709 dnl (Perl versions prior to v5.6 does not contain the string "v5";
710 dnl instead they display version strings such as "version 5.005".)
711 dnl
712 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
713 [$PerlCmd -v >conftest.out 2>&1
714    if grep "v5" conftest.out >/dev/null 2>&1; then
715       :
716    else
717       AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
718    fi
719 rm -fr conftest*
720 ])
721
722
723 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
724 #               [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
725 # -----------------------------------------------------
726 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
727 # of PROG-TO-CHECK-FOR when found.
728 AC_DEFUN([FP_CHECK_PROG],
729 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
730 )# FP_CHECK_PROC
731
732
733 # FP_PROG_FIND
734 # ------------
735 # Find a non-WinDoze version of the "find" utility.
736 AC_DEFUN([FP_PROG_FIND],
737 [AC_PATH_PROGS([fp_prog_find], [gfind find], find)
738 echo foo > conftest.txt
739 $fp_prog_find conftest.txt -print > conftest.out 2>&1
740 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
741   # OK, looks like a real "find".
742   case $HostPlatform in
743     *mingw32)
744       if test x${OSTYPE} != xmsys
745       then
746             fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
747         AC_MSG_NOTICE([normalized find command to $fp_prog_find])
748       fi ;;
749     *) ;;
750   esac
751   FindCmd="$fp_prog_find"
752 else
753   # Found a poor WinDoze version of "find", ignore it.
754   AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
755   FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
756 fi
757 rm -f conftest.txt conftest.out
758 AC_SUBST([FindCmd])[]dnl
759 ])# FP_PROG_FIND
760
761
762 # FP_PROG_SORT
763 # ------------
764 # Find a Unix-like sort
765 AC_DEFUN([FP_PROG_SORT],
766 [AC_PATH_PROG([fp_prog_sort], [sort])
767 echo conwip > conftest.txt
768 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
769 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
770   # The goods
771   SortCmd="$fp_prog_sort"
772 else
773   # Summink else..pick next one.
774   AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
775   FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
776 fi
777 rm -f conftest.txt conftest.out
778 AC_SUBST([SortCmd])[]dnl
779 ])# FP_PROG_SORT
780
781 dnl
782 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
783 dnl values of the second argument to the result of running
784 dnl the commands given by the third. It does not cache its
785 dnl result, so it is suitable for checks which should be
786 dnl run every time.
787 dnl
788 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
789 [AC_MSG_CHECKING([$1])
790  $3
791  AC_MSG_RESULT([$][$2])
792 ])
793
794 dnl
795 dnl FPTOOLS_GHC_VERSION(version)
796 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
797 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
798 dnl
799 dnl Test for version of installed ghc.  Uses $GHC.
800 dnl [original version pinched from c2hs]
801 dnl
802 AC_DEFUN([FPTOOLS_GHC_VERSION],
803 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
804 ["${WithGhc-ghc}" --version > conftestghc 2>&1
805   cat conftestghc >&AS_MESSAGE_LOG_FD
806 #Useless Use Of cat award...
807   fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
808   rm -fr conftest*
809   if test "[$]fptools_version_of_ghc" = ""
810   then
811     fptools_version_of_ghc='unknown'
812   fi
813 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
814 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
815 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
816 #
817 if test "[$]fptools_version_of_ghc[_pl]" = ""
818 then
819   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
820   fptools_version_of_ghc[_pl]="0"
821 else
822   fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
823 fi
824 #
825 ifelse($#, [1], [dnl
826 [$1]="[$]fptools_version_of_ghc[_all]"
827 ], $#, [2], [dnl
828 [$1]="[$]fptools_version_of_ghc[_major]"
829 [$2]="[$]fptools_version_of_ghc[_minor]"
830 ], $#, [3], [dnl
831 [$1]="[$]fptools_version_of_ghc[_major]"
832 [$2]="[$]fptools_version_of_ghc[_minor]"
833 [$3]="[$]fptools_version_of_ghc[_pl]"
834 ], $#, [4], [dnl
835 [$1]="[$]fptools_version_of_ghc[_all]"
836 [$2]="[$]fptools_version_of_ghc[_major]"
837 [$3]="[$]fptools_version_of_ghc[_minor]"
838 [$4]="[$]fptools_version_of_ghc[_pl]"
839 ])
840 ])
841 ])dnl
842
843
844 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
845 # ---------------------------------------------------------------------------------
846 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
847 # additional flexibility of specifying the PROLOGUE and BODY.
848 AC_DEFUN([FP_CHECK_FUNC],
849 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
850 AC_CACHE_CHECK([for $1], fp_func,
851 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
852                 [AS_VAR_SET(fp_func, yes)],
853                 [AS_VAR_SET(fp_func, no)])])
854 AS_IF([test AS_VAR_GET(fp_func) = yes],
855       [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
856                 [Define to 1 if you have the `]$1[' function.]) $4],
857       [$5])dnl
858 AS_VAR_POPDEF([fp_func])dnl
859 ])# FP_CHECK_FUNC
860
861
862 # FP_GEN_DOCBOOK_XML
863 # ------------------
864 # Generates a DocBook XML V4.5 document in conftest.xml.
865 #
866 # It took a lot of experimentation to find a document that will cause
867 # xsltproc to fail with an error code when the relevant
868 # stylesheets/DTDs are not found.  I couldn't make xsltproc fail with
869 # a single-file document, it seems a multi-file document is needed.
870 # -- SDM 2009-06-03
871 #
872 AC_DEFUN([FP_GEN_DOCBOOK_XML],
873 [rm -f conftest.xml conftest-book.xml
874 cat > conftest.xml << EOF
875 <?xml version="1.0" encoding="iso-8859-1"?>
876 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
877    "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [[
878 <!ENTITY conftest-book SYSTEM "conftest-book.xml">
879 ]]>
880 <book id="test">
881 &conftest-book;
882 </book>
883 EOF
884 cat >conftest-book.xml << EOF
885 <?xml version="1.0" encoding="iso-8859-1"?>
886   <title>A DocBook &ldquo;Test Document&rdquo;</title>
887   <chapter id="id-one">
888     <title>A Chapter Title</title>
889     <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
890   </chapter>
891   <chapter id="id-two">
892     <title>Another Chapter Title</title>
893     <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
894   </chapter>
895 EOF
896 ]) # FP_GEN_DOCBOOK_XML
897
898
899 # FP_PROG_DBLATEX
900 # ----------------
901 # Sets the output variable DblatexCmd to the full path of dblatex,
902 # which we use for building PDF and PS docs.
903 # DblatexCmd is empty if dblatex could not be found.
904 AC_DEFUN([FP_PROG_DBLATEX],
905 [AC_PATH_PROG([DblatexCmd], [dblatex])
906 if test -z "$DblatexCmd"; then
907   AC_MSG_WARN([cannot find dblatex in your PATH, you will not be able to build the PDF and PS documentation])
908 fi
909 ])# FP_PROG_DBLATEX
910
911
912 # FP_PROG_XSLTPROC
913 # ----------------
914 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
915 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
916 AC_DEFUN([FP_PROG_XSLTPROC],
917 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
918 if test -z "$XsltprocCmd"; then
919   AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the HTML documentation])
920 fi
921 ])# FP_PROG_XSLTPROC
922
923
924 # FP_DOCBOOK_XSL
925 # ----------------------------
926 # Check that we can process a DocBook XML document to HTML using xsltproc.
927 AC_DEFUN([FP_DOCBOOK_XSL],
928 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
929 if test -n "$XsltprocCmd"; then
930   AC_CACHE_CHECK([for DocBook XSL stylesheet], fp_cv_dir_docbook_xsl,
931   [FP_GEN_DOCBOOK_XML
932   fp_cv_dir_docbook_xsl=no
933   if $XsltprocCmd --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl conftest.xml > /dev/null 2>&1; then
934      fp_cv_dir_docbook_xsl=yes
935   fi
936   rm -rf conftest*])
937 fi
938 if test x"$fp_cv_dir_docbook_xsl" = xno; then
939   AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
940   HAVE_DOCBOOK_XSL=NO
941 else
942   HAVE_DOCBOOK_XSL=YES
943 fi
944 AC_SUBST([HAVE_DOCBOOK_XSL])
945 ])# FP_DOCBOOK_XSL
946
947
948 # FP_PROG_XMLLINT
949 # ----------------
950 # Sets the output variable XmllintCmd to the full path of the XSLT processor
951 # xmllint. XmllintCmd is empty if xmllint could not be found.
952 AC_DEFUN([FP_PROG_XMLLINT],
953 [AC_PATH_PROG([XmllintCmd], [xmllint])
954 if test -z "$XmllintCmd"; then
955   AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
956 fi
957 ])# FP_PROG_XMLLINT
958
959
960 # FP_CHECK_DOCBOOK_DTD
961 # --------------------
962 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
963 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
964 if test -n "$XmllintCmd"; then
965   AC_MSG_CHECKING([for DocBook DTD])
966   FP_GEN_DOCBOOK_XML
967   if $XmllintCmd --nonet --valid --noout conftest.xml ; then
968     AC_MSG_RESULT([ok])
969   else
970     AC_MSG_RESULT([failed])
971     AC_MSG_WARN([cannot find a DTD for DocBook XML V4.5, you will not be able to validate your documentation])
972     AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
973   fi
974   rm -rf conftest*
975 fi
976 ])# FP_CHECK_DOCBOOK_DTD
977
978
979 # FP_GEN_FO
980 # ------------------
981 # Generates a formatting objects document in conftest.fo.
982 AC_DEFUN([FP_GEN_FO],
983 [rm -f conftest.fo
984 cat > conftest.fo << EOF
985 <?xml version="1.0"?>
986 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
987   <fo:layout-master-set>
988     <fo:simple-page-master master-name="blank">
989       <fo:region-body/>
990     </fo:simple-page-master>
991   </fo:layout-master-set>
992   <fo:page-sequence master-reference="blank">
993     <fo:flow flow-name="xsl-region-body">
994       <fo:block>
995         Test!
996       </fo:block>
997     </fo:flow>
998   </fo:page-sequence>
999 </fo:root>
1000 EOF
1001 ]) # FP_GEN_FO
1002
1003
1004 # FP_PROG_FOP
1005 # -----------
1006 # Set the output variable 'FopCmd' to the first working 'fop' in the current
1007 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
1008 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
1009 AC_DEFUN([FP_PROG_FOP],
1010 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
1011 if test -n "$FopCmd1"; then
1012   AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
1013     [FP_GEN_FO
1014     if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
1015       fp_cv_fop_usability=yes
1016     else
1017       fp_cv_fop_usability=no
1018     fi
1019     rm -rf conftest*])
1020   if test x"$fp_cv_fop_usability" = xyes; then
1021      FopCmd=$FopCmd1
1022   fi
1023 fi
1024 if test -z "$FopCmd"; then
1025   AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
1026   FopCmd=$FopCmd2
1027 fi
1028 AC_SUBST([FopCmd])
1029 ])# FP_PROG_FOP
1030
1031
1032 # FP_PROG_HSTAGS
1033 # ----------------
1034 # Sets the output variable HstagsCmd to the full Haskell tags program path.
1035 # HstagsCmd is empty if no such program could be found.
1036 AC_DEFUN([FP_PROG_HSTAGS],
1037 [AC_PATH_PROG([HstagsCmd], [hasktags])
1038 if test -z "$HstagsCmd"; then
1039   AC_MSG_WARN([cannot find hasktags in your PATH, you will not be able to build the tags])
1040 fi
1041 ])# FP_PROG_HSTAGS
1042
1043
1044 # FP_PROG_GHC_PKG
1045 # ----------------
1046 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
1047 # WithGhc. Sets the output variable GhcPkgCmd.
1048 AC_DEFUN([FP_PROG_GHC_PKG],
1049 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
1050 [
1051 # If we are told to use ghc-stage2, then we're using an in-tree
1052 # compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2,
1053 # so we sed off -stage[0-9]$. However, if we are told to use
1054 # ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any
1055 # other suffix.
1056 fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
1057 if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then
1058   fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
1059 else
1060   AC_MSG_ERROR([Cannot find matching ghc-pkg])
1061 fi])
1062 GhcPkgCmd=$fp_cv_matching_ghc_pkg
1063 AC_SUBST([GhcPkgCmd])
1064 ])# FP_PROG_GHC_PKG
1065
1066
1067 # FP_GCC_EXTRA_FLAGS
1068 # ------------------
1069 # Determine which extra flags we need to pass gcc when we invoke it
1070 # to compile .hc code.
1071 #
1072 # -fwrapv is needed for gcc to emit well-behaved code in the presence of
1073 # integer wrap around. (Trac #952)
1074 #
1075 AC_DEFUN([FP_GCC_EXTRA_FLAGS],
1076 [AC_REQUIRE([FP_HAVE_GCC])
1077 AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts],
1078 [fp_cv_gcc_extra_opts=
1079  FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
1080   [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
1081   [])
1082 ])
1083 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
1084 ])
1085
1086
1087 # FP_SETUP_PROJECT_VERSION
1088 # ---------------------
1089 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
1090 [
1091 if test "$RELEASE" = "NO"; then
1092     AC_MSG_CHECKING([for GHC version date])
1093     if test -f VERSION_DATE; then
1094         PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
1095         AC_MSG_RESULT(given $PACKAGE_VERSION)
1096     elif test -d .git; then
1097         changequote(, )dnl
1098         ver_date=`git log -n 1 --date=short --pretty=format:%ci | sed "s/^.*\([0-9][0-9][0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\).*$/\1\2\3/"`
1099         if echo $ver_date | grep '^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$' 2>&1 >/dev/null; then true; else
1100         changequote([, ])dnl
1101                 AC_MSG_ERROR([failed to detect version date: check that git is in your path])
1102         fi
1103         PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1104         AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1105     elif test -d _darcs; then
1106         # TODO: Remove this branch after conversion to Git
1107         changequote(, )dnl
1108         ver_date=`darcs changes --quiet --no-summary --xml | head -500 | grep 'date=' | sed "s/^.*date='\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*$/\1/g" | ${SortCmd} -n | tail -1`
1109         if echo $ver_date | grep '^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$' 2>&1 >/dev/null; then true; else
1110         changequote([, ])dnl
1111                 AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
1112         fi
1113         PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
1114         AC_MSG_RESULT(inferred $PACKAGE_VERSION)
1115     elif test -f VERSION; then
1116         PACKAGE_VERSION=`cat VERSION`
1117         AC_MSG_RESULT(given $PACKAGE_VERSION)
1118     else
1119         AC_MSG_WARN([cannot determine snapshot version: no .git or _darcs directory and no VERSION file])
1120     fi
1121 fi
1122
1123 # Some renamings
1124 AC_SUBST([ProjectName], [$PACKAGE_NAME])
1125 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
1126
1127 # Split PACKAGE_VERSION into (possibly empty) parts
1128 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1129 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1130 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
1131 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
1132
1133 # Calculate project version as an integer, using 2 digits for minor version
1134 case $VERSION_MINOR in
1135   ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
1136   ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
1137   *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
1138 esac
1139 AC_SUBST([ProjectVersionInt])
1140
1141 # The project patchlevel is zero unless stated otherwise
1142 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
1143
1144 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
1145 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
1146
1147 AC_SUBST([ProjectPatchLevel])
1148 ])# FP_SETUP_PROJECT_VERSION
1149
1150
1151 # Check for a working timer_create().  We need a pretty detailed check
1152 # here, because there exist partially-working implementations of
1153 # timer_create() in certain versions of Linux (see bug #1933).
1154 #
1155 AC_DEFUN([FP_CHECK_TIMER_CREATE],
1156   [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)], 
1157     [fptools_cv_timer_create_works],
1158     [AC_TRY_RUN([
1159 #include <stdio.h>
1160 #ifdef HAVE_STDLIB_H
1161 #include <stdlib.h>
1162 #endif
1163 #ifdef HAVE_TIME_H
1164 #include <time.h>
1165 #endif
1166 #ifdef HAVE_SIGNAL_H
1167 #include <signal.h>
1168 #endif
1169 #ifdef HAVE_UNISTD_H
1170 #include <unistd.h>
1171 #endif
1172
1173 static volatile int tock = 0;
1174 static void handler(int i)
1175 {
1176    tock = 1;
1177 }
1178
1179 static void timeout(int i)
1180 {
1181   // timer_settime() has been known to hang, so just in case
1182   // we install a 1-second timeout (see #2257)
1183   exit(99);
1184 }
1185
1186 int main(int argc, char *argv[])
1187 {
1188
1189     struct sigevent ev;
1190     timer_t timer;
1191     struct itimerspec it;
1192     struct sigaction action;
1193     int m,n,count = 0;
1194
1195     ev.sigev_notify = SIGEV_SIGNAL;
1196     ev.sigev_signo  = SIGVTALRM;
1197
1198     action.sa_handler = handler;
1199     action.sa_flags = 0;
1200     sigemptyset(&action.sa_mask);
1201     if (sigaction(SIGVTALRM, &action, NULL) == -1) {
1202         fprintf(stderr,"SIGVTALRM problem\n");
1203         exit(3);
1204     }
1205
1206     action.sa_handler = timeout;
1207     action.sa_flags = 0;
1208     sigemptyset(&action.sa_mask);
1209     if (sigaction(SIGALRM, &action, NULL) == -1) {
1210       fprintf(stderr,"SIGALRM problem\n");
1211       exit(3);
1212     }
1213     alarm(1);
1214
1215     if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
1216         fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
1217        exit(1);
1218     }
1219
1220     it.it_value.tv_sec = 0;
1221     it.it_value.tv_nsec = 1;
1222     it.it_interval = it.it_value;
1223     if (timer_settime(timer, 0, &it, NULL) != 0) {
1224         fprintf(stderr,"settime problem\n");
1225         exit(4);
1226     }
1227
1228     tock = 0;
1229
1230     for(n = 3; n < 20000; n++){
1231         for(m = 2; m <= n/2; m++){
1232             if (!(n%m)) count++;
1233             if (tock) goto out;
1234         }
1235     }
1236 out:
1237
1238     if (!tock) {
1239         fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
1240         exit(5);
1241     }
1242
1243     timer_delete(timer);
1244
1245     if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
1246         fprintf(stderr,"No CLOCK_REALTIME timer\n");
1247         exit(2);
1248     }
1249
1250     it.it_value.tv_sec = 0;
1251     it.it_value.tv_nsec = 1000000;
1252     it.it_interval = it.it_value;
1253     if (timer_settime(timer, 0, &it, NULL) != 0) {
1254         fprintf(stderr,"settime problem\n");
1255         exit(4);
1256     }
1257
1258     tock = 0;
1259
1260     usleep(3000);
1261
1262     if (!tock) {
1263         fprintf(stderr,"no CLOCK_REALTIME signal\n");
1264         exit(5);
1265     }
1266
1267     timer_delete(timer);
1268
1269     exit(0);
1270 }
1271      ],
1272      [fptools_cv_timer_create_works=yes],
1273      [fptools_cv_timer_create_works=no])
1274   ])
1275 case $fptools_cv_timer_create_works in
1276     yes) AC_DEFINE([USE_TIMER_CREATE], 1, 
1277                    [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
1278 esac
1279 ])
1280
1281 # FP_ICONV
1282 # -------------
1283 AC_DEFUN([FP_ICONV],
1284 [
1285   dnl--------------------------------------------------------------------
1286   dnl * Deal with arguments telling us iconv is somewhere odd
1287   dnl--------------------------------------------------------------------
1288
1289   dnl Note: ICONV_LIB_DIRS and ICONV_INCLUDE_DIRS are not predefined
1290   dnl to the empty string to allow them to be overridden from the
1291   dnl environment.
1292
1293   AC_ARG_WITH([iconv-includes],
1294     [AC_HELP_STRING([--with-iconv-includes],
1295       [directory containing iconv.h])],
1296       [ICONV_INCLUDE_DIRS=$withval])
1297
1298   AC_ARG_WITH([iconv-libraries],
1299     [AC_HELP_STRING([--with-iconv-libraries],
1300       [directory containing iconv library])],
1301       [ICONV_LIB_DIRS=$withval])
1302
1303   AC_SUBST(ICONV_INCLUDE_DIRS)
1304   AC_SUBST(ICONV_LIB_DIRS)
1305 ])# FP_ICONV
1306
1307 # FP_GMP
1308 # -------------
1309 AC_DEFUN([FP_GMP],
1310 [
1311   dnl--------------------------------------------------------------------
1312   dnl * Deal with arguments telling us gmp is somewhere odd
1313   dnl--------------------------------------------------------------------
1314
1315   AC_ARG_WITH([gmp-includes],
1316     [AC_HELP_STRING([--with-gmp-includes],
1317       [directory containing gmp.h])],
1318       [GMP_INCLUDE_DIRS=$withval])
1319
1320   AC_ARG_WITH([gmp-libraries],
1321     [AC_HELP_STRING([--with-gmp-libraries],
1322       [directory containing gmp library])],
1323       [GMP_LIB_DIRS=$withval])
1324
1325   AC_SUBST(GMP_INCLUDE_DIRS)
1326   AC_SUBST(GMP_LIB_DIRS)
1327 ])# FP_GMP
1328
1329 # FP_CHECK_MACOSX_DEPLOYMENT_TARGET
1330 # ---------------------------------
1331 AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
1332 [
1333 if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
1334   AC_MSG_CHECKING([Mac OS X deployment target])
1335   case $FP_MACOSX_DEPLOYMENT_TARGET in
1336     none)  ;;
1337     10.4)  MACOSX_DEPLOYMENT_VERSION=10.4
1338            MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1339            ;;
1340     10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
1341            MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
1342            ;;
1343     *)     MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
1344            MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
1345            ;;
1346   esac
1347   if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
1348     AC_MSG_RESULT(none)
1349   else
1350     if test ! -d $MACOSX_DEPLOYMENT_SDK; then
1351       AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
1352     fi
1353     AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
1354   fi
1355 fi
1356 ])
1357
1358 # --------------------------------------------------------------
1359 # Calculate absolute path to build tree
1360 # --------------------------------------------------------------
1361
1362 AC_DEFUN([FP_INTREE_GHC_PWD],[
1363 AC_MSG_NOTICE(Building in-tree ghc-pwd)
1364     dnl This would be
1365     dnl     make -C utils/ghc-pwd clean && make -C utils/ghc-pwd
1366     dnl except we don't want to have to know what make is called. Sigh.
1367     rm -rf utils/ghc-pwd/dist-boot
1368     mkdir  utils/ghc-pwd/dist-boot
1369     if ! "$WithGhc" -v0 -no-user-package-conf -hidir utils/ghc-pwd/dist-boot -odir utils/ghc-pwd/dist-boot -stubdir utils/ghc-pwd/dist-boot --make utils/ghc-pwd/Main.hs -o utils/ghc-pwd/dist-boot/ghc-pwd
1370     then
1371         AC_MSG_ERROR([Building ghc-pwd failed])
1372     fi
1373
1374     GHC_PWD=utils/ghc-pwd/dist-boot/ghc-pwd
1375 ])
1376
1377 AC_DEFUN([FP_BINDIST_GHC_PWD],[
1378     GHC_PWD=utils/ghc-pwd/dist/build/tmp/ghc-pwd
1379 ])
1380
1381 AC_DEFUN([FP_FIND_ROOT],[
1382 AC_MSG_CHECKING(for path to top of build tree)
1383     hardtop=`$GHC_PWD`
1384
1385     dnl Remove common automounter nonsense
1386     hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
1387
1388     if ! test -d "$hardtop"; then
1389         AC_MSG_ERROR([cannot determine current directory])
1390     fi
1391
1392     dnl We don't support building in directories with spaces.
1393     case "$hardtop" in
1394     *' '*)
1395         AC_MSG_ERROR([
1396         The build system does not support building in a directory
1397         containing space characters.
1398         Suggestion: move the build tree somewhere else.])
1399         ;;
1400     esac
1401
1402     AC_SUBST(hardtop)
1403
1404     AC_MSG_RESULT($hardtop)
1405 ])
1406
1407 # GHC_CONVERT_CPU(cpu, target_var)
1408 # --------------------------------
1409 # converts cpu from gnu to ghc naming, and assigns the result to $target_var
1410 AC_DEFUN([GHC_CONVERT_CPU],[
1411 case "$1" in
1412   alpha*)
1413     $2="alpha"
1414     ;;
1415   arm*)
1416     $2="arm"
1417     ;;
1418   hppa1.1*)
1419     $2="hppa1_1"
1420     ;;
1421   hppa*)
1422     $2="hppa"
1423     ;;
1424   i386|i486|i586|i686)
1425     $2="i386"
1426     ;;
1427   ia64)
1428     $2="ia64"
1429     ;;
1430   m68k*)
1431     $2="m68k"
1432     ;;
1433   mipseb*)
1434     $2="mipseb"
1435     ;;
1436   mipsel*)
1437     $2="mipsel"
1438     ;;
1439   mips*)
1440     $2="mips"
1441     ;;
1442   powerpc64*)
1443     $2="powerpc64"
1444     ;;
1445   powerpc*)
1446     $2="powerpc"
1447     ;;
1448   rs6000)
1449     $2="rs6000"
1450     ;;
1451   s390*)
1452     $2="s390"
1453     ;;
1454   sparc64*)
1455     $2="sparc64"
1456     ;;
1457   sparc*)
1458     $2="sparc"
1459     ;;
1460   vax)
1461     $2="vax"
1462     ;;
1463   x86_64)
1464     $2="x86_64"
1465     ;;
1466   *)
1467     echo "Unknown CPU $1"
1468     exit 1
1469     ;;
1470   esac
1471 ])
1472
1473 # GHC_CONVERT_VENDOR(vendor, target_var)
1474 # --------------------------------
1475 # converts vendor from gnu to ghc naming, and assigns the result to $target_var
1476 AC_DEFUN([GHC_CONVERT_VENDOR],[
1477   case "$1" in
1478   pc|gentoo) # like i686-pc-linux-gnu and i686-gentoo-freebsd8
1479     $2="unknown"
1480     ;;
1481   *)
1482     #pass thru by default
1483     $2="$1"
1484     ;;
1485   esac
1486 ])
1487
1488 # GHC_CONVERT_OS(os, target_var)
1489 # --------------------------------
1490 # converts os from gnu to ghc naming, and assigns the result to $target_var
1491 AC_DEFUN([GHC_CONVERT_OS],[
1492 case "$1" in
1493   linux-*|linux)
1494     $2="linux"
1495     ;;
1496   # As far as I'm aware, none of these have relevant variants
1497   freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
1498     $2="$1"
1499     ;;
1500   freebsd8) # like i686-gentoo-freebsd8
1501     $2="freebsd"
1502     ;;
1503   *)
1504     echo "Unknown OS $1"
1505     exit 1
1506     ;;
1507   esac
1508 ])
1509
1510 # LIBRARY_VERSION(lib)
1511 # --------------------------------
1512 # Gets the version number of a library.
1513 # If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3
1514 AC_DEFUN([LIBRARY_VERSION],[
1515 LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/$1/$1.cabal | sed "s/.* //"`
1516 AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION)
1517 ])
1518
1519 # LocalWords:  fi