[PHP-INSTALL] How to resolve inconsistent linking of path-specified openssl libs into php bin and extenstions ?

PGNet Dev <[email protected]> Mon, 6 Mar 2017 12:54:29 -0800
Newsgroups gmane.comp.php.install
Message-ID <[email protected]>
I'm working on php 7-1 with specific openssl versions/install paths.

When building with openssl ext, linking openssl 10 libs/headers from a local, non-system path, and rpath'ing enabled


	export EXTRA_LDFLAGS="-L/usr/local/openssl10/lib64"
	export EXTRA_LIBS="-lssl -lscrypto"

	CPPFLAGS="-I/usr/local/openssl10/include -I/usr/local/include -I/usr/include"

	pkg-config openssl --libs --cflags
		-I/usr/local/openssl10/include -L/usr/local/openssl10/lib64 -lssl -lcrypto

	./configure \
	 --enable-rpath \
	 --enable-shared=yes --enable-static=no \
	 --with-openssl=shared --with-openssl-dir=/usr/local/openssl10 \
	...
	make
	make install

correctly links the openssl.so to spec'd openssl libs

	ldd openssl.so
	        linux-vdso.so.1 (0x00007fffdedef000)
!!	        libssl.so.1.0.0 => /usr/local/openssl10/lib64/libssl.so.1.0.0 (0x00007fdae69f5000)
!!	        libcrypto.so.1.0.0 => /usr/local/openssl10/lib64/libcrypto.so.1.0.0 (0x00007fdae6565000)
	        libc.so.6 => /lib64/libc.so.6 (0x00007fdae6162000)
	        libdl.so.2 => /lib64/libdl.so.2 (0x00007fdae5f5e000)
	        /lib64/ld-linux-x86-64.so.2 (0x0000556f88705000)

but 

	php -i

returns a mismatch

	...
	OpenSSL support => enabled
	OpenSSL Library Version => OpenSSL 1.0.2j-fips  26 Sep 2016
	OpenSSL Header Version => OpenSSL 1.0.2k  26 Jan 2017
	Openssl default config => /etc/ssl/openssl.cnf

	Directive => Local Value => Master Value
	openssl.cafile => no value => no value
	openssl.capath => /etc/ssl/certs => /etc/ssl/certs
	...

checking

	ldd `which php` 
		linux-vdso.so.1 (0x00007ffe796a7000)
		libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fe781930000)
		libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe781718000)
		libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fe78132f000)
		libpcre.so.1 => /usr/local/lib64/libpcre.so.1 (0x00007fe7810b5000)
		librt.so.1 => /lib64/librt.so.1 (0x00007fe780eac000)
		libm.so.6 => /lib64/libm.so.6 (0x00007fe780baf000)
		libdl.so.2 => /lib64/libdl.so.2 (0x00007fe7809ab000)
		libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fe780792000)
		libz.so.1 => /lib64/libz.so.1 (0x00007fe78057b000)
		liblzma.so.5 => /usr/lib64/liblzma.so.5 (0x00007fe780352000)
		libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007fe77ffe6000)
!!		libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007fe77fd7a000)
!!		libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007fe77f920000)
		libc.so.6 => /lib64/libc.so.6 (0x00007fe77f57c000)
		/lib64/ld-linux-x86-64.so.2 (0x0000560dbbe7d000)
		libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe77f365000)
		libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe77f148000)

the php binary itself is incorrectly linked to system/distro, not specified libs.

If I instead set

	export LDFLAGS="-L/usr/local/openssl10/lib64"
	export LIBS="-lssl -lscrypto"

then

(1) the mismatch persists

AND

(2) EVERY ext.so built is linked to incorrect libs

	ldd <any_ext>.so
		...
		libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007f29accae000)
		libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007f29ac854000)
		...

What combination of setting/flags are required to

(1) correctly link/rpath SPECIFIED openssl libs
(2) ensure matched headers & libs are detected & reported
(3) link ssl/crypto libs ONLY to bins/libs that *require* them

?