| # 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" |
| ;; |
| *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")] |
| ) |
| |
| # 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} |
| ]) |