From a91893a665e0b016235f3994ac563b502cfefb29 Mon Sep 17 00:00:00 2001
From: Andre Noll <maan@systemlinux.org>
Date: Fri, 2 May 2014 23:01:53 +0200
Subject: [PATCH] build: Convert crypto detection/selection to new macros.

---
 Makefile.in   |   3 +-
 Makefile.real |   3 +-
 configure.ac  | 152 +++++++++++++++++---------------------------------
 3 files changed, 52 insertions(+), 106 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 8e7e7760..a638f968 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -64,11 +64,10 @@ ao_ldflags := @ao_ldflags@
 readline_ldflags := @readline_ldflags@
 samplerate_ldflags := @samplerate_ldflags@
 osl_ldflags := @osl_ldflags@
-openssl_ldflags := @openssl_ldflags@
-gcrypt_ldflags := @gcrypt_ldflags@
 socket_ldflags := @socket_ldflags@
 nsl_ldflags := @nsl_ldflags@
 curses_ldflags := @curses_ldflags@
 core_audio_ldflags := @core_audio_ldflags@
+crypto_ldflags := @crypto_ldflags@
 
 include Makefile.real
diff --git a/Makefile.real b/Makefile.real
index 6c7b38f2..269babaf 100644
--- a/Makefile.real
+++ b/Makefile.real
@@ -272,8 +272,7 @@ para_server \
 para_client \
 para_audiod \
 :LDFLAGS += \
-	$(openssl_ldflags) \
-	$(gcrypt_ldflags)
+	$(crypto_ldflags)
 
 para_audiod \
 para_filter \
diff --git a/configure.ac b/configure.ac
index 69978389..32189513 100644
--- a/configure.ac
+++ b/configure.ac
@@ -118,7 +118,23 @@ AC_CHECK_HEADER(osl.h, [], [HAVE_OSL=no])
 AC_CHECK_LIB([osl], [osl_open_table], [], [HAVE_OSL=no])
 LIB_SUBST_FLAGS(osl)
 UNSTASH_FLAGS
-########################################################################### crypto
+######################################################################## openssl
+STASH_FLAGS
+HAVE_OPENSSL=yes
+LIB_ARG_WITH([openssl], [-lssl -lcrypto])
+AC_CHECK_HEADER(openssl/ssl.h, [], [HAVE_OPENSSL=no])
+AC_CHECK_LIB([crypto], [RAND_bytes], [], [HAVE_OPENSSL=no])
+LIB_SUBST_FLAGS(openssl)
+UNSTASH_FLAGS
+######################################################################### gcrypt
+STASH_FLAGS
+HAVE_GCRYPT=yes
+LIB_ARG_WITH([gcrypt], [-lgcrypt])
+AC_CHECK_HEADER(gcrypt.h, [], [HAVE_GCRYPT=no])
+AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [HAVE_GCRYPT=no])
+LIB_SUBST_FLAGS(gcrypt)
+UNSTASH_FLAGS
+######################################################################### crypto
 AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
 	Force using crypto library "lib". This package requires either
 	openssl or libgcrypt being installed. Possible values for "lib"
@@ -126,96 +142,32 @@ AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
 	openssl is tried first. If openssl was not found, gcrypt is
 	tried next.])])
 
+CRYPTOLIB="$enable_cryptolib"
 case "$enable_cryptolib" in
-	"openssl") check_openssl="yes"; check_gcrypt="no";;
-	"gcrypt") check_openssl="no"; check_gcrypt="yes";;
-	"") check_openssl="yes"; check_gcrypt="yes";;
-	*) AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib]);;
-esac
-###################################################################### openssl
-if test "$check_openssl" = "yes"; then
-	OLD_CPPFLAGS="$CPPFLAGS"
-	OLD_LDFLAGS="$LDFLAGS"
-	OLD_LIBS="$LIBS"
-	have_openssl="yes"
-	AC_ARG_WITH(openssl_headers, [AS_HELP_STRING(--with-openssl-headers=dir,
-		[look for openssl headers also in dir])])
-	if test -n "$with_openssl_headers"; then
-		openssl_cppflags="-I$with_openssl_headers"
-		CPPFLAGS="$CPPFLAGS $openssl_cppflags"
+"openssl")
+	test $HAVE_OPENSSL = no && AC_MSG_ERROR(openssl not found)
+	crypto_ldflags="$openssl_ldflags"
+	;;
+"gcrypt")
+	test $HAVE_GCRYPT = no && AC_MSG_ERROR(gcrypt not found)
+	crypto_ldflags="$gcrypt_ldflags"
+	;;
+"")
+	crypto_ldflags=
+	if test $HAVE_GCRYPT = yes; then
+		CRYPTOLIB=gcrypt
+		crypto_ldflags="$gcrypt_ldflags"
 	fi
-	AC_ARG_WITH(openssl_libs, [AS_HELP_STRING(--with-openssl-libs=dir,
-		[look for openssl libraries also in dir])])
-	if test -n "$with_openssl_libs"; then
-		openssl_libs="-L$with_openssl_libs"
-		LDFLAGS="$LDFLAGS $openssl_libs"
+	if test $HAVE_OPENSSL = yes; then
+		CRYPTOLIB=openssl
+		crypto_ldflags="$openssl_ldflags"
 	fi
-	AC_CHECK_HEADER(openssl/ssl.h, [], [have_openssl="no"])
-	AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
-	if test "$have_openssl" = "no" -a -z "$with_openssl_headers$with_openssl_libs"; then
-		# try harder: openssl is sometimes installed in /usr/local/ssl
-		openssl_cppflags="-I/usr/local/ssl/include"
-		CPPFLAGS="$CPPFLAGS $openssl_cppflags"
-		openssl_libs="-L/usr/local/ssl/lib"
-		LDFLAGS="$LDFLAGS $openssl_libs"
-		# clear cache
-		unset ac_cv_header_openssl_ssl_h 2> /dev/null
-		unset ac_cv_lib_crypto_RAND_bytes 2> /dev/null
-		AC_CHECK_HEADER(openssl/ssl.h, [have_openssl="yes"], [])
-		if test "$have_openssl" = "yes"; then
-			AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
-		fi
-	fi
-	if test "$have_openssl" = "yes"; then
-		AC_DEFINE(HAVE_OPENSSL, 1, [define to 1 to turn on openssl support])
-		AC_SUBST(openssl_cppflags)
-		openssl_ldflags="$openssl_libs -lssl -lcrypto"
-		AC_SUBST(openssl_ldflags)
-
-		check_gcrypt="no"
-	else
-		AC_MSG_WARN([openssl libraries not found])
-	fi
-	CPPFLAGS="$OLD_CPPFLAGS"
-	LDFLAGS="$OLD_LDFLAGS"
-	LIBS="$OLD_LIBS"
-else
-	have_openssl="no"
-fi
-########################################################################### gcrypt
-if test "$check_gcrypt" = "yes"; then
-	OLD_CPPFLAGS="$CPPFLAGS"
-	OLD_LDFLAGS="$LDFLAGS"
-	OLD_LIBS="$LIBS"
-	have_gcrypt="yes"
-	AC_ARG_WITH(gcrypt_headers, [AS_HELP_STRING(--with-gcrypt-headers=dir,
-		[look for gcrypt headers also in dir])])
-	if test -n "$with_gcrypt_headers"; then
-		gcrypt_cppflags="-I$with_gcrypt_headers"
-		CPPFLAGS="$CPPFLAGS $gcrypt_cppflags"
-	fi
-	AC_ARG_WITH(gcrypt_libs, [AS_HELP_STRING(--with-gcrypt-libs=dir,
-		[look for libgcrypt also in dir])])
-	if test -n "$with_gcrypt_libs"; then
-		gcrypt_libs="-L$with_gcrypt_libs"
-		LDFLAGS="$LDFLAGS $gcrypt_libs"
-	fi
-	AC_CHECK_HEADER(gcrypt.h, [], [have_gcrypt="no"])
-	AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [have_gcrypt="no"])
-	if test "$have_gcrypt" = "yes"; then
-		AC_DEFINE(HAVE_GCRYPT, 1, [define to 1 to turn on gcrypt support])
-		AC_SUBST(gcrypt_cppflags)
-		gcrypt_ldflags="$gcrypt_libs -lgcrypt"
-		AC_SUBST(gcrypt_ldflags)
-	else
-		AC_MSG_WARN([gcrypt library not found])
-	fi
-	CPPFLAGS="$OLD_CPPFLAGS"
-	LDFLAGS="$OLD_LDFLAGS"
-	LIBS="$OLD_LIBS"
-else
-	have_gcrypt="no"
-fi
+	;;
+*)
+	AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib])
+	;;
+esac
+AC_SUBST(crypto_ldflags)
 ########################################################################### libsocket
 AC_CHECK_LIB([c], [socket],
 	[socket_ldlflags=],
@@ -710,9 +662,7 @@ CPPFLAGS="$OLD_CPPFLAGS"
 LDFLAGS="$OLD_LDFLAGS"
 LIBS="$OLD_LIBS"
 ######################################################################### server
-if test \( "$have_openssl" = "yes" -o "$have_gcrypt" = "yes" \) \
-	-a "$HAVE_OSL" = "yes" ; then
-
+if test -n "$CRYPTOLIB" && test $HAVE_OSL = yes; then
 	build_server="yes"
 	executables="$executables server"
 	server_cmdline_objs="server"
@@ -755,10 +705,9 @@ if test \( "$have_openssl" = "yes" -o "$have_gcrypt" = "yes" \) \
 		version
 		ggo
 	"
-	if test "$have_openssl" = "yes"; then
+	if test "$CRYPTOLIB" = openssl; then
 		server_errlist_objs="$server_errlist_objs crypt"
-	fi
-	if test "$have_gcrypt" = "yes"; then
+	else
 		server_errlist_objs="$server_errlist_objs gcrypt"
 	fi
 	NEED_OGG_OBJECTS() && server_errlist_objs="$server_errlist_objs ogg_afh_common"
@@ -779,7 +728,7 @@ else
 	build_server="no"
 fi
 ############################################################# client
-if test "$have_openssl" = "yes" -o "$have_gcrypt" = "yes"; then
+if test -n "$CRYPTOLIB"; then
 	build_client="yes"
 	executables="$executables client"
 	client_cmdline_objs="client"
@@ -799,10 +748,9 @@ if test "$have_openssl" = "yes" -o "$have_gcrypt" = "yes"; then
 		version
 		ggo
 	"
-	if test "$have_openssl" = "yes"; then
+	if test "$CRYPTOLIB" = openssl; then
 		client_errlist_objs="$client_errlist_objs crypt"
-	fi
-	if test "$have_gcrypt" = "yes"; then
+	else
 		client_errlist_objs="$client_errlist_objs gcrypt"
 	fi
 	if test "$have_readline" = "yes"; then
@@ -816,7 +764,7 @@ else
 	build_client="no"
 fi
 ############################################################# audiod
-if test "$have_openssl" = "yes" -o "$have_gcrypt" = "yes"; then
+if test -n "$CRYPTOLIB"; then
 	build_audiod="yes"
 	executables="$executables audiod"
 	audiod_audio_formats="wma"
@@ -870,10 +818,9 @@ if test "$have_openssl" = "yes" -o "$have_gcrypt" = "yes"; then
 		buffer_tree
 		sync_filter
 	"
-	if test "$have_openssl" = "yes"; then
+	if test "$CRYPTOLIB" = openssl; then
 		audiod_errlist_objs="$audiod_errlist_objs crypt"
-	fi
-	if test "$have_gcrypt" = "yes"; then
+	else
 		audiod_errlist_objs="$audiod_errlist_objs gcrypt"
 	fi
 	if test "$have_core_audio" = "yes"; then
@@ -1438,6 +1385,7 @@ AC_OUTPUT
 AC_MSG_NOTICE([
 paraslash configuration:
 ~~~~~~~~~~~~~~~~~~~~~~~~
+crypto lib: ${CRYPTOLIB:-[none]}
 unix socket credentials: $have_ucred
 readline (interactive CLIs): $have_readline
 audio formats handlers: $audio_format_handlers
-- 
2.39.5