Hi! This patch fixes the detection of openssl/libz to use more normal
header+library detection code. It should work fine on common platforms,
but it may change detection on weirder systems, but nothing that cannot
be fixed by appropriate use of --with-foo-prefix. It also sets up -R
parameters if needed. It definitely will fix the -I/usr/include
additions that cause problems for Mingw.
With this I can actually cross-compile libssh2 on a debian x86 box to
mingw and even run the self-tests under Wine via 'make check'.
The patch below is rather hard to read. To simplify review of the new
code, the relevant configure.in snippet to detect libz+openssl is with
the patch reduced to the following. Much less code than before, neat.
What do you think? Ok to commit?
# Configure parameters
AC_ARG_WITH(libgcrypt,
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 <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>])
fi
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 "$ac_cv_libgcrypt" = "yes")
# Look for Libz
if test "$use_libz" != "no"; then
AC_LIB_HAVE_LINKFLAGS([z], [], [#include <zlib.h>])
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
fi
/Simon
Index: configure.in
===================================================================
RCS file: /cvsroot/libssh2/libssh2/configure.in,v
retrieving revision 1.58
diff -u -p -r1.58 configure.in
--- configure.in 10 Nov 2008 16:48:41 -0000 1.58
+++ configure.in 18 Nov 2008 16:53:00 -0000
@@ -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_LIB_HAVE_LINKFLAGS([gcrypt], [], [#include <gcrypt.h>])
-fi
-if test "$ac_cv_libgcrypt" = yes; then
- use_libgcrypt=yes
- AC_DEFINE(LIBSSH2_LIBGCRYPT, 1, [Use libgcrypt])
-fi
-AM_CONDITIONAL(LIBGCRYPT, test "$use_libgcrypt" != "no")
-
-# 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_HELP_STRING([--with-libgcrypt],[Use Libgcrypt for crypto]),
+ use_libgcrypt=$withval,use_libgcrypt=auto)
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
-
- if test -z "$OPENSSL_LIBLINE"; then
- AC_MSG_ERROR([Cannot find OpenSSL's libcrypto])
- fi
+ 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)
- AC_MSG_RESULT([$OPENSSL_INCLINE $OPENSSL_LIBLINE])
+# Look for OpenSSL (default)
+if test "$use_openssl" != "no" && test "$use_libgcrypt" != "yes"; then
+ AC_LIB_HAVE_LINKFLAGS([ssl], [], [#include <openssl/ssl.h>])
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
+# Look for libgcrypt
+if test "$ac_cv_libssl" != "yes" && test "$use_libgcrypt" != "no"; then
+ AC_LIB_HAVE_LINKFLAGS([gcrypt], [], [#include <gcrypt.h>])
fi
-CFLAGS="$CFLAGS $OPENSSL_INCLINE"
-LDFLAGS="$LDFLAGS $OPENSSL_LIBLINE"
-
+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
-#
-# 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
+if test "$ac_cv_libgcrypt" = "yes"; then
+ AC_DEFINE(LIBSSH2_LIBGCRYPT, 1, [Use libgcrypt])
fi
+AM_CONDITIONAL(LIBGCRYPT, test "$ac_cv_libgcrypt" = "yes")
-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
+# Look for Libz
+if test "$use_libz" != "no"; then
+ AC_LIB_HAVE_LINKFLAGS([z], [], [#include <zlib.h>])
+ 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
- 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
#
Index: src/Makefile.am
===================================================================
RCS file: /cvsroot/libssh2/libssh2/src/Makefile.am,v
retrieving revision 1.10
diff -u -p -r1.10 Makefile.am
--- src/Makefile.am 17 Jul 2007 13:22:55 -0000 1.10
+++ src/Makefile.am 18 Nov 2008 16:53:00 -0000
@@ -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)
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
libssh2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libssh2-devel