Configure: make C++ build tests optional and configurable
authorRichard Levitte <levitte@openssl.org>
Thu, 28 Feb 2019 12:28:43 +0000 (13:28 +0100)
committerRichard Levitte <levitte@openssl.org>
Tue, 5 Mar 2019 08:26:13 +0000 (09:26 +0100)
Disabled by default

Fixes #8360

Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/8370)

CHANGES
Configure
INSTALL
test/build.info
test/certs/root-ed25519.privkey.pem [new file with mode: 0644]
test/certs/root-ed25519.pubkey.pem [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 5fcf667..ff61ff4 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -9,6 +9,14 @@
 
  Changes between 1.1.1 and 3.0.0 [xx XXX xxxx]
 
+  *) Added build tests for C++.  These are generated files that only do one
+     thing, to include one public OpenSSL head file each.  This tests that
+     the public header files can be usefully included in a C++ application.
+
+     This test isn't enabled by default.  It can be enabled with the option
+     'enable-buildtest-c++'.
+     [Richard Levitte]
+
   *) Added property based algorithm implementation selection framework to
      the core.
      [Paul Dale]
index 0c9037b..707e8b9 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -341,6 +341,7 @@ my @disablables = (
     "autoload-config",
     "bf",
     "blake2",
+    "buildtest-c++",
     "camellia",
     "capieng",
     "cast",
@@ -444,6 +445,7 @@ my %deprecated_disablables = (
 
 our %disabled = ( # "what"         => "comment"
                  "asan"                => "default",
+                 "buildtest-c++"       => "default",
                  "crypto-mdebug"       => "default",
                  "crypto-mdebug-backtrace" => "default",
                  "devcryptoeng"        => "default",
@@ -1208,8 +1210,8 @@ foreach my $what (sort keys %disabled) {
 
     $config{options} .= " no-$what";
 
-    if (!grep { $what eq $_ } ( 'dso', 'threads', 'shared', 'pic',
-                                'dynamic-engine', 'makedepend',
+    if (!grep { $what eq $_ } ( 'buildtest-c++', 'dso', 'threads', 'shared',
+                                'pic', 'dynamic-engine', 'makedepend',
                                 'zlib-dynamic', 'zlib', 'sse2' )) {
         (my $WHAT = uc $what) =~ s|-|_|g;
         my $skipdir = $what;
diff --git a/INSTALL b/INSTALL
index be0ce9d..99d0463 100644 (file)
--- a/INSTALL
+++ b/INSTALL
                    Typically OpenSSL will automatically load a system config
                    file which configures default ssl options.
 
+  enable-buildtest-c++
+                   While testing, generate C++ buildtest files that
+                   simply check that the public OpenSSL header files
+                   are usable standalone with C++.
+
+                   Enabling this option demands extra care.  For any
+                   compiler flag given directly as configuration
+                   option, you must ensure that it's valid for both
+                   the C and the C++ compiler.  If not, the C++ build
+                   test will most likely break.  As an alternative,
+                   you can use the language specific variables, CFLAGS
+                   and CXXFLAGS.                   
+
   no-capieng
                    Don't build the CAPI engine. This option will be forced if
                    on a platform that does not support CAPI.
index 372f9be..5bf6fd0 100644 (file)
@@ -602,7 +602,7 @@ ENDIF
   INCLUDE[buildtest_c_$name]=../include
   DEPEND[buildtest_c_$name]=../libssl ../libcrypto
 _____
-       $OUT .= <<"_____" if $config{CXX};
+       $OUT .= <<"_____" if $config{CXX} && !$disabled{"buildtest-c++"};
 
   PROGRAMS{noinst}=buildtest_cc_$name
   SOURCE[buildtest_cc_$name]=buildtest_$name.cc
diff --git a/test/certs/root-ed25519.privkey.pem b/test/certs/root-ed25519.privkey.pem
new file mode 100644 (file)
index 0000000..e447080
--- /dev/null
@@ -0,0 +1,3 @@
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC
+-----END PRIVATE KEY-----
diff --git a/test/certs/root-ed25519.pubkey.pem b/test/certs/root-ed25519.pubkey.pem
new file mode 100644 (file)
index 0000000..41b0218
--- /dev/null
@@ -0,0 +1,3 @@
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=
+-----END PUBLIC KEY-----