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