[tor-commits] [obfsproxy/master] Revise detection of libcrypto and winsock.

nickm at torproject.org nickm at torproject.org
Thu Jul 14 16:28:33 UTC 2011


commit 7f03b8e78620d4ff20dbbea32d309ea6ec57f9d1
Author: Zack Weinberg <zackw at panix.com>
Date:   Mon Jul 11 16:43:39 2011 -0700

    Revise detection of libcrypto and winsock.
---
 Makefile.am   |    4 ++--
 configure.ac  |   29 +++++++++++++----------------
 m4/winsock.m4 |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 71 insertions(+), 18 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index a78d7d0..1c2d89b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
 
 ACLOCAL_AMFLAGS = -I m4
-AM_CFLAGS = -DDEBUG -Wall -Werror @libevent_CFLAGS@ @openssl_CFLAGS@
-LDADD = libobfsproxy.a @libevent_LIBS@ @openssl_LIBS@ @ws32_LIBS@
+AM_CFLAGS = -DDEBUG -Wall -Werror @libevent_CFLAGS@ @libcrypto_CFLAGS@
+LDADD = libobfsproxy.a @libevent_LIBS@ @libcrypto_LIBS@ @ws32_LIBS@
 
 bin_PROGRAMS = obfsproxy
 noinst_LIBRARIES = libobfsproxy.a
diff --git a/configure.ac b/configure.ac
index 025589f..32b7138 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,32 +5,29 @@ AC_CONFIG_SRCDIR([src/main.c])
 AM_INIT_AUTOMAKE([foreign])
 
 AC_PROG_CC
-AC_PROG_CPP
 AC_PROG_RANLIB
 PKG_PROG_PKG_CONFIG
 
 PKG_CHECK_MODULES([libevent], [libevent >= 2.0])
-PKG_CHECK_MODULES([openssl], [openssl >= 0.9.7])
-
-AC_CACHE_CHECK([for winsock], [ac_cv_lib_winsock],
-  [AC_PREPROC_IFELSE(
-    [#ifndef _WIN32
-    #error "not windows"
-    #endif
-    ],
-    [ac_cv_lib_winsock=yes], [ac_cv_lib_winsock=no])
-])
-AS_IF([test "x$ac_cv_lib_winsock" = xyes],
-  [ws32_LIBS=-lws2_32],
-  [ws32_LIBS=])
-AC_SUBST(ws32_LIBS)
+# Presently no need for libssl, only libcrypto.
+PKG_CHECK_MODULES([libcrypto], [libcrypto >= 0.9.7])
 
+# We permit the use of openssl 0.9.7, which doesn't have sha256.
+# Check whether a replacement is required.
 save_LIBS="$LIBS"
-LIBS="$openssl_LIBS"
+LIBS="$libcrypto_LIBS"
 AC_CHECK_FUNC(SHA256_Init, [:], [:])
 LIBS="$save_LIBS"
 AM_CONDITIONAL(NEED_SHA256, [test x$ac_cv_func_SHA256_Init = xno])
 
+# ntohl and a bunch of related functions require a special library on Windows.
+# It is possible that libevent or libcrypto has hooked us up already.
+# This can't be done with AC_SEARCH_LIBS -- see m4/winsock.m4 for gory details.
+save_LIBS="$LIBS"
+LIBS="$libevent_LIBS $libcrypto_LIBS"
+AX_LIB_WINSOCK2
+LIBS="$save_LIBS"
+
 AC_CONFIG_FILES([Makefile])
 AC_CONFIG_HEADERS([config.h])
 AC_OUTPUT
diff --git a/m4/winsock.m4 b/m4/winsock.m4
new file mode 100644
index 0000000..a90cc50
--- /dev/null
+++ b/m4/winsock.m4
@@ -0,0 +1,56 @@
+# Copyright © 2011 Zack Weinberg <zackw at panix.com>
+#
+# Copying and distribution of this software, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.  This software is offered as-is,
+# without any warranty.
+
+# The socket API requires a special library on Windows, but
+# AC_SEARCH_LIBS cannot be used to find it, because it will
+# mis-declare 'ntohl' on windows and cause the link to fail.
+#
+# This macro sets the substitution @ws2_LIBS@ to "-lws2_32"
+# if you need that, and "" otherwise.  It does not provide
+# any #defines for the differences in socket headers between
+# Windows and Unix -- just use #ifdef _WIN32.
+#
+# Implementation note: we use the same _cv_ variable that
+# AC_SEARCH_LIBS would, because the test is what AC_SEARCH_LIBS
+# *should* have done in this situation.
+AC_DEFUN([AX_LIB_WINSOCK2],
+  [AC_CACHE_CHECK([for library containing ntohl], [ac_cv_search_ntohl],
+    [AC_LANG_CONFTEST([AC_LANG_PROGRAM([
+      #ifdef _WIN32
+      #include <winsock2.h>
+      #else
+      #include <arpa/inet.h>
+      #endif
+    ], [
+      return (int)ntohl(42);])
+    ])
+
+    ax_lib_winsock2_save_LIBS="$LIBS"
+    for ac_lib in '' -lws2_32; do
+      if test -z "$ac_lib"; then
+        ac_res="none required"
+      else
+        ac_res=$ac_lib
+      fi
+      LIBS="$ac_lib $ax_lib_winsock2_save_LIBS"
+      AC_LINK_IFELSE([], [AS_VAR_SET([ac_cv_search_ntohl], [$ac_res])])
+      AS_VAR_SET_IF([ac_cv_search_ntohl], [break])
+    done
+    AS_VAR_SET_IF([ac_cv_search_ntohl], ,
+                  [AS_VAR_SET([ac_cv_search_ntohl], [no])])
+    rm conftest.$ac_ext
+    LIBS="$ax_lib_winsock2_save_LIBS"
+  ])
+
+  ws32_LIBS=
+  if test "x$ac_cv_search_ntohl" == "xno"; then
+    AC_MSG_ERROR([could not find ntohl])
+  elif test "x$ac_cv_search_ntohl" != "xnone required"; then
+    ws32_LIBS="$ac_cv_search_ntohl"
+  fi
+  AC_SUBST(ws32_LIBS)
+])





More information about the tor-commits mailing list