Skip to content
Snippets Groups Projects
  • George Joseph's avatar
    c07e3c2f
    BuildSystem: Check for alternate openssl packages · c07e3c2f
    George Joseph authored
    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
    c07e3c2f
    History
    BuildSystem: Check for alternate openssl packages
    George Joseph authored
    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