imgtools/imaker/buildrom_plugins/stubsischeck.pm
changeset 620 ad8ffc8e1982
parent 596 9f25be3da657
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imaker/buildrom_plugins/stubsischeck.pm	Mon Jul 26 11:04:29 2010 +0800
@@ -0,0 +1,101 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Check included sis/sisx file validity.
+#
+
+
+
+package stubsischeck;
+
+use strict;
+use warnings;
+use File::Basename;
+use plugincommon;
+
+BEGIN
+{
+    use Exporter();
+    our($VERSION, @ISA, @EXPORT);
+    $VERSION = 1.00;
+    @ISA     = qw(Exporter);
+    @EXPORT  = qw(&stubsischeck_info &stubsischeck_init &stubsischeck_process);
+}
+
+my $conf;
+
+sub stubsischeck_info()
+{
+    return({
+        name       => "stubsischeck",
+        invocation => "InvocationPoint3",  # tmp9.oby
+        initialize => "stubsischeck::stubsischeck_init",
+        single     => "stubsischeck::stubsischeck_process"});
+}
+
+sub stubsischeck_init($)
+{
+    plugin_init(&stubsischeck_info, $conf = shift(), 0);
+}
+
+sub stubsischeck_process($)
+{
+    plugin_start(&stubsischeck_info, $conf);
+    my $obydata = shift();
+    my %uids = ();
+
+    dprint(3, "Finding and checking stub sis files...");
+
+    foreach (@{$obydata}) {
+        next if (parse_obyline($_) != 2)   || ($gImgid != $gRomidCmp)  ||
+            ($gKeyword !~ FILESPECKEYWORD) || ($gSrcCmp !~ /\.sisx?$/) || !-e($gSource);
+
+        my ($basename, $uiddata) = (File::Basename::basename($gSrcCmp), "");
+        dprint(2, "Checking `$gSource'", 1);
+
+        # Find out whether or not this is stub sis file
+        open(FILE, $gSource) or
+            dprint(2, ""), dprint(-3, "$gPluginname can't open `$gSource'"), next;
+        binmode(FILE);
+        sysread(FILE, $uiddata, 0x1C);
+        close(FILE);
+
+        my $uid = unpack("V", substr($uiddata, 0x00, 4));
+        if ($uid == 0x0000000D) {
+            my $puid = sprintf("0x%08X", unpack("V", substr($uiddata, 0x18, 4)));
+            dprint(2, ", pUID: $puid");
+
+            # Quick-and-dirty way to check duplicate UIDs
+            if (exists($uids{$puid}) && ($basename ne $uids{$puid})) {
+                dprint(3, "Error: `$gSource': Duplicate pUID $puid, see `$uids{$puid}'");
+            } else {
+                $uids{$puid} = $basename;
+            }
+        } elsif ($uid == 0x10201A7A) {
+            dprint(2, ": Normal (non-stub) sis file");
+        } else {
+            dprint(2, "");
+            if (unpack("V", substr($uiddata, 0x08, 4)) == 0x10000419) { # UID3
+                dprint(-3, "`$gSource': Legacy (pre Symbian 9.x) sis file");
+            } else {
+                dprint(3, "Error: `$gSource': Sis file with unknown UID ($uid)");
+            }
+        }
+    }
+    plugin_end();
+}
+
+1;
+
+__END__ # OF STUBSISCHECK.PM