# Configure template for GNU tar.
# Copyright 1991, 94, 95, 96, 97, 98, 1999 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.

AC_INIT(src/tar.c)
AM_CONFIG_HEADER(config.h)
AC_PREREQ(2.12)
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE(tar, 1.13)
AC_DEFINE(_GNU_SOURCE)
ALL_LINGUAS="cs de es fr it ko nl no pl pt ru sl sv"

AC_PROG_CC
AC_PROG_GCC_TRADITIONAL
AC_AIX
AC_MINIX
AC_EXEEXT
AC_PROG_RANLIB
AC_PROG_YACC
AC_SYS_LARGEFILE
AC_ISC_POSIX
AM_C_PROTOTYPES
AC_C_CONST
AC_C_INLINE
AC_CHECK_SIZEOF(unsigned long, 4)
AC_CHECK_SIZEOF(long long, 0)

AC_CHECK_HEADERS(fcntl.h limits.h linux/fd.h memory.h net/errno.h poll.h \
sgtty.h string.h stropts.h \
sys/buf.h sys/device.h sys/gentape.h sys/inet.h sys/io/trioctl.h sys/ioccom.h \
sys/mtio.h sys/param.h sys/tprintf.h sys/tape.h sys/time.h sys/timeb.h \
sys/wait.h unistd.h)

jm_AC_HEADER_INTTYPES_H

# It seems that that many machines where <utime.h> seems to be
# broken just require something like -D_XXX_SOURCE, where XXX might
# be POSIX, POSIX_C, ALL, HPUX or whatever, depending on the machine.

AC_CACHE_CHECK(for utime.h, tar_cv_header_utime_h,
  [AC_TRY_COMPILE([
#include <sys/types.h>
#include <utime.h>], [struct utimbuf foo],
  tar_cv_header_utime_h=yes, tar_cv_header_utime_h=no)])
test $tar_cv_header_utime_h = yes && AC_DEFINE(HAVE_UTIME_H)

if test $ac_cv_header_sys_mtio_h = yes; then
  AC_CACHE_CHECK(for remote tape header files, tar_cv_header_rmt,
    [AC_TRY_CPP([
#if HAVE_SGTTY_H
# include <sgtty.h>
#endif
#include <sys/socket.h>],
    tar_cv_header_rmt=yes, tar_cv_header_rmt=no)])
  test $tar_cv_header_rmt = yes && RMT=rmt
  AC_SUBST(RMT)
fi

AC_CACHE_CHECK(for getgrgid declaration, tar_cv_header_getgrgid,
  [AC_EGREP_HEADER(getgrgid, grp.h,
  tar_cv_header_getgrgid=yes, tar_cv_header_getgrgid=no)])
test $tar_cv_header_getgrgid = yes && AC_DEFINE(HAVE_GETGRGID)

AC_CACHE_CHECK(for getpwuid declaration, tar_cv_header_getpwuid,
  [AC_EGREP_HEADER(getpwuid, pwd.h,
  tar_cv_header_getpwuid=yes, tar_cv_header_getpwuid=no)])
test $tar_cv_header_getpwuid = yes && AC_DEFINE(HAVE_GETPWUID)

AC_CACHE_CHECK(which ioctl field to test for reversed bytes,
  tar_cv_header_mtio_check_field,
  [AC_EGREP_HEADER(mt_model, sys/mtio.h,
  tar_cv_header_mtio_check_field=mt_model,
  tar_cv_header_mtio_check_field=mt_type)])
AC_DEFINE_UNQUOTED(MTIO_CHECK_FIELD, $tar_cv_header_mtio_check_field)

AC_HEADER_DIRENT
AC_HEADER_MAJOR
AC_HEADER_STAT
AC_HEADER_STDC
AC_HEADER_TIME
AC_STRUCT_ST_BLKSIZE
AC_STRUCT_ST_BLOCKS
jm_STRUCT_DIRENT_D_INO
AC_MSG_CHECKING([for st_fstype string in struct stat])
AC_CACHE_VAL(diff_cv_st_fstype_string,
  [AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/stat.h>], [struct stat s; s.st_fstype[0] = 'x';],
   diff_cv_st_fstype_string=yes,
   diff_cv_st_fstype_string=no)])
AC_MSG_RESULT($diff_cv_st_fstype_string)
if test $diff_cv_st_fstype_string = yes; then
  AC_DEFINE(HAVE_ST_FSTYPE_STRING)
fi

AC_TYPE_SIGNAL
AC_TYPE_MODE_T
AC_TYPE_PID_T
AC_TYPE_OFF_T
AC_TYPE_SIZE_T
AC_TYPE_UID_T
AC_CHECK_TYPE(daddr_t, long)
AC_CHECK_TYPE(major_t, int)
AC_CHECK_TYPE(minor_t, int)
AC_CHECK_TYPE(ssize_t, int)
jm_AC_TYPE_UINTMAX_T
jm_AC_PREREQ_XSTRTOUMAX

AC_CHECK_FUNCS(fsync ftime getcwd isascii mkfifo nap napms poll \
select strerror strstr usleep)

AC_CACHE_CHECK(for mknod, tar_cv_func_mknod,
  [AC_TRY_LINK([
#include <sys/types.h>
#include <sys/stat.h>],
  [mknod (0, 0, 0)],
  tar_cv_func_mknod=yes, tar_cv_func_mknod=no)])
test $tar_cv_func_mknod = yes && AC_DEFINE(HAVE_MKNOD)

# Whenever both -lsocket and -lnsl are needed, it seems to be always the
# case that gethostbyname requires -lnsl.  So, check -lnsl first, for it
# to be in LIBS before the setsockopt checks are performed.  *However*,
# on SINIX-N 5.43, this is false, and gethostent seems to be a better
# candidate. So, let's use it below instead of gethostbyname, and see.

AC_CHECK_FUNC(gethostent)
if test $ac_cv_func_gethostent = no; then
  AC_CHECK_LIB(nsl, gethostent)
fi
AC_CHECK_FUNC(setsockopt)
if test $ac_cv_func_setsockopt = no; then
  AC_CHECK_LIB(socket, setsockopt)
fi

AC_FUNC_ALLOCA
AC_FUNC_FNMATCH
test $ac_cv_func_fnmatch_works = yes || LIBOBJS="$LIBOBJS fnmatch.o"
AC_FUNC_VPRINTF
AC_REPLACE_FUNCS(execlp ftruncate lchown memset mkdir rename rmdir \
  strtol strtoul)
jm_FUNC_MALLOC
jm_FUNC_MKTIME
jm_FUNC_REALLOC
test "$ac_cv_func_strstr" = yes || LIBOBJS="$LIBOBJS strstr.o"

# The 3-argument open happens to go along with the O_* defines, which
# are easier to check for.

AC_CACHE_CHECK(for 3-argument open, tar_cv_func_open3,
  [AC_TRY_COMPILE([
#if HAVE_FCNTL_H
# include <fcntl.h>
#else
# include <sys/file.h>
#endif],
  [int x = O_RDONLY],
  tar_cv_func_open3=yes, tar_cv_func_open3=no)])
if test $tar_cv_func_open3 = no; then
  AC_DEFINE(EMUL_OPEN3)
fi

# `union wait' is preferrably avoided.  We merely assume below
# that if `int pid;' fails, `union wait pid;' would have worked.
# Directly trying `union wait pid;' is seeking for trouble, as
# some POSIX systems are offering compatibility hacks generating
# ugly diagnostics.  Also, on some systems, WEXITSTATUS exists,
# but fails when called on `union wait' variables.

AC_CACHE_CHECK(for union wait, tar_cv_header_union_wait,
  [AC_TRY_COMPILE([
#include <sys/types.h>
#if HAVE_SYS_WAIT_H
# include <sys/wait.h>
#endif],
  [int status; int pid; pid = wait (&status);],
  tar_cv_header_union_wait=no, tar_cv_header_union_wait=yes)])
test $tar_cv_header_union_wait = yes && AC_DEFINE(HAVE_UNION_WAIT)

AC_CACHE_CHECK(for remote shell, tar_cv_path_RSH,
  [if test -n "$RSH"; then
    tar_cv_path_RSH=$RSH
  else
    tar_cv_path_RSH=no
    for ac_file in /usr/ucb/rsh /usr/bin/remsh /usr/bin/rsh /usr/bsd/rsh \
  	/usr/bin/nsh /usr/bin/rcmd
    do
      if test -f $ac_file; then
        tar_cv_path_RSH=$ac_file
        break
      fi
    done
  fi])
if test $tar_cv_path_RSH = no; then
  AC_CHECK_HEADERS(netdb.h)
else
  AC_DEFINE_UNQUOTED(REMOTE_SHELL, "$tar_cv_path_RSH")
fi

AC_MSG_CHECKING(for default archive)

if test -z "$DEFAULT_ARCHIVE"; then
  DEFAULT_ARCHIVE=-
else
  if test -z "`ls $DEFAULT_ARCHIVE 2>/dev/null`"; then
    AC_MSG_WARN(DEFAULT_ARCHIVE \`$DEFAULT_ARCHIVE' not found on this system)
  fi
  # FIXME: Look for DEFTAPE in <sys/mtio.h>.
  # FIXME: Let DEVICE_PREFIX be configured from the environment.
  # FIXME: Rearrange, here.
  case $DEFAULT_ARCHIVE in
changequote(, )dnl
    *[0-7][lmh])
      device_prefix=`echo $DEFAULT_ARCHIVE | sed 's/[0-7][lmh]$//'`
changequote([, ])dnl
      AC_DEFINE_UNQUOTED(DEVICE_PREFIX, "$device_prefix")
      AC_DEFINE(DENSITY_LETTER)
      ;;
changequote(, )dnl
    *[0-7])
      device_prefix=`echo $DEFAULT_ARCHIVE | sed 's/[0-7]$//'`
changequote([, ])dnl
      AC_DEFINE_UNQUOTED(DEVICE_PREFIX, "$device_prefix")
      ;;
  esac
fi
AC_DEFINE_UNQUOTED(DEFAULT_ARCHIVE, "$DEFAULT_ARCHIVE")
AC_MSG_RESULT($DEFAULT_ARCHIVE)

AC_MSG_CHECKING(for default blocking)
DEFAULT_BLOCKING=${DEFAULT_BLOCKING-20}
AC_DEFINE_UNQUOTED(DEFAULT_BLOCKING, $DEFAULT_BLOCKING)
AC_MSG_RESULT($DEFAULT_BLOCKING)

AM_WITH_DMALLOC

AM_GNU_GETTEXT

# This no-op line works around a bug in automake 1.4:
# it doesn't recognize the assignment to LIBOBJS
# in m4/malloc.m4 and m4/realloc.m4.
: LIBOBJS="$LIBOBJS malloc.o realloc.o"

# This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules.
LIBOBJS=`echo $LIBOBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`

AC_OUTPUT([Makefile doc/Makefile intl/Makefile lib/Makefile \
m4/Makefile po/Makefile.in \
scripts/Makefile src/Makefile tests/Makefile tests/preset])
