sbsv1/abld/genutil/genutl.pm
changeset 599 fa7a3cc6effd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv1/abld/genutil/genutl.pm	Fri Jun 25 17:29:25 2010 +0800
@@ -0,0 +1,107 @@
+# 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 "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:
+# Contains utility subroutines for MAKMAKE and associated scripts
+# 
+#
+
+package Genutl;
+
+require Exporter;
+@ISA=qw(Exporter);
+
+@EXPORT=qw(
+	Genutl_AnyToHex
+	Genutl_VersionToUserString
+	Genutl_VersionToHexString
+	Genutl_VersionToFileAugment
+	Genutl_StringToVersion
+	Genutl_ParseVersionedName
+	Genutl_NormaliseVersionedName
+);
+
+
+sub Genutl_AnyToHex ($) {
+# changes decimal and hexadecimal numbers to the required hexadecimal format
+	my $Num=$_[0];
+	$Num=lc $Num;	# lower casing the x specifying hexadecimal essential
+	if ($Num=~/^(\d{1,10}|0x[\dabcdef]{1,8})$/o) { # this isn't perfect
+		$Num=oct $Num if $Num=~/^0x/o;
+		return sprintf "0x%.8lx", $Num;
+	}
+	return undef;
+}
+
+sub Genutl_VersionToUserString(%) {
+	my (%ver) = @_;
+	return sprintf("%d\.%d", $ver{major}, $ver{minor});
+}
+
+sub Genutl_VersionToHexString(%) {
+	my (%ver) = @_;
+	return sprintf("%04x%04x", $ver{major}, $ver{minor});
+}
+
+sub Genutl_VersionToFileAugment(%) {
+	my (%ver) = @_;
+	return sprintf("{%04x%04x}", $ver{major}, $ver{minor});
+}
+
+sub Genutl_StringToVersion($) {
+	my ($s) = @_;
+	if ($s =~ /^(\d+)\.(\d+)$/) {
+		my %ver;
+		$ver{major} = $1;
+		$ver{minor} = $2;
+		if ($ver{major}<32768 and $ver{minor}<32768) {
+			return %ver;
+		}
+	}
+	return undef;
+}
+
+sub Genutl_ParseVersionedName($) {
+	my ($nref) = @_;
+	return 1 unless ($$nref =~ /\{|\}/);
+	my $a;
+	my $b;
+	if ($$nref =~ /(.*)\{((\d|a|b|c|d|e|f){8})\}(.*?)/i) {
+		$a = $1;
+		$b = $3;
+	} elsif ($$nref =~ /(.*)\{\s*(\d+)\s*\.\s*(\d+)\s*\}(.*?)$/i) {
+		$a = $1;
+		$b = $4;
+		my $major = $2;
+		my $minor = $3;
+		return 0 if ($major>=32768 or $minor>=32768);
+		$$nref = $a.sprintf("{%04x%04x}",$major,$minor).$b;
+	} else {
+		return 0;
+	}
+	if ($a=~/\{|\}/ or $b=~/\{|\}/) {
+		return 0;
+	}
+	return 1;
+}
+
+sub Genutl_NormaliseVersionedName($) {
+	my ($name) = @_;
+	if ($name =~ /(.*)\{\s*(\d+)\s*\.\s*(\d+)\s*\}(.*?)$/i) {
+		my $a = $1;
+		my $b = $4;
+		my $major = $2;
+		my $minor = $3;
+		return $a.sprintf("{%04x%04x}",$major,$minor).$b if ($major<32768 and $minor<32768);
+	}
+	return $name;
+}