imgtools/buildrom/tools/Dep_Lister.pm
changeset 0 044383f39525
child 590 360bd6b35136
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/buildrom/tools/Dep_Lister.pm	Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,86 @@
+#
+# Copyright (c) 1997-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: 
+#
+
+# This package contains routines to find the static and dynamic dependencies of a binary.
+package Dep_Lister;
+
+use cdfparser;
+require Exporter;
+@ISA=qw(Exporter);
+@EXPORT=qw(
+	StaticDeps
+);
+
+use strict;
+
+# This subroutine evaluates the static dependencies of an E32 executable and returns the list of
+# binary names that this binary is dependent on (as found in its import table). If the input file
+# is not a valid E32 executable, this routine returns an 'undef'.
+sub StaticDeps()
+{
+	my ($file) = @_;
+	my @statdeps;
+
+	open PIPE, "elf2e32 --dump i --e32input=$file 2>&1 | ";
+	my $executable;
+	my $ver;
+	my $ext;
+	my $binary;
+	my $binaryInfoRef;
+	my $fileName;
+
+	if($file =~ /.*\\(\S+)/)
+	{
+		$fileName = $1;
+	}
+	while(<PIPE>)
+	{
+		if($_ =~ /(\d+) imports from (.*)\{(.*)\}\[?(.*)\]?\.(.*)/i)
+		{
+			my $skipLines = $1;
+			$executable = $2;
+			$ver = $3;
+			$ext = $5;
+
+			$binary = $executable . "." . $ext;
+			
+			push @statdeps,$binary;
+
+#			Each imported symbol's ordinal number is printed in these lines...
+#			Skip them
+			if($skipLines > 0)
+			{
+				while(<PIPE>)
+				{
+					$skipLines--;
+					if($skipLines == 0 )
+					{
+						last;
+					}
+				}	
+			}
+		}
+		elsif($_ =~ /elf2e32 : Error: .* is not a valid E32Image file/)
+		{
+#			not an e32 image...mark the file as a data file
+			return undef;
+		}
+	}
+	close PIPE;
+	return (@statdeps);
+}
+
+1;