summaryrefslogtreecommitdiffstats
path: root/offapi/util/checknewapi.pl
diff options
context:
space:
mode:
Diffstat (limited to 'offapi/util/checknewapi.pl')
-rw-r--r--offapi/util/checknewapi.pl213
1 files changed, 213 insertions, 0 deletions
diff --git a/offapi/util/checknewapi.pl b/offapi/util/checknewapi.pl
new file mode 100644
index 000000000..2e70e64f7
--- /dev/null
+++ b/offapi/util/checknewapi.pl
@@ -0,0 +1,213 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+#
+# checknewapi - a perl script to check for new API's
+# using two outputs from regview and dump the intersection
+# of new types
+#
+
+if($#ARGV != 3)
+{
+ die "usage: checknewapi <new_type_library> <reference_type_library> <buildinfodescr> <fullpath_regview>\n";
+}
+
+-e "$ARGV[0]" || die "ERROR: type library \"$ARGV[0]\" does not exist\n";
+-e "$ARGV[1]" || die "ERROR: reference type library \"$ARGV[1]\" does not exist\n";
+-e "$ARGV[3]" || die "ERROR: invalid path to the regview tool \"$ARGV[3]\", please specify the full qualified path\n";
+
+# debug flag
+$DEBUG = 0;
+
+$main::buildinfo = "$ARGV[2]";
+$main::regview = "$ARGV[3]";
+%{$main::reftypes} = ();
+%{$main::currenttypes} = ();
+%{$main::removedtypes} = ();
+
+open ( FILEIN, "$main::regview \"$ARGV[0]\" |" ) || die "could not use content of current typelibrary \"$ARGV[0]\", regview doesn't work\n";
+
+if ($DEBUG == 1)
+{
+ open( CURRENT, ">current_types.txt" ) || die "\nERROR: could not open current_types.txt for writing";
+}
+
+$first = 1;
+$linebefore = "";
+$published = 0;
+$typeclass = "";
+while (<FILEIN>)
+{
+ if ($first == 0)
+ {
+ if ( $linebefore =~ m#type class: published (.+)# )
+ {
+ $published = 1;
+ $typeclass = $1;
+ } elsif ( $linebefore =~ m#type class: (.+)# )
+ {
+ $published = 0;
+ $typeclass = $1;
+ } else
+ {
+ $published = 0;
+ $typeclass = "";
+ }
+ } else
+ {
+ $first = 0;
+ }
+
+ if ( (!$typeclass eq "") && ($_ =~ m# *type name: \"([^\[.]+)\"#) )
+ {
+ if ($DEBUG == 1)
+ {
+ print CURRENT "$1\n";
+ }
+ if ( ! exists $main::currenttypes->{$1} )
+ {
+ $main::currenttypes->{$1} = { PUBLISHED => $published,
+ TYPECLASS => $typeclass,
+ COUNT => 1 };
+# print "### $main::currenttypes->{$1}->{PUBLISHED} $main::currenttypes->{$1}->{TYPECLASS} $main::currenttypes->{$1}->{COUNT}\n";
+ }
+ }
+ $linebefore = $_;
+}
+close( FILEIN );
+close( CURRENT );
+
+open ( FILEIN, "$main::regview \"$ARGV[1]\" |" ) || die "could not use content of reference type library \"$ARGV[1]\", regview doesn't work\n";
+
+if ($DEBUG == 1)
+{
+ open( REFERENCE, ">reference_types.txt" ) || die "\nERROR: could not open reference_types.txt for writing";
+}
+
+# reset variables
+$first = 1;
+$linebefore = "";
+$published = 0;
+$typeclass = "";
+while (<FILEIN>)
+{
+ if ($first == 0)
+ {
+ if ( $linebefore =~ m#type class: published (.+)# )
+ {
+ $published = 1;
+ $typeclass = $1;
+ } elsif ( $linebefore =~ m#type class: (.+)# )
+ {
+ $published = 0;
+ $typeclass = $1;
+ } else
+ {
+ $published = 0;
+ $typeclass = "";
+ }
+ } else
+ {
+ $first = 0;
+ }
+
+ if ( (!$typeclass eq "") && ($_ =~ m# *type name: \"([^\[.]+)\"#) )
+ {
+ if ($DEBUG == 1)
+ {
+ print REFERENCE "$1\n";
+ }
+ if ( ! exists $main::reftypes->{$1} )
+ {
+ $main::reftypes->{$1}++;
+
+ if ( exists $main::currenttypes->{$1} )
+ {
+ $main::currenttypes->{$1}->{COUNT}++;
+# print "###### $main::currenttypes->{$1}->{PUBLISHED} $main::currenttypes->{$1}->{TYPECLASS} $main::currenttypes->{$1}->{COUNT}\n";
+ } else
+ {
+ if ($published == 0)
+ {
+ $main::removedtypes->{$1} = { PUBLISHED => $published,
+ TYPECLASS => $typeclass };
+ } else
+ {
+ print "ERROR: type $1 is only in reference type library, this can't be happen\n";
+ }
+ }
+ }
+ }
+ $linebefore = $_;
+}
+close( FILEIN );
+close( REFERENCE );
+
+
+@typekeys = keys %{$main::currenttypes};
+$allunotypes = $#typekeys+1;
+$newunotypes = 0;
+$newpublished = 0;
+$draftscount = 0;
+$draftspublished = 0;
+foreach $i ( sort @typekeys )
+{
+ if ( $main::currenttypes->{$i}->{COUNT} == 1 &&
+ !("$main::currenttypes->{$i}->{TYPECLASS}" eq "module"))
+ {
+ $newunotypes++;
+ my $t = $i;
+ $t =~ s#/#\.#go;
+ if ($main::currenttypes->{$i}->{PUBLISHED} == 1)
+ {
+ print "published ";
+ $newpublished++;
+ }
+ if ( $t =~ m#drafts\.com.+#)
+ {
+ $draftscount++;
+ if ($main::currenttypes->{$i}->{PUBLISHED} == 1)
+ {
+ $draftspublished++;
+ }
+ }
+ print "$main::currenttypes->{$i}->{TYPECLASS} = $t\n";
+ }
+}
+
+# count removed not yet published types
+$removednotpublished = 0;
+
+@removedtypekeys = keys %{$main::removedtypes};
+foreach $i ( sort @removedtypekeys )
+{
+ $removednotpublished++;
+ my $t = $i;
+ $t =~ s#/#\.#go;
+ print "removed not yet published $main::currenttypes->{$i}->{TYPECLASS} = $t\n";
+}
+
+print "\n=======================================================\n\n";
+print "Summary [last check for $main::buildinfo]:\n\n";
+print "Number of UNO types = $allunotypes\n";
+print "Number of new UNO types = $newunotypes\n";
+print "New and published types = $newpublished\n";
+print "New and draft types = $draftscount\n";
+print "New, draft and published = $draftspublished\n";
+print "Removed and not published = $removednotpublished\n";
+
+exit 0;