# AC_PREREQ(2.57)
AC_INIT(libssh2,0.9,sarag@libssh2.org)
AC_CONFIG_SRCDIR([src])
AC_CONFIG_HEADER([include/libssh2_config.h])

# Check for the OS.
AC_CANONICAL_HOST
case "$host" in
	*-cygwin)
	SHLIB_SUFFIX_NAME="dll"
	SHLIB_LDFLAGS="-shared"
	CFLAGS="$CFLAGS -DLIBSSH2_WIN32"
    ;;
	*darwin*)
	SHLIB_SUFFIX_NAME="dylib"
	SHLIB_LDFLAGS="-dynamiclib -flat_namespace"
	CFLAGS="$CFLAGS -DLIBSSH2_DARWIN"
	;;
    *)
    SHLIB_SUFFIX_NAME="so"
    SHLIB_LDFLAGS="-shared"
    ;;
esac

AC_CHECK_LIB(socket, socket, [
SHLIB_LDFLAGS="$SHLIB_LDFLAGS -lsocket"
LIBS="$LIBS -lsocket"
])
AC_CHECK_LIB(m, ceil, [ SHLIB_LDFLAGS="$SHLIB_LDFLAGS -lm" ])


AC_SUBST(SHLIB_SUFFIX_NAME)
AC_SUBST(SHLIB_LDFLAGS)
AC_SUBST(LIBS)

AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB
AC_C_BIGENDIAN
if test -z "$PKG_CONFIG"; then
  AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
fi

#
# Look for OpenSSL
#
AC_ARG_WITH(openssl,
  AC_HELP_STRING([--with-openssl=DIR],[Look for OpenSSL in PATH]),
  [LIBSSH2_OPENSSL_DIR=$withval],[LIBSSH2_OPENSSL_DIR=yes])

if test "$LIBSSH2_OPENSSL_DIR" = "no" || test "$LIBSSH2_OPENSSL_DIR" = "yes"; then
  unset LIBSSH2_OPENSSL_DIR
fi

found_openssl=no
unset OPENSSL_INCDIR
unset OPENSSL_LIBDIR

AC_MSG_CHECKING([for OpenSSL])

# Explicit path given, use it rather than pkg-config
if test ! -z "$LIBSSH2_OPENSSL_DIR"; then
  found_openssl=yes
  OPENSSL_LIBDIR=$LIBSSH2_OPENSSL_DIR/lib
  OPENSSL_INCDIR=$LIBSSH2_OPENSSL_DIR/include
  AC_MSG_RESULT([Using explicit path $LIBSSH2_OPENSSL_DIR])
fi

# If pkg-config is found try using it
if test "$found_openssl" = "no" && test -x "$PKG_CONFIG" && $PKG_CONFIG --exists openssl; then
  found_openssl=yes
  OPENSSL_LIBDIR=`$PKG_CONFIG --libs openssl`
  OPENSSL_INCDIR=`$PKG_CONFIG --variable=includedir openssl`
  AC_MSG_RESULT([Using paths from pkg-config])
fi

# Elsewise, search for OpenSSL wherever it might be
if test "$found_openssl" = "no"; then
  OPENSSL_SEARCH_PATH="/usr/local/ssl /usr/local /usr /usr/local/openssl"

  for i in $OPENSSL_SEARCH_PATH; do
    if test -r $i/include/openssl/evp.h; then
      OPENSSL_INCDIR=$i/include
    fi
    if test -r $i/include/openssl/hmac.h; then
      OPENSSL_INCDIR=$i/include
    fi
    if test -r $i/lib/libcrypto.a -o -r $i/lib/libcrypto.$SHLIB_SUFFIX_NAME; then
      OPENSSL_LIBDIR=$i/lib
    fi
    test -n "$OPENSSL_INCDIR" && test -n "$OPENSSL_LIBDIR" && break
  done

  if test -z "$OPENSSL_INCDIR"; then
    AC_MSG_ERROR([Cannot find OpenSSL's <evp.h> or <hmac.h>])
  fi

  if test -z "$OPENSSL_LIBDIR"; then
    AC_MSG_ERROR([Cannot find OpenSSL's libcrypto])
  fi

  AC_MSG_RESULT([$OPENSSL_INCDIR $OPENSSL_LIBDIR])
fi

#
# Confirm required OpenSSL libs
#
if test ! -r $OPENSSL_INCDIR/openssl/bn.h || test ! -r $OPENSSL_INCDIR/openssl/evp.h || \
   test ! -r $OPENSSL_INCDIR/openssl/hmac.h || test ! -r $OPENSSL_INCDIR/openssl/pem.h || \
   test ! -r $OPENSSL_INCDIR/openssl/sha.h; then
     AC_MSG_ERROR([Missing one or more of <openssl/bn.h>, <openssl/evp.h>, <openssl/hmac.h>, <openssl/pem.h>, <openssl/sha.h>])
fi

CFLAGS="$CFLAGS -I$OPENSSL_INCDIR"
LDFLAGS="$LDFLAGS -L$OPENSSL_LIBDIR -lcrypto"

#
# zlib
#
AC_ARG_WITH(libz,
  AC_HELP_STRING([--with-libz=PATH],[Look for libz in PATH]),
  [LIBSSH2_LIBZ_DIR=$withval],[LIBSSH2_LIBZ_DIR="/usr/local /usr /usr/local/libz /usr/libz /usr/local/zlib /usr/zlib"])

if test "$LIBSSH2_LIBZ_DIR" = "no" || test "$LIBSSH2_LIBZ_DIR" = "yes"; then
  unset LIBSSH2_LIBZ_DIR
fi

unset LIBZ_INCDIR
unset LIBZ_LIBDIR

AC_MSG_CHECKING([for libz])

for i in $LIBSSH2_LIBZ_DIR; do
  if test -r $i/include/zlib.h; then
    LIBZ_INCDIR=$i/include
  fi
  if test -r $i/lib/libz.a -o -r $i/lib/libz.$SHLIB_SUFFIX_NAME; then
    LIBZ_LIBDIR=$i/lib
  fi
  test -n "$LIBZ_INCDIR" && test -n "$LIBZ_LIBDIR" && break
done

if test -n "$LIBZ_INCDIR" && test -n "$LIBZ_LIBDIR"; then
  AC_MSG_RESULT([Found in $LIBZ_INCDIR $LIBZ_LIBDIR])
  CFLAGS="$CFLAGS -I$LIBZ_INCDIR"
  LDFLAGS="$LDFLAGS -L$LIBZ_LIBDIR -lz"
  AC_DEFINE(LIBSSH2_HAVE_ZLIB, 1, [Compile in zlib support])
else
  AC_MSG_RESULT([Cannot find libz's <zlib.h>])
fi

#
# Optional Settings
#
AC_ARG_ENABLE(crypt-none,
  AC_HELP_STRING([--enable-crypt-none],[Permit "none" cipher -- NOT RECOMMENDED]),
  [AC_DEFINE(LIBSSH2_CRYPT_NONE, 1, [Enable "none" cipher -- NOT RECOMMENDED])])

AC_ARG_ENABLE(mac-none,
  AC_HELP_STRING([--enable-mac-none],[Permit "none" MAC -- NOT RECOMMENDED]),
  [AC_DEFINE(LIBSSH2_MAC_NONE, 1, [Enable "none" MAC -- NOT RECOMMENDED])])

AC_ARG_ENABLE(gex-new,
  AC_HELP_STRING([--disable-gex-new],[Disable "new" diffie-hellman-group-exchange-sha1 method]),
  [GEX_NEW=$enableval])
if test "$GEX_NEW" != "no"; then
  AC_DEFINE(LIBSSH2_DH_GEX_NEW, 1, [Enable newer diffie-hellman-group-exchange-sha1 syntax])
fi

#
# Optional debugging -- Meant for developer maintenance only
# When enabled, the relevant debugging information will be written on stderr
#
AC_ARG_ENABLE(debug-transport,
	AC_HELP_STRING([--enable-debug-transport],[Output transport layer debugging info to stderr]),
	[AC_DEFINE(LIBSSH2_DEBUG_TRANSPORT, 1, [Output transport layer debugging info to stderr])])
AC_ARG_ENABLE(debug-kex,
	AC_HELP_STRING([--enable-debug-kex],[Output Key Exchange debugging info to stderr]),
	[AC_DEFINE(LIBSSH2_DEBUG_KEX, 1, [Output Key Exchange debugging info to stderr])])
AC_ARG_ENABLE(debug-userauth,
	AC_HELP_STRING([--enable-debug-userauth],[Output userauth debugging info to stderr]),
	[AC_DEFINE(LIBSSH2_DEBUG_USERAUTH, 1, [Output userauth layer debugging info to stderr])])
AC_ARG_ENABLE(debug-channel,
	AC_HELP_STRING([--enable-debug-connection],[Output connection layer debugging info to stderr]),
	[AC_DEFINE(LIBSSH2_DEBUG_CONNECTION, 1, [Output connection layer debugging info to stderr])])
AC_ARG_ENABLE(debug-scp,
	AC_HELP_STRING([--enable-debug-scp],[Output scp subsystem debugging info to stderr]),
	[AC_DEFINE(LIBSSH2_DEBUG_SCP, 1, [Output scp subsystem debugging info to stderr])])
AC_ARG_ENABLE(debug-sftp,
	AC_HELP_STRING([--enable-debug-sftp],[Output sftp subsystem debugging info to stderr]),
	[AC_DEFINE(LIBSSH2_DEBUG_SFTP, 1, [Output sftp subsystem debugging info to stderr])])
AC_ARG_ENABLE(debug-errors,
	AC_HELP_STRING([--enable-debug-errors],[Output failure events to stderr]),
	[AC_DEFINE(LIBSSH2_DEBUG_ERRORS, 1, [Output failure events to stderr])])
AC_ARG_ENABLE(debug-all,
	AC_HELP_STRING([--enable-debug-all],[Output debugging info for all layers to stderr]),
	[
		AC_DEFINE(LIBSSH2_DEBUG_TRANSPORT, 1, [Output transport layer debugging info to stderr])
		AC_DEFINE(LIBSSH2_DEBUG_KEX, 1, [Output Key Exchange debugging info to stderr])
		AC_DEFINE(LIBSSH2_DEBUG_USERAUTH, 1, [Output userauth layer debugging info to stderr])
		AC_DEFINE(LIBSSH2_DEBUG_CONNECTION, 1, [Output connection layer debugging info to stderr])
		AC_DEFINE(LIBSSH2_DEBUG_SCP, 1, [Output scp subsystem debugging info to stderr])
		AC_DEFINE(LIBSSH2_DEBUG_SFTP, 1, [Output sftp subsystem debugging info to stderr])
		AC_DEFINE(LIBSSH2_DEBUG_ERRORS, 1, [Output failure events to stderr])
	])


# Checks for header files.
# AC_HEADER_STDC
AC_CHECK_HEADERS([errno.h fcntl.h stdio.h stdlib.h unistd.h sys/uio.h sys/select.h])
AC_CHECK_FUNCS(poll gettimeofday select)

# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST

AC_CONFIG_FILES([Makefile
                 src/Makefile])
AC_OUTPUT
