dtneededsize: SYMLINK fixes.
[massrebuild.git] / dtneededsize
index da07789..0b15cc5 100755 (executable)
@@ -56,17 +56,25 @@ find {
     if (-l $binfn) {
       my $target=readlink $binfn or die $binfn;
       $binfn=~s{^[.]}{};
-      my $ref=\$SYMLINK{$binfn};
-      die if $$ref;
+      my $final;
       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);
-       $$ref="/".File::Spec->abs2rel($abs);
+       $final="/".File::Spec->abs2rel($abs);
 #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;
@@ -179,5 +187,5 @@ warn "$binfn: ".Dumper(\%dwzcommons);
   $dtsizeall+=$dtsizetot;
 #  warn "$binfn done\n".Dumper([sort keys(%l)]);
 }
-print "dwzsizeall=$dwzsizeall dtsizeall=$dtsizeall\n";
+print "dwzsizeall=$dwzsizeall dtsizeall=$dtsizeall =".$dwzsizeall/$dtsizeall."\n";
 print "computed=$computed of DEBUG=".(0+@DEBUG)."\n";