From 46f4d2bef6c11e024c29b78a835b433c472ed3cf Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Sun, 4 Oct 2015 21:12:03 +0200 Subject: [PATCH] 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: Ben Laurie --- util/clean-depend.pl | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/util/clean-depend.pl b/util/clean-depend.pl index 04d86b6d09..30197b798d 100755 --- a/util/clean-depend.pl +++ b/util/clean-depend.pl @@ -11,22 +11,40 @@ while() { my %files; +# Fetch all the dependency output first my $thisfile=""; while() { 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; -- 2.25.1