git://git.jankratochvil.net
/
massrebuild.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dtneededsize: +-r
[massrebuild.git]
/
dtneededsize
diff --git
a/dtneededsize
b/dtneededsize
index
da07789
..
6603bde
100755
(executable)
--- a/
dtneededsize
+++ b/
dtneededsize
@@
-4,6
+4,8
@@
use warnings;
use File::Basename qw(&dirname);
use File::Find;
use Data::Dumper;
use File::Basename qw(&dirname);
use File::Find;
use Data::Dumper;
+use Statistics::Basic::StdDev;
+use List::Util;
$|=1;
sub readfile {
$|=1;
sub readfile {
@@
-16,6
+18,14
@@
sub readfile {
return $r;
}
return $r;
}
+my %R;
+if (($ARGV[0]||"") eq "-r") {
+ shift;
+ my $r=readfile shift;
+ $R{$1}=1 while $r=~s/^(.*?)\n//;
+ die $r if $r;
+}
+
my %D;
# ==> build/Cadence-1.0.0-0.12.20200504git5787908.fc33.src.rpm.dtneeded <==
# /usr/lib/debug/.dwz/Cadence isdwzcommon 479079 NA
my %D;
# ==> build/Cadence-1.0.0-0.12.20200504git5787908.fc33.src.rpm.dtneeded <==
# /usr/lib/debug/.dwz/Cadence isdwzcommon 479079 NA
@@
-24,6
+34,7
@@
my %D;
# ==> build/CVector-1.0.3.1-21.fc33.src.rpm.dtneeded <==
# /usr/lib64/libCVector-1.0.3.so.2.0.0 nodwzcommon 28088 28896
for my $dtneededfn (glob "build/*.dtneeded") {
# ==> build/CVector-1.0.3.1-21.fc33.src.rpm.dtneeded <==
# /usr/lib64/libCVector-1.0.3.so.2.0.0 nodwzcommon 28088 28896
for my $dtneededfn (glob "build/*.dtneeded") {
+ next if %R && !$R{($dtneededfn=~m{^build/(.*?)-[^-]*-[^-]*$})[0]."-debuginfo"};
local *F;
open F,$dtneededfn or die "$dtneededfn: $1";
local $_;
local *F;
open F,$dtneededfn or die "$dtneededfn: $1";
local $_;
@@
-56,17
+67,25
@@
find {
if (-l $binfn) {
my $target=readlink $binfn or die $binfn;
$binfn=~s{^[.]}{};
if (-l $binfn) {
my $target=readlink $binfn or die $binfn;
$binfn=~s{^[.]}{};
- my $ref=\$SYMLINK{$binfn};
- die if $$ref;
+ my $final;
if ($target=~m{^/}) {
if ($target=~m{^/}) {
- $
$ref
=$target;
+ $
final
=$target;
#warn "$binfn,target=rel=$$ref\n";
} else {
my $base=dirname(".$binfn");
my $abs=File::Spec->rel2abs($target,$base);
#warn "$binfn,target=rel=$$ref\n";
} else {
my $base=dirname(".$binfn");
my $abs=File::Spec->rel2abs($target,$base);
- $
$ref
="/".File::Spec->abs2rel($abs);
+ $
final
="/".File::Spec->abs2rel($abs);
#warn "$binfn,base=$base,target=$target,abs=$abs,rel=$$ref\n";
}
#warn "$binfn,base=$base,target=$target,abs=$abs,rel=$$ref\n";
}
+ 1 while $final=~s{/[^/]+/[.][.]/}{/};
+ 1 while $final=~s{/[^/]+/[.][.]$}{};
+ if ($final=~m{/[.][.]}) {
+ warn "$binfn,target=$target,final=$final\n";
+ return;
+ }
+ my $ref=\$SYMLINK{$binfn};
+ die if $$ref;
+ $$ref=$final;
return;
}
return if !-f $binfn;
return;
}
return if !-f $binfn;
@@
-104,7
+123,10
@@
find {
#}
my $dwzsizeall=0;
#}
my $dwzsizeall=0;
+my $dwzsizeduplall=0;
my $dtsizeall=0;
my $dtsizeall=0;
+my @ratioall;
+my @ratioduplall;
my $computed=0;
BINFN: for my $binfn (@DEBUG) {
# warn "$binfn...\n".Dumper([sort @{$F{$binfn}{"needed"}}]);
my $computed=0;
BINFN: for my $binfn (@DEBUG) {
# warn "$binfn...\n".Dumper([sort @{$F{$binfn}{"needed"}}]);
@@
-143,6
+165,7
@@
BINFN: for my $binfn (@DEBUG) {
}
#warn Dumper $binfn,\%l;
my $dwzsizetot=0;
}
#warn Dumper $binfn,\%l;
my $dwzsizetot=0;
+ my $dwzsizedupltot=0;
my $dtsizetot=0;
my %dwzcommons;
for my $l (keys(%l)) {
my $dtsizetot=0;
my %dwzcommons;
for my $l (keys(%l)) {
@@
-161,23
+184,30
@@
BINFN: for my $binfn (@DEBUG) {
my $dwzsize=$ref->[1];
die if !defined $dwzsize;
$dwzsizetot+=$dwzsize;
my $dwzsize=$ref->[1];
die if !defined $dwzsize;
$dwzsizetot+=$dwzsize;
+ $dwzsizedupltot+=$dwzsize;
$computed++;
my $dwzcommon=$ref->[0];
next if $dwzcommon eq "nodwzcommon";
die if $dwzcommon eq "isdwzcommon";
$computed++;
my $dwzcommon=$ref->[0];
next if $dwzcommon eq "nodwzcommon";
die if $dwzcommon eq "isdwzcommon";
-
next if
$dwzcommons{$dwzcommon}++;
+
my $duplicate=
$dwzcommons{$dwzcommon}++;
my $dwzcommonref=$D{$dwzcommon};
die if !$dwzcommonref;
die if $dwzcommonref->[0] ne "isdwzcommon";
die if $dwzcommonref->[2] ne "NA";
my $dwzcommonsize=$dwzcommonref->[1];
my $dwzcommonref=$D{$dwzcommon};
die if !$dwzcommonref;
die if $dwzcommonref->[0] ne "isdwzcommon";
die if $dwzcommonref->[2] ne "NA";
my $dwzcommonsize=$dwzcommonref->[1];
- $dwzsizetot+=$dwzcommonsize;
+ $dwzsizetot+=$dwzcommonsize if !$duplicate;
+ $dwzsizedupltot+=$dwzcommonsize;
}
print "$binfn: dwzsizetot=$dwzsizetot dtsizetot=$dtsizetot\n";
warn "$binfn: ".Dumper(\%dwzcommons);
$dwzsizeall+=$dwzsizetot;
}
print "$binfn: dwzsizetot=$dwzsizetot dtsizetot=$dtsizetot\n";
warn "$binfn: ".Dumper(\%dwzcommons);
$dwzsizeall+=$dwzsizetot;
+ $dwzsizeduplall+=$dwzsizedupltot;
$dtsizeall+=$dtsizetot;
$dtsizeall+=$dtsizetot;
+ push @ratioall ,$dwzsizetot /$dtsizetot;
+ push @ratioduplall,$dwzsizedupltot/$dtsizetot;
# warn "$binfn done\n".Dumper([sort keys(%l)]);
}
# warn "$binfn done\n".Dumper([sort keys(%l)]);
}
-print "dwzsizeall=$dwzsizeall dtsizeall=$dtsizeall\n";
-print "computed=$computed of DEBUG=".(0+@DEBUG)."\n";
+print "dwzsizeall =$dwzsizeall" ." dtsizeall=$dtsizeall =".$dwzsizeall /$dtsizeall." avg=".List::Util::sum(@ratioall )/@ratioall ." stddev=".Statistics::Basic::stddev(\@ratioall )."\n";
+print "dwzsizeduplall=$dwzsizeduplall"." dtsizeall=$dtsizeall =".$dwzsizeduplall/$dtsizeall." avg=".List::Util::sum(@ratioduplall)/@ratioduplall." stddev=".Statistics::Basic::stddev(\@ratioduplall)."\n";
+print "computed=$computed of DEBUG=".(0+@DEBUG)." =".$computed/@DEBUG."\n";
+#print Dumper \@ratioall;