kill: with -l,-t list signal 0
[coreutils.git] / configure.ac
blobf167f226f7f80c71d170fa7640ee18cab1bc9ca6
1 # -*- autoconf -*-
2 # Process this file with autoconf to produce a configure script.
4 # Copyright (C) 1991-2024 Free Software Foundation, Inc.
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
19 dnl Written by Jim Meyering.
21 AC_PREREQ([2.69])
23 # Make inter-release version strings look like, e.g., v6.9-219-g58ddd, which
24 # indicates that it is built from the 219th delta (in _some_ repository)
25 # following the v6.9 tag, and that 58ddd is a prefix of the commit SHA1.
26 # The explicit URL can be removed when autoconf > 2.69 is released.
27 AC_INIT([GNU coreutils],
28         m4_esyscmd([build-aux/git-version-gen .tarball-version]),
29         [bug-coreutils@gnu.org],
30         [coreutils],
31         [https://www.gnu.org/software/coreutils/])
33 AC_CONFIG_SRCDIR([src/ls.c])
35 AC_CONFIG_AUX_DIR([build-aux])
36 AC_CONFIG_HEADERS([lib/config.h:lib/config.hin])
38 AM_INIT_AUTOMAKE([1.11.2 dist-xz color-tests parallel-tests subdir-objects])
39 AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
41 dnl POSIXCHECK is worthwhile for maintainers, but adds several seconds
42 dnl (more than 10% execution time) to ./configure, with no benefit for
43 dnl most users.  Using it to look for bugs requires:
44 dnl   GNULIB_POSIXCHECK=1 autoreconf -f
45 dnl   ./configure
46 dnl   make
47 dnl   make -C src clean
48 dnl   make CFLAGS=-DGNULIB_POSIXCHECK=1
49 dnl FIXME: Once we figure out how to avoid false positives, we should
50 dnl have 'make my-distcheck' in dist-check.mk exercise this.
51 m4_syscmd([test "${GNULIB_POSIXCHECK+set}" = set])
52 m4_if(m4_sysval, [0], [], [dnl
53 gl_ASSERT_NO_GNULIB_POSIXCHECK])
55 AC_PROG_CC
56 AM_PROG_CC_C_O
57 AC_PROG_CPP
58 AC_PROG_RANLIB
59 AC_PROG_EGREP
60 AC_PROG_LN_S
61 gl_EARLY
62 gl_SET_CRYPTO_CHECK_DEFAULT([auto-gpl-compat])
63 gl_INIT
64 coreutils_MACROS
66 # These are safe, since 'sort', coreutils's only multithreaded app,
67 # does not use the relevant modules.
68 AC_DEFINE([GNULIB_EXCLUDE_SINGLE_THREAD], [1],
69   [Define to 1 if apps call 'exclude' functions from a single thread.])
70 AC_DEFINE([GNULIB_REGEX_SINGLE_THREAD], [1],
71   [Define to 1 if apps call 'regex' functions from a single thread.])
72 # Although 'sort' is multithreaded and can use these functions,
73 # it uses them only from the main thread.
74 AC_DEFINE([GNULIB_MBRTOWC_SINGLE_THREAD], [1],
75   [Define to 1 if apps call mbrtowc, mbrtoc32, and 'regex' functions
76    from a single thread.])
77 # This is safe, since all apps set locale early.
78 AC_DEFINE([GNULIB_WCHAR_SINGLE_LOCALE], [1],
79   [Define to 1 if apps don't set the locale after calling
80    locale-sensitive functions like mbrtowc and wcwidth.])
82 AC_DEFINE([GNULIB_MBRTOC32_REGULAR], [1],
83   [Do not worry about rare encodings like CP864, EBCDIC, Johab, and Shift JIS
84    that glibc does not support.])
86 # The test suite needs to know if we have a working perl.
87 AM_CONDITIONAL([HAVE_PERL], [test "$gl_cv_prog_perl" != no])
89 # gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found])
90 # ------------------------------------------------
91 # If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND.
92 # Otherwise, run RUN-IF-NOT-FOUND.
93 AC_DEFUN([gl_GCC_VERSION_IFELSE],
94   [AC_PREPROC_IFELSE(
95     [AC_LANG_PROGRAM(
96       [[
97 #if ($1) < __GNUC__ || (($1) == __GNUC__ && ($2) <= __GNUC_MINOR__)
98 /* ok */
99 #else
100 # error "your version of gcc is older than $1.$2"
101 #endif
102       ]]),
103     ], [$3], [$4])
104   ]
107 AC_ARG_ENABLE([single-binary],
108   [AS_HELP_STRING([--enable-single-binary=[shebangs|symlinks]],
109      [Compile all the tools in a single binary, reducing the overall size.
110       When compiled this way, shebangs (default when enabled) or symlinks are
111       installed for each tool that points to the single binary.])],
112   [gl_single_binary=no ;
113    case $enableval in
114      yes) gl_single_binary=shebangs ;;
115      no|shebangs|symlinks) gl_single_binary=$enableval ;;
116      *)      AC_MSG_ERROR([bad value $enableval for single-binary option.
117                            Options are: symlinks, shebangs, no.]) ;;
118    esac],
119   [gl_single_binary=no]
121 AC_ARG_ENABLE([single-binary-exceptions],
122   [AS_HELP_STRING([--enable-single-binary-exceptions=PROG_LIST],
123      [When used with --enable-single-binary, exclude the PROG_LIST from
124       it, so these programs are compiled as separated files
125       (comma-separated, default none))])],
126   [gl_single_binary_exceptions=$enableval],
127   [gl_single_binary_exceptions=]
129 if test "$gl_single_binary" = 'symlinks'; then
130   if ! test "`echo ls | sed \"$program_transform_name\"`" = 'ls'; then
131     AC_MSG_ERROR([program name transformations are not currently supported
132                   with --enable-single-binary=symlinks.])
133   fi
135 AM_CONDITIONAL([SINGLE_BINARY], [test "$gl_single_binary" != no])
137 AC_ARG_ENABLE([bold-man-page-references],
138   [AS_HELP_STRING([--disable-bold-man-page-references],
139      [When generating man pages, do not apply bold style around any
140       references like name(1) etc.])],
141   [gl_bold_manpages=yes ;
142    case $enableval in
143      no|yes) gl_bold_manpages=$enableval ;;
144      *)      AC_MSG_ERROR([bad value $enableval for bold-man-page-references.
145                            Options are: yes, no.]) ;;
146    esac],
147   [gl_bold_manpages=yes]
149 AM_CONDITIONAL([BOLD_MAN_REFS], [test "$gl_bold_manpages" != no])
151 AC_ARG_ENABLE([gcc-warnings],
152   [AS_HELP_STRING([--enable-gcc-warnings@<:@=TYPE@:>@],
153     [control generation of GCC warnings.  The TYPE 'no' disables
154      warnings (default for non-developer builds); 'yes' generates
155      cheap warnings if available (default for developer builds);
156      'expensive' in addition generates expensive-to-compute warnings
157      if available.])],
158   [case $enableval in
159      no|yes|expensive) ;;
160      *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
161    esac
162    gl_gcc_warnings=$enableval],
163   [
164    # GCC provides fine-grained control over diagnostics which
165    # is used in gnulib for example to suppress warnings from
166    # certain sections of code.  So if this is available and
167    # we're running from a git repo, then auto enable the warnings.
168    gl_gcc_warnings=no
169    gl_GCC_VERSION_IFELSE([4], [6],
170                          [test -d "$srcdir"/.git \
171                           && ! test -f "$srcdir"/.tarball-version \
172                           && gl_gcc_warnings=yes])]
175 # clang is unduly picky about some things, even by default.
176 if test "$gl_cv_compiler_clang" = yes; then
177   gl_WARN_ADD([-Wno-format-extra-args])
178   gl_WARN_ADD([-Wno-implicit-const-int-float-conversion])
179   gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare])
182 if test $gl_gcc_warnings != no; then
183   gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
184   AC_SUBST([WERROR_CFLAGS])
186   ew=
187   AS_IF([test $gl_gcc_warnings != expensive],
188     [# -fanalyzer and related options slow GCC considerably.
189      ew="$ew -fanalyzer -Wno-analyzer-malloc-leak"])
191   # This, $nw, is the list of warnings we disable.
192   nw=$ew
193   nw="$nw -Wdeclaration-after-statement" # too useful to forbid
194   nw="$nw -Waggregate-return"       # anachronistic
195   nw="$nw -Wlong-long"              # C90 is anachronistic (lib/gethrxtime.h)
196   nw="$nw -Wc++-compat"             # We don't care about C++ compilers
197   nw="$nw -Wundef"                  # Warns on '#if GNULIB_FOO' etc in gnulib
198   nw="$nw -Wtraditional"            # Warns on #elif which we use often
199   nw="$nw -Wcast-qual"              # Too many warnings for now
200   nw="$nw -Wconversion"             # Too many warnings for now
201   nw="$nw -Wsign-conversion"        # Too many warnings for now
202   nw="$nw -Wtraditional-conversion" # Too many warnings for now
203   nw="$nw -Wunreachable-code"       # Too many warnings for now
204   nw="$nw -Wpadded"                 # Our structs are not padded
205   nw="$nw -Wredundant-decls"        # openat.h declares e.g., mkdirat
206   nw="$nw -Wformat-nonliteral"      # who.c and pinky.c strftime uses
207   nw="$nw -Wnested-externs"         # use of XARGMATCH/verify_function__
208   nw="$nw -Wswitch-enum"            # Too many warnings for now
209   nw="$nw -Wswitch-default"         # Too many warnings for now
210   nw="$nw -Wstack-protector"        # not worth working around
211   nw="$nw -Wformat-overflow=2"      # False alarms due to GCC bug 110333
212   nw="$nw -Wformat-truncation=2"    # False alarm in ls.c, probably related
213   # things I might fix soon:
214   nw="$nw -Wfloat-equal"            # sort.c, seq.c
215   nw="$nw -Wmissing-format-attribute" # copy.c
216   nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c
217   nw="$nw -Winline"                 # system.h's readdir_ignoring_dot_and_dotdot
218   nw="$nw -Wvector-operation-performance" # warns about randperm.c
220   # Suppress noreturn warnings with single binaries; otherwise
221   # GCC complains about the renamed 'main' not being declared noreturn
222   # because 'main_exit' calls 'exit' when linting.
223   if test "$gl_single_binary" != no; then
224     nw="$nw -Wsuggest-attribute=noreturn"
225   fi
227   # Using -Wstrict-overflow is a pain, but the alternative is worse.
228   # For an example, see the code that provoked this report:
229   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=33498
230   # Code like that still infloops with gcc-4.6.0 and -O2.  Scary indeed.
232   gl_MANYWARN_ALL_GCC([ws])
233   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
234   for w in $ws; do
235     gl_WARN_ADD([$w])
236   done
237   gl_WARN_ADD([-Wno-sign-compare])     # Too many warnings for now
238   gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
239   gl_WARN_ADD([-Wno-format-nonliteral])
241   gl_WARN_ADD([-fdiagnostics-show-option])
242   gl_WARN_ADD([-funit-at-a-time])
244   AC_SUBST([WARN_CFLAGS])
246   AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
247   AH_VERBATIM([FORTIFY_SOURCE],
248   [/* Enable compile-time and run-time bounds-checking, and some warnings,
249       without upsetting glibc 2.15+. */
250    #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
251    # define _FORTIFY_SOURCE 2
252    #endif
253   ])
254   AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
256   # We use a slightly smaller set of warning options for lib/.
257   # Remove the following and save the result in GNULIB_WARN_CFLAGS.
258   nw=$ew
259   nw="$nw -Wduplicated-branches"    # Too many false alarms
260   nw="$nw -Wformat-truncation=2"
261   nw="$nw -Wmissing-variable-declarations"
262   nw="$nw -Wstrict-overflow"
263   nw="$nw -Wuninitialized"
264   nw="$nw -Wunused-macros"
265   nw="$nw -Wmissing-prototypes"
266   nw="$nw -Wold-style-definition"
267   # FIXME: it may be easy to remove this, since it affects only one file:
268   # the snprintf call at ftoastr.c:132.
269   nw="$nw -Wdouble-promotion"
271   # FIXME: remove this line when gcc improves
272   # FP in careadlinkat.c w/gcc 10.0.1 20200205
273   gl_WARN_ADD([-Wno-return-local-addr])
275   # FIXME: remove this line when gcc improves
276   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88443
277   gl_WARN_ADD([-Wno-stringop-overflow])
279   gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
280   AC_SUBST([GNULIB_WARN_CFLAGS])
282   # For gnulib-tests, the set is slightly smaller still.
283   nw=
284   nw="$nw -Wstrict-prototypes"
285   # It's not worth being this picky about test programs.
286   nw="$nw -Wsuggest-attribute=cold"
287   nw="$nw -Wsuggest-attribute=const"
288   nw="$nw -Wsuggest-attribute=format"
289   nw="$nw -Wsuggest-attribute=pure"
290   gl_MANYWARN_COMPLEMENT([GNULIB_TEST_WARN_CFLAGS],
291                          [$GNULIB_WARN_CFLAGS], [$nw])
292   AC_SUBST([GNULIB_TEST_WARN_CFLAGS])
295 AC_FUNC_FORK
297 optional_bin_progs=
298 AC_CHECK_FUNCS([chroot],
299         gl_ADD_PROG([optional_bin_progs], [chroot]))
300 AC_CHECK_FUNCS([gethostid],
301         gl_ADD_PROG([optional_bin_progs], [hostid]))
302 AC_CHECK_FUNCS([sigsuspend],
303         gl_ADD_PROG([optional_bin_progs], [timeout]))
305 gl_WINSIZE_IN_PTEM
307 AC_MSG_CHECKING([whether localtime caches TZ])
308 AC_CACHE_VAL([utils_cv_localtime_cache],
309 [if test x$ac_cv_func_tzset = xyes; then
310 AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <time.h>
311 #if STDC_HEADERS
312 # include <stdlib.h>
313 #endif
314 extern char **environ;
315 void unset_TZ (void)
317   char **from, **to;
318   for (to = from = environ; (*to = *from); from++)
319     if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
320       to++;
323 main ()
325   time_t now = time ((time_t *) 0);
326   int hour_GMT0, hour_unset;
327   if (putenv ("TZ=GMT0") != 0)
328     return 1;
329   hour_GMT0 = localtime (&now)->tm_hour;
330   unset_TZ ();
331   hour_unset = localtime (&now)->tm_hour;
332   if (putenv ("TZ=PST8") != 0)
333     return 1;
334   if (localtime (&now)->tm_hour == hour_GMT0)
335     return 1;
336   unset_TZ ();
337   if (localtime (&now)->tm_hour != hour_unset)
338     return 1;
339   return 0;
340 }]])],
341 [utils_cv_localtime_cache=no],
342 [utils_cv_localtime_cache=yes],
343 [# If we have tzset, assume the worst when cross-compiling.
344 utils_cv_localtime_cache=yes])
345 else
346         # If we lack tzset, report that localtime does not cache TZ,
347         # since we can't invalidate the cache if we don't have tzset.
348         utils_cv_localtime_cache=no
349 fi])dnl
350 AC_MSG_RESULT([$utils_cv_localtime_cache])
351 if test $utils_cv_localtime_cache = yes; then
352   AC_DEFINE([LOCALTIME_CACHE], [1], [FIXME])
355 # Find the library for dynamic loading of shared libraries.
356 AC_SEARCH_LIBS([dlopen], [dl])
357 AS_CASE([$ac_cv_search_dlopen],
358   [no | 'none required'],
359     [LIB_DL=],
360   [*],
361     [LIB_DL="$ac_cv_search_dlopen"])
362 AC_SUBST([LIB_DL])
364 # Should 'sort' link libcrypto dynamically?
365 AS_CASE([$LIB_CRYPTO],
366   [-lcrypto],
367     [# Check for dlopen and libcrypto dynamic linking in one program,
368      # as there's little point to checking them separately.
369      AC_CACHE_CHECK([for dlopen and whether libcrypto is linked dynamically],
370        [utils_cv_dlopen_libcrypto],
371        [utils_cv_dlopen_libcrypto=no
372         saved_LIBS=$LIBS
373         LIBS="$LIBS $LIB_DL $LIB_CRYPTO"
374         AC_LINK_IFELSE(
375           [AC_LANG_PROGRAM(
376              [[#include <dlfcn.h>
377                #include <openssl/sha.h>
378                /* Use SHA512 rather than MD5 here to avoid deprecation warnings.
379                   So need to check HAVE_OPENSSL_MD5.. with DLOPEN_LIBCRYPTO. */
380              ]],
381              [[return !(dlopen ("libcrypto.so", RTLD_LAZY | RTLD_GLOBAL)
382                         && SHA512 (0, 0, 0));]])],
383           [# readelf works with cross-builds; ldd works on more platforms.
384            LIBCRYPTO_SONAME="`(readelf -d conftest$EXEEXT || ldd conftest$EXEEXT
385                               ) 2>/dev/null |
386                               sed -n 's/.*\(libcrypto\.so\.[[.0-9]]*\).*/\1/p'`"
387            AS_CASE([$LIBCRYPTO_SONAME],
388              [*libcrypto*],
389                [utils_cv_dlopen_libcrypto=yes])])
390         LIBS=$saved_LIBS])
391      AS_CASE([$utils_cv_dlopen_libcrypto],
392        [yes],
393          [AC_DEFINE([DLOPEN_LIBCRYPTO], [1],
394                     [Define to 1 if dlopen exists and libcrypto is
395                      linked dynamically.])
396           AC_DEFINE_UNQUOTED([LIBCRYPTO_SONAME], ["$LIBCRYPTO_SONAME"],
397                              [versioned libcrypto])
398          ])])
400 # macOS >= 10.12
401 AC_CHECK_FUNCS([fclonefileat])
403 # Assume that if getattrat exists, it's compatible with Solaris 11.
404 AC_CHECK_FUNCS([getattrat])
405 if test $ac_cv_func_getattrat = yes; then
406   LIB_NVPAIR=-lnvpair
407   AC_SUBST([LIB_NVPAIR])
410 # glibc >= 2.28 and linux kernel >= 4.11
411 AC_CHECK_FUNCS([statx])
413 # SCO-ODT-3.0 is reported to need -los to link programs using initgroups
414 AC_CHECK_FUNCS([initgroups])
415 if test $ac_cv_func_initgroups = no; then
416   AC_CHECK_LIB([os], [initgroups])
419 AC_CHECK_FUNCS([syslog])
420 if test $ac_cv_func_syslog = no; then
421   # syslog is not in the default libraries.  See if it's in some other.
422   for lib in bsd socket inet; do
423     AC_CHECK_LIB([$lib], [syslog], [AC_DEFINE([HAVE_SYSLOG], [1], [FIXME])
424       LIBS="$LIBS -l$lib"; break])
425   done
428 AC_CACHE_CHECK([for 3-argument setpriority function],
429   [utils_cv_func_setpriority],
430   [AC_LINK_IFELSE(
431     [AC_LANG_PROGRAM(
432        [[#include <sys/time.h>
433          #include <sys/resource.h>
434        ]],
435        [[setpriority (0, 0, 0);]])],
436     [utils_cv_func_setpriority=yes],
437     [utils_cv_func_setpriority=no])])
438 if test $utils_cv_func_setpriority = no; then
439   AC_CHECK_FUNCS([nice])
441 case $utils_cv_func_setpriority,$ac_cv_func_nice in
442 *yes*)
443   gl_ADD_PROG([optional_bin_progs], [nice])
444 esac
446 if test "$cross_compiling" = yes || test -c /dev/stdin <.; then
447   AC_DEFINE([DEV_FD_MIGHT_BE_CHR], [1],
448     [Define to 1 if /dev/std{in,out,err} and /dev/fd/N, if they exist, might be
449      character-special devices whose minor device number is the file
450      descriptor number, such as on Solaris.  Leave undefined if they are
451      definitely the actual files.  This determination should be done after any
452      symbolic links are followed.])
455 AC_DEFUN([coreutils_DUMMY_1],
457   AC_REQUIRE([gl_READUTMP])
458   if test $ac_cv_header_utmp_h = yes || test $ac_cv_header_utmpx_h = yes; then
459     gl_ADD_PROG([optional_bin_progs], [who])
460     gl_ADD_PROG([optional_bin_progs], [users])
461     gl_ADD_PROG([optional_bin_progs], [pinky])
462   fi
464 coreutils_DUMMY_1
466 AC_SYS_POSIX_TERMIOS()
467 gl_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
469 if test $ac_cv_sys_posix_termios = yes; then
470   gl_ADD_PROG([optional_bin_progs], [stty])
472   AC_MSG_CHECKING([whether termios.h needs _XOPEN_SOURCE])
473   AC_CACHE_VAL([su_cv_sys_termios_needs_xopen_source],
474   [AC_EGREP_CPP([yes], [#include <termios.h>
475 #ifdef IUCLC
477 #endif], su_cv_sys_termios_needs_xopen_source=no,
478    AC_EGREP_CPP([yes], [#define _XOPEN_SOURCE
479 #include <termios.h>
480 #ifdef IUCLC
482 #endif], su_cv_sys_termios_needs_xopen_source=yes,
483    su_cv_sys_termios_needs_xopen_source=no))])
484   AC_MSG_RESULT([$su_cv_sys_termios_needs_xopen_source])
485   test $su_cv_sys_termios_needs_xopen_source = yes &&
486     AC_DEFINE([TERMIOS_NEEDS_XOPEN_SOURCE], [1], [FIXME])
488   AC_MSG_CHECKING([c_line in struct termios])
489   AC_CACHE_VAL([su_cv_sys_c_line_in_termios],
490   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if TERMIOS_NEEDS_XOPEN_SOURCE
491                                       #define _XOPEN_SOURCE
492                                      #endif
493                                      #include <sys/types.h>
494                                      #include <termios.h>
495                                      struct termios t;
496                                      int s = sizeof t.c_line;]])],
497     [su_cv_sys_c_line_in_termios=yes],
498     [su_cv_sys_c_line_in_termios=no])])
499   AC_MSG_RESULT([$su_cv_sys_c_line_in_termios])
500   test $su_cv_sys_c_line_in_termios = yes \
501     && AC_DEFINE([HAVE_C_LINE], [1], [FIXME])
504 # FIXME: note that this macro appears above, too.
505 # I'm leaving it here for now.  This whole thing needs to be modernized...
506 gl_WINSIZE_IN_PTEM
508 gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H
510 if test $gl_cv_sys_tiocgwinsz_needs_termios_h = no && \
511    test $gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h = no; then
512   AC_MSG_CHECKING([TIOCGWINSZ in sys/pty.h])
513   AC_CACHE_VAL([su_cv_sys_tiocgwinsz_in_sys_pty_h],
514   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
515 #ifdef WINSIZE_IN_PTEM
516 # include <sys/stream.h>
517 # include <sys/ptem.h>
518 #endif
519 #include <sys/ioctl.h>
520 #include <sys/tty.h>
521 #include <sys/pty.h>]], [[int x = TIOCGWINSZ;]])],
522     [su_cv_sys_tiocgwinsz_in_sys_pty_h=yes],
523     [su_cv_sys_tiocgwinsz_in_sys_pty_h=no])])
524   AC_MSG_RESULT([$su_cv_sys_tiocgwinsz_in_sys_pty_h])
526   test $su_cv_sys_tiocgwinsz_in_sys_pty_h = yes \
527       && AC_DEFINE([GWINSZ_IN_SYS_PTY], [1],
528                    [Define if your system defines TIOCGWINSZ in sys/pty.h.])
531 # Build df only if there's a point to it.
532 if test $gl_cv_list_mounted_fs = yes && test $gl_cv_fs_space = yes; then
533   gl_ADD_PROG([optional_bin_progs], [df])
536 # Build stdbuf only if supported
537 ac_save_CFLAGS=$CFLAGS
538 ac_save_LDFLAGS=$LDFLAGS
539 cu_save_c_werror_flag=$ac_c_werror_flag
540 AC_LANG_WERROR
541 # Detect warnings about ignored "constructor" attributes.
542 gl_WARN_ADD([-Werror], [CFLAGS])
543 gl_WARN_ADD([-errwarn], [CFLAGS])
544 # Put this message here, after gl_WARN_ADD's chatter.
545 AC_MSG_CHECKING([whether this system supports stdbuf])
546 CFLAGS="-fPIC $CFLAGS"
547 LDFLAGS="-shared $LDFLAGS"
548 AC_CACHE_VAL([utils_cv_stdbuf_supported],[
549 utils_cv_stdbuf_supported=no
550 # Note we only LINK here rather than RUN to support cross compilation
551 AC_LINK_IFELSE(
552   [AC_LANG_PROGRAM([[
553     static int stdbuf = 0;
555     void __attribute__ ((constructor))
556     stdbuf_init (void)
557     {
558       stdbuf = 1;
559     }]],[[
560     if (stdbuf != 1)
561       return 1;]])
562   ],
563   [utils_cv_stdbuf_supported=yes])])
564 AC_MSG_RESULT([$utils_cv_stdbuf_supported])
565 if test "$utils_cv_stdbuf_supported" = "yes" && test -z "$EXEEXT"; then
566   gl_ADD_PROG([optional_bin_progs], [stdbuf])
568 CFLAGS=$ac_save_CFLAGS
569 LDFLAGS=$ac_save_LDFLAGS
570 ac_c_werror_flag=$cu_save_c_werror_flag
572 # Test compiler support for half precision floating point types (for od)
573 AC_MSG_CHECKING([IEEE 16 bit floating point])
574 AC_CACHE_VAL([utils_cv_ieee_16_bit_supported],[
575  AC_RUN_IFELSE(
576    [AC_LANG_SOURCE([[
577      int
578      main (void)
579      {
580         volatile _Float16 hf = 1;
581         float f = hf;  /* Ensure compiler can promote to float.  */
582         return !(f == 1.0f);
583      }
584   ]])
585   ],[
586     utils_cv_ieee_16_bit_supported=yes
587   ],[
588     utils_cv_ieee_16_bit_supported=no
589   ],[
590     utils_cv_ieee_16_bit_supported=no
591   ])])
592 AC_MSG_RESULT([$utils_cv_ieee_16_bit_supported])
593 if test $utils_cv_ieee_16_bit_supported = yes; then
594   AC_DEFINE([FLOAT16_SUPPORTED], [1], [IEEE 16 bit float supported])
597 AC_MSG_CHECKING([Brain 16 bit floating point])
598 AC_CACHE_VAL([utils_cv_brain_16_bit_supported],[
599  AC_RUN_IFELSE(
600    [AC_LANG_SOURCE([[
601      int
602      main (void)
603      {
604         volatile __bf16 hf = 1;
605         float f = hf;  /* Ensure compiler can promote to float.  */
606         return !(f == 1.0f);
607      }
608   ]])
609   ],[
610     utils_cv_brain_16_bit_supported=yes
611   ],[
612     utils_cv_brain_16_bit_supported=no
613   ],[
614     utils_cv_brain_16_bit_supported=no
615   ])])
616 AC_MSG_RESULT([$utils_cv_brain_16_bit_supported])
617 if test $utils_cv_brain_16_bit_supported = yes; then
618   AC_DEFINE([BF16_SUPPORTED], [1], [Brain 16 bit float supported])
621 ac_save_CFLAGS=$CFLAGS
622 CFLAGS="-march=armv8-a+crypto $CFLAGS"
623 AC_MSG_CHECKING([if vmull intrinsic exists])
624 AC_CACHE_VAL([utils_cv_vmull_intrinsic_exists],[
625 AC_LINK_IFELSE(
626   [AC_LANG_SOURCE([[
627     #include <stdio.h>
628     #include <sys/auxv.h>
629     #include <asm/hwcap.h>
630     #include <arm_neon.h>
632     int
633     main (void)
634     {
635       uint64x2_t a;
636       poly64_t shift64 = vget_lane_p64(vcreate_p64(0xB8BC6765), 0);
637       a = vreinterpretq_u64_p128(vmull_p64(shift64, vreinterpretq_p128_u64(a)));
638       return (getauxval(AT_HWCAP) & HWCAP_PMULL) > 0;
639     }
640   ]])
641   ],[
642     utils_cv_vmull_intrinsic_exists=yes
643   ],[
644     utils_cv_vmull_intrinsic_exists=no
645   ])])
646 AC_MSG_RESULT([$utils_cv_vmull_intrinsic_exists])
647 if test $utils_cv_vmull_intrinsic_exists = yes; then
648   AC_DEFINE([USE_VMULL_CRC32], [1],
649             [CRC32 calculation by vmull hardware instruction enabled])
651 AM_CONDITIONAL([USE_VMULL_CRC32],
652                [test $utils_cv_vmull_intrinsic_exists = yes])
653 CFLAGS=$ac_save_CFLAGS
655 ac_save_CFLAGS=$CFLAGS
656 CFLAGS="-mavx -mpclmul $CFLAGS"
657 AC_MSG_CHECKING([if pclmul intrinsic exists])
658 AC_CACHE_VAL([utils_cv_pclmul_intrinsic_exists],[
659 AC_LINK_IFELSE(
660   [AC_LANG_SOURCE([[
661     #include <x86intrin.h>
663     int
664     main (void)
665     {
666       __m128i a, b;
667       a = _mm_clmulepi64_si128 (a, b, 0x00);
668       a = _mm_shuffle_epi8 (a, b);
669       return __builtin_cpu_supports ("pclmul");
670     }
671   ]])
672   ],[
673     utils_cv_pclmul_intrinsic_exists=yes
674   ],[
675     utils_cv_pclmul_intrinsic_exists=no
676   ])])
677 AC_MSG_RESULT([$utils_cv_pclmul_intrinsic_exists])
678 if test $utils_cv_pclmul_intrinsic_exists = yes; then
679   AC_DEFINE([USE_PCLMUL_CRC32], [1],
680             [CRC32 calculation by pclmul hardware instruction enabled])
682 AM_CONDITIONAL([USE_PCLMUL_CRC32],
683                [test $utils_cv_pclmul_intrinsic_exists = yes])
684 CFLAGS=$ac_save_CFLAGS
686 ac_save_CFLAGS=$CFLAGS
687 CFLAGS=" -mavx2 -mvpclmulqdq $CFLAGS"
688 AC_MSG_CHECKING([if avx2 pclmul intrinsic exists])
689 AC_CACHE_VAL([utils_cv_avx2_pclmul_intrinsic_exists],[
690 AC_LINK_IFELSE(
691   [AC_LANG_SOURCE([[
692     #include <x86intrin.h>
694     int
695     main (void)
696     {
697       __m256i a, b;
698       a = _mm256_clmulepi64_epi128 (a, b, 0x00);
699       a = _mm256_shuffle_epi8 (a, b);
700       return __builtin_cpu_supports ("avx2") &&
701         __builtin_cpu_supports ("vpclmulqdq");
702     }
703   ]])
704   ],[
705     utils_cv_avx2_pclmul_intrinsic_exists=yes
706   ],[
707     utils_cv_avx2_pclmul_intrinsic_exists=no
708   ])])
709 AC_MSG_RESULT([$utils_cv_avx2_pclmul_intrinsic_exists])
710 if test $utils_cv_avx2_pclmul_intrinsic_exists = yes; then
711   AC_DEFINE([USE_AVX2_CRC32], [1],
712             [CRC32 calculation by avx2 hardware instructions enabled])
714 AM_CONDITIONAL([USE_AVX2_CRC32],
715                [test $utils_cv_avx2_pclmul_intrinsic_exists = yes])
716 CFLAGS=$ac_save_CFLAGS
718 ac_save_CFLAGS=$CFLAGS
719 CFLAGS=" -mavx512bw -mavx512f -mvpclmulqdq $CFLAGS"
720 AC_MSG_CHECKING([if avx512 pclmul intrinsic exists])
721 AC_CACHE_VAL([utils_cv_avx512_pclmul_intrinsic_exists],[
722 AC_LINK_IFELSE(
723   [AC_LANG_SOURCE([[
724     #include <x86intrin.h>
726     int
727     main (void)
728     {
729       __m512i a, b;
730       a = _mm512_clmulepi64_epi128 (a, b, 0x00);
731       a = _mm512_shuffle_epi8 (a, b);
732       return __builtin_cpu_supports ("avx512bw") &&
733         __builtin_cpu_supports ("avx512f");
734     }
735   ]])
736   ],[
737     utils_cv_avx512_pclmul_intrinsic_exists=yes
738   ],[
739     utils_cv_avx512_pclmul_intrinsic_exists=no
740   ])])
741 AC_MSG_RESULT([$utils_cv_avx512_pclmul_intrinsic_exists])
742 if test $utils_cv_avx512_pclmul_intrinsic_exists = yes; then
743   AC_DEFINE([USE_AVX512_CRC32], [1],
744             [CRC32 calculation by avx512 hardware instructions enabled])
746 AM_CONDITIONAL([USE_AVX512_CRC32],
747                [test $utils_cv_avx512_pclmul_intrinsic_exists = yes])
748 CFLAGS=$ac_save_CFLAGS
750 CFLAGS="-mavx2 $CFLAGS"
751 AC_MSG_CHECKING([for avx2 intrinsics])
752 AC_CACHE_VAL([utils_cv_avx2_intrinsic_exists],[
753 AC_LINK_IFELSE(
754   [AC_LANG_SOURCE([[
755     #include <x86intrin.h>
757     int
758     main (void)
759     {
760       __m256i matches = _mm256_setzero_si256 ();
761       int mask = _mm256_movemask_epi8 (matches);
762       int lines = __builtin_popcount (mask);
763       return __builtin_cpu_supports ("avx2");
764     }
765   ]])
766   ],[
767     utils_cv_avx2_intrinsic_exists=yes
768   ],[
769     utils_cv_avx2_intrinsic_exists=no
770   ])])
771 AC_MSG_RESULT([$utils_cv_avx2_intrinsic_exists])
772 if test $utils_cv_avx2_intrinsic_exists = yes; then
773   AC_DEFINE([USE_AVX2_WC_LINECOUNT], [1], [Counting lines with AVX2 enabled])
775 AM_CONDITIONAL([USE_AVX2_WC_LINECOUNT],
776                [test $utils_cv_avx2_intrinsic_exists = yes])
778 CFLAGS=$ac_save_CFLAGS
780 ############################################################################
782 dnl Autogenerated by the 'gen-lists-of-programs.sh' auxiliary script.
783 dnl Issue proper calls to the macros gl_INCLUDE_EXCLUDE_PROG and
784 dnl gl_ADD_PROG (updating $optional_bin_progs), and generate the list
785 dnl of coreutils programs to be built only upon explicit user request,
786 dnl saving that list in the $no_install_progs_default shell variable.
787 m4_include([m4/cu-progs.m4])
789 # Now that we know which programs will actually be built, determine
790 # which optional helper progs should be compiled.
791 # Note it adding to pkglibexec_PROGRAMS, $(transform) in src/local.mk
792 # may need to be updated accordingly.
793 case " $optional_bin_progs " in
794   *' stdbuf '*) pkglibexec_PROGRAMS='src/libstdbuf.so';;
795   *) pkglibexec_PROGRAMS='';;
796 esac
798 man1_MANS=`
799   for p in $optional_bin_progs; do
800     # Change "ginstall.1" to "install.1".
801     test $p = ginstall && p=install
802     # Ignore the "[" program, since writing a portable make rule to
803     # generate its manpage is not practical.
804     dnl Use the autoconf-provided quadrigraph to represent "[",
805     dnl otherwise we will incur in dreadful quoting issues.
806     test x$p = x'@<:@' && continue
807     echo "man/$p.1"
808   done`
810 # Not installed by "make install", but must be built when creating
811 # a distribution tarball.
812 EXTRA_MANS=`for p in $no_install_progs_default $gl_no_install_prog; do
813               echo man/$p.1
814             done`
816 # Replace all the programs by the single binary and symlinks if specified.
817 single_binary_progs=
818 single_binary_libs=
819 single_binary_deps=
820 single_binary_install_type=
821 if test "$gl_single_binary" != no; then
822   man1_MANS="$man1_MANS man/coreutils.1"
823   # Convert the list to a space separated list
824   gl_single_binary_exceptions=`echo $gl_single_binary_exceptions | tr ',' ' '`
826   single_binary_progs=`echo $optional_bin_progs`
827   optional_bin_progs="coreutils"
828   for prog in $gl_single_binary_exceptions; do
829     # Fail if requested to exclude a program than was not part of coreutils.
830     case " $single_binary_progs " in
831       *" $prog "*)
832         gl_REMOVE_PROG([single_binary_progs], [$prog]) ;
833         gl_ADD_PROG([optional_bin_progs], [$prog]) ;;
834       *) AC_MSG_ERROR(['$prog' is not being compiled.]) ;;
835     esac
836   done
838   # single_binary_libs holds the list of libs required by the selected
839   # programs, such as for example -lrt.
840   single_binary_libs=`
841     for p in $single_binary_progs; do
842       # Convert '[' to '_'
843       test x"$p" = x'@<:@' && p='_'
844       printf '$(src_libsinglebin_%s_a_ldadd) ' "$p"
845     done`
846   # single_binary_deps holds the list of libsinglebin_*.a files that have the
847   # compiled code of each selected program in a "library" format.
848   single_binary_deps=`
849     for p in $single_binary_progs; do
850       # Convert '[' to '_'
851       test x"$p" = x'@<:@' && p='_'
852       printf 'src/libsinglebin_%s.a ' "$p"
853     done`
854   single_binary_install_type="$gl_single_binary"
856 AC_SUBST([single_binary_progs], [$single_binary_progs])
857 AC_SUBST([single_binary_libs], [$single_binary_libs])
858 AC_SUBST([single_binary_deps], [$single_binary_deps])
859 AC_SUBST([single_binary_install_type], [$single_binary_install_type])
862 # The programs built and installed by "make && make install".
863 # Since this is AC_SUBST'd, Automake won't be able to perform rewrite
864 # with $(EXEEXT) appending on it, so we have to do it ourselves -- in
865 # this case, only for $(bin_PROGRAMS).
866 bin_PROGRAMS=`
867   for p in $optional_bin_progs; do echo src/"$p"'$(EXEEXT)'; done`
869 # Normalize whitespace.
870 man1_MANS=`echo $man1_MANS`
871 EXTRA_MANS=`echo $EXTRA_MANS`
872 bin_PROGRAMS=`echo $bin_PROGRAMS`
873 pkglibexec_PROGS=`echo $pkglibexec_PROGRAMS`
875 AC_SUBST([bin_PROGRAMS])        AM_SUBST_NOTMAKE([bin_PROGRAMS])
876 AC_SUBST([pkglibexec_PROGRAMS]) AM_SUBST_NOTMAKE([pkglibexec_PROGRAMS])
877 AC_SUBST([man1_MANS])           AM_SUBST_NOTMAKE([man1_MANS])
878 AC_SUBST([EXTRA_MANS])          AM_SUBST_NOTMAKE([EXTRA_MANS])
880 AC_SUBST([built_programs], [$optional_bin_progs])
882 AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = yes])
884 ############################################################################
886 # As long as "grep 'PRI[diouxX]' po/*.pot" reports matches in
887 # translatable strings, we must use need-formatstring-macros here.
888 AM_GNU_GETTEXT([external], [need-formatstring-macros])
889 AM_GNU_GETTEXT_VERSION([0.19.2])
891 # For a test of uniq: it uses the $LOCALE_FR envvar.
892 gt_LOCALE_FR
894 AC_CONFIG_FILES(
895   Makefile
896   po/Makefile.in
897   gnulib-tests/Makefile
898   )
899 AC_OUTPUT