1# Configure template for GNU tar. -*- autoconf -*- 2 3# Copyright 1991, 1994-2010, 2013-2021 Free Software Foundation, Inc. 4 5# This file is part of GNU tar. 6 7# GNU tar is free software; you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation; either version 3 of the License, or 10# (at your option) any later version. 11 12# GNU tar is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16 17# You should have received a copy of the GNU General Public License 18# along with this program. If not, see <http://www.gnu.org/licenses/>. 19 20AC_INIT([GNU tar], [1.34], [bug-tar@gnu.org]) 21AC_CONFIG_SRCDIR([src/tar.c]) 22AC_CONFIG_AUX_DIR([build-aux]) 23AC_CONFIG_HEADERS([config.h]) 24AC_PREREQ([2.64]) 25AM_INIT_AUTOMAKE([1.15 gnits tar-ustar dist-bzip2 dist-xz std-options silent-rules]) 26 27# Enable silent rules by default: 28AM_SILENT_RULES([yes]) 29 30AC_PROG_CC_STDC 31AC_EXEEXT 32AC_PROG_RANLIB 33AC_PROG_YACC 34gl_EARLY 35AC_CHECK_TOOLS([AR], [ar]) 36 37AC_SYS_LARGEFILE 38AC_C_INLINE 39 40AC_CHECK_HEADERS_ONCE(fcntl.h linux/fd.h memory.h net/errno.h \ 41 sgtty.h string.h \ 42 sys/param.h sys/device.h sys/gentape.h \ 43 sys/inet.h sys/io/trioctl.h \ 44 sys/mtio.h sys/time.h sys/tprintf.h sys/tape.h \ 45 unistd.h locale.h) 46 47AC_CHECK_HEADERS([sys/buf.h], [], [], 48[#if HAVE_SYS_PARAM_H 49#include <sys/param.h> 50#endif]) 51 52AC_HEADER_MAJOR 53 54AC_MSG_CHECKING([for st_fstype string in struct stat]) 55AC_CACHE_VAL(diff_cv_st_fstype_string, 56 [AC_TRY_COMPILE([#include <sys/types.h> 57#include <sys/stat.h>], [struct stat s; s.st_fstype[0] = 'x';], 58 diff_cv_st_fstype_string=yes, 59 diff_cv_st_fstype_string=no)]) 60AC_MSG_RESULT($diff_cv_st_fstype_string) 61if test $diff_cv_st_fstype_string = yes; then 62 AC_DEFINE(HAVE_ST_FSTYPE_STRING, 1, 63 [Define if struct stat has a char st_fstype[] member.]) 64fi 65 66# even if we use gnulib's acl.h with integrated m4 file later on (used because 67# of very useful file_has_acl() function) we need following checks that restrict 68# tar to use POSIX.1e ACLs only. 69AC_ARG_WITH([posix-acls], 70 AS_HELP_STRING([--without-posix-acls], 71 [do not use POSIX.1e access control lists]), 72 [], 73 [with_posix_acls=yes]) 74if test "x$with_posix_acls" != "xno"; then 75 AC_CHECK_HEADERS(sys/acl.h,, [with_posix_acls=no]) 76 for tar_acl_func in acl_get_file acl_get_fd acl_set_file acl_set_fd \ 77 acl_to_text acl_from_text acl_delete_def_file \ 78 acl_free; do \ 79 test "x$with_posix_acls" = xno && break 80 AC_SEARCH_LIBS([$tar_acl_func], [acl pacl], [], [with_posix_acls=no]) 81 done 82 if test "x$with_posix_acls" != xno; then 83 AC_DEFINE(HAVE_POSIX_ACLS,,[Define when we have working POSIX acls]) 84 fi 85else 86 # disable acls in gnulib's checks 87 export enable_acl=no 88fi 89 90AC_TYPE_MODE_T 91AC_TYPE_PID_T 92AC_TYPE_OFF_T 93AC_TYPE_UID_T 94AC_CHECK_TYPE(major_t, , AC_DEFINE(major_t, int, 95 [Type of major device numbers.])) 96AC_CHECK_TYPE(minor_t, , AC_DEFINE(minor_t, int, 97 [Type of minor device numbers.])) 98AC_CHECK_TYPE(dev_t, unsigned) 99AC_CHECK_TYPE(ino_t, unsigned) 100 101gt_TYPE_SSIZE_T 102 103# gnulib modules 104gl_INIT 105 106if test $ac_cv_lib_error_at_line = no; then 107 # This means that the error() function is not present in libc, so 108 # the one from gnulib will be used instead. This function precedes 109 # error messages it prints with the program name as returned by getprogname() 110 # call, instead of using the name set by set_program_name. 111 # Install workaround. 112 AC_DEFINE([ENABLE_ERROR_PRINT_PROGNAME],[1], 113 [Enable the use of error_print_progname to print program name with error messages. 114 See comment to function tar_print_progname in src/tar.c]) 115fi 116 117# paxutils modules 118tar_PAXUTILS 119 120# gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found]) 121# ------------------------------------------------ 122# If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND. 123# Otherwise, run RUN-IF-NOT-FOUND. 124AC_DEFUN([gl_GCC_VERSION_IFELSE], 125 [AC_PREPROC_IFELSE( 126 [AC_LANG_PROGRAM( 127 [[ 128#if ($1) < __GNUC__ || (($1) == __GNUC__ && ($2) <= __GNUC_MINOR__) 129/* ok */ 130#else 131# error "your version of gcc is older than $1.$2" 132#endif 133 ]]), 134 ], [$3], [$4]) 135 ] 136) 137 138AC_ARG_ENABLE([gcc-warnings], 139 [AS_HELP_STRING([--enable-gcc-warnings], 140 [turn on many GCC warnings (for developers; best with GNU make)])], 141 [case $enableval in 142 yes|no) ;; 143 *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;; 144 esac 145 gl_gcc_warnings=$enableval], 146 [gl_gcc_warnings=no 147 if test -d "$srcdir"/.git; then 148 gl_GCC_VERSION_IFELSE([4], [6], [gl_gcc_warnings=yes]) 149 fi] 150) 151 152if test "$gl_gcc_warnings" = yes; then 153 gl_WARN_ADD([-Werror], [WERROR_CFLAGS]) 154 AC_SUBST([WERROR_CFLAGS]) 155 156 nw= 157 # This, $nw, is the list of warnings we disable. 158 nw="$nw -Wformat-nonliteral" # warnings in Fedora 17 stdio.h 159 nw="$nw -Wvla" # warnings in gettext.h 160 nw="$nw -Wswitch-default" # Too many warnings for now 161 nw="$nw -Wunsafe-loop-optimizations" # It's OK to omit unsafe optimizations. 162 nw="$nw -Winline" # It's OK to not inline. 163 nw="$nw -Wstrict-overflow" # It's OK to optimize strictly. 164 nw="$nw -Wsuggest-attribute=pure" # Too many warnings for now. 165 nw="$nw -Wstack-protector" 166 167 gl_MANYWARN_ALL_GCC([ws]) 168 gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw]) 169 for w in $ws; do 170 gl_WARN_ADD([$w]) 171 done 172 gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now 173 gl_WARN_ADD([-Wno-type-limits]) # It's OK to optimize based on types. 174 gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now 175 gl_WARN_ADD([-Wno-format-nonliteral]) 176 177 gl_WARN_ADD([-fdiagnostics-show-option]) 178 gl_WARN_ADD([-funit-at-a-time]) 179 180 181 AC_SUBST([WARN_CFLAGS]) 182 183 AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.]) 184 AH_VERBATIM([FORTIFY_SOURCE], 185 [/* Enable compile-time and run-time bounds-checking, and some warnings, 186 without upsetting glibc 2.15+. */ 187 #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__ 188 # define _FORTIFY_SOURCE 2 189 #endif 190 ]) 191 AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks]) 192 193 # Use a slightly smaller set of warning options for lib/. 194 # Remove the following and save the result in GNULIB_WARN_CFLAGS. 195 nw= 196 nw="$nw -Wmissing-prototypes" 197 nw="$nw -Wunused-macros" 198 # 199 # These are for argp. 200 nw="$nw -Wmissing-field-initializers" 201 nw="$nw -Wshadow" 202 # 203 gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) 204 205 # This is also for argp. 206 gl_WARN_ADD([-Wno-missing-field-initializers], [GNULIB_WARN_CFLAGS]) 207 208 AC_SUBST([GNULIB_WARN_CFLAGS]) 209 210 # For gnulib-tests, the set is slightly smaller still. 211 nw= 212 # It's not worth being this picky about test programs. 213 nw="$nw -Wsuggest-attribute=const" 214 gl_MANYWARN_COMPLEMENT([GNULIB_TEST_WARN_CFLAGS], 215 [$GNULIB_WARN_CFLAGS], [$nw]) 216 AC_SUBST([GNULIB_TEST_WARN_CFLAGS]) 217fi 218 219TAR_HEADERS_ATTR_XATTR_H 220 221AC_CHECK_FUNCS_ONCE([fchmod fchown fsync lstat mkfifo readlink symlink]) 222 223AC_CHECK_DECLS([getgrgid],,, [#include <grp.h>]) 224AC_CHECK_DECLS([getpwuid],,, [#include <pwd.h>]) 225AC_CHECK_DECLS([time],,, [#include <time.h>]) 226 227AC_REPLACE_FUNCS(waitpid) 228 229AC_ARG_VAR([RSH], [Configure absolute path to default remote shell binary]) 230AC_CACHE_CHECK(for remote shell, tar_cv_path_RSH, 231 [if test -n "$RSH"; then 232 tar_cv_path_RSH=$RSH 233 else 234 tar_cv_path_RSH=no 235 for ac_file in /usr/ucb/rsh /usr/bin/remsh /usr/bin/rsh /usr/bsd/rsh \ 236 /usr/bin/nsh /usr/bin/rcmd 237 do 238 # Prefer a non-symlink rsh to a symlink one, so that binaries built 239 # on AIX 4.1.4, where /usr/ucb/rsh is a symlink to /usr/bin/rsh 240 # will run on AIX 4.3.0, which has only /usr/bin/rsh. 241 if test -f $ac_file; then 242 if (test -h $ac_file) 2>/dev/null; then 243 test $tar_cv_path_RSH = no && tar_cv_path_RSH=$ac_file 244 else 245 tar_cv_path_RSH=$ac_file 246 break 247 fi 248 fi 249 done 250 fi]) 251if test $tar_cv_path_RSH = no; then 252 AC_CHECK_HEADERS(netdb.h) 253else 254 AC_DEFINE_UNQUOTED(REMOTE_SHELL, "$tar_cv_path_RSH", 255 [Define to the full path of your rsh, if any.]) 256fi 257 258TAR_COMPR_PROGRAM(compress) 259TAR_COMPR_PROGRAM(gzip) 260TAR_COMPR_PROGRAM(bzip2) 261TAR_COMPR_PROGRAM(lzip) 262TAR_COMPR_PROGRAM(lzma) 263TAR_COMPR_PROGRAM(lzop) 264TAR_COMPR_PROGRAM(xz) 265TAR_COMPR_PROGRAM(zstd) 266 267AC_MSG_CHECKING(for default archive format) 268 269AC_ARG_VAR([DEFAULT_ARCHIVE_FORMAT], 270 [Set the default archive format. Allowed values are: V7, OLDGNU, USTAR, POSIX, GNU. Default is GNU]) 271 272if test -z "$DEFAULT_ARCHIVE_FORMAT"; then 273 DEFAULT_ARCHIVE_FORMAT="GNU" 274fi 275case $DEFAULT_ARCHIVE_FORMAT in 276 V7|OLDGNU|USTAR|POSIX|GNU) ;; 277 *) AC_MSG_ERROR(Invalid format name);; 278esac 279AC_DEFINE_UNQUOTED(DEFAULT_ARCHIVE_FORMAT, ${DEFAULT_ARCHIVE_FORMAT}_FORMAT, 280 [By default produce archives of this format]) 281AC_MSG_RESULT($DEFAULT_ARCHIVE_FORMAT) 282 283AC_MSG_CHECKING(for default archive) 284 285AC_ARG_VAR([DEFAULT_ARCHIVE], 286 [Set the name of the default archive (default: -)]) 287if test -z "$DEFAULT_ARCHIVE"; then 288 DEFAULT_ARCHIVE=- 289else 290 if test -z "`ls $DEFAULT_ARCHIVE 2>/dev/null`"; then 291 AC_MSG_WARN(DEFAULT_ARCHIVE '$DEFAULT_ARCHIVE' not found on this system) 292 fi 293 # FIXME: Look for DEFTAPE in <sys/mtio.h>. 294 # FIXME: Let DEVICE_PREFIX be configured from the environment. 295 # FIXME: Rearrange, here. 296 case $DEFAULT_ARCHIVE in 297 *[[0-7][lmh]]) 298 AC_DEFINE(DENSITY_LETTER, 1, 299 [Define to 1 if density may be indicated by [lmh] at end of device.]) 300 device_prefix=`echo $DEFAULT_ARCHIVE | sed 's/[0-7][lmh]$//'` 301 ;; 302 *[[0-7]]) 303 device_prefix=`echo $DEFAULT_ARCHIVE | sed 's/[0-7]$//'` 304 ;; 305 *) 306 device_prefix= 307 ;; 308 esac 309 case "$device_prefix" in 310 ?*) 311 AC_DEFINE_UNQUOTED(DEVICE_PREFIX, "$device_prefix", 312 [Define to a string giving the prefix of the default device, without the part specifying the unit and density.]) 313 ;; 314 esac 315fi 316AC_DEFINE_UNQUOTED(DEFAULT_ARCHIVE, "$DEFAULT_ARCHIVE", 317 [Define to a string giving the full name of the default archive file.]) 318AC_MSG_RESULT($DEFAULT_ARCHIVE) 319 320AC_ARG_VAR([DEFAULT_BLOCKING], 321 [Define default blocking factor (default: 20)]) 322AC_MSG_CHECKING(for default blocking) 323DEFAULT_BLOCKING=${DEFAULT_BLOCKING-20} 324AC_DEFINE_UNQUOTED(DEFAULT_BLOCKING, $DEFAULT_BLOCKING, 325 [Define to a number giving the default blocking size for archives.]) 326AC_MSG_RESULT($DEFAULT_BLOCKING) 327 328AC_MSG_CHECKING(for default quoting style) 329 330m4_define([QUOTING_STYLES],dnl 331 [literal|shell|shell-always|c|escape|locale|clocale]) 332DEFAULT_QUOTING_STYLE="escape" 333AC_ARG_VAR([DEFAULT_QUOTING_STYLE], 334 [Set the default quoting style. Allowed values are: ] m4_bpatsubst(QUOTING_STYLES,[|], [[, ]]) [. Default is "escape".]) 335 336case $DEFAULT_QUOTING_STYLE in 337QUOTING_STYLES) ;; 338*) AC_MSG_ERROR(Invalid quoting style);; 339esac 340AC_MSG_RESULT($DEFAULT_QUOTING_STYLE) 341DEFAULT_QUOTING_STYLE=`echo ${DEFAULT_QUOTING_STYLE}|sed 's/-/_/g'`_quoting_style 342AC_DEFINE_UNQUOTED(DEFAULT_QUOTING_STYLE, $DEFAULT_QUOTING_STYLE, 343 [Define to a default quoting style (see lib/quoteargs.c for the list)]) 344 345# Iconv 346AM_ICONV 347AC_CHECK_HEADERS(iconv.h) 348AC_CHECK_TYPE(iconv_t,:, 349 AC_DEFINE(iconv_t, int, 350 [Conversion descriptor type]), 351 [ 352#ifdef HAVE_ICONV_H 353# include <iconv.h> 354#endif 355]) 356 357# Gettext. 358AM_GNU_GETTEXT([external], [need-formatstring-macros]) 359AM_GNU_GETTEXT_VERSION([0.16]) 360 361# Initialize the test suite. 362AC_CONFIG_TESTDIR(tests) 363AC_CONFIG_FILES([tests/Makefile tests/atlocal]) # FIXME: tests/preset? 364AM_MISSING_PROG([AUTOM4TE], [autom4te]) 365 366AC_SUBST(BACKUP_LIBEXEC_SCRIPTS) 367AC_SUBST(BACKUP_SBIN_SCRIPTS) 368AC_ARG_ENABLE(backup-scripts, 369 AC_HELP_STRING([--enable-backup-scripts], 370 [Create and install backup and restore scripts]), 371 [case $enableval in 372 yes) BACKUP_LIBEXEC_SCRIPTS='$(BACKUP_LIBEXEC_SCRIPTS_LIST)' 373 BACKUP_SBIN_SCRIPTS='$(BACKUP_SBIN_SCRIPTS_LIST)' 374 ;; 375 esac]) 376 377AC_SUBST(BACKUP_SED_COND) 378if date +%Y-%m-%d 2>/dev/null >&2; then 379 BACKUP_SED_COND='/^\#ELSE_DATE_FORMAT_OK/,/^\#ENDIF_DATE_FORMAT_OK/d;/^\#IF_DATE_FORMAT_OK/d' 380else 381 BACKUP_SED_COND='/^\#IF_DATE_FORMAT_OK/,/^\#ELSE_DATE_FORMAT_OK/d;/^\#ENDIF_DATE_FORMAT_OK/d' 382fi 383 384AC_OUTPUT([Makefile\ 385 doc/Makefile\ 386 gnu/Makefile\ 387 lib/Makefile\ 388 po/Makefile.in\ 389 scripts/Makefile\ 390 rmt/Makefile\ 391 src/Makefile]) 392