williamr/find_public_apis.pl
changeset 8 b40f95834f85
parent 4 60053dab7e2a
equal deleted inserted replaced
7:2184cc44590a 8:b40f95834f85
    82     # contains at least one @publishedAll element - must be "Public by tag"
    82     # contains at least one @publishedAll element - must be "Public by tag"
    83     return "Public by tag";
    83     return "Public by tag";
    84     }
    84     }
    85   }
    85   }
    86 
    86 
    87 my %location_by_filename;
       
    88 my %precedent;
       
    89 
       
    90 # Read list of Symbian^1 files
       
    91 my $line;
       
    92 while ($line = <>)
       
    93   {
       
    94   chomp $line;
       
    95   $line =~ s/\\/\//g; # Unix separators please
       
    96   if ($line =~ /(epoc32\/include\/(.*\/)?([^\/]+))\s*$/)
       
    97     {
       
    98     my $fullname = $1;
       
    99     my $filename = $3;
       
   100 
       
   101     $precedent{lc $fullname} = $fullname;
       
   102     }
       
   103   }
       
   104 
       
   105 # Process epoc32\include tree
    87 # Process epoc32\include tree
   106 
    88 
   107 my %rationale;
    89 my %rationale;
   108 my %origin;
       
   109 my %ignoring_case;
    90 my %ignoring_case;
   110 
    91 
   111 sub scan_directory($$)
    92 sub scan_directory($$)
   112   {
    93   {
   113   my ($path, $name) = @_;
    94   my ($path, $name) = @_;
   125       {
   106       {
   126       scan_directory($newpath, $newname);
   107       scan_directory($newpath, $newname);
   127       next;
   108       next;
   128       }
   109       }
   129     
   110     
   130     $origin{$newname} = "Symbian^2";
       
   131     $ignoring_case{lc $newname} = $newname;
   111     $ignoring_case{lc $newname} = $newname;
   132     
   112     
   133     my @includefiles = ();
   113     my @includefiles = ();
   134     my $reason = analyse_api($newpath,$newname, \@includefiles);
   114     my $reason = analyse_api($newpath,$newname, \@includefiles);
   135 
   115 
   136     if (defined $precedent{lc $newname})
       
   137       {
       
   138       $origin{$newname} = "Symbian^1";  # present in Symbian^1 list of Public apis
       
   139       if ($reason !~ /Public/)
       
   140         {
       
   141         $reason = "Public by precedent";    # was made public in Symbian^1
       
   142         }
       
   143       }
       
   144     $rationale{$newname} = $reason;
   116     $rationale{$newname} = $reason;
   145  
   117  
   146     if ($reason =~ /Public/)
   118     if ($reason =~ /Public/)
   147       {
   119       {
   148       push @public_included, @includefiles;   # #included files are therefore also public
   120       push @public_included, @includefiles;   # #included files are therefore also public
   160   my $newname = "epoc32/include/$file";
   132   my $newname = "epoc32/include/$file";
   161   $newname = $ignoring_case{lc $newname};
   133   $newname = $ignoring_case{lc $newname};
   162   $rationale{$newname} = "Public by Inclusion";
   134   $rationale{$newname} = "Public by Inclusion";
   163   }
   135   }
   164 
   136 
   165 # Look for Symbian^1 files which have moved or simply been deleted
   137 print "Filename\tClassification\tReason\n";
   166 
       
   167 foreach my $file (values %precedent)
       
   168   {
       
   169   if (!defined $origin{$file})
       
   170     {
       
   171     $rationale{$file} = "Deleted";
       
   172     $origin{$file} = "Symbian^1";
       
   173     }
       
   174   }
       
   175 
       
   176 print "Filename\tClassification\tReason\tOrigin\n";
       
   177 foreach my $file (sort keys %rationale)
   138 foreach my $file (sort keys %rationale)
   178   {
   139   {
   179   my $reason = $rationale{$file};
   140   my $reason = $rationale{$file};
   180   my $classification = "Platform";
   141   my $classification = "Platform";
   181   $classification = "Public" if ($reason =~ /Public/);
   142   $classification = "Public" if ($reason =~ /Public/);
   182   print "$file\t$classification\t$reason\t$origin{$file}\n";
   143   print "$file\t$classification\t$reason\n";
   183   }
   144   }