timeout: fix race where we might kill arbitrary processes
[coreutils.git] / configure.ac
blob248e30ca2b99e9da2bb78fcf130829550c006071
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 -Wsystem-headers"         # Don't let system headers trigger warnings
202   nw="$nw -Wsign-conversion"        # Too many warnings for now
203   nw="$nw -Wtraditional-conversion" # Too many warnings for now
204   nw="$nw -Wunreachable-code"       # Too many warnings for now
205   nw="$nw -Wpadded"                 # Our structs are not padded
206   nw="$nw -Wredundant-decls"        # openat.h declares e.g., mkdirat
207   nw="$nw -Wformat-nonliteral"      # who.c and pinky.c strftime uses
208   nw="$nw -Wnested-externs"         # use of XARGMATCH/verify_function__
209   nw="$nw -Wswitch-enum"            # Too many warnings for now
210   nw="$nw -Wswitch-default"         # Too many warnings for now
211   nw="$nw -Wstack-protector"        # not worth working around
212   nw="$nw -Wformat-overflow=2"      # False alarms due to GCC bug 110333
213   nw="$nw -Wformat-truncation=2"    # False alarm in ls.c, probably related
214   # things I might fix soon:
215   nw="$nw -Wfloat-equal"            # sort.c, seq.c
216   nw="$nw -Wmissing-format-attribute" # copy.c
217   nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c
218   nw="$nw -Winline"                 # system.h's readdir_ignoring_dot_and_dotdot
219   nw="$nw -Wvector-operation-performance" # warns about randperm.c
221   # Suppress noreturn warnings with single binaries; otherwise
222   # GCC complains about the renamed 'main' not being declared noreturn
223   # because 'main_exit' calls 'exit' when linting.
224   if test "$gl_single_binary" != no; then
225     nw="$nw -Wsuggest-attribute=noreturn"
226   fi
228   # Using -Wstrict-overflow is a pain, but the alternative is worse.
229   # For an example, see the code that provoked this report:
230   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=33498
231   # Code like that still infloops with gcc-4.6.0 and -O2.  Scary indeed.
233   gl_MANYWARN_ALL_GCC([ws])
234   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
235   for w in $ws; do
236     gl_WARN_ADD([$w])
237   done
238   gl_WARN_ADD([-Wno-sign-compare])     # Too many warnings for now
239   gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
240   gl_WARN_ADD([-Wno-format-nonliteral])
242   gl_WARN_ADD([-fdiagnostics-show-option])
243   gl_WARN_ADD([-funit-at-a-time])
245   AC_SUBST([WARN_CFLAGS])
247   AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
248   AH_VERBATIM([FORTIFY_SOURCE],
249   [/* Enable compile-time and run-time bounds-checking, and some warnings,
250       without upsetting glibc 2.15+. */
251    #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
252    # define _FORTIFY_SOURCE 2
253    #endif
254   ])
255   AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
257   # We use a slightly smaller set of warning options for lib/.
258   # Remove the following and save the result in GNULIB_WARN_CFLAGS.
259   nw=$ew
260   nw="$nw -Wduplicated-branches"    # Too many false alarms
261   nw="$nw -Wformat-truncation=2"
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=const"
287   nw="$nw -Wsuggest-attribute=format"
288   nw="$nw -Wsuggest-attribute=pure"
289   gl_MANYWARN_COMPLEMENT([GNULIB_TEST_WARN_CFLAGS],
290                          [$GNULIB_WARN_CFLAGS], [$nw])
291   AC_SUBST([GNULIB_TEST_WARN_CFLAGS])
294 AC_FUNC_FORK
296 optional_bin_progs=
297 AC_CHECK_FUNCS([chroot],
298         gl_ADD_PROG([optional_bin_progs], [chroot]))
299 AC_CHECK_FUNCS([gethostid],
300         gl_ADD_PROG([optional_bin_progs], [hostid]))
301 AC_CHECK_FUNCS([sigsuspend],
302         gl_ADD_PROG([optional_bin_progs], [timeout]))
304 gl_WINSIZE_IN_PTEM
306 AC_MSG_CHECKING([whether localtime caches TZ])
307 AC_CACHE_VAL([utils_cv_localtime_cache],
308 [if test x$ac_cv_func_tzset = xyes; then
309 AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <time.h>
310 #if STDC_HEADERS
311 # include <stdlib.h>
312 #endif
313 extern char **environ;
314 void unset_TZ (void)
316   char **from, **to;
317   for (to = from = environ; (*to = *from); from++)
318     if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
319       to++;
322 main ()
324   time_t now = time ((time_t *) 0);
325   int hour_GMT0, hour_unset;
326   if (putenv ("TZ=GMT0") != 0)
327     return 1;
328   hour_GMT0 = localtime (&now)->tm_hour;
329   unset_TZ ();
330   hour_unset = localtime (&now)->tm_hour;
331   if (putenv ("TZ=PST8") != 0)
332     return 1;
333   if (localtime (&now)->tm_hour == hour_GMT0)
334     return 1;
335   unset_TZ ();
336   if (localtime (&now)->tm_hour != hour_unset)
337     return 1;
338   return 0;
339 }]])],
340 [utils_cv_localtime_cache=no],
341 [utils_cv_localtime_cache=yes],
342 [# If we have tzset, assume the worst when cross-compiling.
343 utils_cv_localtime_cache=yes])
344 else
345         # If we lack tzset, report that localtime does not cache TZ,
346         # since we can't invalidate the cache if we don't have tzset.
347         utils_cv_localtime_cache=no
348 fi])dnl
349 AC_MSG_RESULT([$utils_cv_localtime_cache])
350 if test $utils_cv_localtime_cache = yes; then
351   AC_DEFINE([LOCALTIME_CACHE], [1], [FIXME])
354 # Find the library for dynamic loading of shared libraries.
355 AC_SEARCH_LIBS([dlopen], [dl])
356 AS_CASE([$ac_cv_search_dlopen],
357   [no | 'none required'],
358     [LIB_DL=],
359   [*],
360     [LIB_DL="$ac_cv_search_dlopen"])
361 AC_SUBST([LIB_DL])
363 # Should 'sort' link libcrypto dynamically?
364 AS_CASE([$LIB_CRYPTO],
365   [-lcrypto],
366     [# Check for dlopen and libcrypto dynamic linking in one program,
367      # as there's little point to checking them separately.
368      AC_CACHE_CHECK([for dlopen and whether libcrypto is linked dynamically],
369        [utils_cv_dlopen_libcrypto],
370        [utils_cv_dlopen_libcrypto=no
371         saved_LIBS=$LIBS
372         LIBS="$LIBS $LIB_DL $LIB_CRYPTO"
373         AC_LINK_IFELSE(
374           [AC_LANG_PROGRAM(
375              [[#include <dlfcn.h>
376                #include <openssl/sha.h>
377                /* Use SHA512 rather than MD5 here to avoid deprecation warnings.
378                   So need to check HAVE_OPENSSL_MD5.. with DLOPEN_LIBCRYPTO. */
379              ]],
380              [[return !(dlopen ("libcrypto.so", RTLD_LAZY | RTLD_GLOBAL)
381                         && SHA512 (0, 0, 0));]])],
382           [# readelf works with cross-builds; ldd works on more platforms.
383            LIBCRYPTO_SONAME="`(readelf -d conftest$EXEEXT || ldd conftest$EXEEXT
384                               ) 2>/dev/null |
385                               sed -n 's/.*\(libcrypto\.so\.[[.0-9]]*\).*/\1/p'`"
386            AS_CASE([$LIBCRYPTO_SONAME],
387              [*libcrypto*],
388                [utils_cv_dlopen_libcrypto=yes])])
389         LIBS=$saved_LIBS])
390      AS_CASE([$utils_cv_dlopen_libcrypto],
391        [yes],
392          [AC_DEFINE([DLOPEN_LIBCRYPTO], [1],
393                     [Define to 1 if dlopen exists and libcrypto is
394                      linked dynamically.])
395           AC_DEFINE_UNQUOTED([LIBCRYPTO_SONAME], ["$LIBCRYPTO_SONAME"],
396                              [versioned libcrypto])
397          ])])
399 # macOS >= 10.12
400 AC_CHECK_FUNCS([fclonefileat])
402 # Assume that if getattrat exists, it's compatible with Solaris 11.
403 AC_CHECK_FUNCS([getattrat])
404 if test $ac_cv_func_getattrat = yes; then
405   LIB_NVPAIR=-lnvpair
406   AC_SUBST([LIB_NVPAIR])
409 # glibc >= 2.28 and linux kernel >= 4.11
410 AC_CHECK_FUNCS([statx])
412 # SCO-ODT-3.0 is reported to need -los to link programs using initgroups
413 AC_CHECK_FUNCS([initgroups])
414 if test $ac_cv_func_initgroups = no; then
415   AC_CHECK_LIB([os], [initgroups])
418 AC_CHECK_FUNCS([syslog])
419 if test $ac_cv_func_syslog = no; then
420   # syslog is not in the default libraries.  See if it's in some other.
421   for lib in bsd socket inet; do
422     AC_CHECK_LIB([$lib], [syslog], [AC_DEFINE([HAVE_SYSLOG], [1], [FIXME])
423       LIBS="$LIBS -l$lib"; break])
424   done
427 AC_CACHE_CHECK([for 3-argument setpriority function],
428   [utils_cv_func_setpriority],
429   [AC_LINK_IFELSE(
430     [AC_LANG_PROGRAM(
431        [[#include <sys/time.h>
432          #include <sys/resource.h>
433        ]],
434        [[setpriority (0, 0, 0);]])],
435     [utils_cv_func_setpriority=yes],
436     [utils_cv_func_setpriority=no])])
437 if test $utils_cv_func_setpriority = no; then
438   AC_CHECK_FUNCS([nice])
440 case $utils_cv_func_setpriority,$ac_cv_func_nice in
441 *yes*)
442   gl_ADD_PROG([optional_bin_progs], [nice])
443 esac
445 if test "$cross_compiling" = yes || test -c /dev/stdin <.; then
446   AC_DEFINE([DEV_FD_MIGHT_BE_CHR], [1],
447     [Define to 1 if /dev/std{in,out,err} and /dev/fd/N, if they exist, might be
448      character-special devices whose minor device number is the file
449      descriptor number, such as on Solaris.  Leave undefined if they are
450      definitely the actual files.  This determination should be done after any
451      symbolic links are followed.])
454 AC_DEFUN([coreutils_DUMMY_1],
456   AC_REQUIRE([gl_READUTMP])
457   if test $ac_cv_header_utmp_h = yes || test $ac_cv_header_utmpx_h = yes; then
458     gl_ADD_PROG([optional_bin_progs], [who])
459     gl_ADD_PROG([optional_bin_progs], [users])
460     gl_ADD_PROG([optional_bin_progs], [pinky])
461   fi
463 coreutils_DUMMY_1
465 AC_SYS_POSIX_TERMIOS()
466 gl_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
468 if test $ac_cv_sys_posix_termios = yes; then
469   gl_ADD_PROG([optional_bin_progs], [stty])
471   AC_MSG_CHECKING([whether termios.h needs _XOPEN_SOURCE])
472   AC_CACHE_VAL([su_cv_sys_termios_needs_xopen_source],
473   [AC_EGREP_CPP([yes], [#include <termios.h>
474 #ifdef IUCLC
476 #endif], su_cv_sys_termios_needs_xopen_source=no,
477    AC_EGREP_CPP([yes], [#define _XOPEN_SOURCE
478 #include <termios.h>
479 #ifdef IUCLC
481 #endif], su_cv_sys_termios_needs_xopen_source=yes,
482    su_cv_sys_termios_needs_xopen_source=no))])
483   AC_MSG_RESULT([$su_cv_sys_termios_needs_xopen_source])
484   test $su_cv_sys_termios_needs_xopen_source = yes &&
485     AC_DEFINE([TERMIOS_NEEDS_XOPEN_SOURCE], [1], [FIXME])
487   AC_MSG_CHECKING([c_line in struct termios])
488   AC_CACHE_VAL([su_cv_sys_c_line_in_termios],
489   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if TERMIOS_NEEDS_XOPEN_SOURCE
490                                       #define _XOPEN_SOURCE
491                                      #endif
492                                      #include <sys/types.h>
493                                      #include <termios.h>
494                                      struct termios t;
495                                      int s = sizeof t.c_line;]])],
496     [su_cv_sys_c_line_in_termios=yes],
497     [su_cv_sys_c_line_in_termios=no])])
498   AC_MSG_RESULT([$su_cv_sys_c_line_in_termios])
499   test $su_cv_sys_c_line_in_termios = yes \
500     && AC_DEFINE([HAVE_C_LINE], [1], [FIXME])
503 # FIXME: note that this macro appears above, too.
504 # I'm leaving it here for now.  This whole thing needs to be modernized...
505 gl_WINSIZE_IN_PTEM
507 gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H
509 if test $gl_cv_sys_tiocgwinsz_needs_termios_h = no && \
510    test $gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h = no; then
511   AC_MSG_CHECKING([TIOCGWINSZ in sys/pty.h])
512   AC_CACHE_VAL([su_cv_sys_tiocgwinsz_in_sys_pty_h],
513   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
514 #ifdef WINSIZE_IN_PTEM
515 # include <sys/stream.h>
516 # include <sys/ptem.h>
517 #endif
518 #include <sys/ioctl.h>
519 #include <sys/tty.h>
520 #include <sys/pty.h>]], [[int x = TIOCGWINSZ;]])],
521     [su_cv_sys_tiocgwinsz_in_sys_pty_h=yes],
522     [su_cv_sys_tiocgwinsz_in_sys_pty_h=no])])
523   AC_MSG_RESULT([$su_cv_sys_tiocgwinsz_in_sys_pty_h])
525   test $su_cv_sys_tiocgwinsz_in_sys_pty_h = yes \
526       && AC_DEFINE([GWINSZ_IN_SYS_PTY], [1],
527                    [Define if your system defines TIOCGWINSZ in sys/pty.h.])
530 # Build df only if there's a point to it.
531 if test $gl_cv_list_mounted_fs = yes && test $gl_cv_fs_space = yes; then
532   gl_ADD_PROG([optional_bin_progs], [df])
535 # Build stdbuf only if supported
536 ac_save_CFLAGS=$CFLAGS
537 ac_save_LDFLAGS=$LDFLAGS
538 cu_save_c_werror_flag=$ac_c_werror_flag
539 AC_LANG_WERROR
540 # Detect warnings about ignored "constructor" attributes.
541 gl_WARN_ADD([-Werror], [CFLAGS])
542 gl_WARN_ADD([-errwarn], [CFLAGS])
543 # Put this message here, after gl_WARN_ADD's chatter.
544 AC_MSG_CHECKING([whether this system supports stdbuf])
545 CFLAGS="-fPIC $CFLAGS"
546 LDFLAGS="-shared $LDFLAGS"
547 stdbuf_supported=no
548 # Note we only LINK here rather than RUN to support cross compilation
549 AC_LINK_IFELSE(
550   [AC_LANG_PROGRAM([[
551     static int stdbuf = 0;
553     void __attribute__ ((constructor))
554     stdbuf_init (void)
555     {
556       stdbuf = 1;
557     }]],[[
558     if (stdbuf != 1)
559       return 1;]])
560   ],
561   [stdbuf_supported=yes])
562 AC_MSG_RESULT([$stdbuf_supported])
563 if test "$stdbuf_supported" = "yes" && test -z "$EXEEXT"; then
564   gl_ADD_PROG([optional_bin_progs], [stdbuf])
566 CFLAGS=$ac_save_CFLAGS
567 LDFLAGS=$ac_save_LDFLAGS
568 ac_c_werror_flag=$cu_save_c_werror_flag
570 # Test compiler support for half precision floating point types (for od)
571 AC_MSG_CHECKING([IEEE 16 bit floating point])
572  AC_COMPILE_IFELSE(
573    [AC_LANG_SOURCE([[
574      int
575      main (void)
576      {
577         _Float16 hf;
578         float f = hf;  /* Ensure compiler can promote to float.  */
579      }
580   ]])
581   ],[
582     ieee_16_bit_supported=yes
583   ],[
584     ieee_16_bit_supported=no
585   ])
586 AC_MSG_RESULT([$ieee_16_bit_supported])
587 if test $ieee_16_bit_supported = yes; then
588   AC_DEFINE([FLOAT16_SUPPORTED], [1], [IEEE 16 bit float supported])
591 AC_MSG_CHECKING([Brain 16 bit floating point])
592  AC_COMPILE_IFELSE(
593    [AC_LANG_SOURCE([[
594      int
595      main (void)
596      {
597         __bf16 hf;
598         float f = hf;  /* Ensure compiler can promote to float.  */
599      }
600   ]])
601   ],[
602     brain_16_bit_supported=yes
603   ],[
604     brain_16_bit_supported=no
605   ])
606 AC_MSG_RESULT([$brain_16_bit_supported])
607 if test $brain_16_bit_supported = yes; then
608   AC_DEFINE([BF16_SUPPORTED], [1], [Brain 16 bit float supported])
611 ac_save_CFLAGS=$CFLAGS
612 CFLAGS="-mavx -mpclmul $CFLAGS"
613 AC_MSG_CHECKING([if pclmul intrinsic exists])
614 AC_LINK_IFELSE(
615   [AC_LANG_SOURCE([[
616     #include <x86intrin.h>
618     int
619     main (void)
620     {
621       __m128i a, b;
622       a = _mm_clmulepi64_si128 (a, b, 0x00);
623       a = _mm_shuffle_epi8 (a, b);
624       return __builtin_cpu_supports ("pclmul");
625     }
626   ]])
627   ],[
628     pclmul_intrinsic_exists=yes
629   ],[
630     pclmul_intrinsic_exists=no
631   ])
632 AC_MSG_RESULT([$pclmul_intrinsic_exists])
633 if test $pclmul_intrinsic_exists = yes; then
634   AC_DEFINE([USE_PCLMUL_CRC32], [1],
635             [CRC32 calculation by pclmul hardware instruction enabled])
637 AM_CONDITIONAL([USE_PCLMUL_CRC32],
638                [test $pclmul_intrinsic_exists = yes])
639 CFLAGS=$ac_save_CFLAGS
641 CFLAGS="-mavx2 $CFLAGS"
642 AC_MSG_CHECKING([for avx2 intrinsics])
643 AC_LINK_IFELSE(
644   [AC_LANG_SOURCE([[
645     #include <x86intrin.h>
647     int
648     main (void)
649     {
650       __m256i a, b;
651       a = _mm256_sad_epu8 (a, b);
652       return __builtin_cpu_supports ("avx2");
653     }
654   ]])
655   ],[
656     avx2_intrinsic_exists=yes
657   ],[
658     avx2_intrinsic_exists=no
659   ])
660 AC_MSG_RESULT([$avx2_intrinsic_exists])
661 if test $avx2_intrinsic_exists = yes; then
662   AC_DEFINE([USE_AVX2_WC_LINECOUNT], [1], [Counting lines with AVX2 enabled])
664 AM_CONDITIONAL([USE_AVX2_WC_LINECOUNT],
665                [test $avx2_intrinsic_exists = yes])
667 CFLAGS=$ac_save_CFLAGS
669 ############################################################################
671 dnl Autogenerated by the 'gen-lists-of-programs.sh' auxiliary script.
672 dnl Issue proper calls to the macros gl_INCLUDE_EXCLUDE_PROG and
673 dnl gl_ADD_PROG (updating $optional_bin_progs), and generate the list
674 dnl of coreutils programs to be built only upon explicit user request,
675 dnl saving that list in the $no_install_progs_default shell variable.
676 m4_include([m4/cu-progs.m4])
678 # Now that we know which programs will actually be built, determine
679 # which optional helper progs should be compiled.
680 # Note it adding to pkglibexec_PROGRAMS, $(transform) in src/local.mk
681 # may need to be updated accordingly.
682 case " $optional_bin_progs " in
683   *' stdbuf '*) pkglibexec_PROGRAMS='src/libstdbuf.so';;
684   *) pkglibexec_PROGRAMS='';;
685 esac
687 man1_MANS=`
688   for p in $optional_bin_progs; do
689     # Change "ginstall.1" to "install.1".
690     test $p = ginstall && p=install
691     # Ignore the "[" program, since writing a portable make rule to
692     # generate its manpage is not practical.
693     dnl Use the autoconf-provided quadrigraph to represent "[",
694     dnl otherwise we will incur in dreadful quoting issues.
695     test x$p = x'@<:@' && continue
696     echo "man/$p.1"
697   done`
699 # Not installed by "make install", but must be built when creating
700 # a distribution tarball.
701 EXTRA_MANS=`for p in $no_install_progs_default $gl_no_install_prog; do
702               echo man/$p.1
703             done`
705 # Replace all the programs by the single binary and symlinks if specified.
706 single_binary_progs=
707 single_binary_libs=
708 single_binary_deps=
709 single_binary_install_type=
710 if test "$gl_single_binary" != no; then
711   man1_MANS="$man1_MANS man/coreutils.1"
712   # Convert the list to a space separated list
713   gl_single_binary_exceptions=`echo $gl_single_binary_exceptions | tr ',' ' '`
715   single_binary_progs=`echo $optional_bin_progs`
716   optional_bin_progs="coreutils"
717   for prog in $gl_single_binary_exceptions; do
718     # Fail if requested to exclude a program than was not part of coreutils.
719     case " $single_binary_progs " in
720       *" $prog "*)
721         gl_REMOVE_PROG([single_binary_progs], [$prog]) ;
722         gl_ADD_PROG([optional_bin_progs], [$prog]) ;;
723       *) AC_MSG_ERROR(['$prog' is not being compiled.]) ;;
724     esac
725   done
727   # single_binary_libs holds the list of libs required by the selected
728   # programs, such as for example -lrt.
729   single_binary_libs=`
730     for p in $single_binary_progs; do
731       # Convert '[' to '_'
732       test x"$p" = x'@<:@' && p='_'
733       printf '$(src_libsinglebin_%s_a_ldadd) ' "$p"
734     done`
735   # single_binary_deps holds the list of libsinglebin_*.a files that have the
736   # compiled code of each selected program in a "library" format.
737   single_binary_deps=`
738     for p in $single_binary_progs; do
739       # Convert '[' to '_'
740       test x"$p" = x'@<:@' && p='_'
741       printf 'src/libsinglebin_%s.a ' "$p"
742     done`
743   single_binary_install_type="$gl_single_binary"
745 AC_SUBST([single_binary_progs], [$single_binary_progs])
746 AC_SUBST([single_binary_libs], [$single_binary_libs])
747 AC_SUBST([single_binary_deps], [$single_binary_deps])
748 AC_SUBST([single_binary_install_type], [$single_binary_install_type])
751 # The programs built and installed by "make && make install".
752 # Since this is AC_SUBST'd, Automake won't be able to perform rewrite
753 # with $(EXEEXT) appending on it, so we have to do it ourselves -- in
754 # this case, only for $(bin_PROGRAMS).
755 bin_PROGRAMS=`
756   for p in $optional_bin_progs; do echo src/"$p"'$(EXEEXT)'; done`
758 # Normalize whitespace.
759 man1_MANS=`echo $man1_MANS`
760 EXTRA_MANS=`echo $EXTRA_MANS`
761 bin_PROGRAMS=`echo $bin_PROGRAMS`
762 pkglibexec_PROGS=`echo $pkglibexec_PROGRAMS`
764 AC_SUBST([bin_PROGRAMS])        AM_SUBST_NOTMAKE([bin_PROGRAMS])
765 AC_SUBST([pkglibexec_PROGRAMS]) AM_SUBST_NOTMAKE([pkglibexec_PROGRAMS])
766 AC_SUBST([man1_MANS])           AM_SUBST_NOTMAKE([man1_MANS])
767 AC_SUBST([EXTRA_MANS])          AM_SUBST_NOTMAKE([EXTRA_MANS])
769 AC_SUBST([built_programs], [$optional_bin_progs])
771 AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = yes])
773 ############################################################################
775 # As long as "grep 'PRI[diouxX]' po/*.pot" reports matches in
776 # translatable strings, we must use need-formatstring-macros here.
777 AM_GNU_GETTEXT([external], [need-formatstring-macros])
778 AM_GNU_GETTEXT_VERSION([0.19.2])
780 # For a test of uniq: it uses the $LOCALE_FR envvar.
781 gt_LOCALE_FR
783 AC_CONFIG_FILES(
784   Makefile
785   po/Makefile.in
786   gnulib-tests/Makefile
787   )
788 AC_OUTPUT