From fd0bffdb2e76e70f841a5227acc6e7de0c0a72ca Mon Sep 17 00:00:00 2001 From: Simon Josefsson Date: Wed, 19 Nov 2008 11:10:48 +0000 Subject: [PATCH] Rewrite OpenSSL+libz detection logic. --- NEWS | 3 + README | 50 +++++++-------- configure.in | 164 ++++++++++-------------------------------------- src/Makefile.am | 5 +- 4 files changed, 61 insertions(+), 161 deletions(-) diff --git a/NEWS b/NEWS index a414a11e..fa12b566 100644 --- a/NEWS +++ b/NEWS @@ -27,6 +27,9 @@ Version 0.19 ( ) - Removed a stderr debug message that was accidentally left in (bug #1863153) +- OpenSSL and libz detection changed to make cross-compiling to Mingw + work. See README for parameters to use if the auto-detection does + not work for you. From Simon Josefsson. Version 0.18 (November 11 2007) ------------------------------- diff --git a/README b/README index d8071403..b6f62881 100644 --- a/README +++ b/README @@ -48,49 +48,43 @@ options deserve additional comments: the older more reliable method. * --with-libgcrypt + * --without-libgcrypt * --with-libgcrypt-prefix=DIR libssh2 can use the Libgcrypt library (http://www.gnupg.org/) for cryptographic operations. + Either Libgcrypt or OpenSSL is required. - Configure will attempt to locate Libgcrypt in the - default location, but if you have installed it - somewhere else, use the --with-libgrypt-prefix=DIR - parameter. + Configure will attempt to locate Libgcrypt + automatically. - * --with-openssl=[DIR] + If your installation of Libgcrypt is in another + location, specify it using --with-libgcrypt-prefix. + + * --with-openssl + * --without-openssl + * --with-libssl-prefix=[DIR] libssh2 can use the OpenSSL library (http://www.openssl.org) for cryptographic operations. + Either Libgcrypt or OpenSSL is required. - Configure will attempt to locate OpenSSL in a number - of default locations: - - /usr/local/ssl - /usr/local - /usr - /usr/local/openssl + Configure will attempt to locate OpenSSL in the + default location. If your installation of OpenSSL is in another - location, specify it here. + location, specify it using --with-libssl-prefix. - * --with-libz=[DIR] + * --with-libz + * --without-libz + * --with-libz-prefix=[DIR] - If present, libssh2 will attempt to use the zlib (http://www.zlib.org) - for payload compression, however zlib is not required. + If present, libssh2 will attempt to use the zlib + (http://www.zlib.org) for payload compression, however + zlib is not required. - Configure will attempt to location a zlib installation - in a number of default locations: - - /usr/local - /usr - /usr/local/libz - /usr/libz - /usr/local/zlib - /usr/zlib - - If your installation of zlib is in another location, - you may specify it here. + If your installation of Libz is in another location, + specify it using --with-libz-prefix. * --enable-debug diff --git a/configure.in b/configure.in index 9c5d448f..1bcc2b3d 100644 --- a/configure.in +++ b/configure.in @@ -71,144 +71,46 @@ fi dnl check for how to do large files AC_SYS_LARGEFILE -# Look for libgcrypt. +# Configure parameters AC_ARG_WITH(libgcrypt, - AC_HELP_STRING([--with-libgcrypt],[Use libgcrypt for crypto]), - use_libgcrypt=$withval,use_libgcrypt=no) -if test "$use_libgcrypt" != "no"; then + AC_HELP_STRING([--with-libgcrypt],[Use Libgcrypt for crypto]), + use_libgcrypt=$withval,use_libgcrypt=auto) +AC_ARG_WITH(openssl, + AC_HELP_STRING([--with-openssl],[Use OpenSSL for crypto]), + use_openssl=$withval,use_openssl=auto) +AC_ARG_WITH(libz, + AC_HELP_STRING([--with-libz],[Use Libz for compression]), + use_libz=$withval,use_libz=auto) + +# Look for OpenSSL (default) +if test "$use_openssl" != "no" && test "$use_libgcrypt" != "yes"; then + AC_LIB_HAVE_LINKFLAGS([ssl], [], [#include ]) +fi + +# Look for libgcrypt +if test "$ac_cv_libssl" != "yes" && test "$use_libgcrypt" != "no"; then AC_LIB_HAVE_LINKFLAGS([gcrypt], [], [#include ]) fi -if test "$ac_cv_libgcrypt" = yes; then - use_libgcrypt=yes + +if test "$ac_cv_libssl" != "yes" && test "$ac_cv_libgcrypt" != "yes"; then + AC_MSG_ERROR([cannot find OpenSSL or Libgcrypt, +try --with-libssl-prefix=PATH or --with-libgcrypt-prefix=PATH]) +fi + +if test "$ac_cv_libgcrypt" = "yes"; then AC_DEFINE(LIBSSH2_LIBGCRYPT, 1, [Use libgcrypt]) fi -AM_CONDITIONAL(LIBGCRYPT, test "$use_libgcrypt" != "no") +AM_CONDITIONAL(LIBGCRYPT, test "$ac_cv_libgcrypt" = "yes") -# Need to define SHLIB_SUFFIX_NAME before checking for libcrypt and libz -# $shrext_cmds (from libtool) can contain commands so it must be eval'd -# Simon's note: replace the find-openssl/libz logic with Bruno's -# AC_LIB_LINKFLAGS which is more portable and flexible. -eval SHLIB_SUFFIX_NAME=\"$shrext_cmds\" -AC_SUBST(SHLIB_SUFFIX_NAME) - -# -# 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 "$use_libgcrypt" = "no"; then - -if test "$LIBSSH2_OPENSSL_DIR" = "no" || test "$LIBSSH2_OPENSSL_DIR" = "yes"; then - unset LIBSSH2_OPENSSL_DIR -fi - -found_openssl=no -pkgcfg_openssl=no -unset OPENSSL_INCDIR -unset OPENSSL_INCLINE -unset OPENSSL_LIBLINE - -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_LIBLINE="-L$LIBSSH2_OPENSSL_DIR/lib -lcrypto" - OPENSSL_INCLINE="-I$LIBSSH2_OPENSSL_DIR/include" - 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 - pkgcfg_openssl=yes - OPENSSL_LIBLINE=`$PKG_CONFIG --libs openssl` - OPENSSL_INCLINE=`$PKG_CONFIG --cflags-only-I 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_INCLINE="-I$i/include" - OPENSSL_INCDIR=$i/include - fi - if test -r $i/include/openssl/hmac.h; then - OPENSSL_INCLINE="-I$i/include" - OPENSSL_INCDIR=$i/include - fi - if test -r $i/lib/libcrypto.a -o -r $i/lib/libcrypto$SHLIB_SUFFIX_NAME; then - OPENSSL_LIBLINE="-L$i/lib -lcrypto" - fi - test -n "$OPENSSL_INCLINE" && test -n "$OPENSSL_LIBLINE" && break - done - - if test -z "$OPENSSL_INCLINE"; then - AC_MSG_ERROR([Cannot find OpenSSL's or ]) +# Look for Libz +if test "$use_libz" != "no"; then + AC_LIB_HAVE_LINKFLAGS([z], [], [#include ]) + if test "$ac_cv_libz" != yes; then + AC_MSG_NOTICE([Cannot find libz, disabling compression]) + AC_MSG_NOTICE([Try --with-libz-prefix=PATH if you know you have it]) + else + AC_DEFINE(LIBSSH2_HAVE_ZLIB, 1, [Compile in zlib support]) fi - - if test -z "$OPENSSL_LIBLINE"; then - AC_MSG_ERROR([Cannot find OpenSSL's libcrypto]) - fi - - AC_MSG_RESULT([$OPENSSL_INCLINE $OPENSSL_LIBLINE]) -fi - -# -# Confirm required OpenSSL libs -# -if test ! "$pkgcfg_openssl" = "yes"; then - 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 , , , , ]) - fi -fi - -CFLAGS="$CFLAGS $OPENSSL_INCLINE" -LDFLAGS="$LDFLAGS $OPENSSL_LIBLINE" - -fi - -# -# 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 ]) fi # diff --git a/src/Makefile.am b/src/Makefile.am index 7f48ce7a..b599ce95 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,4 @@ -# $Id: Makefile.am,v 1.10 2007/07/17 13:22:55 gknauf Exp $ +# $Id: Makefile.am,v 1.11 2008/11/19 11:10:48 jas4711 Exp $ AUTOMAKE_OPTIONS = foreign nostdinc libssh2_la_SOURCES = channel.c comp.c crypt.c hostkey.c kex.c mac.c \ @@ -50,4 +50,5 @@ VERSION=-version-info 1:0:0 # set age to 0. (c:r:a=0) # -libssh2_la_LDFLAGS = $(VERSION) -no-undefined $(LTLIBGCRYPT) +libssh2_la_LDFLAGS = $(VERSION) -no-undefined \ + $(LTLIBGCRYPT) $(LTLIBSSL) $(LTLIBZ)