mirror of
				https://github.com/libssh2/libssh2.git
				synced 2025-11-03 22:13:11 +03:00 
			
		
		
		
	Rewrite OpenSSL+libz detection logic.
This commit is contained in:
		
							
								
								
									
										3
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								NEWS
									
									
									
									
									
								
							@@ -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
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								README
									
									
									
									
									
								
							@@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										164
									
								
								configure.in
									
									
									
									
									
								
							
							
						
						
									
										164
									
								
								configure.in
									
									
									
									
									
								
							@@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user