dnl Copyright 1996-2003,2005,2006,2008,2009 Alain Knaff.
dnl This file is part of mtools.
dnl
dnl Mtools is free software: you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation, either version 3 of the License, or
dnl (at your option) any later version.
dnl
dnl Mtools is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with Mtools.  If not, see <http://www.gnu.org/licenses/>.
dnl
dnl Process this file with autoconf to produce a configure script.
AC_INIT(buffer.c)
m4_include([m4/ax_lib_socket_nsl.m4])
AC_CONFIG_HEADER(config.h)

dnl Checks for compiler
AC_PROG_CC
dnl AC_PROG_CXX
AC_PROG_GCC_TRADITIONAL
AC_PROG_INSTALL
AC_PROG_LN_S

AC_PATH_PROG(INSTALL_INFO, install-info, "")

dnl Check for Systems
AC_USE_SYSTEM_EXTENSIONS
AC_CANONICAL_SYSTEM

AC_C_CONST
AC_C_INLINE

dnl Check for configuration options
dnl Enable OS/2 extended density format disks
AC_ARG_ENABLE(xdf,
[  --enable-xdf           support for OS/2 extended density format disks],
[if test x$enableval = xyes; then
  AC_DEFINE([USE_XDF],1,[Define this if you want to use Xdf])
  XDF_IO_SRC=xdf_io.c
  XDF_IO_OBJ=xdf_io.o
fi],[AC_DEFINE([USE_XDF],1,[Define this if you want to use Xdf])
XDF_IO_SRC=xdf_io.c
XDF_IO_OBJ=xdf_io.o
]
)
AC_SUBST(XDF_IO_SRC)
AC_SUBST(XDF_IO_OBJ)

dnl Check for configuration options
dnl Enable usage of vold on Solaris
AC_ARG_ENABLE(vold,
[  --enable-vold          compatibility with Solaris' vold],
[if test x$enableval = xyes; then
  AC_DEFINE([USING_VOLD],1,[Define this if you use mtools together with Solaris' vold])
fi])


dnl Check for configuration options
dnl Enable usage of vold on Solaris
AC_ARG_ENABLE(new-vold,
[  --enable-new-vold          compatibility with Solaris' vold, new version],
[newVold=x$enableval
if test x$enableval = xyes; then
  AC_DEFINE([USING_NEW_VOLD],1,[Define this if you use mtools together with the new Solaris' vold support])
fi])


dnl Check for configuration options
dnl Debugging
AC_ARG_ENABLE(debug,
[  --enable-debug         debugging messages],
[if test x$enableval = xyes; then
  AC_DEFINE([DEBUG],1,[Define for debugging messages])
fi])


dnl Check for configuration options
dnl Raw terminal code (enabled by default)
AC_ARG_ENABLE(raw_term,
[  --enable-raw-term      raw terminal (readkey behaviour, default)],
[if test x$enableval = xyes; then
  AC_DEFINE([USE_RAWTERM],1,[Define on non Unix OS'es which don't have the concept of tty's])
fi],
AC_DEFINE([USE_RAWTERM],1,[Define on non Unix OS'es which don't have the concept of tty's]))


dnl Checks for libraries.

dnl AC_IRIX_SUN
AC_CHECK_LIB(sun, getpwnam)
AC_CHECK_LIB(cam, cam_open_device)
AC_CHECK_LIB(iconv, iconv)

dnl Check for platform-specific libraries
AC_CHECK_LIB(socket,main)
AX_LIB_SOCKET_NSL
AC_CHECK_LIB(bsd,main)

dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_STDBOOL
AC_CHECK_HEADERS(getopt.h stdarg.h stdlib.h unistd.h linux/unistd.h \
libc.h fcntl.h limits.h sys/file.h sys/ioctl.h sys/time.h strings.h string.h \
sys/param.h memory.h malloc.h io.h signal.h sys/signal.h utime.h sgtty.h \
sys/floppy.h mntent.h sys/sysmacros.h netinet/in.h netinet/tcp.h assert.h \
iconv.h wctype.h wchar.h locale.h xlocale.h linux/fs.h)
AC_CHECK_HEADERS(termio.h sys/termio.h, [break])
AC_CHECK_HEADERS(termios.h sys/termios.h, [break])

dnl Check for platform-specific header files
AC_CHECK_HEADERS(sys/fdio.h)
AC_CHECK_HEADERS(sys/socket.h arpa/inet.h netdb.h)

dnl Check for types
AC_SYS_LARGEFILE
AC_TYPE_INT8_T
AC_TYPE_INT16_T
AC_TYPE_INT32_T
AC_TYPE_UINT8_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_SSIZE_T
AC_TYPE_SIZE_T
AC_TYPE_OFF_T
AC_TYPE_SIGNAL
AC_TYPE_UID_T

AC_CHECK_TYPES(caddr_t)
AC_CHECK_TYPES(long long)
AC_CHECK_SIZEOF(size_t)
AC_CHECK_SIZEOF(off_t)
AC_CHECK_SIZEOF(time_t)
AC_CHECK_SIZEOF(long)

seek_function=

if test $ac_cv_sizeof_off_t -ge 8 ; then
   seek_function=lseek
fi

dnl Fallback if we have no suitable 64 bit seek function yet
if test X$seek_function = X ; then
  AC_DEFINE([_LARGEFILE64_SOURCE],1,[Needed for off64_t / lseek64 ])
  AC_CHECK_TYPES(off64_t,
    [ AC_CHECK_FUNCS(lseek64, [ seek_function=lseek64 ])
    ])
  AC_CHECK_FUNCS(stat64)
  if test X$seek_function = Xlseek64 ; then
    AC_MSG_CHECKING(whether lseek64 declared in unistd.h)
    AC_CACHE_VAL(mtools_cv_have_lseek64_prototype,
      AC_COMPILE_IFELSE(
         [AC_LANG_PROGRAM([[
              #define _LARGEFILE64_SOURCE
              #include <sys/types.h>
              #include <unistd.h>
            ]], [[extern int lseek64(int);]])],
        [mtools_cv_have_lseek64_prototype=no],
        [mtools_cv_have_lseek64_prototype=yes]))
    AC_MSG_RESULT($mtools_cv_have_lseek64_prototype)
    if test "$mtools_cv_have_lseek64_prototype" = yes; then
      AC_DEFINE([HAVE_LSEEK64_PROTOTYPE],1,[Define when you have an LSEEK64 prototype])
    fi
  fi
fi

dnl Fallback if we have no suitable 64 bit seek function yet
if test X$seek_function = X ; then
  AC_DEFINE([_LARGEFILE_SOURCE],1,[Might be needed for loff_t / llseek64 ])
  AC_CHECK_TYPES([loff_t, offset_t, long long],
    [ AC_CHECK_FUNCS(llseek, [ seek_function=llseek ])
    ])

  if test X$seek_function = Xllseek ; then
    dnl
    dnl Check to see if llseek() is declared in unistd.h.  On some libc's
    dnl it is, and on others it isn't..... Thank you glibc developers....
    dnl
    dnl Warning!  Use of --enable-gcc-wall may throw off this test.
    dnl
    dnl
    AC_MSG_CHECKING(whether llseek declared in unistd.h)
    AC_CACHE_VAL(mtools_cv_have_llseek_prototype,
      AC_COMPILE_IFELSE(
         [AC_LANG_PROGRAM([[
              #define _LARGEFILE_SOURCE
              #define _LARGEFILE64_SOURCE
              #include <sys/types.h>
              #include <unistd.h>
	   ]], [[extern int llseek(int);]])],
        [mtools_cv_have_llseek_prototype=no],
        [mtools_cv_have_llseek_prototype=yes]))
    AC_MSG_RESULT($mtools_cv_have_llseek_prototype)
    if test "$mtools_cv_have_llseek_prototype" = yes; then
      AC_DEFINE([HAVE_LLSEEK_PROTOTYPE],1,[Define when you have an LLSEEK prototype])
    fi
  fi
fi

AC_CHECK_FUNCS(htons)

dnl Apparently termio before termios is preferred by A/UX, AIX and SCO

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_STRUCT_TM


dnl Checks for library functions.
AC_TYPE_SIGNAL
AC_CHECK_FUNCS(strerror random srandom strchr strrchr lockf flock \
strcasecmp strncasecmp strnlen atexit on_exit getpass memmove \
strdup strndup strcspn strspn strtoul strtol strtoll strtoi strtoui \
memcpy strpbrk memset setenv seteuid setresuid setpgrp \
tcsetattr tcflush basename fchdir media_oldaliases  \
snprintf setlocale toupper_l strncasecmp_l \
wcsdup wcscasecmp wcsnlen putwc \
getuserid getgroupid \
alarm sigaction usleep)


AC_CHECK_FUNCS(utimes utime, [break])
AC_CHECK_FUNCS(tzset gettimeofday)

CF_SYS_ERRLIST

[
host_os0=`echo $host_os | sed 's/-/_/g'`
host_os1=`echo $host_os0 | sed 's/\./_/g'`
host_os2=`echo $host_os0 | sed 's/^\([^.]*\)\..*$/\1/g'`
host_os3=`echo $host_os2 | sed 's/^\([^0-9]*\)[0-9]*$/\1/g'`
host_cpu1=`echo $host_cpu | sed 's/\./_/g'`
host_vendor1=`echo $host_vendor | sed 's/\./_/g'`
HOST_ID="-DCPU_$host_cpu1 -DVENDOR_$host_vendor1 -DOS_$host_os1"
if [ $host_os1 != $host_os2 ] ; then
	HOST_ID="$HOST_ID -DOS_$host_os2"
fi
if [ $host_os1 != $host_os3 ] && [ $host_os2 != $host_os3 ] ; then
	HOST_ID="$HOST_ID -DOS_$host_os3"
fi

my_host_os=`echo $host_os1 $host_os2 $host_os3 | sort -u`
objs=`echo $srcdir/*.c | sed 's/\.c$/.o/' `
if [ "X$GCC" = "Xyes" ] ; then
    Wall=-Wall
    if [ "$host_os3" = sunos ] ; then
	    Wall=""
    fi
    if [ "$host_os3" = ultrix ] ; then
	    Wall=""
    fi
    if [ "$host_os3" = linux ] ; then
	    CFLAGS="$CFLAGS -fno-strength-reduce"
    fi
    if [ "$host_os3" = aux ] ; then
	    CFLAGS="$CFLAGS -ZP"
	    MACHDEPLIBS="-lposix -UTIL"
    fi
    case "${host}" in
       arm*-*-linux) CFLAGS="$CFLAGS -mstructure-size-boundary=8";;
    esac
    CFLAGS="$CFLAGS $Wall"
else
    if [ $host_os3 = hpux ] ; then
	    CPPFLAGS="$CPPFLAGS -Ae"
    fi

    if [ $host_os3 = xenix ] ; then
	    CFLAGS="$CFLAGS -M2e"
    fi
fi

if [ $host_os3 = hpux ] ; then
	    LDFLAGS="$LDFLAGS -z"
fi

if [ $host_os3 = xenix ] ; then
    LDFLAGS="$LDFLAGS -M2e -i -f 5000"
fi

if [ $host_os2 = sysv4 ] ; then
    SHLIB="-lc -L/usr/ucblib -lucb"
else
    SHLIB=""
fi

if [ $host_os3 = isc ] ; then
    CFLAGS="$CFLAGS -D_SYSV3"
    SHLIB="-lc_s"
fi

if [ $host_os3 = solaris -a x$newVold = xxyes ] ; then
    SHLIB="$SHLIB -s -lvolmgt"
fi

if [ $host_os3 = nextstep ] ; then
    CFLAGS="$CFLAGS -DBSD"
    SHLIB=""
fi

if [ -d /usr/5lib ] ; then
	extralibdir=-L/usr/5lib
fi

]

AC_PATH_X
AC_PATH_XTRA

dnl Floppyd
AC_ARG_ENABLE(floppyd,
[  --enable-floppyd       floppy daemon support],
[if test x$enableval != x; then
  use_floppyd=$enableval
fi])

if test X$use_floppyd = X -a X$no_x = X ; then
    use_floppyd="yes"
fi

if test X$use_floppyd = Xyes; then
    if test X$no_x = Xyes ; then
	echo "Floppyd needs X support" >&2
	echo "To compile without floppyd, use ./configure --disable-floppyd" >&2
	exit 1
    fi
    FLOPPYD="floppyd floppyd_installtest"
    BINFLOPPYD="\$(DESTDIR)\$(bindir)/floppyd \$(DESTDIR)\$(bindir)/floppyd_installtest"
    FLOPPYD_IO_SRC=floppyd_io.c
    FLOPPYD_IO_OBJ=floppyd_io.o
    AC_DEFINE([USE_FLOPPYD],1,[Define when you want to include floppyd support])
    AC_FUNC_SETPGRP

    FLOPPYD_LIBS=""
    AC_CHECK_LIB(X11, XOpenDisplay, [ FLOPPYD_LIBS="-lX11 $FLOPPYD_LIBS" ])
    AC_CHECK_LIB(Xau, XauFileName, [ FLOPPYD_LIBS="-lXau $FLOPPYD_LIBS" ])
else
    FLOPPYD=
    BINFLOPPYD=
    FLOPPYD_IO_SRC=
    FLOPPYD_IO_OBJ=
    FLOPPYD_LIBS=
fi



AC_SUBST(FLOPPYD_LIBS)
AC_SUBST(FLOPPYD)
AC_SUBST(BINFLOPPYD)
AC_SUBST(FLOPPYD_IO_SRC)
AC_SUBST(FLOPPYD_IO_OBJ)

AC_SUBST(extraincludedir)
AC_SUBST(extralibdir)
AC_SUBST(MACHDEPLIBS)
AC_SUBST(SHLIB)
AC_SUBST(host_cpu)
AC_SUBST(HOST_ID)
AC_OUTPUT(Makefile)
