Commit 46f4d2be authored by Richard Levitte's avatar Richard Levitte
Browse files

Fix make depend for things being built in subdirectories



Some makedepend mechanisms remove all directory information in the
target, so a dependency can looks like this:

ssl3_record.o: record/ssl3_record.c

However, that doesn't quite suit us, our Makefile has us build
record/ssl3_record.o rather than ssl3_record.o.

To clear this up, a change to util/clean-depend.pl takes care of this
case by looking up the original file in the dependencies and restoring
the directory information from it.

Reviewed-by: default avatarBen Laurie <ben@openssl.org>
parent 5f0580cc
Loading
Loading
Loading
Loading
+23 −5
Original line number Diff line number Diff line
@@ -11,22 +11,40 @@ while(<STDIN>) {

my %files;

# Fetch all the dependency output first
my $thisfile="";
while(<STDIN>) {
    my ($dummy, $file,$deps)=/^((.*):)? (.*)$/;
    my $origfile="";
    $thisfile=$file if defined $file;
    next if !defined $deps;
    $origfile=$thisfile;
    $origfile=~s/\.o$/.c/;
    my @deps=split ' ',$deps;
    @deps=grep(!/^\//,@deps);
    @deps=grep(!/^\\$/,@deps);
    @deps=grep(!/^$origfile$/,@deps);
    push @{$files{$thisfile}},@deps;
}

my $file;

# Time to clean out possible system directories and normalise quirks
# from different makedepend methods
foreach $file (sort keys %files) {
    # This gets around a quirk with gcc, which removes all directory
    # information from the original file
    my $tmpfile=$file;
    $tmpfile=~s/\.o$/.c/;
    (my $origfile)=grep(/(^|\/)${tmpfile}$/,@{$files{$file}});
    my $newfile=$origfile;
    $newfile=~s/\.c$/.o/;
    if ($newfile ne $file) {
        $files{$newfile} = $files{$file};
        delete $files{$file};
        $file = $newfile;
    }

    @{$files{$file}} =
        grep(!/^\//,
             grep(!/^$origfile$/, @{$files{$file}}));
}

foreach $file (sort keys %files) {
    my $len=0;
    my $dep;