Friends -
I recently ran into the OpenSSL 1.1 compatibility issue that others noted
on the gitter chat when building Gambit on Ubuntu 18. Ubuntu 18.04 is
using the 1.1 version of OpenSSL as default. Downgrading was not an option
for me due to other dependencies (namely node 8) on the 1.1 version.
OpenSSL version 1.1 introduces several backwards incompatible changes, but
Gambit is only using a hand full of those. I have patched os_io.c to allow
building with OpenSSL 1.1, but before submitting a pull request I want to
make sure building against OpenSSL 1.0 still works properly.
Is there a way to configure the Gambit build process to use a locally
installed version of OpenSSL 1.0, instead of the system installed OpenSSL
1.1, for testing?
I've tried setting the CFLAGS, LDFLAGS, etc environment variables, as
below, with no luck. I have also tried building OpenSSL as a static and
shared library with the same results. Here are the steps I'm using for
building:
./configure
make -j8 realclean
./configure
make -j8 from-scratch
make -j8 bootstrap
make bootclean
export CFLAGS=" -I/home/user/.local/openssl1.0/include/openssl "
export LDFLAGS=" -L/home/user/.local/openssl1.0/lib "
export LIBRARY_PATH="/home/user/.local/openssl1.0/lib"
export LD_LIBRARY_PATH="/home/user/.local/openssl1.0/lib"
./configure --enable-single-host --enable-poll --enable-openssl
--prefix=/home/user/tmp/gambit-test/build
make -j8
make check
These are the error messages from the make file. It seems to be having
trouble finding the library, or maybe it is linking it in the wrong order.
Note the flag adding a non-standard OpenSSL location that is always present
with --enable-openssl, even through that directory doesn't exsist
"-L/usr/local/opt/openssl/lib". Could that be confusing things?
making all in gsi
make[1]: Entering directory '/home/user/tmp/gambit-test/gambit-src/gsi'
gcc -L/home/user/.local/openssl1.0/lib
-I/home/user/.local/openssl1.0/include/openssl -Wno-unused
-Wno-write-strings -Wdisabled-optimization -fwrapv -fno-strict-aliasing
-fno-trapping-math -fno-math-errno -fschedule-insns2 -fomit-frame-pointer
-fPIC -fno-common -mpc64 -rdynamic -I"../include" -o "gsi" _gsi.o
_gsi_.o "../lib/libgambit.a" -lutil -ldl -lm -L/usr/local/opt/openssl/lib
-lssl -lcrypto libgambitgsi.a
../lib/libgambit.a(os_io.o): In function
`___device_tcp_client_close_raw_virt':
os_io.c:(.text+0x45e): undefined reference to `SSL_is_init_finished'
../lib/libgambit.a(os_io.o): In function `___os_make_tls_context':
os_io.c:(.text+0x22d1): undefined reference to `OPENSSL_init_ssl'
os_io.c:(.text+0x22de): undefined reference to `OpenSSL_version_num'
os_io.c:(.text+0x2449): undefined reference to `TLS_server_method'
os_io.c:(.text+0x2499): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x24d0): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x24e9): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x2502): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x258d): undefined reference to `DH_set0_pqg'
os_io.c:(.text+0x25ab): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x25b6): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x25fd): undefined reference to `TLS_client_method'
os_io.c:(.text+0x264d): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x2684): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x269d): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x26b6): undefined reference to `SSL_CTX_set_options'
os_io.c:(.text+0x27d6): undefined reference to `SSL_CTX_set_options'
../lib/libgambit.a(os_io.o):os_io.c:(.text+0x27eb): more undefined
references to `SSL_CTX_set_options' follow
collect2: error: ld returned 1 exit status
makefile:182: recipe for target 'gsi' failed
make[1]: *** [gsi] Error 1
make[1]: Leaving directory '/home/user/tmp/gambit-test/gambit-src/gsi'
makefile:467: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1
I'm sure there's something simple I'm missing here.
Thanks for any recommendations,
Bob