Commit 222b0a8e authored by Richard Levitte's avatar Richard Levitte
Browse files

Configuration: when building the dirinfo structure, include shared_sources



This makes sure that any resulting directory target in the build files
also depend on object files meant for shared libraries.

As a side effect, we move the production of the dirinfo structure from
common.tmpl to Configure, to make it easier to check the result.

Reviewed-by: default avatarMatt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/7452)

(cherry picked from commit b6e660754c2e799cffe4906269fcace0e07c73bc)
parent 3b1928fe
Loading
Loading
Loading
Loading
+0 −41
Original line number Diff line number Diff line
@@ -203,47 +203,6 @@
 # Start with populating the cache with all the overrides
 %cache = map { $_ => 1 } @{$unified_info{overrides}};

 # For convenience collect information regarding directories where
 # files are generated, those generated files and the end product
 # they end up in where applicable.  Then, add build rules for those
 # directories
 if (exists &generatedir) {
     my %loopinfo = ( "dso" => [ @{$unified_info{engines}} ],
                      "lib" => [ @{$unified_info{libraries}} ],
                      "bin" => [ @{$unified_info{programs}} ],
                      "script" => [ @{$unified_info{scripts}} ] );
     foreach my $type (keys %loopinfo) {
         foreach my $product (@{$loopinfo{$type}}) {
             my %dirs = ();
             my $pd = dirname($product);

             # We already have a "test" target, and the current directory
             # is just silly to make a target for
             $dirs{$pd} = 1 unless $pd eq "test" || $pd eq ".";

             foreach (@{$unified_info{sources}->{$product}}) {
                 my $d = dirname($_);

                 # We don't want to create targets for source directories
                 # when building out of source
                 next if ($config{sourcedir} ne $config{builddir}
                          && $d =~ m|^\Q$config{sourcedir}\E|);
                 # We already have a "test" target, and the current directory
                 # is just silly to make a target for
                 next if $d eq "test" || $d eq ".";

                 $dirs{$d} = 1;
                 push @{$unified_info{dirinfo}->{$d}->{deps}}, $_
                     if $d ne $pd;
             }
             foreach (keys %dirs) {
                 push @{$unified_info{dirinfo}->{$_}->{products}->{$type}},
                 $product;
             }
         }
     }
 }

 # Build mandatory generated headers
 foreach (@{$unified_info{depends}->{""}}) { dogenerate($_); }

+5 −1
Original line number Diff line number Diff line
@@ -1242,6 +1242,10 @@ EOF
                      lib => $libext,
                      bin => $exeext );

      # We already have a 'test' target, and the top directory is just plain
      # silly
      return if $dir eq "test" || $dir eq ".";

      foreach my $type (("dso", "lib", "bin", "script")) {
          next unless defined($unified_info{dirinfo}->{$dir}->{products}->{$type});
          # For lib object files, we could update the library.  However, it
@@ -1262,7 +1266,7 @@ EOF
      my $deps = join(" ", @deps);
      my $actions = join("\n", "", @actions);
      return <<"EOF";
$args{dir} $args{dir}/: $deps$actions
$dir $dir/: $deps$actions
EOF
  }
  ""    # Important!  This becomes part of the template result.
+5 −1
Original line number Diff line number Diff line
@@ -725,6 +725,10 @@ EOF
                      lib => $libext,
                      bin => $exeext );

      # We already have a 'test' target, and the top directory is just plain
      # silly
      return if $dir eq "test" || $dir eq ".";

      foreach my $type (("dso", "lib", "bin", "script")) {
          next unless defined($unified_info{dirinfo}->{$dir}->{products}->{$type});
          # For lib object files, we could update the library.  However,
@@ -742,7 +746,7 @@ EOF
      my $deps = join(" ", @deps);
      my $actions = join("\n", "", @actions);
      return <<"EOF";
$args{dir} $args{dir}\\ : $deps$actions
$dir $dir\\ : $deps$actions
EOF
  }
  ""    # Important!  This becomes part of the template result.
+36 −0
Original line number Diff line number Diff line
@@ -2243,6 +2243,42 @@ EOF
                [ @{$unified_info{includes}->{$dest}->{source}} ];
        }
    }

    # For convenience collect information regarding directories where
    # files are generated, those generated files and the end product
    # they end up in where applicable.  Then, add build rules for those
    # directories
    my %loopinfo = ( "lib" => [ @{$unified_info{libraries}} ],
                     "dso" => [ @{$unified_info{engines}} ],
                     "bin" => [ @{$unified_info{programs}} ],
                     "script" => [ @{$unified_info{scripts}} ] );
    foreach my $type (keys %loopinfo) {
        foreach my $product (@{$loopinfo{$type}}) {
            my %dirs = ();
            my $pd = dirname($product);

            foreach (@{$unified_info{sources}->{$product}},
                     @{$unified_info{shared_sources}->{$product} // []}) {
                my $d = dirname($_);

                # We don't want to create targets for source directories
                # when building out of source
                next if ($config{sourcedir} ne $config{builddir}
                             && $d =~ m|^\Q$config{sourcedir}\E|);
                # We already have a "test" target, and the current directory
                # is just silly to make a target for
                next if $d eq "test" || $d eq ".";

                $dirs{$d} = 1;
                push @{$unified_info{dirinfo}->{$d}->{deps}}, $_
                    if $d ne $pd;
            }
            foreach (keys %dirs) {
                push @{$unified_info{dirinfo}->{$_}->{products}->{$type}},
                    $product;
            }
        }
    }
}

# For the schemes that need it, we provide the old *_obj configs