New upstream version 1.9
[debian/gzip] / m4 / float_h.m4
1 # float_h.m4 serial 12
2 dnl Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
6
7 AC_DEFUN([gl_FLOAT_H],
8 [
9   AC_REQUIRE([AC_PROG_CC])
10   AC_REQUIRE([AC_CANONICAL_HOST])
11   FLOAT_H=
12   REPLACE_FLOAT_LDBL=0
13   case "$host_os" in
14     aix* | beos* | openbsd* | mirbsd* | irix*)
15       FLOAT_H=float.h
16       ;;
17     freebsd* | dragonfly*)
18       case "$host_cpu" in
19 changequote(,)dnl
20         i[34567]86 )
21 changequote([,])dnl
22           FLOAT_H=float.h
23           ;;
24         x86_64 )
25           # On x86_64 systems, the C compiler may still be generating
26           # 32-bit code.
27           AC_COMPILE_IFELSE(
28             [AC_LANG_SOURCE(
29                [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__
30                   int ok;
31                  #else
32                   error fail
33                  #endif
34                ]])],
35             [],
36             [FLOAT_H=float.h])
37           ;;
38       esac
39       ;;
40     linux*)
41       case "$host_cpu" in
42         powerpc*)
43           FLOAT_H=float.h
44           ;;
45       esac
46       ;;
47   esac
48   case "$host_os" in
49     aix* | freebsd* | dragonfly* | linux*)
50       if test -n "$FLOAT_H"; then
51         REPLACE_FLOAT_LDBL=1
52       fi
53       ;;
54   esac
55
56   dnl Test against glibc-2.7 Linux/SPARC64 bug.
57   REPLACE_ITOLD=0
58   AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works],
59     [gl_cv_func_itold_works],
60     [
61       AC_RUN_IFELSE(
62         [AC_LANG_SOURCE([[
63 int i = -1;
64 volatile long double ld;
65 int main ()
66 {
67   ld += i * 1.0L;
68   if (ld > 0)
69     return 1;
70   return 0;
71 }]])],
72         [gl_cv_func_itold_works=yes],
73         [gl_cv_func_itold_works=no],
74         [case "$host" in
75            sparc*-*-linux*)
76              AC_COMPILE_IFELSE(
77                [AC_LANG_SOURCE(
78                  [[#if defined __LP64__ || defined __arch64__
79                     int ok;
80                    #else
81                     error fail
82                    #endif
83                  ]])],
84                [gl_cv_func_itold_works="guessing no"],
85                [gl_cv_func_itold_works="guessing yes"])
86              ;;
87                    # Guess yes on native Windows.
88            mingw*) gl_cv_func_itold_works="guessing yes" ;;
89            *)      gl_cv_func_itold_works="guessing yes" ;;
90          esac
91         ])
92     ])
93   case "$gl_cv_func_itold_works" in
94     *no)
95       REPLACE_ITOLD=1
96       dnl We add the workaround to <float.h> but also to <math.h>,
97       dnl to increase the chances that the fix function gets pulled in.
98       FLOAT_H=float.h
99       ;;
100   esac
101
102   if test -n "$FLOAT_H"; then
103     gl_NEXT_HEADERS([float.h])
104   fi
105   AC_SUBST([FLOAT_H])
106   AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"])
107   AC_SUBST([REPLACE_ITOLD])
108 ])