From 8054342b78d3ffbd3625689a9692ff1e5f709913 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Tue, 23 Jan 2018 19:13:48 +0100 Subject: [PATCH] Configure: ensure that a DEPEND generates the correct inclusion directory We incorrectly assumed that explicit dependencies meant that the source directory would be added for inclusion. However, if the dependent file is generated, it's stored in the build directory, and that should be used for inclusion rather than the source directory. Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/5153) (cherry picked from commit e431bcfabd72163b0ee89674e2face26a349ba9c) --- Configure | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/Configure b/Configure index 4fdecdc284..933b9e6aff 100755 --- a/Configure +++ b/Configure @@ -1847,13 +1847,6 @@ EOF $d = $unified_info{rename}->{$d}; } $unified_info{depends}->{$ddest}->{$d} = 1; - # If we depend on a header file or a perl module, let's make - # sure it can get included - if ($dest ne "" && $d =~ /\.(h|pm)$/) { - my $i = dirname($d); - push @{$unified_info{includes}->{$ddest}->{source}}, $i - unless grep { $_ eq $i } @{$unified_info{includes}->{$ddest}->{source}}; - } } } @@ -1882,6 +1875,25 @@ EOF # Massage the result + # If we depend on a header file or a perl module, add an inclusion of + # its directory to allow smoothe inclusion + foreach my $dest (keys %{$unified_info{depends}}) { + next if $dest eq ""; + foreach my $d (keys %{$unified_info{depends}->{$dest}}) { + next unless $d =~ /\.(h|pm)$/; + if ($d eq "configdata.pm" + || defined($unified_info{generate}->{$d})) { + my $i = cleandir($blddir, dirname($d)); + push @{$unified_info{includes}->{$dest}->{build}}, $i + unless grep { $_ eq $i } @{$unified_info{includes}->{$dest}->{build}}; + } else { + my $i = cleandir($srcdir, dirname($d)); + push @{$unified_info{includes}->{$dest}->{source}}, $i + unless grep { $_ eq $i } @{$unified_info{includes}->{$dest}->{source}}; + } + } + } + # Trickle down includes placed on libraries, engines and programs to # their sources (i.e. object files) foreach my $dest (keys %{$unified_info{engines}}, @@ -1917,8 +1929,9 @@ EOF # Includes foreach my $dest (sort keys %{$unified_info{includes}}) { if (defined($unified_info{includes}->{$dest}->{build})) { - my @source_includes = - ( @{$unified_info{includes}->{$dest}->{source}} ); + my @source_includes = (); + @source_includes = ( @{$unified_info{includes}->{$dest}->{source}} ) + if defined($unified_info{includes}->{$dest}->{source}); $unified_info{includes}->{$dest} = [ @{$unified_info{includes}->{$dest}->{build}} ]; foreach my $inc (@source_includes) { -- 2.25.1