
Notes: The buildconf script is currently required, because we need to copy a header around, because it is used both from the library and the examples sources. However, having a custom 'buildconf'-like script is not needed if we can ensure that the header exists by the time it is needed. For that, we can just append the src/ directory to the headers search path for the examples. And then it means we no longer need to generate the same header twice, so we remove the second one from configure.ac. Now, we can just call "autoreconf -fi" to generate the autotools files, instead of relying on the canned sequence in "buildconf", since autoreconf has now long known what to do at the correct moment (future versions of autotools, automake, autopoint, autoheader etc... may require an other ordering, or other intermediate steps, etc...). Eventually, get rid of buildconf now it is no longer needed. In fact, we really keep it for legacy, but have it just call autoreconf (and print a nice user-friendly warning). Don't include it in the release tarballs, though. Update doc, gitignore, and travis-CI jobs accordingly. Credit: Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Cc: Sam Voss <sam.voss@rockwellcollins.com>
396 строки
11 KiB
Plaintext
396 строки
11 KiB
Plaintext
# AC_PREREQ(2.57)
|
|
AC_INIT(libssh2, [-], libssh2-devel@cool.haxx.se)
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
AC_CONFIG_SRCDIR([src])
|
|
AC_CONFIG_HEADERS([src/libssh2_config.h])
|
|
AM_MAINTAINER_MODE
|
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
|
|
|
dnl SED is needed by some of the tools
|
|
AC_PATH_PROG( SED, sed, sed-was-not-found-by-configure,
|
|
$PATH:/usr/bin:/usr/local/bin)
|
|
AC_SUBST(SED)
|
|
|
|
if test "x$SED" = "xsed-was-not-found-by-configure"; then
|
|
AC_MSG_WARN([sed was not found, this may ruin your chances to build fine])
|
|
fi
|
|
|
|
dnl figure out the libssh2 version
|
|
LIBSSH2VER=`$SED -ne 's/^#define LIBSSH2_VERSION *"\(.*\)"/\1/p' ${srcdir}/include/libssh2.h`
|
|
AM_INIT_AUTOMAKE
|
|
AC_MSG_CHECKING([libssh2 version])
|
|
AC_MSG_RESULT($LIBSSH2VER)
|
|
|
|
AC_SUBST(LIBSSH2VER)
|
|
|
|
AB_VERSION=$LIBSSH2VER
|
|
|
|
AB_INIT
|
|
|
|
# Check for the OS.
|
|
# Daniel's note: this should not be necessary and we need to work to
|
|
# get this removed.
|
|
AC_CANONICAL_HOST
|
|
case "$host" in
|
|
*-mingw*)
|
|
CFLAGS="$CFLAGS -DLIBSSH2_WIN32"
|
|
LIBS="$LIBS -lws2_32"
|
|
;;
|
|
*-cygwin)
|
|
CFLAGS="$CFLAGS -DLIBSSH2_WIN32"
|
|
;;
|
|
*darwin*)
|
|
CFLAGS="$CFLAGS -DLIBSSH2_DARWIN"
|
|
;;
|
|
*hpux*)
|
|
;;
|
|
*osf*)
|
|
CFLAGS="$CFLAGS -D_POSIX_PII_SOCKET"
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
AC_CHECK_TYPE(long long,
|
|
[AC_DEFINE(HAVE_LONGLONG, 1,
|
|
[Define to 1 if the compiler supports the 'long long' data type.])]
|
|
longlong="yes"
|
|
)
|
|
|
|
dnl Our configure and build reentrant settings
|
|
CURL_CONFIGURE_REENTRANT
|
|
|
|
# Some systems (Solaris?) have socket() in -lsocket.
|
|
AC_SEARCH_LIBS(socket, socket)
|
|
|
|
# Solaris has inet_addr() in -lnsl.
|
|
AC_SEARCH_LIBS(inet_addr, nsl)
|
|
|
|
AC_SUBST(LIBS)
|
|
|
|
AC_PROG_CC
|
|
AC_PROG_INSTALL
|
|
AC_PROG_LN_S
|
|
AC_PROG_MAKE_SET
|
|
AC_PATH_PROGS(SSHD, [sshd], [],
|
|
[$PATH$PATH_SEPARATOR/usr/libexec$PATH_SEPARATOR]dnl
|
|
[/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc])
|
|
AM_CONDITIONAL(SSHD, test -n "$SSHD")
|
|
AC_LIBTOOL_WIN32_DLL
|
|
AC_PROG_LIBTOOL
|
|
AC_C_BIGENDIAN
|
|
|
|
dnl check for how to do large files
|
|
AC_SYS_LARGEFILE
|
|
|
|
# Crypto backends
|
|
|
|
found_crypto=none
|
|
found_crypto_str=""
|
|
support_clear_memory=no
|
|
crypto_errors=""
|
|
|
|
m4_set_add([crypto_backends], [openssl])
|
|
m4_set_add([crypto_backends], [libgcrypt])
|
|
m4_set_add([crypto_backends], [mbedtls])
|
|
m4_set_add([crypto_backends], [wincng])
|
|
|
|
AC_ARG_WITH([crypto],
|
|
AC_HELP_STRING([--with-crypto=auto|]m4_set_contents([crypto_backends], [|]),
|
|
[Select crypto backend (default: auto)]),
|
|
use_crypto=$withval,
|
|
use_crypto=auto
|
|
)
|
|
|
|
case "${use_crypto}" in
|
|
auto|m4_set_contents([crypto_backends], [|]))
|
|
m4_set_map([crypto_backends], [LIBSSH2_CHECK_CRYPTO])
|
|
;;
|
|
yes|"")
|
|
crypto_errors="No crypto backend specified!"
|
|
;;
|
|
*)
|
|
crypto_errors="Unknown crypto backend '${use_crypto}' specified!"
|
|
;;
|
|
esac
|
|
|
|
if test "$found_crypto" = "none"; then
|
|
crypto_errors="${crypto_errors}
|
|
Specify --with-crypto=\$backend and/or the neccessary library search prefix.
|
|
|
|
Known crypto backends: auto, m4_set_contents([crypto_backends], [, ])"
|
|
AS_MESSAGE([ERROR: ${crypto_errors}])
|
|
else
|
|
test "$found_crypto_str" = "" && found_crypto_str="$found_crypto"
|
|
fi
|
|
|
|
m4_set_foreach([crypto_backends], [backend],
|
|
[AM_CONDITIONAL(m4_toupper(backend), test "$found_crypto" = "backend")]
|
|
)
|
|
m4_undefine([backend])
|
|
|
|
|
|
# libz
|
|
|
|
AC_ARG_WITH([libz],
|
|
AC_HELP_STRING([--with-libz],[Use libz for compression]),
|
|
use_libz=$withval,
|
|
use_libz=auto)
|
|
|
|
found_libz=no
|
|
libz_errors=""
|
|
|
|
if test "$use_libz" != no; then
|
|
AC_LIB_HAVE_LINKFLAGS([z], [], [#include <zlib.h>])
|
|
if test "$ac_cv_libz" != yes; then
|
|
if test "$use_libz" = auto; then
|
|
AC_MSG_NOTICE([Cannot find libz, disabling compression])
|
|
found_libz="disabled; no libz found"
|
|
else
|
|
libz_errors="No libz found!
|
|
Try --with-libz-prefix=PATH if you know that you have it."
|
|
AS_MESSAGE([ERROR: $libz_errors])
|
|
fi
|
|
else
|
|
AC_DEFINE(LIBSSH2_HAVE_ZLIB, 1, [Compile in zlib support])
|
|
LIBSREQUIRED="$LIBSREQUIRED${LIBSREQUIRED:+ }zlib"
|
|
found_libz="yes"
|
|
fi
|
|
fi
|
|
|
|
AC_SUBST(LIBSREQUIRED)
|
|
|
|
#
|
|
# 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
|
|
|
|
AC_ARG_ENABLE(clear-memory,
|
|
AC_HELP_STRING([--disable-clear-memory],[Disable clearing of memory before being freed]),
|
|
[CLEAR_MEMORY=$enableval])
|
|
if test "$CLEAR_MEMORY" != "no"; then
|
|
if test "$support_clear_memory" = "yes"; then
|
|
AC_DEFINE(LIBSSH2_CLEAR_MEMORY, 1, [Enable clearing of memory before being freed])
|
|
enable_clear_memory=yes
|
|
else
|
|
if test "$CLEAR_MEMORY" = "yes"; then
|
|
AC_MSG_ERROR([secure clearing/zeroing of memory is not supported by the selected crypto backend])
|
|
else
|
|
AC_MSG_WARN([secure clearing/zeroing of memory is not supported by the selected crypto backend])
|
|
fi
|
|
enable_clear_memory=unsupported
|
|
fi
|
|
else
|
|
if test "$support_clear_memory" = "yes"; then
|
|
enable_clear_memory=no
|
|
else
|
|
AC_MSG_WARN([secure clearing/zeroing of memory is not supported by the selected crypto backend])
|
|
enable_clear_memory=unsupported
|
|
fi
|
|
fi
|
|
|
|
dnl ************************************************************
|
|
dnl option to switch on compiler debug options
|
|
dnl
|
|
AC_MSG_CHECKING([whether to enable pedantic and debug compiler options])
|
|
AC_ARG_ENABLE(debug,
|
|
AC_HELP_STRING([--enable-debug],[Enable pedantic and debug options])
|
|
AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|
[ case "$enable_debug" in
|
|
no)
|
|
AC_MSG_RESULT(no)
|
|
CPPFLAGS="$CPPFLAGS -DNDEBUG"
|
|
;;
|
|
*) AC_MSG_RESULT(yes)
|
|
enable_debug=yes
|
|
CPPFLAGS="$CPPFLAGS -DLIBSSH2DEBUG"
|
|
CFLAGS="$CFLAGS -g"
|
|
|
|
dnl set compiler "debug" options to become more picky, and remove
|
|
dnl optimize options from CFLAGS
|
|
CURL_CC_DEBUG_OPTS
|
|
;;
|
|
esac
|
|
],
|
|
enable_debug=no
|
|
AC_MSG_RESULT(no)
|
|
)
|
|
|
|
dnl ************************************************************
|
|
dnl Enable hiding of internal symbols in library to reduce its size and
|
|
dnl speed dynamic linking of applications. This currently is only supported
|
|
dnl on gcc >= 4.0 and SunPro C.
|
|
dnl
|
|
AC_MSG_CHECKING([whether to enable hidden symbols in the library])
|
|
AC_ARG_ENABLE(hidden-symbols,
|
|
AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library])
|
|
AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]),
|
|
[ case "$enableval" in
|
|
no)
|
|
AC_MSG_RESULT(no)
|
|
;;
|
|
*)
|
|
AC_MSG_CHECKING([whether $CC supports it])
|
|
if test "$GCC" = yes ; then
|
|
if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(LIBSSH2_API, [__attribute__ ((visibility ("default")))], [to make a symbol visible])
|
|
CFLAGS="$CFLAGS -fvisibility=hidden"
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
|
|
else
|
|
dnl Test for SunPro cc
|
|
if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(LIBSSH2_API, [__global], [to make a symbol visible])
|
|
CFLAGS="$CFLAGS -xldscope=hidden"
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
fi
|
|
;;
|
|
esac ],
|
|
AC_MSG_RESULT(no)
|
|
)
|
|
|
|
# Build example applications?
|
|
AC_MSG_CHECKING([whether to build example applications])
|
|
AC_ARG_ENABLE([examples-build],
|
|
AC_HELP_STRING([--enable-examples-build], [Build example applications (this is the default)])
|
|
AC_HELP_STRING([--disable-examples-build], [Do not build example applications]),
|
|
[case "$enableval" in
|
|
no | false)
|
|
build_examples='no'
|
|
;;
|
|
*)
|
|
build_examples='yes'
|
|
;;
|
|
esac], [build_examples='yes'])
|
|
AC_MSG_RESULT($build_examples)
|
|
AM_CONDITIONAL([BUILD_EXAMPLES], [test "x$build_examples" != "xno"])
|
|
|
|
# Checks for header files.
|
|
# AC_HEADER_STDC
|
|
AC_CHECK_HEADERS([errno.h fcntl.h stdio.h stdlib.h unistd.h sys/uio.h])
|
|
AC_CHECK_HEADERS([sys/select.h sys/socket.h sys/ioctl.h sys/time.h])
|
|
AC_CHECK_HEADERS([arpa/inet.h netinet/in.h])
|
|
AC_CHECK_HEADERS([sys/un.h], [have_sys_un_h=yes], [have_sys_un_h=no])
|
|
AM_CONDITIONAL([HAVE_SYS_UN_H], test "x$have_sys_un_h" = xyes)
|
|
|
|
case $host in
|
|
*-*-cygwin* | *-*-cegcc*)
|
|
# These are POSIX-like systems using BSD-like sockets API.
|
|
;;
|
|
*)
|
|
AC_CHECK_HEADERS([windows.h winsock2.h ws2tcpip.h])
|
|
;;
|
|
esac
|
|
|
|
case $host in
|
|
*darwin*|*interix*)
|
|
dnl poll() does not work on these platforms
|
|
dnl Interix: "does provide poll(), but the implementing developer must
|
|
dnl have been in a bad mood, because poll() only works on the /proc
|
|
dnl filesystem here"
|
|
dnl Mac OS X's poll has funny behaviors, like:
|
|
dnl not being able to do poll on no fildescriptors (10.3?)
|
|
dnl not being able to poll on some files (like anything in /dev)
|
|
dnl not having reliable timeout support
|
|
dnl inconsistent return of POLLHUP where other implementations give POLLIN
|
|
AC_MSG_NOTICE([poll use is disabled on this platform])
|
|
;;
|
|
*)
|
|
AC_CHECK_FUNCS(poll)
|
|
;;
|
|
esac
|
|
|
|
AC_CHECK_FUNCS(gettimeofday select strtoll memset_s)
|
|
|
|
dnl Check for select() into ws2_32 for Msys/Mingw
|
|
if test "$ac_cv_func_select" != "yes"; then
|
|
AC_MSG_CHECKING([for select in ws2_32])
|
|
AC_TRY_LINK([
|
|
#ifdef HAVE_WINSOCK2_H
|
|
#ifndef WIN32_LEAN_AND_MEAN
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#endif
|
|
#include <winsock2.h>
|
|
#endif
|
|
],[
|
|
select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL);
|
|
],[
|
|
AC_MSG_RESULT([yes])
|
|
HAVE_SELECT="1"
|
|
AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
|
|
[Define to 1 if you have the select function.])
|
|
],[
|
|
AC_MSG_RESULT([no])
|
|
])
|
|
fi
|
|
|
|
AC_FUNC_ALLOCA
|
|
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
|
AC_C_CONST
|
|
AC_C_INLINE
|
|
|
|
CURL_CHECK_NONBLOCKING_SOCKET
|
|
|
|
missing_required_deps=0
|
|
|
|
if test "${libz_errors}" != ""; then
|
|
AS_MESSAGE([ERROR: ${libz_errors}])
|
|
missing_required_deps=1
|
|
fi
|
|
|
|
if test "$found_crypto" = "none"; then
|
|
AS_MESSAGE([ERROR: ${crypto_errors}])
|
|
missing_required_deps=1
|
|
fi
|
|
|
|
if test $missing_required_deps = 1; then
|
|
AC_MSG_ERROR([Required dependencies are missing!])
|
|
fi
|
|
|
|
# Configure parameters
|
|
LIBSSH2_CHECK_OPTION_WERROR
|
|
|
|
AC_CONFIG_FILES([Makefile
|
|
src/Makefile
|
|
tests/Makefile
|
|
example/Makefile
|
|
docs/Makefile
|
|
libssh2.pc])
|
|
AC_OUTPUT
|
|
|
|
AC_MSG_NOTICE([summary of build options:
|
|
|
|
version: ${LIBSSH2VER}
|
|
Host type: ${host}
|
|
Install prefix: ${prefix}
|
|
Compiler: ${CC}
|
|
Compiler flags: ${CFLAGS}
|
|
Library types: Shared=${enable_shared}, Static=${enable_static}
|
|
Crypto library: ${found_crypto_str}
|
|
Clear memory: $enable_clear_memory
|
|
Debug build: $enable_debug
|
|
Build examples: $build_examples
|
|
Path to sshd: $ac_cv_path_SSHD (only for self-tests)
|
|
zlib compression: ${found_libz}
|
|
])
|