~ubuntu-branches/ubuntu/precise/ghc/precise

« back to all changes in this revision

Viewing changes to aclocal.m4

  • Committer: Bazaar Package Importer
  • Author(s): Joachim Breitner
  • Date: 2011-01-17 12:49:24 UTC
  • Revision ID: james.westby@ubuntu.com-20110117124924-do1pym1jlf5o636m
Tags: upstream-7.0.1
ImportĀ upstreamĀ versionĀ 7.0.1

Show diffs side-by-side

added added

removed removed

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