sbsv1/abld/e32util/prepdef.pl
changeset 599 fa7a3cc6effd
child 606 30b30f9da0b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv1/abld/e32util/prepdef.pl	Fri Jun 25 17:29:25 2010 +0800
@@ -0,0 +1,151 @@
+#!/usr/bin/perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "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:
+# e32toolp/e32util/prepdef.pl
+# 
+#
+
+
+use FindBin;		# for FindBin::Bin
+use Getopt::Long;
+
+my $PerlLibPath;    # fully qualified pathname of the directory containing our Perl modules
+
+BEGIN {
+# check user has a version of perl that will cope
+	require 5.005_03;
+# establish the path to the Perl libraries: currently the same directory as this script
+	$PerlLibPath = $FindBin::Bin;	# X:/epoc32/tools
+	if ($^O eq "MSWin32")
+	{
+		$PerlLibPath =~ s/\//\\/g;	# X:\epoc32\tools
+		$PerlLibPath .= "\\";
+	}
+}
+
+use lib $PerlLibPath;
+use Defutl;
+
+# Version
+my $MajorVersion = 1;
+my $MinorVersion = 1;
+my $PatchVersion = 0;
+
+# THE MAIN PROGRAM SECTION
+##########################
+
+{
+	
+
+	# process the command-line
+	unless (@ARGV==2 ||  @ARGV==3 || @ARGV==4) {
+		&Usage;
+	}
+	my ($FRZFILE,$GENFILE,$DATASWITCH,$ABSENTSYM)=@ARGV;
+	
+	
+
+#	Read the Frozen .DEF file
+	my @FrzDataStruct;
+	my $FrzExportsOn=0;
+	eval { &Def_ReadFileL(\@FrzDataStruct, $FRZFILE, $FrzExportsOn); };
+	die $@ if $@;
+
+	eval { &WriteOutputFileL(\@FrzDataStruct, $GENFILE, $DATASWITCH, $ABSENTSYM); };
+	die $@ if $@;
+
+	exit;
+}
+
+#######################################################################
+# SUBROUTINES
+#######################################################################
+
+sub Usage () {
+
+	print(
+		"\n",
+		"PREPDEF - Prepare frozen DEF file for library generation V$MajorVersion.$MinorVersion.$PatchVersion\n",
+		"\n",
+		"PREPDEF [frozen .DEF file] [processed .DEF file] [nodatasizes] [entrypoint_name]\n",
+		"\n",
+		"\n",
+		"\n"
+	);
+	exit 1;
+}
+
+
+
+sub WriteOutputFileL ($$$$) {
+	my ($FrzStructRef, $FILE, $DATASWITCH, $ABSENTSYM)=@_;
+
+	my @Text;
+
+	if ($ABSENTSYM) {
+		$ABSENTSYM = '='.$ABSENTSYM;
+	}
+
+#	Process the frozen .DEF file
+	my $FrzRef;
+	my $ExportsDeclared;
+
+#	get the lines of text from the frozen .DEF file
+	foreach $FrzRef (@$FrzStructRef) {
+		next if (!$FrzRef);
+		if (!defined($$FrzRef{Ordinal})) {
+			push @Text, $$FrzRef{Line};
+			$ExportsDeclared = 1 if ($$FrzRef{Line} =~ /^\s*EXPORTS\s*(\s+\S+.*)?$/io);
+			next;
+		}
+		my $Comment='';
+		if ($$FrzRef{Comment}) {
+			$Comment=" ; $$FrzRef{Comment}";
+		}
+#		Mention if it is a Data symbol along with its size.
+		my $data = "";
+		if(defined $$FrzRef{Data})
+			{			
+			if ($DATASWITCH eq "nodatasizes")
+				{
+				$data = " DATA";
+				}
+			else
+				{
+				$data = " DATA $$FrzRef{Size}";
+				}
+			}
+		my $r3unused = $$FrzRef{R3Unused} ? " R3UNUSED" : "";
+		my $ord = $$FrzRef{Ordinal};
+		if ($$FrzRef{Absent}) {
+			push @Text, "\t\"_._.absent_export_$ord\"$ABSENTSYM \@ $ord NONAME$data$r3unused$Comment\n";
+		} else {
+			my $export = $$FrzRef{ExportName};
+			if ($export ne $$FrzRef{Name})
+				{
+				$export .= "=$$FrzRef{Name}";
+				}
+			push @Text, "\t$export \@ $ord NONAME$data$r3unused$Comment\n";
+		}
+	}
+	unshift @Text, "EXPORTS\n" unless ($ExportsDeclared);
+
+#	add a terminating newline
+	push @Text, "\n";
+
+#	write the new frozen .DEF file
+	eval { &Def_WriteFileL(\@Text, $FILE); };
+	die $@ if $@;
+}
+