123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512 |
- dnl **********************************************************************
- dnl CURL_DETECT_ICC ([ACTION-IF-YES])
- dnl
- dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
- dnl sets the $ICC variable to "yes" or "no"
- dnl **********************************************************************
- AC_DEFUN([CURL_DETECT_ICC],
- [
- ICC="no"
- AC_MSG_CHECKING([for icc in use])
- if test "$GCC" = "yes"; then
- dnl check if this is icc acting as gcc in disguise
- AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
- dnl action if the text is found, this it has not been replaced by the
- dnl cpp
- ICC="no",
- dnl the text was not found, it was replaced by the cpp
- ICC="yes"
- AC_MSG_RESULT([yes])
- [$1]
- )
- fi
- if test "$ICC" = "no"; then
- # this is not ICC
- AC_MSG_RESULT([no])
- fi
- ])
- dnl We create a function for detecting which compiler we use and then set as
- dnl pendantic compiler options as possible for that particular compiler. The
- dnl options are only used for debug-builds.
- AC_DEFUN([CURL_CC_DEBUG_OPTS],
- [
- if test "z$ICC" = "z"; then
- CURL_DETECT_ICC
- fi
- if test "$GCC" = "yes"; then
- dnl figure out gcc version!
- AC_MSG_CHECKING([gcc version])
- gccver=`$CC -dumpversion`
- num1=`echo $gccver | cut -d . -f1`
- num2=`echo $gccver | cut -d . -f2`
- gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
- AC_MSG_RESULT($gccver)
- if test "$ICC" = "yes"; then
- dnl this is icc, not gcc.
- dnl ICC warnings we ignore:
- dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
- dnl "invalid format string conversion"
- dnl * 279 warns on static conditions in while expressions
- dnl * 981 warns on "operands are evaluated in unspecified order"
- dnl * 1418 "external definition with no prior declaration"
- dnl * 1419 warns on "external declaration in primary source file"
- dnl which we know and do on purpose.
- WARN="-wd279,269,981,1418,1419"
- if test "$gccnum" -gt "600"; then
- dnl icc 6.0 and older doesn't have the -Wall flag
- WARN="-Wall $WARN"
- fi
- else dnl $ICC = yes
- dnl this is a set of options we believe *ALL* gcc versions support:
- WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
- dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
- if test "$gccnum" -ge "207"; then
- dnl gcc 2.7 or later
- WARN="$WARN -Wmissing-declarations"
- fi
- if test "$gccnum" -gt "295"; then
- dnl only if the compiler is newer than 2.95 since we got lots of
- dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
- dnl gcc 2.95.4 on FreeBSD 4.9!
- WARN="$WARN -Wundef -Wno-long-long -Wsign-compare"
- fi
- if test "$gccnum" -ge "296"; then
- dnl gcc 2.96 or later
- WARN="$WARN -Wfloat-equal"
- fi
- if test "$gccnum" -gt "296"; then
- dnl this option does not exist in 2.96
- WARN="$WARN -Wno-format-nonliteral"
- fi
- dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
- dnl on i686-Linux as it gives us heaps with false positives.
- dnl Also, on gcc 4.0.X it is totally unbearable and complains all
- dnl over making it unusable for generic purposes. Let's not use it.
- if test "$gccnum" -ge "303"; then
- dnl gcc 3.3 and later
- WARN="$WARN -Wendif-labels -Wstrict-prototypes"
- fi
- if test "$gccnum" -ge "304"; then
- # try these on gcc 3.4
- WARN="$WARN -Wdeclaration-after-statement"
- fi
- for flag in $CPPFLAGS; do
- case "$flag" in
- -I*)
- dnl Include path, provide a -isystem option for the same dir
- dnl to prevent warnings in those dirs. The -isystem was not very
- dnl reliable on earlier gcc versions.
- add=`echo $flag | sed 's/^-I/-isystem /g'`
- WARN="$WARN $add"
- ;;
- esac
- done
- fi dnl $ICC = no
- CFLAGS="$CFLAGS $WARN"
- AC_MSG_NOTICE([Added this set of compiler options: $WARN])
- else dnl $GCC = yes
- AC_MSG_NOTICE([Added no extra compiler options])
- fi dnl $GCC = yes
- dnl strip off optimizer flags
- NEWFLAGS=""
- for flag in $CFLAGS; do
- case "$flag" in
- -O*)
- dnl echo "cut off $flag"
- ;;
- *)
- NEWFLAGS="$NEWFLAGS $flag"
- ;;
- esac
- done
- CFLAGS=$NEWFLAGS
- ]) dnl end of AC_DEFUN()
- dnl CURL_CHECK_NONBLOCKING_SOCKET
- dnl -------------------------------------------------
- dnl Check for how to set a socket to non-blocking state. There seems to exist
- dnl four known different ways, with the one used almost everywhere being POSIX
- dnl and XPG3, while the other different ways for different systems (old BSD,
- dnl Windows and Amiga).
- dnl
- dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
- dnl O_NONBLOCK define is found but does not work. This condition is attempted
- dnl to get caught in this script by using an excessive number of #ifdefs...
- dnl
- AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET],
- [
- AC_MSG_CHECKING([non-blocking sockets style])
- AC_TRY_COMPILE([
- /* headers for O_NONBLOCK test */
- #include <sys/types.h>
- #include <unistd.h>
- #include <fcntl.h>
- ],[
- /* try to compile O_NONBLOCK */
- #if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
- # if defined(__SVR4) || defined(__srv4__)
- # define PLATFORM_SOLARIS
- # else
- # define PLATFORM_SUNOS4
- # endif
- #endif
- #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
- # define PLATFORM_AIX_V3
- #endif
- #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
- #error "O_NONBLOCK does not work on this platform"
- #endif
- int socket;
- int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
- ],[
- dnl the O_NONBLOCK test was fine
- nonblock="O_NONBLOCK"
- AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets])
- ],[
- dnl the code was bad, try a different program now, test 2
- AC_TRY_COMPILE([
- /* headers for FIONBIO test */
- #include <unistd.h>
- #include <stropts.h>
- ],[
- /* FIONBIO source test (old-style unix) */
- int socket;
- int flags = ioctl(socket, FIONBIO, &flags);
- ],[
- dnl FIONBIO test was good
- nonblock="FIONBIO"
- AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets])
- ],[
- dnl FIONBIO test was also bad
- dnl the code was bad, try a different program now, test 3
- AC_TRY_COMPILE([
- /* headers for ioctlsocket test (Windows) */
- #undef inline
- #ifdef HAVE_WINDOWS_H
- #ifndef WIN32_LEAN_AND_MEAN
- #define WIN32_LEAN_AND_MEAN
- #endif
- #include <windows.h>
- #ifdef HAVE_WINSOCK2_H
- #include <winsock2.h>
- #else
- #ifdef HAVE_WINSOCK_H
- #include <winsock.h>
- #endif
- #endif
- #endif
- ],[
- /* ioctlsocket source code */
- SOCKET sd;
- unsigned long flags = 0;
- sd = socket(0, 0, 0);
- ioctlsocket(sd, FIONBIO, &flags);
- ],[
- dnl ioctlsocket test was good
- nonblock="ioctlsocket"
- AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets])
- ],[
- dnl ioctlsocket didnt compile!, go to test 4
- AC_TRY_LINK([
- /* headers for IoctlSocket test (Amiga?) */
- #include <sys/ioctl.h>
- ],[
- /* IoctlSocket source code */
- int socket;
- int flags = IoctlSocket(socket, FIONBIO, (long)1);
- ],[
- dnl ioctlsocket test was good
- nonblock="IoctlSocket"
- AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets])
- ],[
- dnl Ioctlsocket didnt compile, do test 5!
- AC_TRY_COMPILE([
- /* headers for SO_NONBLOCK test (BeOS) */
- #include <socket.h>
- ],[
- /* SO_NONBLOCK source code */
- long b = 1;
- int socket;
- int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
- ],[
- dnl the SO_NONBLOCK test was good
- nonblock="SO_NONBLOCK"
- AC_DEFINE(HAVE_SO_NONBLOCK, 1, [use SO_NONBLOCK for non-blocking sockets])
- ],[
- dnl test 5 didnt compile!
- nonblock="nada"
- AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])
- ])
- dnl end of fifth test
- ])
- dnl end of forth test
- ])
- dnl end of third test
- ])
- dnl end of second test
- ])
- dnl end of non-blocking try-compile test
- AC_MSG_RESULT($nonblock)
- if test "$nonblock" = "nada"; then
- AC_MSG_WARN([non-block sockets disabled])
- fi
- ])
- dnl CURL_CHECK_NEED_REENTRANT_SYSTEM
- dnl -------------------------------------------------
- dnl Checks if the preprocessor _REENTRANT definition
- dnl must be unconditionally done for this platform.
- dnl Internal macro for CURL_CONFIGURE_REENTRANT.
- AC_DEFUN([CURL_CHECK_NEED_REENTRANT_SYSTEM], [
- case $host in
- *-*-solaris* | *-*-hpux*)
- tmp_need_reentrant="yes"
- ;;
- *)
- tmp_need_reentrant="no"
- ;;
- esac
- ])
- dnl CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT
- dnl -------------------------------------------------
- dnl This macro ensures that configuration tests done
- dnl after this will execute with preprocessor symbol
- dnl _REENTRANT defined. This macro also ensures that
- dnl the generated config file defines NEED_REENTRANT
- dnl and that in turn setup.h will define _REENTRANT.
- dnl Internal macro for CURL_CONFIGURE_REENTRANT.
- AC_DEFUN([CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT], [
- AC_DEFINE(NEED_REENTRANT, 1,
- [Define to 1 if _REENTRANT preprocessor symbol must be defined.])
- cat >>confdefs.h <<_EOF
- #ifndef _REENTRANT
- # define _REENTRANT
- #endif
- _EOF
- ])
- dnl CURL_CONFIGURE_REENTRANT
- dnl -------------------------------------------------
- dnl This first checks if the preprocessor _REENTRANT
- dnl symbol is already defined. If it isn't currently
- dnl defined a set of checks are performed to verify
- dnl if its definition is required to make visible to
- dnl the compiler a set of *_r functions. Finally, if
- dnl _REENTRANT is already defined or needed it takes
- dnl care of making adjustments necessary to ensure
- dnl that it is defined equally for further configure
- dnl tests and generated config file.
- AC_DEFUN([CURL_CONFIGURE_REENTRANT], [
- AC_PREREQ([2.50])dnl
- #
- AC_MSG_CHECKING([if _REENTRANT is already defined])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
- ]],[[
- #ifdef _REENTRANT
- int dummy=1;
- #else
- force compilation error
- #endif
- ]])
- ],[
- AC_MSG_RESULT([yes])
- tmp_reentrant_initially_defined="yes"
- ],[
- AC_MSG_RESULT([no])
- tmp_reentrant_initially_defined="no"
- ])
- #
- if test "$tmp_reentrant_initially_defined" = "no"; then
- AC_MSG_CHECKING([if _REENTRANT is actually needed])
- CURL_CHECK_NEED_REENTRANT_SYSTEM
- if test "$tmp_need_reentrant" = "yes"; then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
- fi
- #
- AC_MSG_CHECKING([if _REENTRANT is onwards defined])
- if test "$tmp_reentrant_initially_defined" = "yes" ||
- test "$tmp_need_reentrant" = "yes"; then
- CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
- #
- ])
- dnl LIBSSH2_LIB_HAVE_LINKFLAGS
- dnl --------------------------
- dnl Wrapper around AC_LIB_HAVE_LINKFLAGS to also check $prefix/lib, if set.
- dnl
- dnl autoconf only checks $prefix/lib64 if gcc -print-search-dirs output
- dnl includes a directory named lib64. So, to find libraries in $prefix/lib
- dnl we append -L$prefix/lib to LDFLAGS before checking.
- dnl
- dnl For conveniece, $4 is expanded if [lib]$1 is found.
- AC_DEFUN([LIBSSH2_LIB_HAVE_LINKFLAGS], [
- libssh2_save_CPPFLAGS="$CPPFLAGS"
- libssh2_save_LDFLAGS="$LDFLAGS"
- if test "${with_lib$1_prefix+set}" = set; then
- CPPFLAGS="$CPPFLAGS${CPPFLAGS:+ }-I${with_lib$1_prefix}/include"
- LDFLAGS="$LDFLAGS${LDFLAGS:+ }-L${with_lib$1_prefix}/lib"
- fi
- AC_LIB_HAVE_LINKFLAGS([$1], [$2], [$3])
- LDFLAGS="$libssh2_save_LDFLAGS"
- if test "$ac_cv_lib$1" = "yes"; then :
- $4
- else
- CPPFLAGS="$libssh2_save_CPPFLAGS"
- fi
- ])
- AC_DEFUN([LIBSSH2_CHECK_CRYPTO], [
- if test "$use_crypto" = "auto" && test "$found_crypto" = "none" || test "$use_crypto" = "$1"; then
- m4_case([$1],
- [openssl], [
- LIBSSH2_LIB_HAVE_LINKFLAGS([ssl], [crypto], [#include <openssl/ssl.h>], [
- AC_DEFINE(LIBSSH2_OPENSSL, 1, [Use $1])
- LIBSREQUIRED="$LIBSREQUIRED${LIBSREQUIRED:+ }libssl libcrypto"
- # Not all OpenSSL have AES-CTR functions.
- libssh2_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBSSL"
- AC_CHECK_FUNCS(EVP_aes_128_ctr)
- LIBS="$libssh2_save_LIBS"
- found_crypto="$1"
- found_crypto_str="OpenSSL (AES-CTR: ${ac_cv_func_EVP_aes_128_ctr:-N/A})"
- ])
- ],
- [libgcrypt], [
- LIBSSH2_LIB_HAVE_LINKFLAGS([gcrypt], [], [#include <gcrypt.h>], [
- AC_DEFINE(LIBSSH2_LIBGCRYPT, 1, [Use $1])
- found_crypto="$1"
- ])
- ],
- [mbedtls], [
- LIBSSH2_LIB_HAVE_LINKFLAGS([mbedcrypto], [], [#include <mbedtls/version.h>], [
- AC_DEFINE(LIBSSH2_MBEDTLS, 1, [Use $1])
- LIBS="$LIBS -lmbedcrypto"
- found_crypto="$1"
- support_clear_memory=yes
- ])
- ],
- [wincng], [
- # Look for Windows Cryptography API: Next Generation
- AC_CHECK_HEADERS([ntdef.h ntstatus.h], [], [], [#include <windows.h>])
- AC_CHECK_DECLS([SecureZeroMemory], [], [], [#include <windows.h>])
- LIBSSH2_LIB_HAVE_LINKFLAGS([crypt32], [], [
- #include <windows.h>
- #include <wincrypt.h>
- ])
- LIBSSH2_LIB_HAVE_LINKFLAGS([bcrypt], [], [
- #include <windows.h>
- #include <bcrypt.h>
- ], [
- AC_DEFINE(LIBSSH2_WINCNG, 1, [Use $1])
- found_crypto="$1"
- found_crypto_str="Windows Cryptography API: Next Generation"
- support_clear_memory="$ac_cv_have_decl_SecureZeroMemory"
- ])
- ],
- )
- test "$found_crypto" = "none" &&
- crypto_errors="${crypto_errors}No $1 crypto library found!
- "
- fi
- ])
- dnl LIBSSH2_CHECK_OPTION_WERROR
- dnl -------------------------------------------------
- dnl Verify if configure has been invoked with option
- dnl --enable-werror or --disable-werror, and set
- dnl shell variable want_werror as appropriate.
- AC_DEFUN([LIBSSH2_CHECK_OPTION_WERROR], [
- AC_BEFORE([$0],[LIBSSH2_CHECK_COMPILER])dnl
- AC_MSG_CHECKING([whether to enable compiler warnings as errors])
- OPT_COMPILER_WERROR="default"
- AC_ARG_ENABLE(werror,
- AC_HELP_STRING([--enable-werror],[Enable compiler warnings as errors])
- AC_HELP_STRING([--disable-werror],[Disable compiler warnings as errors]),
- OPT_COMPILER_WERROR=$enableval)
- case "$OPT_COMPILER_WERROR" in
- no)
- dnl --disable-werror option used
- want_werror="no"
- ;;
- default)
- dnl configure option not specified
- want_werror="no"
- ;;
- *)
- dnl --enable-werror option used
- want_werror="yes"
- ;;
- esac
- AC_MSG_RESULT([$want_werror])
- if test X"$want_werror" = Xyes; then
- CFLAGS="$CFLAGS -Werror"
- fi
- ])
|