From cf551a51d2385f59536645f644f03a572cc232f9 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Wed, 9 Nov 2016 20:09:03 +0100 Subject: [PATCH] Link internal tests with static OpenSSL libraries when needed Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/1889) --- test/build.info | 100 ++++++++++---------------------- test/recipes/03-test_internal.t | 10 ++-- 2 files changed, 36 insertions(+), 74 deletions(-) diff --git a/test/build.info b/test/build.info index f51866a3f9..e9f87edb8b 100644 --- a/test/build.info +++ b/test/build.info @@ -312,79 +312,39 @@ IF[{- !$disabled{tests} -}] ENDIF # Internal test programs. These are essentially a collection of internal - # test routines. Because they sometimes need to reach internal symbols that - # aren't available through the shared library (at least on Linux, Solaris, - # Windows and VMS, where the exported symbols are those listed in util/*.num), - # these programs may be built on files directly picked from inside crypto/ - # or ssl/, to test using symbols that exist in those specific files. These - # programs will also be linked with libcrypto / libssl, so we don't pick - # out more specific files than necessary. - # This might mean we have multiply defined symbols, but since linking is - # ordered with object files first and libraries after, the symbols from the - # object files will be chosen before those in the libraries. This is handled - # properly by all linkers. - # Note that when building with static libraries, none of those extra files - # are needed, since all symbols are available anyway, regardless of what's - # listed in util/*.num. - PROGRAMS_NO_INST=asn1_internal_test modes_internal_test x509_internal_test - IF[{- !$disabled{mdc2} -}] - PROGRAMS_NO_INST=mdc2_internal_test - ENDIF - IF[{- !$disabled{poly1305} -}] - PROGRAMS_NO_INST=poly1305_internal_test - ENDIF - - SOURCE[poly1305_internal_test]=poly1305_internal_test.c testutil.c test_main_custom.c - IF[{- !$disabled{shared} -}] - SOURCE[poly1305_internal_test]= ../crypto/poly1305/poly1305.c \ - {- rebase_files("../crypto/poly1305", $target{poly1305_asm_src}) -} \ - {- rebase_files("../crypto", $target{cpuid_asm_src}) -} \ - ../crypto/cryptlib.c + # test routines. Some of them need to reach internal symbols that aren't + # available through the shared library (at least on Linux, Solaris, Windows + # and VMS, where the exported symbols are those listed in util/*.num), these + # programs are forcebly linked with the static libraries, where all symbols + # are always available. This excludes linking these programs natively on + # Windows when building shared libraries, since the static libraries share + # names with the DLL import libraries. + IF[{- $disabled{shared} || $target{build_scheme}->[1] ne 'windows' -}] + PROGRAMS_NO_INST=asn1_internal_test modes_internal_test x509_internal_test + IF[{- !$disabled{poly1305} -}] + PROGRAMS_NO_INST=poly1305_internal_test + ENDIF + + SOURCE[poly1305_internal_test]=poly1305_internal_test.c testutil.c test_main_custom.c + INCLUDE[poly1305_internal_test]=.. ../include ../crypto/include + DEPEND[poly1305_internal_test]=../libcrypto.a + + SOURCE[asn1_internal_test]=asn1_internal_test.c testutil.c test_main.c + INCLUDE[asn1_internal_test]=.. ../include ../crypto/include + DEPEND[asn1_internal_test]=../libcrypto.a + + SOURCE[modes_internal_test]=modes_internal_test.c testutil.c test_main_custom.c + INCLUDE[modes_internal_test]=.. ../include + DEPEND[modes_internal_test]=../libcrypto.a + + SOURCE[x509_internal_test]=x509_internal_test.c testutil.c test_main.c + INCLUDE[x509_internal_test]=.. ../include + DEPEND[x509_internal_test]=../libcrypto.a ENDIF - INCLUDE[poly1305_internal_test]=.. ../include ../crypto/include - DEPEND[poly1305_internal_test]=../libcrypto - SOURCE[asn1_internal_test]=asn1_internal_test.c testutil.c test_main.c - IF[{- !$disabled{shared} -}] - SOURCE[asn1_internal_test]= ../crypto/asn1/a_strnid.c \ - ../crypto/rsa/rsa_ameth.c ../crypto/dsa/dsa_ameth.c \ - ../crypto/dh/dh_ameth.c ../crypto/ec/ec_ameth.c \ - ../crypto/hmac/hm_ameth.c ../crypto/cmac/cm_ameth.c \ - ../crypto/ec/ecx_meth.c ../crypto/ec/curve25519.c - ENDIF - INCLUDE[asn1_internal_test]=.. ../include ../crypto/include - DEPEND[asn1_internal_test]=../libcrypto - - SOURCE[modes_internal_test]=modes_internal_test.c testutil.c test_main_custom.c - IF[{- !$disabled{shared} -}] - SOURCE[modes_internal_test]= \ - {- rebase_files("../crypto", $target{cpuid_asm_src}); -} \ - ../crypto/cryptlib.c - ENDIF - INCLUDE[modes_internal_test]=.. ../include - DEPEND[modes_internal_test]=../libcrypto - - # The reason for the huge amount of directly included x509v3 files - # is that a table that is checked by x509_internal_test refers to - # structures that are spread all over those files. - SOURCE[x509_internal_test]=x509_internal_test.c testutil.c test_main.c - IF[{- !$disabled{shared} -}] - SOURCE[x509_internal_test]= ../crypto/x509v3/v3_bitst.c \ - ../crypto/x509v3/v3_ia5.c ../crypto/x509v3/v3_skey.c \ - ../crypto/x509v3/v3_pku.c ../crypto/x509v3/v3_alt.c \ - ../crypto/x509v3/v3_bcons.c ../crypto/x509v3/v3_int.c \ - ../crypto/x509v3/v3_cpols.c ../crypto/x509v3/v3_akey.c \ - ../crypto/x509v3/v3_crld.c ../crypto/x509v3/v3_utl.c \ - ../crypto/x509v3/v3_extku.c ../crypto/x509v3/v3_enum.c \ - ../crypto/x509v3/v3_sxnet.c ../crypto/x509v3/v3_info.c \ - ../crypto/x509v3/v3_addr.c ../crypto/x509v3/v3_asid.c \ - ../crypto/x509v3/v3_pcons.c ../crypto/x509v3/v3_pmaps.c \ - ../crypto/x509v3/v3_pci.c ../crypto/x509v3/v3_ncons.c \ - ../crypto/x509v3/v3_tlsf.c ../crypto/ocsp/v3_ocsp.c \ - ../crypto/ct/ct_x509v3.c ../crypto/asn1/a_strex.c + IF[{- !$disabled{mdc2} -}] + PROGRAMS_NO_INST=mdc2_internal_test ENDIF - INCLUDE[x509_internal_test]=.. ../include - DEPEND[x509_internal_test]=../libcrypto SOURCE[mdc2_internal_test]=mdc2_internal_test.c testutil.c test_main.c INCLUDE[mdc2_internal_test]=.. ../include diff --git a/test/recipes/03-test_internal.t b/test/recipes/03-test_internal.t index 5c7e897d43..33cb7a3b53 100644 --- a/test/recipes/03-test_internal.t +++ b/test/recipes/03-test_internal.t @@ -12,12 +12,14 @@ use OpenSSL::Test::Utils; setup("test_internal"); +my $shared_windows = $^O eq 'MSWin32' && !disabled("shared"); + my %known_internal_tests = ( mdc2_internal_test => !disabled("mdc2"), - poly1305_internal_test => !disabled("poly1305"), - modes_internal_test => 1, - asn1_internal_test => 1, - x509_internal_test => 1 ); + poly1305_internal_test => !disabled("poly1305") && !$shared_windows, + modes_internal_test => !$shared_windows, + asn1_internal_test => !$shared_windows, + x509_internal_test => !$shared_windows ); plan tests => scalar keys %known_internal_tests; -- 2.25.1