1#serial 115   -*- autoconf -*-
2
3dnl Misc type-related macros for coreutils.
4
5# Copyright (C) 1998-2023 Free Software Foundation, Inc.
6
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15# GNU General Public License for more details.
16
17# You should have received a copy of the GNU General Public License
18# along with this program.  If not, see <https://www.gnu.org/licenses/>.
19
20# Written by Jim Meyering.
21
22AC_DEFUN([coreutils_MACROS],
23[
24  AM_MISSING_PROG(HELP2MAN, help2man)
25  AC_SUBST([MAN])
26
27  gl_CHECK_ALL_TYPES
28
29  AC_REQUIRE([gl_CHECK_DECLS])
30
31  AC_REQUIRE([gl_PREREQ])
32
33  AC_REQUIRE([AC_FUNC_FSEEKO])
34
35  # By default, argmatch should fail calling usage (EXIT_FAILURE).
36  AC_DEFINE([ARGMATCH_DIE], [usage (EXIT_FAILURE)],
37            [Define to the function xargmatch calls on failures.])
38  AC_DEFINE([ARGMATCH_DIE_DECL], [void usage (int _e)],
39            [Define to the declaration of the xargmatch failure function.])
40
41  # Ensure VLAs are not used.
42  # Note -Wvla is implicitly added by gl_MANYWARN_ALL_GCC
43  AC_DEFINE([GNULIB_NO_VLA], [1], [Define to 1 to disable use of VLAs])
44
45  # used by shred
46  AC_CHECK_FUNCS_ONCE([directio])
47
48  coreutils_saved_libs=$LIBS
49    LIBS="$LIBS $LIB_SELINUX"
50    # Used by selinux.c.
51    AC_CHECK_FUNCS([mode_to_security_class], [], [])
52  LIBS=$coreutils_saved_libs
53
54  # Used by sort.c.
55  AC_CHECK_FUNCS_ONCE([nl_langinfo])
56  # Used by timeout.c
57  AC_CHECK_FUNCS_ONCE([setitimer setrlimit prctl])
58
59  # Used by tail.c.
60  AC_CHECK_FUNCS([inotify_init],
61    [AC_DEFINE([HAVE_INOTIFY], [1],
62     [Define to 1 if you have usable inotify support.])])
63
64  AC_CHECK_FUNCS_ONCE([
65    endgrent
66    endpwent
67    fallocate
68    fchown
69    fchmod
70    setgroups
71    sethostname
72    siginterrupt
73    sync
74    syncfs
75    sysinfo
76    tcgetpgrp
77  ])
78
79  # These checks are for Interix, to avoid its getgr* functions, in favor
80  # of these replacements.  The replacement functions are much more efficient
81  # because they do not query the domain controller for user information
82  # when it is not needed.
83  AC_CHECK_FUNCS_ONCE([
84    getgrgid_nomembers
85    getgrnam_nomembers
86    getgrent_nomembers
87  ])
88
89  dnl This can't use AC_REQUIRE; I'm not quite sure why.
90  cu_PREREQ_STAT_PROG
91
92  # Check whether libcap is usable -- for ls --color support
93  LIB_CAP=
94  AC_ARG_ENABLE([libcap],
95    AS_HELP_STRING([--disable-libcap], [disable libcap support]))
96  if test "X$enable_libcap" != "Xno"; then
97    AC_CHECK_LIB([cap], [cap_get_file],
98      [AC_CHECK_HEADER([sys/capability.h],
99        [LIB_CAP=-lcap
100         AC_DEFINE([HAVE_CAP], [1], [libcap usability])]
101      )])
102    if test "X$LIB_CAP" = "X"; then
103      if test "X$enable_libcap" = "Xyes"; then
104        AC_MSG_ERROR([libcap library was not found or not usable])
105      else
106        AC_MSG_WARN([libcap library was not found or not usable.])
107        AC_MSG_WARN([AC_PACKAGE_NAME will be built without capability support.])
108      fi
109    fi
110  else
111    AC_MSG_WARN([libcap support disabled by user])
112  fi
113  AC_SUBST([LIB_CAP])
114
115  # See if linking 'seq' requires -lm.
116  # It does on nearly every system.  The single exception (so far) is
117  # BeOS which has all the math functions in the normal runtime library
118  # and doesn't have a separate math library.
119
120  AC_SUBST([SEQ_LIBM])
121  jm_break=:
122  for jm_seqlibs in '' '-lm'; do
123    jm_seq_save_LIBS=$LIBS
124    AC_LINK_IFELSE(
125      [AC_LANG_PROGRAM(
126         [[#include <math.h>
127         ]],
128         [[static double x, y;
129           x = floor (x);
130           x = rint (x);
131           x = modf (x, &y);]])],
132      [SEQ_LIBM=$jm_seqlibs
133       jm_break=break])
134    LIBS=$jm_seq_save_LIBS
135    $jm_break
136  done
137
138  # See is fpsetprec() required to use extended double precision
139  # This is needed on 32 bit FreeBSD to give accurate conversion of:
140  # `numfmt 9223372036854775808`
141  AC_LINK_IFELSE(
142    [AC_LANG_PROGRAM(
143       [[#include <ieeefp.h>
144       ]],
145       [[#ifdef __i386__
146          fpsetprec (FP_PE);
147         #else
148         # error not required on 64 bit
149         #endif
150       ]])],
151    [ac_have_fpsetprec=yes],
152    [ac_have_fpsetprec=no])
153  if test "$ac_have_fpsetprec" = "yes" ; then
154    AC_DEFINE([HAVE_FPSETPREC], 1, [whether fpsetprec is present and required])
155  fi
156
157  AC_REQUIRE([AM_LANGINFO_CODESET])
158
159  # Accept configure options: --with-tty-group[=GROUP], --without-tty-group
160  # You can determine the group of a TTY via 'stat --format %G /dev/tty'
161  # Omitting this option is equivalent to using --without-tty-group.
162  AC_ARG_WITH([tty-group],
163    AS_HELP_STRING([--with-tty-group[[[=NAME]]]],
164      [group used by system for TTYs, "tty" when not specified]
165      [ (default: do not rely on any group used for TTYs)]),
166    [tty_group_name=$withval],
167    [tty_group_name=no])
168
169  if test "x$tty_group_name" != xno; then
170    if test "x$tty_group_name" = xyes; then
171      tty_group_name=tty
172    fi
173    AC_MSG_NOTICE([TTY group used by system set to "$tty_group_name"])
174    AC_DEFINE_UNQUOTED([TTY_GROUP_NAME], ["$tty_group_name"],
175      [group used by system for TTYs])
176  fi
177])
178
179AC_DEFUN([gl_CHECK_ALL_HEADERS],
180[
181  AC_CHECK_HEADERS_ONCE([
182    hurd.h
183    linux/falloc.h
184    linux/fs.h
185    paths.h
186    priv.h
187    stropts.h
188    sys/mtio.h
189    sys/param.h
190    sys/systeminfo.h
191    syslog.h
192  ])
193  AC_CHECK_HEADERS([sys/sysctl.h], [], [],
194    [AC_INCLUDES_DEFAULT
195     [#if HAVE_SYS_PARAM_H
196       #include <sys/param.h>
197      #endif]])
198])
199
200# This macro must be invoked before any tests that run the compiler.
201AC_DEFUN([gl_CHECK_ALL_TYPES],
202[
203  dnl Checks for typedefs, structures, and compiler characteristics.
204  AC_REQUIRE([gl_BIGENDIAN])
205  AC_REQUIRE([AC_C_VOLATILE])
206  AC_REQUIRE([AC_C_INLINE])
207  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
208
209  AC_REQUIRE([gl_CHECK_ALL_HEADERS])
210  AC_CHECK_MEMBERS(
211    [struct stat.st_author],,,
212    [$ac_includes_default
213#include <sys/stat.h>
214  ])
215  AC_REQUIRE([AC_STRUCT_ST_BLOCKS])
216
217  AC_REQUIRE([AC_TYPE_GETGROUPS])
218  AC_REQUIRE([AC_TYPE_MBSTATE_T])
219  AC_REQUIRE([AC_TYPE_MODE_T])
220  AC_REQUIRE([AC_TYPE_OFF_T])
221  AC_REQUIRE([AC_TYPE_PID_T])
222  AC_REQUIRE([AC_TYPE_SIZE_T])
223  AC_REQUIRE([AC_TYPE_UID_T])
224  AC_CHECK_TYPE([ino_t], [unsigned long int])
225
226  dnl This relies on the fact that Autoconf's implementation of
227  dnl AC_CHECK_TYPE checks includes unistd.h.
228  AC_CHECK_TYPE([major_t], [unsigned int])
229  AC_CHECK_TYPE([minor_t], [unsigned int])
230
231  AC_REQUIRE([AC_HEADER_MAJOR])
232])
233