Link internal tests with static OpenSSL libraries when needed
authorRichard Levitte <levitte@openssl.org>
Wed, 9 Nov 2016 19:09:03 +0000 (20:09 +0100)
committerRichard Levitte <levitte@openssl.org>
Thu, 10 Nov 2016 14:51:43 +0000 (15:51 +0100)
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/1889)

test/build.info
test/recipes/03-test_internal.t

index f51866a..e9f87ed 100644 (file)
@@ -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
index 5c7e897..33cb7a3 100644 (file)
@@ -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;