1 # Extra autoconf macros for the Glasgow fptools
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.
7 # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
8 # ----------------------------------
9 # Little endian Arm on Linux with some ABIs has big endian word order
10 # in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
11 AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
12 [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
15 [#include <endian.h>],
16 [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
19 not float word order big endian
22 [fptools_cv_float_word_order_bigendian=yes],
23 [fptools_cv_float_word_order_bigendian=no])
25 case $fptools_cv_float_word_order_bigendian in
27 AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
28 [Define to 1 if your processor stores words of floats with
29 the most significant byte first]) ;;
34 # FP_EVAL_STDERR(COMMAND)
35 # -----------------------
36 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
37 # into the file conftest.err and the exit status in the variable fp_status.
38 AC_DEFUN([FP_EVAL_STDERR],
39 [{ (eval $1) 2>conftest.er1
41 grep -v '^ *+' conftest.er1 >conftest.err
43 (exit $fp_status); }[]dnl
47 # FP_CHECK_FLAG(FLAG, [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED])
48 # ---------------------------------------------------------------------
49 # Check to see whether the compiler for the current language supports a
52 # Implementation note: When given an unkown option, GCC issues an warning on
53 # stderr only, but returns an exit value of 0 nevertheless. Consequently we have
54 # to check stderr *and* the exit value.
57 AC_DEFUN([FP_CHECK_FLAG],
58 [AC_LANG_COMPILER_REQUIRE()dnl
59 AC_LANG_CASE([C], [fp_compiler="$CC" m4_pushdef([fp_Flags], [CFLAGS])],
60 [C++], [fp_compiler="$CXX" m4_pushdef([fp_Flags], [CXXFLAGS])],
61 [Fortran 77], [fp_compiler="$F77" m4_pushdef([fp_Flags], [FFLAGS])])
62 m4_pushdef([fp_Cache], [fp_cv_[]fp_Flags[]AS_TR_SH([$1])])[]dnl
63 AC_CACHE_CHECK([whether $fp_compiler accepts $1], [fp_Cache],
64 [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
65 fp_save_flags="$fp_Flags"
66 fp_Flags="$fp_Flags $1"
68 if FP_EVAL_STDERR([$ac_compile conftest.$ac_ext]) >/dev/null; then
69 test -s conftest.err || fp_Cache=yes
71 fp_Flags="$fp_save_flags"
72 rm -f conftest.err conftest.$ac_ext])
73 AS_IF([test $fp_Cache = yes], [$2], [$3])[]dnl
74 m4_popdef([fp_Cache])[]dnl
75 m4_popdef([fp_Flags])[]dnl
79 # FP_PROG_CONTEXT_DIFF
80 # --------------------
81 # Figure out how to do context diffs. Sets the output variable ContextDiffCmd.
83 # Note: NeXTStep thinks diff'ing a file against itself is "trouble".
85 # Used by ghc, glafp-utils/ltx, and glafp-utils/runstdtest.
86 AC_DEFUN([FP_PROG_CONTEXT_DIFF],
87 [AC_CACHE_CHECK([for a working context diff], [fp_cv_context_diff],
91 for fp_var in '-C 1' '-c1'
93 if diff $fp_var conftest1 conftest2 > /dev/null 2>&1; then
94 fp_cv_context_diff="diff $fp_var"
98 if test x"$fp_cv_context_diff" = xno; then
99 AC_MSG_ERROR([cannot figure out how to do context diffs])
101 AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
102 ])# FP_PROG_CONTEXT_DIFF
105 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
106 # --------------------------------------------------------
107 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
108 # compilation. Execute IF-FAILS when unable to determine the value. Works for
109 # cross-compilation, too.
111 # Implementation note: We are lazy and use an internal autoconf macro, but it
112 # is supported in autoconf versions 2.50 up to the actual 2.57, so there is
114 AC_DEFUN([FP_COMPUTE_INT],
115 [_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
119 # FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
120 # ------------------------------------------------------------------
121 # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
122 # given type. Defines ALIGNMENT_TYPE.
123 AC_DEFUN([FP_CHECK_ALIGNMENT],
124 [AS_LITERAL_IF([$1], [],
125 [AC_FATAL([$0: requires literal arguments])])[]dnl
126 AC_CHECK_TYPE([$1], [], [], [$3])[]dnl
127 m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl
128 AC_CACHE_CHECK([alignment of $1], [fp_Cache],
129 [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
130 FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
132 [AC_INCLUDES_DEFAULT([$3])],
133 [AC_MSG_ERROR([cannot compute alignment ($1)
134 See `config.log' for more details.], [77])])
138 AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $fp_Cache, [The alignment of a `$1'.])[]dnl
139 m4_popdef([fp_Cache])[]dnl
140 ])# FP_CHECK_ALIGNMENT
143 # FP_LEADING_UNDERSCORE
144 # ---------------------
145 # Test for determining whether symbol names have a leading underscore. We assume
146 # that they _haven't_ if anything goes wrong. Sets the output variable
147 # LeadingUnderscore to YES or NO and defines LEADING_UNDERSCORE correspondingly.
149 # Some nlist implementations seem to try to be compatible by ignoring a leading
150 # underscore sometimes (eg. FreeBSD). We therefore have to work around this by
151 # checking for *no* leading underscore first. Sigh. --SDM
153 # Similarly on OpenBSD, but this test doesn't help. -- dons
154 AC_DEFUN([FP_LEADING_UNDERSCORE],
155 [AC_CHECK_LIB([elf], [nlist], [LIBS="-lelf $LIBS"])
156 AC_CACHE_CHECK([leading underscore in symbol names], [fptools_cv_leading_underscore], [
157 # Hack!: nlist() under Digital UNIX insist on there being an _,
158 # but symbol table listings shows none. What is going on here?!?
160 # Another hack: cygwin doesn't come with nlist.h , so we hardwire
161 # the underscoredness of that "platform"
162 case $HostPlatform in
163 *openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
165 i386-*2\.@<:@0-9@:>@ | i386-*3\.@<:@0-3@:>@ ) fptools_cv_leading_underscore=yes ;;
166 *) fptools_cv_leading_underscore=no ;;
168 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
169 *cygwin32) fptools_cv_leading_underscore=yes;;
170 *mingw32) fptools_cv_leading_underscore=yes;;
171 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
173 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
174 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
182 if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
184 if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
188 }]])],[fptools_cv_leading_underscore=yes],[fptools_cv_leading_underscore=no],[fptools_cv_leading_underscore=no])
191 AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
192 if test x"$fptools_cv_leading_underscore" = xyes; then
193 AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
194 fi])# FP_LEADING_UNDERSCORE
197 # FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
198 # ----------------------------------------------------------------------------------
199 # Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
200 # to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
201 AC_DEFUN([FP_COMPARE_VERSIONS],
202 [fp_version1=$1; fp_version2=$3
203 fp_save_IFS=$IFS; IFS='.'
204 while test x"$fp_version1" != x || test x"$fp_version2" != x
207 set dummy $fp_version1; shift
209 test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
210 test x"$fp_num1" = x && fp_num1="0"
213 set dummy $fp_version2; shift
215 test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
216 test x"$fp_num2" = x && fp_num2="0"
219 test "$fp_num1" = "$fp_num2" || break;
222 AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
223 ])# FP_COMPARE_VERSIONS
227 dnl Check for GreenCard and version.
229 AC_DEFUN([FPTOOLS_GREENCARD],
231 AC_PATH_PROG(GreenCardCmd,greencard)
232 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
234 [if test x"$GreenCardCmd" != x; then
235 fptools_cv_greencard_version="`$GreenCardCmd --version |
236 grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
238 fptools_cv_greencard_version=""
242 FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
243 [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
244 GreenCardVersion=$fptools_cv_greencard_version
245 AC_SUBST(GreenCardVersion)
249 dnl Check for Happy and version. If we're building GHC, then we need
250 dnl at least Happy version 1.14. If there's no installed Happy, we look
251 dnl for a happy source tree and point the build system at that instead.
253 AC_DEFUN([FPTOOLS_HAPPY],
254 [AC_PATH_PROG(HappyCmd,happy,)
255 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
257 [if test x"$HappyCmd" != x; then
258 fptools_cv_happy_version="`$HappyCmd -v |
259 grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
261 fptools_cv_happy_version="";
265 if test ! -f compiler/parser/Parser.hs || test ! -f compiler/main/ParsePkgConf.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
267 FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.15],
268 [AC_MSG_ERROR([Happy version 1.15 or later is required to compile GHC.])])[]dnl
270 HappyVersion=$fptools_cv_happy_version;
271 AC_SUBST(HappyVersion)
275 dnl Check for Haddock and version. If there's no installed Haddock, we look
276 dnl for a haddock source tree and point the build system at that instead.
278 AC_DEFUN([FPTOOLS_HADDOCK],
279 [AC_PATH_PROG(HaddockCmd,haddock,)
280 dnl Darn, I forgot to make Haddock print out its version number when
281 dnl invoked with -v. We could try generating some HTML and grepping
282 dnl through that to find the version number, but I think we'll make
283 dnl do without it for now.
287 dnl Check for Alex and version. If we're building GHC, then we need
288 dnl at least Alex version 2.0.1.
290 AC_DEFUN([FPTOOLS_ALEX],
292 AC_PATH_PROG(AlexCmd,alex,)
293 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
295 [if test x"$AlexCmd" != x; then
296 fptools_cv_alex_version="`$AlexCmd -v |
297 grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
299 fptools_cv_alex_version="";
303 if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
305 FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0.1],
306 [AC_MSG_ERROR([Alex version 2.0.1 or later is required to compile GHC.])])[]dnl
308 AlexVersion=$fptools_cv_alex_version;
309 AC_SUBST(AlexVersion)
315 # Sets the output variable LdCmd to the (non-Cygwin version of the) full path
316 # of ld. Exits if no ld can be found
317 AC_DEFUN([FP_PROG_LD],
318 [AC_PATH_PROG([fp_prog_ld_raw], [ld])
319 if test -z "$fp_prog_ld_raw"; then
320 AC_MSG_ERROR([cannot find ld in your PATH, no idea how to link])
322 LdCmd=$fp_prog_ld_raw
323 case $HostPlatform in
324 *mingw32) if test x${OSTYPE} != xmsys; then
325 LdCmd="`cygpath -w ${fp_prog_ld_raw} | sed -e 's@\\\\@/@g'`"
326 AC_MSG_NOTICE([normalized ld command to $LdCmd])
328 # Insist on >= ld-2.15.x, since earlier versions doesn't handle
329 # the generation of relocatable object files with large amounts
330 # of relocations correctly. (cf. HSbase.o splittage-hack)
331 fp_prog_ld_version=`${LdCmd} --version | sed -n '/GNU ld/p' | tr -cd 0-9 | cut -b1-3`
332 FP_COMPARE_VERSIONS([$fp_prog_ld_version],[-lt],[214],
333 [AC_MSG_ERROR([GNU ld version later than 2.14 required to compile GHC on Windows.])])[]dnl
342 # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the
343 # variable's value is empty.
344 AC_DEFUN([FP_PROG_LD_X],
345 [AC_REQUIRE([FP_PROG_LD])
346 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
347 [echo 'foo() {}' > conftest.c
348 ${CC-cc} -c conftest.c
349 if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
355 if test "$fp_cv_ld_x" = yes; then
366 # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is
368 AC_DEFUN([FP_PROG_LD_IS_GNU],
369 [AC_REQUIRE([FP_PROG_LD])
370 AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld],
371 [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
376 AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
377 ])# FP_PROG_LD_IS_GNU
382 # Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
383 # version of it. Exits if no ar can be found
384 AC_DEFUN([FP_PROG_AR],
385 [AC_PATH_PROG([fp_prog_ar_raw], [ar])
386 if test -z "$fp_prog_ar_raw"; then
387 AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
389 fp_prog_ar=$fp_prog_ar_raw
390 case $HostPlatform in
391 *mingw32) if test x${OSTYPE} != xmsys; then
392 fp_prog_ar="`cygpath -w ${fp_prog_ar_raw} | sed -e 's@\\\\@/@g'`"
393 AC_MSG_NOTICE([normalized ar command to $fp_prog_ar])
402 # Sets fp_prog_ar_is_gnu to yes or no, depending on whether it is GNU ar or not.
403 AC_DEFUN([FP_PROG_AR_IS_GNU],
404 [AC_REQUIRE([FP_PROG_AR])
405 AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu],
406 [if $fp_prog_ar_raw --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then
407 fp_cv_prog_ar_is_gnu=yes
409 fp_cv_prog_ar_is_gnu=no
411 fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu
412 ])# FP_PROG_AR_IS_GNU
417 # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd
418 # to a non-Cygwin invocation of ar including these arguments.
419 AC_DEFUN([FP_PROG_AR_ARGS],
420 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
421 AC_CACHE_CHECK([for ar arguments], [fp_cv_prog_ar_args],
423 # GNU ar needs special treatment: it appears to have problems with
424 # object files with the same name if you use the 's' modifier, but
425 # simple 'ar q' works fine, and doesn't need a separate ranlib.
426 if test $fp_prog_ar_is_gnu = yes; then
427 fp_cv_prog_ar_args="q"
430 for fp_var in clqsZ clqs cqs clq cq ; do
432 if $fp_prog_ar_raw $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
433 fp_cv_prog_ar_args=$fp_var
438 if test -z "$fp_cv_prog_ar_args"; then
439 AC_MSG_ERROR([cannot figure out how to use your $fp_prog_ar_raw])
442 fp_prog_ar_args=$fp_cv_prog_ar_args
443 AC_SUBST([ArCmd], ["$fp_prog_ar $fp_prog_ar_args"])
448 # FP_PROG_AR_NEEDS_RANLIB
449 # -----------------------
450 # Sets the output variable RANLIB to "ranlib" if it is needed and found,
452 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
453 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
454 AC_REQUIRE([FP_PROG_AR_ARGS])
455 AC_REQUIRE([AC_PROG_CC])
456 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
457 [if test $fp_prog_ar_is_gnu = yes; then
458 fp_cv_prog_ar_needs_ranlib=no
459 elif echo $TargetPlatform | grep "^.*-apple-darwin$" > /dev/null 2> /dev/null; then
460 # It's quite tedious to check for Apple's crazy timestamps in .a files,
462 fp_cv_prog_ar_needs_ranlib=yes
463 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
464 fp_cv_prog_ar_needs_ranlib=no
466 fp_cv_prog_ar_needs_ranlib=yes
468 if test $fp_cv_prog_ar_needs_ranlib = yes; then
474 ])# FP_PROG_AR_NEEDS_RANLIB
477 # FP_PROG_AR_SUPPORTS_INPUT
478 # -------------------------
479 # Sets the output variable ArSupportsInput to "-input" or "", depending on
480 # whether ar supports -input flag is supported or not.
481 AC_DEFUN([FP_PROG_AR_SUPPORTS_INPUT],
482 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
483 AC_REQUIRE([FP_PROG_AR_ARGS])
484 AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_supports_input],
485 [fp_cv_prog_ar_supports_input=no
486 if test $fp_prog_ar_is_gnu = no; then
489 if FP_EVAL_STDERR([$fp_prog_ar_raw $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then
490 test -s conftest.err || fp_cv_prog_ar_supports_input=yes
494 if test $fp_cv_prog_ar_supports_input = yes; then
495 ArSupportsInput="-input"
499 AC_SUBST([ArSupportsInput])
500 ])# FP_PROG_AR_SUPPORTS_INPUT
504 dnl AC_SHEBANG_PERL - can we she-bang perl?
506 AC_DEFUN([FPTOOLS_SHEBANG_PERL],
507 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
512 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
513 if test $? -ne 69; then
514 fptools_cv_shebang_perl=yes
516 fptools_cv_shebang_perl=no
524 # Extra testing of the result AC_PROG_CC, testing the gcc version no. Sets the
525 # output variables HaveGcc and GccVersion.
526 AC_DEFUN([FP_HAVE_GCC],
527 [AC_REQUIRE([AC_PROG_CC])
528 if test -z "$GCC"; then
533 if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
534 AC_MSG_ERROR([gcc is required])
536 AC_CACHE_CHECK([version of gcc], [fp_gcc_version],
537 [if test "$fp_have_gcc" = "YES"; then
538 fp_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
539 FP_COMPARE_VERSIONS([$fp_gcc_version], [-lt], [2.0],
540 [AC_MSG_ERROR([Need at least gcc version 2.0 (3.4+ recommended)])])
542 fp_gcc_version="not-installed"
545 AC_SUBST([HaveGcc], [$fp_have_gcc])
546 AC_SUBST([GccVersion], [$fp_gcc_version])
549 AC_DEFUN([FP_MINGW_GCC],
552 mingw*) AC_MSG_CHECKING([whether $CC is a mingw gcc])
553 if $CC -v 2>&1 | grep mingw >/dev/null; then
557 AC_MSG_ERROR([Please use --with-gcc to specify a mingw gcc])
563 dnl Small feature test for perl version. Assumes PerlCmd
564 dnl contains path to perl binary
566 AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
567 [$PerlCmd -v >conftest.out 2>&1
568 if grep "v5.6" conftest.out >/dev/null 2>&1; then
571 if grep "v5.8" conftest.out >/dev/null 2>&1; then
574 if grep "version 6" conftest.out >/dev/null 2>&1; then
577 AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
585 # FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
586 # [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
587 # -----------------------------------------------------
588 # HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
589 # of PROG-TO-CHECK-FOR when found.
590 AC_DEFUN([FP_CHECK_PROG],
591 [AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
597 # Find a non-WinDoze version of the "find" utility.
598 AC_DEFUN([FP_PROG_FIND],
599 [AC_PATH_PROG([fp_prog_find], [find])
600 echo foo > conftest.txt
601 $fp_prog_find conftest.txt -print > conftest.out 2>&1
602 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
603 # OK, looks like a real "find".
604 FindCmd="$fp_prog_find"
606 # Found a poor WinDoze version of "find", ignore it.
607 AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
608 FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
610 rm -f conftest.txt conftest.out
611 AC_SUBST([FindCmd])[]dnl
617 # Find a Unix-like sort
618 AC_DEFUN([FP_PROG_SORT],
619 [AC_PATH_PROG([fp_prog_sort], [sort])
620 echo conwip > conftest.txt
621 $fp_prog_sort -f conftest.txt > conftest.out 2>&1
622 if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
624 SortCmd="$fp_prog_sort"
626 # Summink else..pick next one.
627 AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
628 FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
630 rm -f conftest.txt conftest.out
631 AC_SUBST([SortCmd])[]dnl
635 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
636 dnl values of the second argument to the result of running
637 dnl the commands given by the third. It does not cache its
638 dnl result, so it is suitable for checks which should be
641 AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
642 [AC_MSG_CHECKING([$1])
644 AC_MSG_RESULT([$][$2])
648 dnl FPTOOLS_GHC_VERSION(version)
649 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
650 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
652 dnl Test for version of installed ghc. Uses $GHC.
653 dnl [original version pinched from c2hs]
655 AC_DEFUN([FPTOOLS_GHC_VERSION],
656 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
657 ["${WithGhc-ghc}" --version > conftestghc 2>&1
658 cat conftestghc >&AS_MESSAGE_LOG_FD
659 #Useless Use Of cat award...
660 fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
662 if test "[$]fptools_version_of_ghc" = ""
664 fptools_version_of_ghc='unknown'
666 fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
667 fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
668 fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
670 if test "[$]fptools_version_of_ghc[_pl]" = ""
672 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
673 fptools_version_of_ghc[_pl]="0"
675 fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
679 [$1]="[$]fptools_version_of_ghc[_all]"
681 [$1]="[$]fptools_version_of_ghc[_major]"
682 [$2]="[$]fptools_version_of_ghc[_minor]"
684 [$1]="[$]fptools_version_of_ghc[_major]"
685 [$2]="[$]fptools_version_of_ghc[_minor]"
686 [$3]="[$]fptools_version_of_ghc[_pl]"
688 [$1]="[$]fptools_version_of_ghc[_all]"
689 [$2]="[$]fptools_version_of_ghc[_major]"
690 [$3]="[$]fptools_version_of_ghc[_minor]"
691 [$4]="[$]fptools_version_of_ghc[_pl]"
697 # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
698 # ---------------------------------------------------------------------------------
699 # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
700 # additional flexibility of specifying the PROLOGUE and BODY.
701 AC_DEFUN([FP_CHECK_FUNC],
702 [AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
703 AC_CACHE_CHECK([for $1], fp_func,
704 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
705 [AS_VAR_SET(fp_func, yes)],
706 [AS_VAR_SET(fp_func, no)])])
707 AS_IF([test AS_VAR_GET(fp_func) = yes],
708 [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
709 [Define to 1 if you have the `]$1[' function.]) $4],
711 AS_VAR_POPDEF([fp_func])dnl
717 # Generates a DocBook XML V4.2 document in conftest.xml.
718 AC_DEFUN([FP_GEN_DOCBOOK_XML],
720 cat > conftest.xml << EOF
721 <?xml version="1.0" encoding="iso-8859-1"?>
722 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
723 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
725 <title>A DocBook Test Document</title>
726 <chapter id="id-one">
727 <title>A Chapter Title</title>
728 <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
730 <chapter id="id-two">
731 <title>Another Chapter Title</title>
732 <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
736 ]) # FP_GEN_DOCBOOK_XML
741 # Sets the output variable XsltprocCmd to the full path of the XSLT processor
742 # xsltproc. XsltprocCmd is empty if xsltproc could not be found.
743 AC_DEFUN([FP_PROG_XSLTPROC],
744 [AC_PATH_PROG([XsltprocCmd], [xsltproc])
745 if test -z "$XsltprocCmd"; then
746 AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the documentation])
751 # FP_DIR_DOCBOOK_XSL(XSL-DIRS)
752 # ----------------------------
753 # Check which of the directories XSL-DIRS contains DocBook XSL stylesheets. The
754 # output variable DIR_DOCBOOK_XSL will contain the first usable directory or
755 # will be empty if none could be found.
756 AC_DEFUN([FP_DIR_DOCBOOK_XSL],
757 [AC_REQUIRE([FP_PROG_XSLTPROC])dnl
758 if test -n "$XsltprocCmd"; then
759 AC_CACHE_CHECK([for DocBook XSL stylesheet directory], fp_cv_dir_docbook_xsl,
761 fp_cv_dir_docbook_xsl=no
763 if $XsltprocCmd ${fp_var}/html/docbook.xsl conftest.xml > /dev/null 2>&1; then
764 fp_cv_dir_docbook_xsl=$fp_var
770 if test x"$fp_cv_dir_docbook_xsl" = xno; then
771 AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
774 DIR_DOCBOOK_XSL=$fp_cv_dir_docbook_xsl
776 AC_SUBST([DIR_DOCBOOK_XSL])
777 ])# FP_DIR_DOCBOOK_XSL
782 # Sets the output variable XmllintCmd to the full path of the XSLT processor
783 # xmllint. XmllintCmd is empty if xmllint could not be found.
784 AC_DEFUN([FP_PROG_XMLLINT],
785 [AC_PATH_PROG([XmllintCmd], [xmllint])
786 if test -z "$XmllintCmd"; then
787 AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
792 # FP_CHECK_DOCBOOK_DTD
793 # --------------------
794 AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
795 [AC_REQUIRE([FP_PROG_XMLLINT])dnl
796 if test -n "$XmllintCmd"; then
797 AC_MSG_CHECKING([for DocBook DTD])
799 if $XmllintCmd --valid --noout conftest.xml > /dev/null 2>&1; then
802 AC_MSG_RESULT([failed])
803 AC_MSG_WARN([cannot find a DTD for DocBook XML V4.2, you will not be able to validate your documentation])
804 AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
808 ])# FP_CHECK_DOCBOOK_DTD
813 # Generates a formatting objects document in conftest.fo.
814 AC_DEFUN([FP_GEN_FO],
816 cat > conftest.fo << EOF
817 <?xml version="1.0"?>
818 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
819 <fo:layout-master-set>
820 <fo:simple-page-master master-name="blank">
822 </fo:simple-page-master>
823 </fo:layout-master-set>
824 <fo:page-sequence master-reference="blank">
825 <fo:flow flow-name="xsl-region-body">
838 # Set the output variable 'FopCmd' to the first working 'fop' in the current
839 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
840 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
841 AC_DEFUN([FP_PROG_FOP],
842 [AC_PATH_PROGS([FopCmd1], [fop fop.sh])
843 if test -n "$FopCmd1"; then
844 AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
846 if "$FopCmd1" -fo conftest.fo -ps conftest.ps > /dev/null 2>&1; then
847 fp_cv_fop_usability=yes
849 fp_cv_fop_usability=no
852 if test x"$fp_cv_fop_usability" = xyes; then
856 if test -z "$FopCmd"; then
857 AC_PATH_PROGS([FopCmd2], [fop.sh], , [/usr/share/fop])
864 # FP_PROG_FO_PROCESSOR
865 # --------------------
866 # Try to find an FO processor. PassiveTeX output is sometimes a bit strange, so
867 # try FOP first. Sets the output variables FopCmd, XmltexCmd, DvipsCmd, and
869 AC_DEFUN([FP_PROG_FO_PROCESSOR],
870 [AC_REQUIRE([FP_PROG_FOP])
871 AC_PATH_PROG([XmltexCmd], [xmltex])
872 AC_PATH_PROG([DvipsCmd], [dvips])
873 if test -z "$FopCmd"; then
874 if test -z "$XmltexCmd"; then
875 AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI or PostScript documentation])
877 if test -z "$DvipsCmd"; then
878 AC_MSG_WARN([cannot find a DVI => PS converter, you will not be able to build PostScript documentation])
881 AC_PATH_PROG([PdfxmltexCmd], [pdfxmltex])
882 if test -z "$PdfxmltexCmd"; then
883 AC_MSG_WARN([cannot find an FO => PDF converter, you will not be able to build PDF documentation])
885 elif test -z "$XmltexCmd"; then
886 AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI documentation])
888 ])# FP_PROG_FO_PROCESSOR
893 # Try to find a ghc-pkg matching the ghc mentioned in the environment variable
894 # WithGhc. If the latter is unset or no matching ghc-pkg can be found, try to
895 # find a plain ghc-pkg. Sets the output variable GhcPkgCmd.
896 AC_DEFUN([FP_PROG_GHC_PKG],
897 [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg,
898 [fp_ghc_pkg_guess=`echo $WithGhc | sed 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'`
899 if "$fp_ghc_pkg_guess" -l > /dev/null 2>&1; then
900 fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess
902 fp_cv_matching_ghc_pkg=no
904 if test x"$fp_cv_matching_ghc_pkg" = xno; then
905 AC_PATH_PROG([GhcPkgCmd], [ghc-pkg])
907 GhcPkgCmd=$fp_cv_matching_ghc_pkg
908 fi])# FP_PROG_GHC_PKG
911 # FP_GHC_HAS_READLINE
912 # -------------------
913 AC_DEFUN([FP_GHC_HAS_READLINE],
914 [AC_REQUIRE([FP_PROG_GHC_PKG])
915 AC_CACHE_CHECK([whether ghc has readline package], [fp_cv_ghc_has_readline],
916 [if "${GhcPkgCmd-ghc-pkg}" --show-package readline >/dev/null 2>&1; then
917 fp_cv_ghc_has_readline=yes
919 fp_cv_ghc_has_readline=no
921 AC_SUBST([GhcHasReadline], [`echo $fp_cv_ghc_has_readline | sed 'y/yesno/YESNO/'`])
922 ])# FP_GHC_HAS_READLINE
925 # FP_GCC_NEEDS_NO_OMIT_LFPTR
926 # --------------------------
927 # Some OSs (Mandrake Linux, in particular) configure GCC with
928 # -momit-leaf-frame-pointer on by default. If this is the case, we need to turn
929 # it off for mangling to work. The test is currently a bit crude, using only the
930 # version number of gcc. Defines HAVE_GCC_MNO_OMIT_LFPTR.
931 AC_DEFUN([FP_GCC_NEEDS_NO_OMIT_LFPTR],
932 [AC_REQUIRE([FP_HAVE_GCC])
933 AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], [fp_cv_gcc_needs_no_omit_lfptr],
934 [FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.2],
935 [fp_cv_gcc_needs_no_omit_lfptr=yes],
936 [fp_cv_gcc_needs_no_omit_lfptr=no])])
937 if test "$fp_cv_gcc_needs_no_omit_lfptr" = "yes"; then
938 AC_DEFINE([HAVE_GCC_MNO_OMIT_LFPTR], [1], [Define to 1 if gcc supports -mno-omit-leaf-frame-pointer.])
939 fi])# FP_GCC_NEEDS_NO_OMIT_LFPTR
941 # FP_GCC_HAS_NO_UNIT_AT_A_TIME
942 # --------------------------
943 AC_DEFUN([FP_GCC_HAS_NO_UNIT_AT_A_TIME],
944 [AC_REQUIRE([FP_HAVE_GCC])
945 AC_CACHE_CHECK([whether gcc has -fno-unit-at-a-time], [fp_cv_gcc_has_no_unit_at_a_time],
946 [FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
947 [fp_cv_gcc_has_no_unit_at_a_time=yes],
948 [fp_cv_gcc_has_no_unit_at_a_time=no])])
949 if test "$fp_cv_gcc_has_no_unit_at_a_time" = "yes"; then
950 AC_DEFINE([HAVE_GCC_HAS_NO_UNIT_AT_A_TIME], [1], [Define to 1 if gcc supports -fno-unit-at-a-time.])
953 # FP_SETUP_PROJECT_VERSION
954 # ---------------------
955 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
957 AC_SUBST([ProjectName], [$PACKAGE_NAME])
958 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
960 # Split PACKAGE_VERSION into (possibly empty) parts
961 VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
962 VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
963 VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
964 ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
966 # Calculate project version as an integer, using 2 digits for minor version
967 case $VERSION_MINOR in
968 ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
969 ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
970 *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
972 AC_SUBST([ProjectVersionInt])
974 # The project patchlevel is zero unless stated otherwise
975 test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
977 # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
978 ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
980 AC_SUBST([ProjectPatchLevel])
981 ])# FP_SETUP_PROJECT_VERSION