This reworks the crypto library configuration, to make it both simpler to
understand and more usable:
* Only check for OpenSSL when building against OpenSSL (and similar for
PolarSSL/mbed TLS).
* Bail out early if a problem with the library is detected.
* Set CRYPTO_{LIBS,FLAGS} immediately after the crypto library checks,
removing the need for an extra switch-case later on.
* We no longer support building openvpn with crypto but without ssl, so
we can also simplify the logic in configure.ac accordingly.
As a 'side effect' (this actually triggered me), this fixes a bug that
would cause a user-specified OPENSSL_{CRYPTO,SSL}_LIBS to be overwritten
by AC_CHECK_LIB if there are openssl headers available in the PATH.
Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1452436639-16838-1-git-send-email-steffan@karger.me>
URL: http://article.gmane.org/gmane.network.openvpn.devel/10978
Signed-off-by: Gert Doering <gert@greenie.muc.de>
| ... | ... |
@@ -78,3 +78,11 @@ User-visible Changes |
| 78 | 78 |
|
| 79 | 79 |
- Removed --enable-password-save from configure. This option is now |
| 80 | 80 |
always enabled. |
| 81 |
+ |
|
| 82 |
+Maintainer-visible changes |
|
| 83 |
+-------------------------- |
|
| 84 |
+- OpenVPN no longer supports building with crypto support, but without TLS |
|
| 85 |
+ support. As a consequence, OPENSSL_CRYPTO_{CFLAGS,LIBS} and
|
|
| 86 |
+ OPENSSL_SSL_{CFLAGS,LIBS} have been merged into OPENSSL_{CFLAGS,LIBS}. This
|
|
| 87 |
+ is particularly relevant for maintainers who build their own OpenSSL library, |
|
| 88 |
+ e.g. when cross-compiling. |
| ... | ... |
@@ -210,14 +210,10 @@ ENVIRONMENT for ./configure: |
| 210 | 210 |
MAN2HTML path to man2html utility |
| 211 | 211 |
GIT path to git utility |
| 212 | 212 |
TAP_CFLAGS C compiler flags for tap |
| 213 |
- OPENSSL_CRYPTO_CFLAGS |
|
| 214 |
- C compiler flags for OPENSSL_CRYPTO, overriding pkg-config |
|
| 215 |
- OPENSSL_CRYPTO_LIBS |
|
| 216 |
- linker flags for OPENSSL_CRYPTO, overriding pkg-config |
|
| 217 |
- OPENSSL_SSL_CFLAGS |
|
| 218 |
- C compiler flags for OPENSSL_SSL, overriding pkg-config |
|
| 219 |
- OPENSSL_SSL_LIBS |
|
| 220 |
- linker flags for OPENSSL_SSL, overriding pkg-config |
|
| 213 |
+ OPENSSL_CFLAGS |
|
| 214 |
+ C compiler flags for OpenSSL, overriding pkg-config |
|
| 215 |
+ OPENSSL_LIBS |
|
| 216 |
+ linker flags for OpenSSL, overriding pkg-config |
|
| 221 | 217 |
POLARSSL_CFLAGS |
| 222 | 218 |
C compiler flags for polarssl |
| 223 | 219 |
POLARSSL_LIBS |
| ... | ... |
@@ -781,42 +781,32 @@ PKG_CHECK_MODULES( |
| 781 | 781 |
[] |
| 782 | 782 |
) |
| 783 | 783 |
|
| 784 |
-PKG_CHECK_MODULES( |
|
| 785 |
- [OPENSSL_CRYPTO], |
|
| 786 |
- [libcrypto >= 0.9.8], |
|
| 787 |
- [have_openssl_crypto="yes"], |
|
| 788 |
- [AC_CHECK_LIB( |
|
| 789 |
- [crypto], |
|
| 790 |
- [RSA_new], |
|
| 791 |
- [ |
|
| 792 |
- have_openssl_crypto="yes" |
|
| 793 |
- OPENSSL_CRYPTO_LIBS="-lcrypto" |
|
| 794 |
- ] |
|
| 795 |
- )] |
|
| 796 |
-) |
|
| 784 |
+if test "${with_crypto_library}" = "openssl"; then
|
|
| 785 |
+ AC_ARG_VAR([OPENSSL_CFLAGS], [C compiler flags for OpenSSL]) |
|
| 786 |
+ AC_ARG_VAR([OPENSSL_LIBS], [linker flags for OpenSSL]) |
|
| 787 |
+ |
|
| 788 |
+ if test -z "${OPENSSL_CFLAGS}" -a -z "${OPENSSL_LIBS}"; then
|
|
| 789 |
+ # if the user did not explicitly specify flags, try to autodetect |
|
| 790 |
+ PKG_CHECK_MODULES( |
|
| 791 |
+ [OPENSSL], |
|
| 792 |
+ [libcrypto >= 0.9.8, libssl >= 0.9.8], |
|
| 793 |
+ [have_openssl="yes"], |
|
| 794 |
+ [have_openssl="no"] # Provide if-not-found to prevent erroring out |
|
| 795 |
+ ) |
|
| 797 | 796 |
|
| 798 |
-PKG_CHECK_MODULES( |
|
| 799 |
- [OPENSSL_SSL], |
|
| 800 |
- [libssl >= 0.9.8], |
|
| 801 |
- [have_openssl_ssl="yes"], |
|
| 802 |
- [AC_CHECK_LIB( |
|
| 803 |
- [ssl], |
|
| 804 |
- [SSL_CTX_new], |
|
| 805 |
- [ |
|
| 806 |
- have_openssl_ssl="yes" |
|
| 807 |
- OPENSSL_SSL_LIBS="-lssl" |
|
| 808 |
- ], |
|
| 809 |
- [], |
|
| 810 |
- [-lcrypto] |
|
| 811 |
- )] |
|
| 812 |
-) |
|
| 797 |
+ OPENSSL_LIBS=${OPENSSL_LIBS:--lssl -lcrypto}
|
|
| 798 |
+ fi |
|
| 813 | 799 |
|
| 814 |
-if test "${have_openssl_crypto}" = "yes"; then
|
|
| 815 | 800 |
saved_CFLAGS="${CFLAGS}"
|
| 816 | 801 |
saved_LIBS="${LIBS}"
|
| 817 |
- CFLAGS="${CFLAGS} ${OPENSSL_CRYPTO_CFLAGS}"
|
|
| 818 |
- LIBS="${LIBS} ${OPENSSL_CRYPTO_LIBS}"
|
|
| 819 |
- AC_CHECK_FUNCS([EVP_CIPHER_CTX_set_key_length]) |
|
| 802 |
+ CFLAGS="${CFLAGS} ${OPENSSL_CFLAGS}"
|
|
| 803 |
+ LIBS="${LIBS} ${OPENSSL_LIBS}"
|
|
| 804 |
+ |
|
| 805 |
+ AC_CHECK_FUNCS([SSL_CTX_new EVP_CIPHER_CTX_set_key_length], |
|
| 806 |
+ , |
|
| 807 |
+ [AC_MSG_ERROR([openssl check failed])] |
|
| 808 |
+ ) |
|
| 809 |
+ |
|
| 820 | 810 |
have_openssl_engine="yes" |
| 821 | 811 |
AC_CHECK_FUNCS( |
| 822 | 812 |
[ \ |
| ... | ... |
@@ -827,38 +817,45 @@ if test "${have_openssl_crypto}" = "yes"; then
|
| 827 | 827 |
, |
| 828 | 828 |
[have_openssl_engine="no"; break] |
| 829 | 829 |
) |
| 830 |
+ if test "${have_openssl_engine}" = "yes"; then
|
|
| 831 |
+ AC_DEFINE([HAVE_OPENSSL_ENGINE], [1], [OpenSSL engine support available]) |
|
| 832 |
+ fi |
|
| 830 | 833 |
|
| 831 | 834 |
CFLAGS="${saved_CFLAGS}"
|
| 832 | 835 |
LIBS="${saved_LIBS}"
|
| 833 |
-fi |
|
| 834 | 836 |
|
| 835 |
-AC_ARG_VAR([POLARSSL_CFLAGS], [C compiler flags for polarssl]) |
|
| 836 |
-AC_ARG_VAR([POLARSSL_LIBS], [linker flags for polarssl]) |
|
| 837 |
-have_polarssl_ssl="yes" |
|
| 838 |
-have_polarssl_crypto="yes" |
|
| 839 |
-if test -z "${POLARSSL_LIBS}"; then
|
|
| 840 |
- AC_CHECK_LIB( |
|
| 841 |
- [polarssl], |
|
| 842 |
- [ssl_init], |
|
| 843 |
- [POLARSSL_LIBS="-lpolarssl"], |
|
| 844 |
- [ |
|
| 845 |
- have_polarssl_ssl="no" |
|
| 846 |
- AC_CHECK_LIB( |
|
| 847 |
- [polarssl], |
|
| 848 |
- [aes_crypt_cbc], |
|
| 849 |
- , |
|
| 850 |
- [have_polarssl_crypto="no"], |
|
| 851 |
- [${PKCS11_HELPER_LIBS}]
|
|
| 852 |
- ) |
|
| 853 |
- ], |
|
| 854 |
- [${PKCS11_HELPER_LIBS}]
|
|
| 855 |
- ) |
|
| 856 |
-fi |
|
| 837 |
+ have_crypto="yes" |
|
| 838 |
+ AC_DEFINE([ENABLE_CRYPTO_OPENSSL], [1], [Use OpenSSL library]) |
|
| 839 |
+ CRYPTO_CFLAGS="${OPENSSL_CFLAGS}"
|
|
| 840 |
+ CRYPTO_LIBS="${OPENSSL_LIBS}"
|
|
| 841 |
+elif test "${with_crypto_library}" = "polarssl"; then
|
|
| 842 |
+ AC_ARG_VAR([POLARSSL_CFLAGS], [C compiler flags for polarssl]) |
|
| 843 |
+ AC_ARG_VAR([POLARSSL_LIBS], [linker flags for polarssl]) |
|
| 844 |
+ |
|
| 845 |
+ if test -z "${POLARSSL_CFLAGS}" -a -z "${POLARSSL_LIBS}"; then
|
|
| 846 |
+ # if the user did not explicitly specify flags, try to autodetect |
|
| 847 |
+ AC_SEARCH_LIBS( |
|
| 848 |
+ [ssl_init], |
|
| 849 |
+ [mbedtls], |
|
| 850 |
+ [POLARSSL_LIBS=-lmbedtls] |
|
| 851 |
+ [ |
|
| 852 |
+ AC_SEARCH_LIBS( |
|
| 853 |
+ [ssl_init], |
|
| 854 |
+ [polarssl], |
|
| 855 |
+ [POLARSSL_LIBS=-lpolarssl] |
|
| 856 |
+ [], |
|
| 857 |
+ [${PKCS11_HELPER_LIBS}]
|
|
| 858 |
+ ) |
|
| 859 |
+ ], |
|
| 860 |
+ [${PKCS11_HELPER_LIBS}]
|
|
| 861 |
+ ) |
|
| 862 |
+ fi |
|
| 857 | 863 |
|
| 858 |
-if test "${with_crypto_library}" = "polarssl" ; then
|
|
| 859 | 864 |
AC_MSG_CHECKING([polarssl version]) |
| 860 |
- old_CFLAGS="${CFLAGS}"
|
|
| 861 |
- CFLAGS="${POLARSSL_CFLAGS} ${CFLAGS}"
|
|
| 865 |
+ saved_CFLAGS="${CFLAGS}"
|
|
| 866 |
+ saved_LIBS="${LIBS}"
|
|
| 867 |
+ CFLAGS="${POLARSSL_CFLAGS} ${PKCS11_HELPER_CFLAGS} ${CFLAGS}"
|
|
| 868 |
+ LIBS="${POLARSSL_LIBS} ${PKCS11_HELPER_LIBS} ${LIBS}"
|
|
| 862 | 869 |
AC_COMPILE_IFELSE( |
| 863 | 870 |
[AC_LANG_PROGRAM( |
| 864 | 871 |
[[ |
| ... | ... |
@@ -887,7 +884,6 @@ if test "${with_crypto_library}" = "polarssl" ; then
|
| 887 | 887 |
]] |
| 888 | 888 |
)], |
| 889 | 889 |
polarssl_with_pkcs11="yes") |
| 890 |
- CFLAGS="${old_CFLAGS}"
|
|
| 891 | 890 |
|
| 892 | 891 |
AC_MSG_CHECKING([polarssl pkcs11 support]) |
| 893 | 892 |
if test "${enable_pkcs11}" = "yes"; then
|
| ... | ... |
@@ -903,7 +899,15 @@ if test "${with_crypto_library}" = "polarssl" ; then
|
| 903 | 903 |
AC_MSG_ERROR([PolarSSL compiled with PKCS11, while OpenVPN is not]) |
| 904 | 904 |
fi |
| 905 | 905 |
fi |
| 906 |
+ CFLAGS="${saved_CFLAGS}"
|
|
| 907 |
+ LIBS="${saved_LIBS}"
|
|
| 906 | 908 |
|
| 909 |
+ have_crypto="yes" |
|
| 910 |
+ AC_DEFINE([ENABLE_CRYPTO_POLARSSL], [1], [Use PolarSSL library]) |
|
| 911 |
+ CRYPTO_CFLAGS="${POLARSSL_CFLAGS}"
|
|
| 912 |
+ CRYPTO_LIBS="${POLARSSL_LIBS}"
|
|
| 913 |
+else |
|
| 914 |
+ AC_MSG_ERROR([Invalid crypto library: ${with_crypto_library}])
|
|
| 907 | 915 |
fi |
| 908 | 916 |
|
| 909 | 917 |
AC_ARG_VAR([LZO_CFLAGS], [C compiler flags for lzo]) |
| ... | ... |
@@ -1049,31 +1053,11 @@ test "${enable_def_auth}" = "yes" && AC_DEFINE([ENABLE_DEF_AUTH], [1], [Enable d
|
| 1049 | 1049 |
test "${enable_pf}" = "yes" && AC_DEFINE([ENABLE_PF], [1], [Enable internal packet filter])
|
| 1050 | 1050 |
test "${enable_strict_options}" = "yes" && AC_DEFINE([ENABLE_STRICT_OPTIONS_CHECK], [1], [Enable strict options check between peers])
|
| 1051 | 1051 |
|
| 1052 |
-case "${with_crypto_library}" in
|
|
| 1053 |
- openssl) |
|
| 1054 |
- have_crypto_crypto="${have_openssl_crypto}"
|
|
| 1055 |
- have_crypto_ssl="${have_openssl_ssl}"
|
|
| 1056 |
- CRYPTO_CRYPTO_CFLAGS="${OPENSSL_CRYPTO_CFLAGS}"
|
|
| 1057 |
- CRYPTO_CRYPTO_LIBS="${OPENSSL_CRYPTO_LIBS}"
|
|
| 1058 |
- CRYPTO_SSL_CFLAGS="${OPENSSL_SSL_CFLAGS}"
|
|
| 1059 |
- CRYPTO_SSL_LIBS="${OPENSSL_SSL_LIBS}"
|
|
| 1060 |
- AC_DEFINE([ENABLE_CRYPTO_OPENSSL], [1], [Use OpenSSL library]) |
|
| 1061 |
- test "${have_openssl_engine}" = "yes" && AC_DEFINE([HAVE_OPENSSL_ENGINE], [1], [Use crypto library])
|
|
| 1062 |
- ;; |
|
| 1063 |
- polarssl) |
|
| 1064 |
- have_crypto_crypto="${have_polarssl_crypto}"
|
|
| 1065 |
- have_crypto_ssl="${have_polarssl_ssl}"
|
|
| 1066 |
- CRYPTO_CRYPTO_CFLAGS="${POLARSSL_CFLAGS}"
|
|
| 1067 |
- CRYPTO_CRYPTO_LIBS="${POLARSSL_LIBS}"
|
|
| 1068 |
- AC_DEFINE([ENABLE_CRYPTO_POLARSSL], [1], [Use PolarSSL library]) |
|
| 1069 |
- ;; |
|
| 1070 |
-esac |
|
| 1071 |
- |
|
| 1072 | 1052 |
if test "${enable_crypto}" = "yes"; then
|
| 1073 |
- test "${have_crypto_crypto}" != "yes" && AC_MSG_ERROR([${with_crypto_library} crypto is required but missing])
|
|
| 1053 |
+ test "${have_crypto}" != "yes" && AC_MSG_ERROR([${with_crypto_library} crypto is required but missing])
|
|
| 1074 | 1054 |
test "${enable_crypto_ofb_cfb}" = "yes" && AC_DEFINE([ENABLE_OFB_CFB_MODE], [1], [Enable OFB and CFB cipher modes])
|
| 1075 |
- OPTIONAL_CRYPTO_CFLAGS="${OPTIONAL_CRYPTO_CFLAGS} ${CRYPTO_CRYPTO_CFLAGS} ${CRYPTO_SSL_CFLAGS}"
|
|
| 1076 |
- OPTIONAL_CRYPTO_LIBS="${OPTIONAL_CRYPTO_LIBS} ${CRYPTO_SSL_LIBS} ${CRYPTO_CRYPTO_LIBS}"
|
|
| 1055 |
+ OPTIONAL_CRYPTO_CFLAGS="${OPTIONAL_CRYPTO_CFLAGS} ${CRYPTO_CFLAGS}"
|
|
| 1056 |
+ OPTIONAL_CRYPTO_LIBS="${OPTIONAL_CRYPTO_LIBS} ${CRYPTO_LIBS}"
|
|
| 1077 | 1057 |
AC_DEFINE([ENABLE_CRYPTO], [1], [Enable crypto library]) |
| 1078 | 1058 |
fi |
| 1079 | 1059 |
|