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