|
- # 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_CXX
- 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"])
-
-
- # Build OSS fuzzing targets?
- AC_ARG_ENABLE([ossfuzzers],
- [AS_HELP_STRING([--enable-ossfuzzers],
- [Whether to generate the fuzzers for OSS-Fuzz])],
- [have_ossfuzzers=yes], [have_ossfuzzers=no])
- AM_CONDITIONAL([USE_OSSFUZZERS], [test "x$have_ossfuzzers" = "xyes"])
-
-
- # Set the correct flags for the given fuzzing engine.
- AC_SUBST([LIB_FUZZING_ENGINE])
- AM_CONDITIONAL([USE_OSSFUZZ_FLAG], [test "x$LIB_FUZZING_ENGINE" = "x-fsanitize=fuzzer"])
- AM_CONDITIONAL([USE_OSSFUZZ_STATIC], [test -f "$LIB_FUZZING_ENGINE"])
-
-
- # 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
- tests/ossfuzz/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}
- ])
|