Apps: divide the modules in direct command modules, support library and init
authorRichard Levitte <levitte@openssl.org>
Wed, 31 Jan 2018 13:15:52 +0000 (14:15 +0100)
committerRichard Levitte <levitte@openssl.org>
Wed, 31 Jan 2018 22:45:12 +0000 (23:45 +0100)
Most modules are direct implementations of openssl application
sub-commands, but some constitute a support library, which can be used
by more than one program (and is, incidently, by test/uitest).

For practical purposes, we place the support library modules in a
private, static library.

Finally, there are some modules that don't have direct references in
the rest of the apps code, but are still crucial.  See them as some
kind of extra crt0 or similar for your platform.

Inspiration from David von Oheimb

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5222)

Configurations/00-base-templates.conf
Configurations/10-main.conf
Configurations/README
Configurations/windows-checker.pm
apps/build.info

index 72cbde2..0d0f8b8 100644 (file)
@@ -11,6 +11,7 @@ my %targets=(
        thread_defines  => [],
 
        apps_aux_src    => "",
+       apps_init_src   => "",
        cpuid_asm_src   => "mem_clr.c",
        uplink_aux_src  => "",
        bn_asm_src      => "bn_asm.c",
@@ -134,7 +135,7 @@ my %targets=(
 
     uplink_common => {
        template        => 1,
-       apps_aux_src    => add("../ms/applink.c"),
+       apps_init_src   => add("../ms/applink.c"),
        uplink_aux_src  => add("../ms/uplink.c"),
        defines         => add("OPENSSL_USE_APPLINK"),
     },
index 62fbb60..70b0104 100644 (file)
@@ -1852,7 +1852,8 @@ my %targets = (
         dso_scheme       => "vms",
         thread_scheme    => "pthreads",
 
-        apps_aux_src     => "vms_decc_init.c vms_term_sock.c",
+        apps_aux_src     => "vms_term_sock.c",
+        apps_init_src    => "vms_decc_init.c",
     },
 
     "vms-alpha" => {
index aa0c5fb..26cd0c6 100644 (file)
@@ -212,8 +212,14 @@ In each table entry, the following keys are significant:
                                                 export vars as
                                                 accessor functions.
 
-        apps_extra_src  => Extra source to build apps/openssl, as
-                           needed by the target.
+        apps_aux_src    => Extra source to build apps/openssl and other
+                           apps, as needed by the target and that can be
+                           collected in a library.
+        apps_init_src   => Init source to build apps/openssl and other
+                           apps, as needed by the target.  This code
+                           cannot be placed in a library, as the rest
+                           of the code isn't expected to link to it
+                           explicitely.
         cpuid_asm_src   => assembler implementation of cpuid code as
                            well as OPENSSL_cleanse().
                            Default to mem_clr.c
index de46fbc..4b7105d 100644 (file)
@@ -6,7 +6,7 @@ use Config;
 # we expect for the platform
 use File::Spec::Functions qw(:DEFAULT rel2abs);
 
-if (rel2abs('.') !~ m|\\|) {
+if (!$ENV{CONFIGURE_INSIST} && rel2abs('.') !~ m|\\|) {
     die <<EOF;
 
 ******************************************************************************
index 996e5a6..4a36ab5 100644 (file)
@@ -1,21 +1,27 @@
 {- our $tsget_name = $config{target} =~ /^(VC|vms)-/ ? "tsget.pl" : "tsget";
    our @apps_openssl_src =
-       ( qw(openssl.c
-            asn1pars.c ca.c ciphers.c cms.c crl.c crl2p7.c dgst.c dhparam.c
-            dsa.c dsaparam.c ec.c ecparam.c enc.c engine.c errstr.c gendsa.c
-            genpkey.c genrsa.c nseq.c ocsp.c passwd.c pkcs12.c pkcs7.c pkcs8.c
-            pkey.c pkeyparam.c pkeyutl.c prime.c rand.c req.c rsa.c rsautl.c
-            s_client.c s_server.c s_time.c sess_id.c smime.c speed.c spkac.c
-            srp.c ts.c verify.c version.c x509.c rehash.c storeutl.c
-            apps.c opt.c s_cb.c s_socket.c
-            app_rand.c),
-          split(/\s+/, $target{apps_aux_src}) );
+       qw(openssl.c
+          asn1pars.c ca.c ciphers.c cms.c crl.c crl2p7.c dgst.c dhparam.c
+          dsa.c dsaparam.c ec.c ecparam.c enc.c engine.c errstr.c gendsa.c
+          genpkey.c genrsa.c nseq.c ocsp.c passwd.c pkcs12.c pkcs7.c pkcs8.c
+          pkey.c pkeyparam.c pkeyutl.c prime.c rand.c req.c rsa.c rsautl.c
+          s_client.c s_server.c s_time.c sess_id.c smime.c speed.c spkac.c
+          srp.c ts.c verify.c version.c x509.c rehash.c storeutl.c);
+   our @apps_lib_src =
+       ( qw(apps.c opt.c s_cb.c s_socket.c app_rand.c),
+         split(/\s+/, $target{apps_aux_src}) );
+   our @apps_init_src = split(/\s+/, $target{apps_init_src});
    "" -}
 IF[{- !$disabled{apps} -}]
+  LIBS_NO_INST=libapps.a
+  SOURCE[libapps.a]={- join(" ", @apps_lib_src) -}
+  INCLUDE[libapps.a]=.. ../include
+
   PROGRAMS=openssl
+  SOURCE[openssl]={- join(" ", @apps_init_src) -}
   SOURCE[openssl]={- join(" ", @apps_openssl_src) -}
   INCLUDE[openssl]=.. ../include
-  DEPEND[openssl]=../libssl
+  DEPEND[openssl]=libapps.a ../libssl
 
   {- join("\n  ", map { (my $x = $_) =~ s|\.c$|.o|; "DEPEND[$x]=progs.h" }
                   @apps_openssl_src) -}