split: handle large numbers better
[coreutils.git] / configure.ac
blob2b2f9468d5d8a777ac338729886523249ae1c738
1 # -*- autoconf -*-
2 # Process this file with autoconf to produce a configure script.
4 # Copyright (C) 1991-2023 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_GCC_TRADITIONAL
59 AC_PROG_RANLIB
60 AC_PROG_EGREP
61 AC_PROG_LN_S
62 gl_EARLY
63 gl_SET_CRYPTO_CHECK_DEFAULT([auto-gpl-compat])
64 gl_INIT
65 coreutils_MACROS
67 # The test suite needs to know if we have a working perl.
68 AM_CONDITIONAL([HAVE_PERL], [test "$gl_cv_prog_perl" != no])
70 # gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found])
71 # ------------------------------------------------
72 # If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND.
73 # Otherwise, run RUN-IF-NOT-FOUND.
74 AC_DEFUN([gl_GCC_VERSION_IFELSE],
75   [AC_PREPROC_IFELSE(
76     [AC_LANG_PROGRAM(
77       [[
78 #if ($1) < __GNUC__ || (($1) == __GNUC__ && ($2) <= __GNUC_MINOR__)
79 /* ok */
80 #else
81 # error "your version of gcc is older than $1.$2"
82 #endif
83       ]]),
84     ], [$3], [$4])
85   ]
88 AC_ARG_ENABLE([single-binary],
89   [AS_HELP_STRING([--enable-single-binary=[shebangs|symlinks]],
90      [Compile all the tools in a single binary, reducing the overall size.
91       When compiled this way, shebangs (default when enabled) or symlinks are
92       installed for each tool that points to the single binary.])],
93   [gl_single_binary=no ;
94    case $enableval in
95      yes) gl_single_binary=shebangs ;;
96      no|shebangs|symlinks) gl_single_binary=$enableval ;;
97      *)      AC_MSG_ERROR([bad value $enableval for single-binary option.
98                            Options are: symlinks, shebangs, no.]) ;;
99    esac],
100   [gl_single_binary=no]
102 AC_ARG_ENABLE([single-binary-exceptions],
103   [AS_HELP_STRING([--enable-single-binary-exceptions=PROG_LIST],
104      [When used with --enable-single-binary, exclude the PROG_LIST from
105       it, so these programs are compiled as separated files
106       (comma-separated, default none))])],
107   [gl_single_binary_exceptions=$enableval],
108   [gl_single_binary_exceptions=]
110 if test "$gl_single_binary" = 'symlinks'; then
111   if ! test "`echo ls | sed \"$program_transform_name\"`" = 'ls'; then
112     AC_MSG_ERROR([program name transformations are not currently supported
113                   with --enable-single-binary=symlinks.])
114   fi
116 AM_CONDITIONAL([SINGLE_BINARY], [test "$gl_single_binary" != no])
118 AC_ARG_ENABLE([bold-man-page-references],
119   [AS_HELP_STRING([--disable-bold-man-page-references],
120      [When generating man pages, do not apply bold style around any
121       references like name(1) etc.])],
122   [gl_bold_manpages=yes ;
123    case $enableval in
124      no|yes) gl_bold_manpages=$enableval ;;
125      *)      AC_MSG_ERROR([bad value $enableval for bold-man-page-references.
126                            Options are: yes, no.]) ;;
127    esac],
128   [gl_bold_manpages=yes]
130 AM_CONDITIONAL([BOLD_MAN_REFS], [test "$gl_bold_manpages" != no])
132 AC_ARG_ENABLE([gcc-warnings],
133   [AS_HELP_STRING([--enable-gcc-warnings@<:@=TYPE@:>@],
134     [control generation of GCC warnings.  The TYPE 'no' disables
135      warnings (default for non-developer builds); 'yes' generates
136      cheap warnings if available (default for developer builds);
137      'expensive' in addition generates expensive-to-compute warnings
138      if available.])],
139   [case $enableval in
140      no|yes|expensive) ;;
141      *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
142    esac
143    gl_gcc_warnings=$enableval],
144   [
145    # GCC provides fine-grained control over diagnostics which
146    # is used in gnulib for example to suppress warnings from
147    # certain sections of code.  So if this is available and
148    # we're running from a git repo, then auto enable the warnings.
149    gl_gcc_warnings=no
150    gl_GCC_VERSION_IFELSE([4], [6],
151                          [test -d "$srcdir"/.git \
152                           && ! test -f "$srcdir"/.tarball-version \
153                           && gl_gcc_warnings=yes])]
156 if test $gl_gcc_warnings != no; then
157   gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
158   AC_SUBST([WERROR_CFLAGS])
160   ew=
161   AS_IF([test $gl_gcc_warnings != expensive],
162     [# -fanalyzer and related options slow GCC considerably.
163      ew="$ew -fanalyzer -Wno-analyzer-double-free -Wno-analyzer-malloc-leak"
164      ew="$ew -Wno-analyzer-null-dereference -Wno-analyzer-use-after-free"])
166   # This, $nw, is the list of warnings we disable.
167   nw=$ew
168   nw="$nw -Wdeclaration-after-statement" # too useful to forbid
169   nw="$nw -Waggregate-return"       # anachronistic
170   nw="$nw -Wlong-long"              # C90 is anachronistic (lib/gethrxtime.h)
171   nw="$nw -Wc++-compat"             # We don't care about C++ compilers
172   nw="$nw -Wundef"                  # Warns on '#if GNULIB_FOO' etc in gnulib
173   nw="$nw -Wtraditional"            # Warns on #elif which we use often
174   nw="$nw -Wcast-qual"              # Too many warnings for now
175   nw="$nw -Wconversion"             # Too many warnings for now
176   nw="$nw -Wsystem-headers"         # Don't let system headers trigger warnings
177   nw="$nw -Wsign-conversion"        # Too many warnings for now
178   nw="$nw -Wtraditional-conversion" # Too many warnings for now
179   nw="$nw -Wunreachable-code"       # Too many warnings for now
180   nw="$nw -Wpadded"                 # Our structs are not padded
181   nw="$nw -Wredundant-decls"        # openat.h declares e.g., mkdirat
182   nw="$nw -Wformat-nonliteral"      # who.c and pinky.c strftime uses
183   nw="$nw -Wnested-externs"         # use of XARGMATCH/verify_function__
184   nw="$nw -Wswitch-enum"            # Too many warnings for now
185   nw="$nw -Wswitch-default"         # Too many warnings for now
186   nw="$nw -Wstack-protector"        # not worth working around
187   nw="$nw -Wformat-overflow=2"      # False alarms due to GCC bug 80776
188   nw="$nw -Wformat-truncation=2"    # False alarm in ls.c, probably related
189   # things I might fix soon:
190   nw="$nw -Wfloat-equal"            # sort.c, seq.c
191   nw="$nw -Wmissing-format-attribute" # copy.c
192   nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c
193   nw="$nw -Winline"                 # system.h's readdir_ignoring_dot_and_dotdot
194   nw="$nw -Wvector-operation-performance" # warns about randperm.c
196   # Suppress noreturn warnings with single binaries; otherwise
197   # GCC complains about the renamed 'main' not being declared noreturn
198   # because 'main_exit' calls 'exit' when linting.
199   if test "$gl_single_binary" != no; then
200     nw="$nw -Wsuggest-attribute=noreturn"
201   fi
203   # Using -Wstrict-overflow is a pain, but the alternative is worse.
204   # For an example, see the code that provoked this report:
205   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=33498
206   # Code like that still infloops with gcc-4.6.0 and -O2.  Scary indeed.
208   gl_MANYWARN_ALL_GCC([ws])
209   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
210   for w in $ws; do
211     gl_WARN_ADD([$w])
212   done
213   gl_WARN_ADD([-Wno-sign-compare])     # Too many warnings for now
214   gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
215   gl_WARN_ADD([-Wno-format-nonliteral])
217   # clang is unduly picky about some things.
218   AC_CACHE_CHECK([whether the compiler is clang], [utils_cv_clang],
219     [AC_COMPILE_IFELSE(
220        [AC_LANG_PROGRAM([[
221             #ifndef __clang__
222               #error "not clang"
223             #endif
224           ]])],
225        [utils_cv_clang=yes],
226        [utils_cv_clang=no])])
227   if test $utils_cv_clang = yes; then
228     gl_WARN_ADD([-Wno-format-extra-args])
229     gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare])
230   fi
232   gl_WARN_ADD([-fdiagnostics-show-option])
233   gl_WARN_ADD([-funit-at-a-time])
235   AC_SUBST([WARN_CFLAGS])
237   AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
238   AH_VERBATIM([FORTIFY_SOURCE],
239   [/* Enable compile-time and run-time bounds-checking, and some warnings,
240       without upsetting glibc 2.15+. */
241    #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
242    # define _FORTIFY_SOURCE 2
243    #endif
244   ])
245   AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
247   # We use a slightly smaller set of warning options for lib/.
248   # Remove the following and save the result in GNULIB_WARN_CFLAGS.
249   nw=$ew
250   nw="$nw -Wduplicated-branches"    # Too many false alarms
251   nw="$nw -Wformat-truncation=2"
252   nw="$nw -Wstrict-overflow"
253   nw="$nw -Wuninitialized"
254   nw="$nw -Wunused-macros"
255   nw="$nw -Wmissing-prototypes"
256   nw="$nw -Wold-style-definition"
257   # FIXME: it may be easy to remove this, since it affects only one file:
258   # the snprintf call at ftoastr.c:132.
259   nw="$nw -Wdouble-promotion"
261   # FIXME: remove this line when gcc improves
262   # FP in careadlinkat.c w/gcc 10.0.1 20200205
263   gl_WARN_ADD([-Wno-return-local-addr])
265   gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
266   AC_SUBST([GNULIB_WARN_CFLAGS])
268   # For gnulib-tests, the set is slightly smaller still.
269   nw=
270   nw="$nw -Wstrict-prototypes"
271   # It's not worth being this picky about test programs.
272   nw="$nw -Wsuggest-attribute=const"
273   nw="$nw -Wsuggest-attribute=format"
274   nw="$nw -Wsuggest-attribute=pure"
275   gl_MANYWARN_COMPLEMENT([GNULIB_TEST_WARN_CFLAGS],
276                          [$GNULIB_WARN_CFLAGS], [$nw])
277   AC_SUBST([GNULIB_TEST_WARN_CFLAGS])
280 AC_FUNC_FORK
282 optional_bin_progs=
283 AC_CHECK_FUNCS([chroot],
284         gl_ADD_PROG([optional_bin_progs], [chroot]))
285 AC_CHECK_FUNCS([gethostid],
286         gl_ADD_PROG([optional_bin_progs], [hostid]))
287 AC_CHECK_FUNCS([sigsuspend],
288         gl_ADD_PROG([optional_bin_progs], [timeout]))
290 gl_WINSIZE_IN_PTEM
292 AC_MSG_CHECKING([whether localtime caches TZ])
293 AC_CACHE_VAL([utils_cv_localtime_cache],
294 [if test x$ac_cv_func_tzset = xyes; then
295 AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <time.h>
296 #if STDC_HEADERS
297 # include <stdlib.h>
298 #endif
299 extern char **environ;
300 void unset_TZ (void)
302   char **from, **to;
303   for (to = from = environ; (*to = *from); from++)
304     if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
305       to++;
308 main ()
310   time_t now = time ((time_t *) 0);
311   int hour_GMT0, hour_unset;
312   if (putenv ("TZ=GMT0") != 0)
313     return 1;
314   hour_GMT0 = localtime (&now)->tm_hour;
315   unset_TZ ();
316   hour_unset = localtime (&now)->tm_hour;
317   if (putenv ("TZ=PST8") != 0)
318     return 1;
319   if (localtime (&now)->tm_hour == hour_GMT0)
320     return 1;
321   unset_TZ ();
322   if (localtime (&now)->tm_hour != hour_unset)
323     return 1;
324   return 0;
325 }]])],
326 [utils_cv_localtime_cache=no],
327 [utils_cv_localtime_cache=yes],
328 [# If we have tzset, assume the worst when cross-compiling.
329 utils_cv_localtime_cache=yes])
330 else
331         # If we lack tzset, report that localtime does not cache TZ,
332         # since we can't invalidate the cache if we don't have tzset.
333         utils_cv_localtime_cache=no
334 fi])dnl
335 AC_MSG_RESULT([$utils_cv_localtime_cache])
336 if test $utils_cv_localtime_cache = yes; then
337   AC_DEFINE([LOCALTIME_CACHE], [1], [FIXME])
340 # macOS >= 10.12
341 AC_CHECK_FUNCS([fclonefileat])
343 # Assume that if getattrat exists, it's compatible with Solaris 11.
344 AC_CHECK_FUNCS([getattrat])
345 if test $ac_cv_func_getattrat = yes; then
346   LIB_NVPAIR=-lnvpair
347   AC_SUBST([LIB_NVPAIR])
350 # glibc >= 2.28 and linux kernel >= 4.11
351 AC_CHECK_FUNCS([statx])
353 # SCO-ODT-3.0 is reported to need -los to link programs using initgroups
354 AC_CHECK_FUNCS([initgroups])
355 if test $ac_cv_func_initgroups = no; then
356   AC_CHECK_LIB([os], [initgroups])
359 AC_CHECK_FUNCS([syslog])
360 if test $ac_cv_func_syslog = no; then
361   # syslog is not in the default libraries.  See if it's in some other.
362   for lib in bsd socket inet; do
363     AC_CHECK_LIB([$lib], [syslog], [AC_DEFINE([HAVE_SYSLOG], [1], [FIXME])
364       LIBS="$LIBS -l$lib"; break])
365   done
368 AC_CACHE_CHECK([for 3-argument setpriority function],
369   [utils_cv_func_setpriority],
370   [AC_LINK_IFELSE(
371     [AC_LANG_PROGRAM(
372        [[#include <sys/time.h>
373          #include <sys/resource.h>
374        ]],
375        [[setpriority (0, 0, 0);]])],
376     [utils_cv_func_setpriority=yes],
377     [utils_cv_func_setpriority=no])])
378 if test $utils_cv_func_setpriority = no; then
379   AC_CHECK_FUNCS([nice])
381 case $utils_cv_func_setpriority,$ac_cv_func_nice in
382 *yes*)
383   gl_ADD_PROG([optional_bin_progs], [nice])
384 esac
386 if test "$cross_compiling" = yes || test -c /dev/stdin <.; then
387   AC_DEFINE([DEV_FD_MIGHT_BE_CHR], [1],
388     [Define to 1 if /dev/std{in,out,err} and /dev/fd/N, if they exist, might be
389      character-special devices whose minor device number is the file
390      descriptor number, such as on Solaris.  Leave undefined if they are
391      definitely the actual files.  This determination should be done after any
392      symbolic links are followed.])
395 AC_DEFUN([coreutils_DUMMY_1],
397   AC_REQUIRE([gl_READUTMP])
398   if test $ac_cv_header_utmp_h = yes || test $ac_cv_header_utmpx_h = yes; then
399     gl_ADD_PROG([optional_bin_progs], [who])
400     gl_ADD_PROG([optional_bin_progs], [users])
401     gl_ADD_PROG([optional_bin_progs], [pinky])
402   fi
404 coreutils_DUMMY_1
406 AC_MSG_CHECKING([ut_host in struct utmp])
407 AC_CACHE_VAL([su_cv_func_ut_host_in_utmp],
408 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
409                                    #include <utmp.h>
410                                    struct utmp ut;
411                                    int s = sizeof ut.ut_host;]])],
412   [su_cv_func_ut_host_in_utmp=yes],
413   [su_cv_func_ut_host_in_utmp=no])])
414 AC_MSG_RESULT([$su_cv_func_ut_host_in_utmp])
415 if test $su_cv_func_ut_host_in_utmp = yes; then
416   have_ut_host=1
417   AC_DEFINE([HAVE_UT_HOST], [1], [FIXME])
420 if test -z "$have_ut_host"; then
421   AC_MSG_CHECKING([ut_host in struct utmpx])
422   AC_CACHE_VAL([su_cv_func_ut_host_in_utmpx],
423   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
424                                      #include <utmpx.h>
425                                      struct utmpx ut;
426                                      int s = sizeof ut.ut_host;]])],
427     [su_cv_func_ut_host_in_utmpx=yes],
428     [su_cv_func_ut_host_in_utmpx=no])])
429   AC_MSG_RESULT([$su_cv_func_ut_host_in_utmpx])
430   if test $su_cv_func_ut_host_in_utmpx = yes; then
431     AC_DEFINE([HAVE_UTMPX_H], [1], [FIXME])
432     AC_DEFINE([HAVE_UT_HOST], [1], [FIXME])
433   fi
436 GNULIB_BOOT_TIME([gl_ADD_PROG([optional_bin_progs], [uptime])])
438 AC_SYS_POSIX_TERMIOS()
439 gl_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
441 if test $ac_cv_sys_posix_termios = yes; then
442   gl_ADD_PROG([optional_bin_progs], [stty])
444   AC_MSG_CHECKING([whether termios.h needs _XOPEN_SOURCE])
445   AC_CACHE_VAL([su_cv_sys_termios_needs_xopen_source],
446   [AC_EGREP_CPP([yes], [#include <termios.h>
447 #ifdef IUCLC
449 #endif], su_cv_sys_termios_needs_xopen_source=no,
450    AC_EGREP_CPP([yes], [#define _XOPEN_SOURCE
451 #include <termios.h>
452 #ifdef IUCLC
454 #endif], su_cv_sys_termios_needs_xopen_source=yes,
455    su_cv_sys_termios_needs_xopen_source=no))])
456   AC_MSG_RESULT([$su_cv_sys_termios_needs_xopen_source])
457   test $su_cv_sys_termios_needs_xopen_source = yes &&
458     AC_DEFINE([TERMIOS_NEEDS_XOPEN_SOURCE], [1], [FIXME])
460   AC_MSG_CHECKING([c_line in struct termios])
461   AC_CACHE_VAL([su_cv_sys_c_line_in_termios],
462   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if TERMIOS_NEEDS_XOPEN_SOURCE
463                                       #define _XOPEN_SOURCE
464                                      #endif
465                                      #include <sys/types.h>
466                                      #include <termios.h>
467                                      struct termios t;
468                                      int s = sizeof t.c_line;]])],
469     [su_cv_sys_c_line_in_termios=yes],
470     [su_cv_sys_c_line_in_termios=no])])
471   AC_MSG_RESULT([$su_cv_sys_c_line_in_termios])
472   test $su_cv_sys_c_line_in_termios = yes \
473     && AC_DEFINE([HAVE_C_LINE], [1], [FIXME])
476 # FIXME: note that this macro appears above, too.
477 # I'm leaving it here for now.  This whole thing needs to be modernized...
478 gl_WINSIZE_IN_PTEM
480 gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H
482 if test $gl_cv_sys_tiocgwinsz_needs_termios_h = no && \
483    test $gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h = no; then
484   AC_MSG_CHECKING([TIOCGWINSZ in sys/pty.h])
485   AC_CACHE_VAL([su_cv_sys_tiocgwinsz_in_sys_pty_h],
486   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
487 #ifdef WINSIZE_IN_PTEM
488 # include <sys/stream.h>
489 # include <sys/ptem.h>
490 #endif
491 #include <sys/ioctl.h>
492 #include <sys/tty.h>
493 #include <sys/pty.h>]], [[int x = TIOCGWINSZ;]])],
494     [su_cv_sys_tiocgwinsz_in_sys_pty_h=yes],
495     [su_cv_sys_tiocgwinsz_in_sys_pty_h=no])])
496   AC_MSG_RESULT([$su_cv_sys_tiocgwinsz_in_sys_pty_h])
498   test $su_cv_sys_tiocgwinsz_in_sys_pty_h = yes \
499       && AC_DEFINE([GWINSZ_IN_SYS_PTY], [1],
500                    [Define if your system defines TIOCGWINSZ in sys/pty.h.])
503 # For src/kill.c.
504 AC_CHECK_DECLS([strsignal, sys_siglist, _sys_siglist, __sys_siglist], , ,
505   [AC_INCLUDES_DEFAULT
506 #include <signal.h>])
508 # Build df only if there's a point to it.
509 if test $gl_cv_list_mounted_fs = yes && test $gl_cv_fs_space = yes; then
510   gl_ADD_PROG([optional_bin_progs], [df])
513 # Build stdbuf only if supported
514 ac_save_CFLAGS=$CFLAGS
515 ac_save_LDFLAGS=$LDFLAGS
516 cu_save_c_werror_flag=$ac_c_werror_flag
517 AC_LANG_WERROR
518 # Detect warnings about ignored "constructor" attributes.
519 gl_WARN_ADD([-Werror], [CFLAGS])
520 gl_WARN_ADD([-errwarn], [CFLAGS])
521 # Put this message here, after gl_WARN_ADD's chatter.
522 AC_MSG_CHECKING([whether this system supports stdbuf])
523 CFLAGS="-fPIC $CFLAGS"
524 LDFLAGS="-shared $LDFLAGS"
525 stdbuf_supported=no
526 # Note we only LINK here rather than RUN to support cross compilation
527 AC_LINK_IFELSE(
528   [AC_LANG_PROGRAM([[
529     static int stdbuf = 0;
531     void __attribute__ ((constructor))
532     stdbuf_init (void)
533     {
534       stdbuf = 1;
535     }]],[[
536     if (stdbuf != 1)
537       return 1;]])
538   ],
539   [stdbuf_supported=yes])
540 AC_MSG_RESULT([$stdbuf_supported])
541 if test "$stdbuf_supported" = "yes" && test -z "$EXEEXT"; then
542   gl_ADD_PROG([optional_bin_progs], [stdbuf])
544 CFLAGS=$ac_save_CFLAGS
545 LDFLAGS=$ac_save_LDFLAGS
546 ac_c_werror_flag=$cu_save_c_werror_flag
548 AC_MSG_CHECKING([if __get_cpuid available])
549 AC_LINK_IFELSE(
550   [AC_LANG_SOURCE([[
551     #include <cpuid.h>
553     int
554     main (void)
555     {
556       unsigned int eax, ebx, ecx, edx;
557       __get_cpuid (1, &eax, &ebx, &ecx, &edx);
558       return 1;
559     }
560   ]])
561   ],[
562     AC_MSG_RESULT([yes])
563     AC_DEFINE([HAVE_CPUID], [1], [__get_cpuid available])
564     cpuid_exists=yes
565   ],[
566     AC_MSG_RESULT([no])
567   ])
569 ac_save_CFLAGS=$CFLAGS
570 CFLAGS="-mavx -mpclmul $CFLAGS"
571 AC_MSG_CHECKING([if pclmul intrinsic exists])
572 AC_COMPILE_IFELSE(
573   [AC_LANG_SOURCE([[
574     #include <x86intrin.h>
576     int
577     main (void)
578     {
579       __m128i a, b;
580       a = _mm_clmulepi64_si128 (a, b, 0x00);
581       return 1;
582     }
583   ]])
584   ],[
585     AC_MSG_RESULT([yes])
586     AC_DEFINE([HAVE_PCLMUL_INTRINSIC], [1], [pclmul intrinsic exists])
587     pclmul_intrinsic_exists=yes
588   ],[
589     AC_MSG_RESULT([no])
590   ])
591 if test "x$cpuid_exists" = "xyes" &&
592    test "x$pclmul_intrinsic_exists" = "xyes"; then
593   AC_DEFINE([USE_PCLMUL_CRC32], [1],
594             [CRC32 calculation by pclmul hardware instruction enabled])
596 AM_CONDITIONAL([USE_PCLMUL_CRC32],
597                [test "x$cpuid_exists" = "xyes" &&
598                 test "x$pclmul_intrinsic_exists" = "xyes"])
599 CFLAGS=$ac_save_CFLAGS
601 AC_MSG_CHECKING([if __get_cpuid_count exists])
602 AC_LINK_IFELSE(
603   [AC_LANG_SOURCE([[
604     #include <cpuid.h>
606     int
607     main (void)
608     {
609       unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0;
610       __get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx);
611       return 1;
612     }
613   ]])
614   ],[
615     AC_MSG_RESULT([yes])
616     get_cpuid_count_exists=yes
617   ],[
618     AC_MSG_RESULT([no])
619   ])
621 CFLAGS="-mavx2 $CFLAGS"
622 AC_MSG_CHECKING([if avx2 intrinstics exists])
623 AC_COMPILE_IFELSE(
624   [AC_LANG_SOURCE([[
625     #include <x86intrin.h>
627     int
628     main (void)
629     {
630       __m256i a, b;
631       a = _mm256_sad_epu8 (a, b);
632       return 1;
633     }
634   ]])
635   ],[
636     AC_MSG_RESULT([yes])
637     AC_DEFINE([HAVE_AVX2_INTRINSIC], [1], [avx2 intrinsics exists])
638     avx2_intrinsic_exists=yes
639   ],[
640     AC_MSG_RESULT([no])
641   ])
642 if test "x$get_cpuid_count_exists" = "xyes" &&
643    test "x$avx2_intrinsic_exists" = "xyes"; then
644   AC_DEFINE([USE_AVX2_WC_LINECOUNT], [1], [Counting lines with AVX2 enabled])
646 AM_CONDITIONAL([USE_AVX2_WC_LINECOUNT],
647                [test "x$get_cpuid_count_exists" = "xyes" &&
648                 test "x$avx2_intrinsic_exists" = "xyes"])
650 CFLAGS=$ac_save_CFLAGS
652 ############################################################################
654 dnl Autogenerated by the 'gen-lists-of-programs.sh' auxiliary script.
655 dnl Issue proper calls to the macros gl_INCLUDE_EXCLUDE_PROG and
656 dnl gl_ADD_PROG (updating $optional_bin_progs), and generate the list
657 dnl of coreutils programs to be built only upon explicit user request,
658 dnl saving that list in the $no_install_progs_default shell variable.
659 m4_include([m4/cu-progs.m4])
661 # Now that we know which programs will actually be built, determine
662 # which optional helper progs should be compiled.
663 # Note it adding to pkglibexec_PROGRAMS, $(transform) in src/local.mk
664 # may need to be updated accordingly.
665 case " $optional_bin_progs " in
666   *' stdbuf '*) pkglibexec_PROGRAMS='src/libstdbuf.so';;
667   *) pkglibexec_PROGRAMS='';;
668 esac
670 man1_MANS=`
671   for p in $optional_bin_progs; do
672     # Change "ginstall.1" to "install.1".
673     test $p = ginstall && p=install
674     # Ignore the "[" program, since writing a portable make rule to
675     # generate its manpage is not practical.
676     dnl Use the autoconf-provided quadrigraph to represent "[",
677     dnl otherwise we will incur in dreadful quoting issues.
678     test x$p = x'@<:@' && continue
679     echo "man/$p.1"
680   done`
682 # Not installed by "make install", but must be built when creating
683 # a distribution tarball.
684 EXTRA_MANS=`for p in $no_install_progs_default $gl_no_install_prog; do
685               echo man/$p.1
686             done`
688 # Replace all the programs by the single binary and symlinks if specified.
689 single_binary_progs=
690 single_binary_libs=
691 single_binary_deps=
692 single_binary_install_type=
693 if test "$gl_single_binary" != no; then
694   man1_MANS="$man1_MANS man/coreutils.1"
695   # Convert the list to a space separated list
696   gl_single_binary_exceptions=`echo $gl_single_binary_exceptions | tr ',' ' '`
698   single_binary_progs=`echo $optional_bin_progs`
699   optional_bin_progs="coreutils"
700   for prog in $gl_single_binary_exceptions; do
701     # Fail if requested to exclude a program than was not part of coreutils.
702     case " $single_binary_progs " in
703       *" $prog "*)
704         gl_REMOVE_PROG([single_binary_progs], [$prog]) ;
705         gl_ADD_PROG([optional_bin_progs], [$prog]) ;;
706       *) AC_MSG_ERROR(['$prog' is not being compiled.]) ;;
707     esac
708   done
710   # single_binary_libs holds the list of libs required by the selected
711   # programs, such as for example -lrt.
712   single_binary_libs=`
713     for p in $single_binary_progs; do
714       # Convert '[' to '_'
715       test x"$p" = x'@<:@' && p='_'
716       printf '$(src_libsinglebin_%s_a_ldadd) ' "$p"
717     done`
718   # single_binary_deps holds the list of libsinglebin_*.a files that have the
719   # compiled code of each selected program in a "library" format.
720   single_binary_deps=`
721     for p in $single_binary_progs; do
722       # Convert '[' to '_'
723       test x"$p" = x'@<:@' && p='_'
724       printf 'src/libsinglebin_%s.a ' "$p"
725     done`
726   single_binary_install_type="$gl_single_binary"
728 AC_SUBST([single_binary_progs], [$single_binary_progs])
729 AC_SUBST([single_binary_libs], [$single_binary_libs])
730 AC_SUBST([single_binary_deps], [$single_binary_deps])
731 AC_SUBST([single_binary_install_type], [$single_binary_install_type])
734 # The programs built and installed by "make && make install".
735 # Since this is AC_SUBST'd, Automake won't be able to perform rewrite
736 # with $(EXEEXT) appending on it, so we have to do it ourselves -- in
737 # this case, only for $(bin_PROGRAMS).
738 bin_PROGRAMS=`
739   for p in $optional_bin_progs; do echo src/"$p"'$(EXEEXT)'; done`
741 # Normalize whitespace.
742 man1_MANS=`echo $man1_MANS`
743 EXTRA_MANS=`echo $EXTRA_MANS`
744 bin_PROGRAMS=`echo $bin_PROGRAMS`
745 pkglibexec_PROGS=`echo $pkglibexec_PROGRAMS`
747 AC_SUBST([bin_PROGRAMS])        AM_SUBST_NOTMAKE([bin_PROGRAMS])
748 AC_SUBST([pkglibexec_PROGRAMS]) AM_SUBST_NOTMAKE([pkglibexec_PROGRAMS])
749 AC_SUBST([man1_MANS])           AM_SUBST_NOTMAKE([man1_MANS])
750 AC_SUBST([EXTRA_MANS])          AM_SUBST_NOTMAKE([EXTRA_MANS])
752 AC_SUBST([built_programs], [$optional_bin_progs])
754 AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = yes])
756 ############################################################################
758 # As long as "grep 'PRI[diouxX]' po/*.pot" reports matches in
759 # translatable strings, we must use need-formatstring-macros here.
760 AM_GNU_GETTEXT([external], [need-formatstring-macros])
761 AM_GNU_GETTEXT_VERSION([0.19.2])
763 # For a test of uniq: it uses the $LOCALE_FR envvar.
764 gt_LOCALE_FR
766 AC_CONFIG_FILES(
767   Makefile
768   po/Makefile.in
769   gnulib-tests/Makefile
770   )
771 AC_OUTPUT