Commit 6a8dfb90 authored by Richard Levitte's avatar Richard Levitte
Browse files

Configure: let INCLUDEs set on binaries "trickle down" to the objects



This ensures that only one set of includes is associated with each
object file, reagardless of where it's used.

For example, if apps/build.info has this:

    SOURCE[openssl]=foo.c
    INCLUDE[openssl]=.. ../include

and test/build.info has this:

    SOURCE[footest]=../apps/foo.c
    INCLUDE[footest]=../include

The inclusion directories used for apps/foo.o would differ depending
on which program's dependencies get generated first in the build file.

With this change, all those INCLUDEs get combined into one set of
inclusion directories tied to the object file.

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

(cherry picked from commit 1b5ad51f)
parent 38454902
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -52,8 +52,7 @@
                             generator_incs => $unified_info{includes}->{$script},
                             generator_deps => $unified_info{depends}->{$script},
                             deps => $unified_info{depends}->{$src},
                             incs => [ @{$unified_info{includes}->{$bin}},
                                       @{$unified_info{includes}->{$obj}} ],
                             incs => $unified_info{includes}->{$obj},
                             %opts);
         foreach (@{$unified_info{depends}->{$src}}) {
             dogenerate($_, $obj, $bin, %opts);
@@ -74,8 +73,7 @@
         $OUT .= src2obj(obj => $obj_no_o,
                         srcs => $unified_info{sources}->{$obj},
                         deps => $unified_info{depends}->{$obj},
                         incs => [ @{$unified_info{includes}->{$bin}},
                                   @{$unified_info{includes}->{$obj}} ],
                         incs => $unified_info{includes}->{$obj},
                         %opts);
         foreach ((@{$unified_info{sources}->{$obj}},
                   @{$unified_info{depends}->{$obj}})) {
+22 −0
Original line number Diff line number Diff line
@@ -1880,6 +1880,28 @@ EOF
        }
    }

    # Massage the result

    # Trickle down includes placed on libraries, engines and programs to
    # their sources (i.e. object files)
    foreach my $dest (keys %{$unified_info{engines}},
                      keys %{$unified_info{libraries}},
                      keys %{$unified_info{programs}}) {
        foreach my $k (("source", "build")) {
            next unless defined($unified_info{includes}->{$dest}->{$k});
            my @incs = reverse @{$unified_info{includes}->{$dest}->{$k}};
            foreach my $obj (grep /\.o$/,
                             (keys %{$unified_info{sources}->{$dest}},
                              keys %{$unified_info{shared_sources}->{$dest}})) {
                foreach my $inc (@incs) {
                    unshift @{$unified_info{includes}->{$obj}->{$k}}, $inc
                        unless grep { $_ eq $inc } @{$unified_info{includes}->{$obj}->{$k}};
                }
            }
        }
        delete $unified_info{includes}->{$dest};
    }

    ### Make unified_info a bit more efficient
    # One level structures
    foreach (("programs", "libraries", "engines", "scripts", "extra", "overrides")) {