Rewrite OpenSSL+libz detection logic.

This commit is contained in:
Simon Josefsson 2008-11-19 11:10:48 +00:00
parent 86eaae7886
commit fd0bffdb2e
4 changed files with 61 additions and 161 deletions

3
NEWS
View File

@ -27,6 +27,9 @@ Version 0.19 ( )
- Removed a stderr debug message that was accidentally left in (bug #1863153) - 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) Version 0.18 (November 11 2007)
------------------------------- -------------------------------

50
README
View File

@ -48,49 +48,43 @@ options deserve additional comments:
the older more reliable method. the older more reliable method.
* --with-libgcrypt * --with-libgcrypt
* --without-libgcrypt
* --with-libgcrypt-prefix=DIR * --with-libgcrypt-prefix=DIR
libssh2 can use the Libgcrypt library libssh2 can use the Libgcrypt library
(http://www.gnupg.org/) for cryptographic operations. (http://www.gnupg.org/) for cryptographic operations.
Either Libgcrypt or OpenSSL is required.
Configure will attempt to locate Libgcrypt in the Configure will attempt to locate Libgcrypt
default location, but if you have installed it automatically.
somewhere else, use the --with-libgrypt-prefix=DIR
parameter.
* --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 libssh2 can use the OpenSSL library
(http://www.openssl.org) for cryptographic operations. (http://www.openssl.org) for cryptographic operations.
Either Libgcrypt or OpenSSL is required.
Configure will attempt to locate OpenSSL in a number Configure will attempt to locate OpenSSL in the
of default locations: default location.
/usr/local/ssl
/usr/local
/usr
/usr/local/openssl
If your installation of OpenSSL is in another 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) If present, libssh2 will attempt to use the zlib
for payload compression, however zlib is not required. (http://www.zlib.org) for payload compression, however
zlib is not required.
Configure will attempt to location a zlib installation If your installation of Libz is in another location,
in a number of default locations: specify it using --with-libz-prefix.
/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.
* --enable-debug * --enable-debug

View File

@ -71,144 +71,46 @@ fi
dnl check for how to do large files dnl check for how to do large files
AC_SYS_LARGEFILE AC_SYS_LARGEFILE
# Look for libgcrypt. # Configure parameters
AC_ARG_WITH(libgcrypt, AC_ARG_WITH(libgcrypt,
AC_HELP_STRING([--with-libgcrypt],[Use libgcrypt for crypto]), AC_HELP_STRING([--with-libgcrypt],[Use Libgcrypt for crypto]),
use_libgcrypt=$withval,use_libgcrypt=no) use_libgcrypt=$withval,use_libgcrypt=auto)
if test "$use_libgcrypt" != "no"; then 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 <openssl/ssl.h>])
fi
# Look for libgcrypt
if test "$ac_cv_libssl" != "yes" && test "$use_libgcrypt" != "no"; then
AC_LIB_HAVE_LINKFLAGS([gcrypt], [], [#include <gcrypt.h>]) AC_LIB_HAVE_LINKFLAGS([gcrypt], [], [#include <gcrypt.h>])
fi 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]) AC_DEFINE(LIBSSH2_LIBGCRYPT, 1, [Use libgcrypt])
fi 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 # Look for Libz
# $shrext_cmds (from libtool) can contain commands so it must be eval'd if test "$use_libz" != "no"; then
# Simon's note: replace the find-openssl/libz logic with Bruno's AC_LIB_HAVE_LINKFLAGS([z], [], [#include <zlib.h>])
# AC_LIB_LINKFLAGS which is more portable and flexible. if test "$ac_cv_libz" != yes; then
eval SHLIB_SUFFIX_NAME=\"$shrext_cmds\" AC_MSG_NOTICE([Cannot find libz, disabling compression])
AC_SUBST(SHLIB_SUFFIX_NAME) 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])
# 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 <evp.h> or <hmac.h>])
fi 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 <openssl/bn.h>, <openssl/evp.h>, <openssl/hmac.h>, <openssl/pem.h>, <openssl/sha.h>])
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 <zlib.h>])
fi fi
# #

View File

@ -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 AUTOMAKE_OPTIONS = foreign nostdinc
libssh2_la_SOURCES = channel.c comp.c crypt.c hostkey.c kex.c mac.c \ 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) # set age to 0. (c:r:a=0)
# #
libssh2_la_LDFLAGS = $(VERSION) -no-undefined $(LTLIBGCRYPT) libssh2_la_LDFLAGS = $(VERSION) -no-undefined \
$(LTLIBGCRYPT) $(LTLIBSSL) $(LTLIBZ)