BuildSystem: Check for alternate openssl packages
OpenSSL is one of those packages that often have alternatives with later versions. For instance, CentOS/EL 7 has an openssl package at version 1.0.2 but there's an openssl11 package from the epel repository that has 1.1.1. This gets installed to /usr/include/openssl11 and /usr/lib64/openssl11. Unfortunately, the existing --with-ssl and --with-crypto ./configure options expect to point to a source tree and don't work in this situation. Also unfortunately, the checks in ./configure don't use pkg-config. In order to make this work with the existing situation, you'd have to run... ./configure --with-ssl=/usr/lib64/openssl11 \ --with-crypto=/usr/lib64/openssl11 \ CFLAGS=-I/usr/include/openssl11 BUT... those options don't get passed down to bundled pjproject so when you run make, you have to include the CFLAGS again which is a big pain. Oh... To make matters worse, although you can specify PJPROJECT_CONFIGURE_OPTS on the ./configure command line, they don't get saved so if you do a make clean, which will force a re-configure of bundled pjproject, those options don't get used. So... * In configure.ac... Since pkg-config is installed by install_prereq anyway, we now use it to check for the system openssl >= 1.1.0. If that works, great. If not, we check for the openssl11 package. If that works, great. If not, we fall back to just checking for any openssl. If pkg-config isn't installed for some reason, or --with-ssl=<dir> or --with-crypto=<dir> were specified on the ./configure command line, we fall back to the existing logic that uses AST_EXT_LIB_CHECK(). * The whole OpenSSL check process has been moved up before THIRD_PARTY_CONFIGURE(), which does the initial pjproject bundled configure, is run. This way the results of the above checks, which may result in new include or library directories, is included. * Although not strictly needed for openssl, We now save the value of PJPROJECT_CONFIGURE_OPTS in the makeopts file so it can be used again if a re-configure is triggered. ASTERISK-29693 Change-Id: I341ab7603e6b156aa15a66f43675ac5029d5fbde
This commit is contained in:
parent
8c2720e540
commit
c07e3c2f4d
61
configure.ac
61
configure.ac
|
@ -313,6 +313,8 @@ AC_PATH_PROG([LDCONFIG], [ldconfig], :)
|
||||||
AC_PATH_PROG([SHA1SUM], [sha1sum], $ac_aux_dir/build_tools/sha1sum-sh)
|
AC_PATH_PROG([SHA1SUM], [sha1sum], $ac_aux_dir/build_tools/sha1sum-sh)
|
||||||
AC_PATH_PROG([OPENSSL], [openssl], :)
|
AC_PATH_PROG([OPENSSL], [openssl], :)
|
||||||
|
|
||||||
|
PKG_PROG_PKG_CONFIG()
|
||||||
|
|
||||||
AC_CACHE_CHECK([for bison that supports parse-param], [ac_cv_path_BISON2], [
|
AC_CACHE_CHECK([for bison that supports parse-param], [ac_cv_path_BISON2], [
|
||||||
if test "x$BISON" != "x:" ; then
|
if test "x$BISON" != "x:" ; then
|
||||||
# Create a temporary directory $tmp in $TMPDIR (default /tmp).
|
# Create a temporary directory $tmp in $TMPDIR (default /tmp).
|
||||||
|
@ -458,6 +460,52 @@ if test "${with_pjproject}" == "no" || test "${with_pjproject}" == "n" ; then
|
||||||
PJPROJECT_BUNDLED=no
|
PJPROJECT_BUNDLED=no
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# OpenSSL stuff has to be done here because we want to pass
|
||||||
|
# any resulting CFLAGS and LDFLAGS to the bundled pjproject
|
||||||
|
# configure done in THIRD_PARTY_CONFIGURE()
|
||||||
|
#
|
||||||
|
AST_EXT_LIB_SETUP([CRYPTO], [OpenSSL Cryptography], [crypto])
|
||||||
|
AST_EXT_LIB_SETUP([OPENSSL], [OpenSSL Secure Sockets Layer], [ssl])
|
||||||
|
AST_EXT_LIB_SETUP_OPTIONAL([OPENSSL_BIO_METHOD], [OpenSSL BIO Method Support], [CRYPTO], [crypto])
|
||||||
|
|
||||||
|
# If neither --without-ssl (PBX_OPENSSL=-1) nor --without-crypto (PBX_CRYPTO=-1)
|
||||||
|
# and there were no directories atdded to --with-ssl and --with-crypto, and
|
||||||
|
# pkg-config is installed (which is should be by install_prereq).
|
||||||
|
if test "x$PKG_CONFIG" != "x" -a $PBX_OPENSSL -ge 0 -a $PBX_CRYPTO -ge 0 -a "x$OPENSSL_DIR" == "x" ; then
|
||||||
|
AC_MSG_NOTICE(checking OPENSSL with pkg-config)
|
||||||
|
AC_MSG_NOTICE(checking whether system openssl > 1.1.0)
|
||||||
|
AST_PKG_CONFIG_CHECK([OPENSSL], [openssl >= 1.1.0])
|
||||||
|
if test $PBX_OPENSSL -eq 0 ; then
|
||||||
|
AC_MSG_NOTICE(checking whether alternate openssl11 is installed)
|
||||||
|
AST_PKG_CONFIG_CHECK([OPENSSL], [openssl11])
|
||||||
|
fi
|
||||||
|
if test $PBX_OPENSSL -eq 1 ; then
|
||||||
|
AC_DEFINE([HAVE_OPENSSL_BIO_METHOD], 1)
|
||||||
|
PBX_OPENSSL_BIO_METHOD=1
|
||||||
|
else
|
||||||
|
AC_MSG_NOTICE(checking fallback system openssl)
|
||||||
|
AST_PKG_CONFIG_CHECK([OPENSSL], [openssl])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $PBX_OPENSSL -eq 1; then
|
||||||
|
AC_DEFINE([HAVE_CRYPTO], 1)
|
||||||
|
PBX_CRYPTO=1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_NOTICE(Checking OPENSSL without pkg-config)
|
||||||
|
AST_EXT_LIB_CHECK([CRYPTO], [crypto], [AES_encrypt], [openssl/aes.h])
|
||||||
|
if test "$PBX_CRYPTO" = "1";
|
||||||
|
then
|
||||||
|
AST_EXT_LIB_CHECK([OPENSSL], [ssl], [SSL_connect], [openssl/ssl.h], [-lcrypto])
|
||||||
|
AST_EXT_LIB_CHECK([OPENSSL_BIO_METHOD], [ssl], [BIO_meth_new], [openssl/ssl.h], [-lcrypto])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test $PBX_OPENSSL -eq 0 ; then
|
||||||
|
AC_MSG_WARN(OpenSSL does not seem to be installed)
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
THIRD_PARTY_CONFIGURE()
|
THIRD_PARTY_CONFIGURE()
|
||||||
|
|
||||||
# AST_EXT_LIB_SETUP is used to tell configure to handle variables for
|
# AST_EXT_LIB_SETUP is used to tell configure to handle variables for
|
||||||
|
@ -482,8 +530,6 @@ AST_EXT_LIB_SETUP([CODEC2], [Codec 2 Audio Decoder/Encoder], [codec2])
|
||||||
AST_EXT_LIB_SETUP([COROSYNC], [Corosync], [cpg])
|
AST_EXT_LIB_SETUP([COROSYNC], [Corosync], [cpg])
|
||||||
AST_EXT_LIB_SETUP_OPTIONAL([COROSYNC_CFG_STATE_TRACK], [A callback only in corosync 1.x], [COROSYNC], [cfg])
|
AST_EXT_LIB_SETUP_OPTIONAL([COROSYNC_CFG_STATE_TRACK], [A callback only in corosync 1.x], [COROSYNC], [cfg])
|
||||||
AST_EXT_LIB_SETUP([CRYPT], [password and data encryption], [crypt])
|
AST_EXT_LIB_SETUP([CRYPT], [password and data encryption], [crypt])
|
||||||
AST_EXT_LIB_SETUP([CRYPTO], [OpenSSL Cryptography], [crypto])
|
|
||||||
AST_EXT_LIB_SETUP_OPTIONAL([OPENSSL_BIO_METHOD], [OpenSSL BIO Method Support], [CRYPTO], [crypto])
|
|
||||||
AST_EXT_LIB_SETUP([DAHDI], [DAHDI], [dahdi])
|
AST_EXT_LIB_SETUP([DAHDI], [DAHDI], [dahdi])
|
||||||
AST_EXT_LIB_SETUP([FFMPEG], [Ffmpeg and avcodec], [avcodec])
|
AST_EXT_LIB_SETUP([FFMPEG], [Ffmpeg and avcodec], [avcodec])
|
||||||
AST_EXT_LIB_SETUP([GSM], [External GSM], [gsm], [, use 'internal' GSM otherwise])
|
AST_EXT_LIB_SETUP([GSM], [External GSM], [gsm], [, use 'internal' GSM otherwise])
|
||||||
|
@ -593,7 +639,6 @@ AST_EXT_LIB_SETUP_OPTIONAL([SRTP_192], [SRTP Library AES-192 (ICM)], [SRTP], [sr
|
||||||
AST_EXT_LIB_SETUP_OPTIONAL([SRTP_GCM], [SRTP Library AES-128 (GCM) and AES-256 (GCM)], [SRTP], [srtp])
|
AST_EXT_LIB_SETUP_OPTIONAL([SRTP_GCM], [SRTP Library AES-128 (GCM) and AES-256 (GCM)], [SRTP], [srtp])
|
||||||
AST_EXT_LIB_SETUP_OPTIONAL([SRTP_SHUTDOWN], [SRTP Library Shutdown Function], [SRTP], [srtp])
|
AST_EXT_LIB_SETUP_OPTIONAL([SRTP_SHUTDOWN], [SRTP Library Shutdown Function], [SRTP], [srtp])
|
||||||
AST_EXT_LIB_SETUP_OPTIONAL([SRTP_GET_VERSION], [SRTP Library Version Function], [SRTP], [srtp])
|
AST_EXT_LIB_SETUP_OPTIONAL([SRTP_GET_VERSION], [SRTP Library Version Function], [SRTP], [srtp])
|
||||||
AST_EXT_LIB_SETUP([OPENSSL], [OpenSSL Secure Sockets Layer], [ssl])
|
|
||||||
AST_EXT_LIB_SETUP_OPTIONAL([RT], [Realtime functions], [rt])
|
AST_EXT_LIB_SETUP_OPTIONAL([RT], [Realtime functions], [rt])
|
||||||
AST_EXT_LIB_SETUP([SUPPSERV], [mISDN Supplemental Services], [suppserv])
|
AST_EXT_LIB_SETUP([SUPPSERV], [mISDN Supplemental Services], [suppserv])
|
||||||
AST_EXT_LIB_SETUP([FREETDS], [FreeTDS], [tds])
|
AST_EXT_LIB_SETUP([FREETDS], [FreeTDS], [tds])
|
||||||
|
@ -640,8 +685,6 @@ AC_CHECK_HEADERS([ \
|
||||||
|
|
||||||
AC_CHECK_HEADERS([arpa/inet.h libintl.h malloc.h netdb.h stddef.h strings.h sys/event.h utime.h])
|
AC_CHECK_HEADERS([arpa/inet.h libintl.h malloc.h netdb.h stddef.h strings.h sys/event.h utime.h])
|
||||||
|
|
||||||
PKG_PROG_PKG_CONFIG()
|
|
||||||
|
|
||||||
# Find required NetBSD Editline library (libedit).
|
# Find required NetBSD Editline library (libedit).
|
||||||
AST_PKG_CONFIG_CHECK(LIBEDIT, libedit)
|
AST_PKG_CONFIG_CHECK(LIBEDIT, libedit)
|
||||||
# some platforms do not list libedit via pkg-config, for example OpenBSD 6.2
|
# some platforms do not list libedit via pkg-config, for example OpenBSD 6.2
|
||||||
|
@ -2642,14 +2685,6 @@ AC_SUBST(CRYPT_INCLUDE)
|
||||||
AC_CHECK_LIB([crypt], [crypt_r],
|
AC_CHECK_LIB([crypt], [crypt_r],
|
||||||
[AC_DEFINE([HAVE_CRYPT_R], [1], [Define to 1 if you have the 'crypt_r' function.])])
|
[AC_DEFINE([HAVE_CRYPT_R], [1], [Define to 1 if you have the 'crypt_r' function.])])
|
||||||
|
|
||||||
AST_EXT_LIB_CHECK([CRYPTO], [crypto], [AES_encrypt], [openssl/aes.h])
|
|
||||||
|
|
||||||
if test "$PBX_CRYPTO" = "1";
|
|
||||||
then
|
|
||||||
AST_EXT_LIB_CHECK([OPENSSL], [ssl], [SSL_connect], [openssl/ssl.h], [-lcrypto])
|
|
||||||
AST_EXT_LIB_CHECK([OPENSSL_BIO_METHOD], [ssl], [BIO_meth_new], [openssl/ssl.h], [-lcrypto])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$PBX_OPENSSL" = "1";
|
if test "$PBX_OPENSSL" = "1";
|
||||||
then
|
then
|
||||||
AST_CHECK_OSPTK([4], [0], [0])
|
AST_CHECK_OSPTK([4], [0], [0])
|
||||||
|
|
|
@ -585,7 +585,7 @@
|
||||||
/* Define to 1 if you have the MFR2 library. */
|
/* Define to 1 if you have the MFR2 library. */
|
||||||
#undef HAVE_OPENR2
|
#undef HAVE_OPENR2
|
||||||
|
|
||||||
/* Define to 1 if you have the OpenSSL Secure Sockets Layer library. */
|
/* Define if your system has the OPENSSL libraries. */
|
||||||
#undef HAVE_OPENSSL
|
#undef HAVE_OPENSSL
|
||||||
|
|
||||||
/* Define to 1 if CRYPTO has the OpenSSL BIO Method Support feature. */
|
/* Define to 1 if CRYPTO has the OpenSSL BIO Method Support feature. */
|
||||||
|
|
|
@ -239,6 +239,7 @@ PJPROJECT_BUNDLED=@PJPROJECT_BUNDLED@
|
||||||
PJPROJECT_INCLUDE=@PJPROJECT_INCLUDE@
|
PJPROJECT_INCLUDE=@PJPROJECT_INCLUDE@
|
||||||
PJPROJECT_LIB=@PJPROJECT_LIB@
|
PJPROJECT_LIB=@PJPROJECT_LIB@
|
||||||
PJPROJECT_DIR=@PJPROJECT_DIR@
|
PJPROJECT_DIR=@PJPROJECT_DIR@
|
||||||
|
PJPROJECT_CONFIGURE_OPTS=@PJPROJECT_CONFIGURE_OPTS@
|
||||||
|
|
||||||
POPT_INCLUDE=@POPT_INCLUDE@
|
POPT_INCLUDE=@POPT_INCLUDE@
|
||||||
POPT_LIB=@POPT_LIB@
|
POPT_LIB=@POPT_LIB@
|
||||||
|
|
|
@ -696,6 +696,7 @@ infodir
|
||||||
docdir
|
docdir
|
||||||
oldincludedir
|
oldincludedir
|
||||||
includedir
|
includedir
|
||||||
|
runstatedir
|
||||||
localstatedir
|
localstatedir
|
||||||
sharedstatedir
|
sharedstatedir
|
||||||
sysconfdir
|
sysconfdir
|
||||||
|
@ -777,6 +778,7 @@ datadir='${datarootdir}'
|
||||||
sysconfdir='${prefix}/etc'
|
sysconfdir='${prefix}/etc'
|
||||||
sharedstatedir='${prefix}/com'
|
sharedstatedir='${prefix}/com'
|
||||||
localstatedir='${prefix}/var'
|
localstatedir='${prefix}/var'
|
||||||
|
runstatedir='${localstatedir}/run'
|
||||||
includedir='${prefix}/include'
|
includedir='${prefix}/include'
|
||||||
oldincludedir='/usr/include'
|
oldincludedir='/usr/include'
|
||||||
docdir='${datarootdir}/doc/${PACKAGE}'
|
docdir='${datarootdir}/doc/${PACKAGE}'
|
||||||
|
@ -1029,6 +1031,15 @@ do
|
||||||
| -silent | --silent | --silen | --sile | --sil)
|
| -silent | --silent | --silen | --sile | --sil)
|
||||||
silent=yes ;;
|
silent=yes ;;
|
||||||
|
|
||||||
|
-runstatedir | --runstatedir | --runstatedi | --runstated \
|
||||||
|
| --runstate | --runstat | --runsta | --runst | --runs \
|
||||||
|
| --run | --ru | --r)
|
||||||
|
ac_prev=runstatedir ;;
|
||||||
|
-runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
|
||||||
|
| --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
|
||||||
|
| --run=* | --ru=* | --r=*)
|
||||||
|
runstatedir=$ac_optarg ;;
|
||||||
|
|
||||||
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
||||||
ac_prev=sbindir ;;
|
ac_prev=sbindir ;;
|
||||||
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
||||||
|
@ -1166,7 +1177,7 @@ fi
|
||||||
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
||||||
datadir sysconfdir sharedstatedir localstatedir includedir \
|
datadir sysconfdir sharedstatedir localstatedir includedir \
|
||||||
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
||||||
libdir localedir mandir
|
libdir localedir mandir runstatedir
|
||||||
do
|
do
|
||||||
eval ac_val=\$$ac_var
|
eval ac_val=\$$ac_var
|
||||||
# Remove trailing slashes.
|
# Remove trailing slashes.
|
||||||
|
@ -1319,6 +1330,7 @@ Fine tuning of the installation directories:
|
||||||
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
||||||
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
||||||
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
||||||
|
--runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
|
||||||
--libdir=DIR object code libraries [EPREFIX/lib]
|
--libdir=DIR object code libraries [EPREFIX/lib]
|
||||||
--includedir=DIR C header files [PREFIX/include]
|
--includedir=DIR C header files [PREFIX/include]
|
||||||
--oldincludedir=DIR C header files for non-gcc [/usr/include]
|
--oldincludedir=DIR C header files for non-gcc [/usr/include]
|
||||||
|
|
|
@ -88,8 +88,8 @@ else
|
||||||
endif
|
endif
|
||||||
|
|
||||||
export PJ_CFLAGS := $(filter-out -O% -g%,$(PJ_CFLAGS))
|
export PJ_CFLAGS := $(filter-out -O% -g%,$(PJ_CFLAGS))
|
||||||
export CFLAGS += $(CF)
|
export CFLAGS += $(CF) $(OPENSSL_INCLUDE)
|
||||||
export LDFLAGS += $(CC_LDFLAGS)
|
export LDFLAGS += $(CC_LDFLAGS) $(OPENSSL_LIB)
|
||||||
|
|
||||||
ECHO_PREFIX := $(ECHO_PREFIX) echo '[pjproject] '
|
ECHO_PREFIX := $(ECHO_PREFIX) echo '[pjproject] '
|
||||||
SHELL_ECHO_PREFIX := echo '[pjproject] '
|
SHELL_ECHO_PREFIX := echo '[pjproject] '
|
||||||
|
|
|
@ -117,6 +117,7 @@ AC_DEFUN([_PJPROJECT_CONFIGURE],
|
||||||
AC_SUBST([PBX_PJPROJECT])
|
AC_SUBST([PBX_PJPROJECT])
|
||||||
AC_SUBST([PJPROJECT_LIB])
|
AC_SUBST([PJPROJECT_LIB])
|
||||||
AC_SUBST([PJPROJECT_INCLUDE])
|
AC_SUBST([PJPROJECT_INCLUDE])
|
||||||
|
AC_SUBST([PJPROJECT_CONFIGURE_OPTS])
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in New Issue