tracesrv/tracecompiler/internal/scripts/convert_traces.pl
author hgs
Tue, 26 Oct 2010 16:20:32 +0300
changeset 62 1c2bb2fc7c87
permissions -rw-r--r--
201043
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62
hgs
parents:
diff changeset
     1
#
hgs
parents:
diff changeset
     2
# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
# All rights reserved.
hgs
parents:
diff changeset
     4
# This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
# which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
#
hgs
parents:
diff changeset
     9
# Initial Contributors:
hgs
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
#
hgs
parents:
diff changeset
    12
# Contributors:
hgs
parents:
diff changeset
    13
#
hgs
parents:
diff changeset
    14
# Description: 
hgs
parents:
diff changeset
    15
#
hgs
parents:
diff changeset
    16
#!perl -w
hgs
parents:
diff changeset
    17
# 
hgs
parents:
diff changeset
    18
# 
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#*********************************************************************
hgs
parents:
diff changeset
    21
# convert_traces.pl
hgs
parents:
diff changeset
    22
# *********************************************************************
hgs
parents:
diff changeset
    23
#
hgs
parents:
diff changeset
    24
# VERSION     : 6      Draft         15-Feb-2010       Adrian Issott
hgs
parents:
diff changeset
    25
# REASON      : Added warnings about the tool being unsupported
hgs
parents:
diff changeset
    26
#
hgs
parents:
diff changeset
    27
# VERSION     : 5      Draft         21-Jan-2010       Adrian Issott
hgs
parents:
diff changeset
    28
# REASON      : Fixed issue with own macro support + added removal of 
hgs
parents:
diff changeset
    29
#               _L(...) around trace format strings
hgs
parents:
diff changeset
    30
#
hgs
parents:
diff changeset
    31
# VERSION     : 4      Draft         11-Nov-2009       Esa Karvanen
hgs
parents:
diff changeset
    32
# REASON      : Initial support for converting OST Function entry /
hgs
parents:
diff changeset
    33
#               exit traces to printfs.
hgs
parents:
diff changeset
    34
#
hgs
parents:
diff changeset
    35
# VERSION     : 3      Draft         20-Aug-2009       Esa Karvanen
hgs
parents:
diff changeset
    36
# REASON      : Added support to convert OST traces back to printf. 
hgs
parents:
diff changeset
    37
#               Doesn't work for Function entry / exit traces.
hgs
parents:
diff changeset
    38
#
hgs
parents:
diff changeset
    39
# VERSION     : 2      Draft         10-Apr-2008       Esa Karvanen
hgs
parents:
diff changeset
    40
# REASON      : Printf and own macro support
hgs
parents:
diff changeset
    41
#
hgs
parents:
diff changeset
    42
# VERSION     : 1      Draft         16-Oct-2007       Teemu Piiroinen
hgs
parents:
diff changeset
    43
# REASON      : Initial version
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
use strict;
hgs
parents:
diff changeset
    46
use env;
hgs
parents:
diff changeset
    47
use FindBin '$Bin';
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
warn "\n";
hgs
parents:
diff changeset
    50
warn "Warning: this script is not supported and the Dynamic Analysis Tools team\n";
hgs
parents:
diff changeset
    51
warn "does NOT promise to fix any bugs or add any functionality to it.\n";
hgs
parents:
diff changeset
    52
warn "\n";
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
# Should we print debug prints
hgs
parents:
diff changeset
    55
my $DEBUG = 0;
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
if (not defined $ARGV[0] or not -f $ARGV[0])
hgs
parents:
diff changeset
    58
{
hgs
parents:
diff changeset
    59
	print "Please give path to mmp file as parameter.";
hgs
parents:
diff changeset
    60
	
hgs
parents:
diff changeset
    61
	exit;
hgs
parents:
diff changeset
    62
}
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
# Get group names
hgs
parents:
diff changeset
    65
my %map_trace_to_group;
hgs
parents:
diff changeset
    66
my %map_trace_to_text;
hgs
parents:
diff changeset
    67
my %map_trace_to_parameters;
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
my $traces_folder;
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
# Get source files
hgs
parents:
diff changeset
    72
my @sources = getSourceFiles();
hgs
parents:
diff changeset
    73
my @trace_id_names;
hgs
parents:
diff changeset
    74
my $CASWTraceCount = 0;
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
my $printfMacro;
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
# Ask selection from user
hgs
parents:
diff changeset
    80
my $selection = get_operation();
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
# Check  if the selection is numeric
hgs
parents:
diff changeset
    83
if ($selection =~ /^-?\d/)
hgs
parents:
diff changeset
    84
{
hgs
parents:
diff changeset
    85
	# Symbian traces
hgs
parents:
diff changeset
    86
	if ($selection == 1)
hgs
parents:
diff changeset
    87
	{
hgs
parents:
diff changeset
    88
		$traces_folder = get_traces_folder();
hgs
parents:
diff changeset
    89
		convertSymbianTraces(@sources);
hgs
parents:
diff changeset
    90
	}
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
	# Kern::Printf
hgs
parents:
diff changeset
    93
	elsif ($selection == 2)
hgs
parents:
diff changeset
    94
	{
hgs
parents:
diff changeset
    95
		$printfMacro = "kern::printf";
hgs
parents:
diff changeset
    96
		convertPrintf($printfMacro, @sources);
hgs
parents:
diff changeset
    97
	}
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
	# RDebug::Printf
hgs
parents:
diff changeset
   100
	elsif ($selection == 3)
hgs
parents:
diff changeset
   101
	{
hgs
parents:
diff changeset
   102
		$printfMacro = "rdebug::printf";
hgs
parents:
diff changeset
   103
		convertPrintf($printfMacro, @sources);
hgs
parents:
diff changeset
   104
	}
hgs
parents:
diff changeset
   105
	
hgs
parents:
diff changeset
   106
	# User defined MACRO
hgs
parents:
diff changeset
   107
	elsif ($selection == 4)
hgs
parents:
diff changeset
   108
	{
hgs
parents:
diff changeset
   109
		$printfMacro = "rdebug::printf";
hgs
parents:
diff changeset
   110
		convertPrintf($printfMacro, @sources);
hgs
parents:
diff changeset
   111
	}
hgs
parents:
diff changeset
   112
	
hgs
parents:
diff changeset
   113
	# OST traces to Kern::Printf
hgs
parents:
diff changeset
   114
	elsif ($selection == 5)
hgs
parents:
diff changeset
   115
	{
hgs
parents:
diff changeset
   116
		$printfMacro = "Kern::Printf";
hgs
parents:
diff changeset
   117
		convertOstToPrintf($printfMacro, @sources);
hgs
parents:
diff changeset
   118
	}	
hgs
parents:
diff changeset
   119
	
hgs
parents:
diff changeset
   120
	# OST traces to RDebug::Printf
hgs
parents:
diff changeset
   121
	elsif ($selection == 6)
hgs
parents:
diff changeset
   122
	{
hgs
parents:
diff changeset
   123
		$printfMacro = "RDebug::Printf";
hgs
parents:
diff changeset
   124
		convertOstToPrintf($printfMacro, @sources);
hgs
parents:
diff changeset
   125
	}
hgs
parents:
diff changeset
   126
	else
hgs
parents:
diff changeset
   127
	{
hgs
parents:
diff changeset
   128
		print "Wrong selection!";
hgs
parents:
diff changeset
   129
	}
hgs
parents:
diff changeset
   130
}
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
# Otherwise, it's user defined MACRO
hgs
parents:
diff changeset
   133
else
hgs
parents:
diff changeset
   134
{
hgs
parents:
diff changeset
   135
	$printfMacro = $selection;
hgs
parents:
diff changeset
   136
	convertPrintf($printfMacro, @sources);
hgs
parents:
diff changeset
   137
}
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
#-------------------------------------------------------
hgs
parents:
diff changeset
   141
# Convert Symbian traces
hgs
parents:
diff changeset
   142
#-------------------------------------------------------
hgs
parents:
diff changeset
   143
sub convertSymbianTraces
hgs
parents:
diff changeset
   144
{
hgs
parents:
diff changeset
   145
	debug("\nConvertSymbianTraces starts");
hgs
parents:
diff changeset
   146
	my (@sources) = @_;
hgs
parents:
diff changeset
   147
	
hgs
parents:
diff changeset
   148
	# Go through all found source files
hgs
parents:
diff changeset
   149
	foreach my $source_file (@sources)
hgs
parents:
diff changeset
   150
	{
hgs
parents:
diff changeset
   151
		debug("Source file $source_file");
hgs
parents:
diff changeset
   152
		print $source_file . "\n";
hgs
parents:
diff changeset
   153
		
hgs
parents:
diff changeset
   154
		RemoveLineBreaksFromTracesInFile($source_file, 0);
hgs
parents:
diff changeset
   155
		
hgs
parents:
diff changeset
   156
		open FILE, "<$source_file" or die $!;
hgs
parents:
diff changeset
   157
		
hgs
parents:
diff changeset
   158
		my $new_file_content;
hgs
parents:
diff changeset
   159
		
hgs
parents:
diff changeset
   160
		my $traces_converted = 0;
hgs
parents:
diff changeset
   161
		my $file_name = "";
hgs
parents:
diff changeset
   162
		my $last_include_line = 0;
hgs
parents:
diff changeset
   163
		my $line_number = 0;
hgs
parents:
diff changeset
   164
	
hgs
parents:
diff changeset
   165
		if ($source_file =~ /.*\\(.+?)\..+/)
hgs
parents:
diff changeset
   166
		{
hgs
parents:
diff changeset
   167
			$file_name = $1;
hgs
parents:
diff changeset
   168
		}
hgs
parents:
diff changeset
   169
		
hgs
parents:
diff changeset
   170
		foreach my $line (<FILE>)
hgs
parents:
diff changeset
   171
		{
hgs
parents:
diff changeset
   172
			$line_number += 1;
hgs
parents:
diff changeset
   173
			
hgs
parents:
diff changeset
   174
			my $line_converted = 0;
hgs
parents:
diff changeset
   175
			
hgs
parents:
diff changeset
   176
			chomp $line;
hgs
parents:
diff changeset
   177
			
hgs
parents:
diff changeset
   178
			if ($line =~ /^\s*\#include/)
hgs
parents:
diff changeset
   179
			{
hgs
parents:
diff changeset
   180
				$last_include_line = $line_number; 
hgs
parents:
diff changeset
   181
			}
hgs
parents:
diff changeset
   182
			
hgs
parents:
diff changeset
   183
			if ($line =~ /Traces\.h/)
hgs
parents:
diff changeset
   184
			{
hgs
parents:
diff changeset
   185
				$line = "// " . $line;
hgs
parents:
diff changeset
   186
			}
hgs
parents:
diff changeset
   187
			
hgs
parents:
diff changeset
   188
			# FA_CORE_SERVICES traces
hgs
parents:
diff changeset
   189
			if ($line =~ /(BUILD_TRACE|ASSERT_TRACE|ASSERT_ALWAYS_TRACE|API_TRACE|INTERNAL_TRACE|DATA_DUMP_TRACE|ISIMSG_API_TRACE).*;/)
hgs
parents:
diff changeset
   190
			{
hgs
parents:
diff changeset
   191
				my $trace_name = $1;		
hgs
parents:
diff changeset
   192
				
hgs
parents:
diff changeset
   193
				if ($line =~ /.*?\/\/.*?$trace_name/)
hgs
parents:
diff changeset
   194
				{
hgs
parents:
diff changeset
   195
					next;
hgs
parents:
diff changeset
   196
				}
hgs
parents:
diff changeset
   197
				
hgs
parents:
diff changeset
   198
				my $spaces = "";				
hgs
parents:
diff changeset
   199
				if ($line =~ /^(\s+).*?$trace_name/)
hgs
parents:
diff changeset
   200
				{
hgs
parents:
diff changeset
   201
					$spaces = $1;
hgs
parents:
diff changeset
   202
				}
hgs
parents:
diff changeset
   203
				
hgs
parents:
diff changeset
   204
				my $prefix = "";				
hgs
parents:
diff changeset
   205
				if ($line =~ /^\s*(.*?)$trace_name/)
hgs
parents:
diff changeset
   206
				{
hgs
parents:
diff changeset
   207
					$prefix = $1;
hgs
parents:
diff changeset
   208
				}
hgs
parents:
diff changeset
   209
				
hgs
parents:
diff changeset
   210
				$line =~ s/^.*($trace_name.+;).*/$1/;
hgs
parents:
diff changeset
   211
				
hgs
parents:
diff changeset
   212
				if ($line =~ /$trace_name\s*\((.+)\)\s*;/)
hgs
parents:
diff changeset
   213
				{
hgs
parents:
diff changeset
   214
					$line_converted = 1;
hgs
parents:
diff changeset
   215
					$traces_converted = 1;
hgs
parents:
diff changeset
   216
					
hgs
parents:
diff changeset
   217
					my $parameters = $1;
hgs
parents:
diff changeset
   218
					
hgs
parents:
diff changeset
   219
					$new_file_content .= $spaces . "// " . $prefix . $line . "\n";
hgs
parents:
diff changeset
   220
				
hgs
parents:
diff changeset
   221
					# Get parameters without format string
hgs
parents:
diff changeset
   222
					my $parameters_without_format = $parameters;
hgs
parents:
diff changeset
   223
					if ($parameters =~ /\".*\"(.*)/)
hgs
parents:
diff changeset
   224
					{
hgs
parents:
diff changeset
   225
						$parameters_without_format = $1;
hgs
parents:
diff changeset
   226
					}
hgs
parents:
diff changeset
   227
					
hgs
parents:
diff changeset
   228
					# Calculate parameter count
hgs
parents:
diff changeset
   229
					my $parameter_count = -1;
hgs
parents:
diff changeset
   230
					foreach my $part (split(",", $parameters_without_format))
hgs
parents:
diff changeset
   231
					{
hgs
parents:
diff changeset
   232
						$parameter_count++;
hgs
parents:
diff changeset
   233
					}
hgs
parents:
diff changeset
   234
	
hgs
parents:
diff changeset
   235
					my $new_trace = GetNewCASWTraceName($trace_name, $parameter_count);
hgs
parents:
diff changeset
   236
					
hgs
parents:
diff changeset
   237
					if ($trace_name =~ /(BUILD_TRACE|ASSERT_TRACE|ASSERT_ALWAYS_TRACE|API_TRACE|INTERNAL_TRACE)/)
hgs
parents:
diff changeset
   238
					{
hgs
parents:
diff changeset
   239
						$new_trace .= "(" . $trace_name . ", TRACE_NAME_" . $CASWTraceCount++ . ", " . $parameters . ");";
hgs
parents:
diff changeset
   240
					}
hgs
parents:
diff changeset
   241
					else
hgs
parents:
diff changeset
   242
					{
hgs
parents:
diff changeset
   243
						$new_trace .= "(" . $trace_name . ", TRACE_NAME_" . $CASWTraceCount++ . ", ";
hgs
parents:
diff changeset
   244
						
hgs
parents:
diff changeset
   245
						if ($parameter_count == 0)
hgs
parents:
diff changeset
   246
						{
hgs
parents:
diff changeset
   247
							$new_trace .= "\"\", " . $parameters . ", <data_len>);";
hgs
parents:
diff changeset
   248
						}
hgs
parents:
diff changeset
   249
						else
hgs
parents:
diff changeset
   250
						{
hgs
parents:
diff changeset
   251
							$new_trace .= $parameters . ", <data_len>);";
hgs
parents:
diff changeset
   252
						}
hgs
parents:
diff changeset
   253
					}
hgs
parents:
diff changeset
   254
					
hgs
parents:
diff changeset
   255
					$new_file_content .= $spaces . $new_trace . "\n";
hgs
parents:
diff changeset
   256
				}
hgs
parents:
diff changeset
   257
			}
hgs
parents:
diff changeset
   258
			
hgs
parents:
diff changeset
   259
			# SymbianTraces
hgs
parents:
diff changeset
   260
			if ($line =~ /SymbianTrace([0-2]|Data[0-1]{0,1}|Thread[0-2]|ThreadData[0-1]{0,1}|IsTraceActive|Pc[0-2]|ThreadPc[0-2]|PcData[0-1]{0,1}|ThreadPcData[0-1]{0,1}|StartControlBlock|EndControlBlock|Ext[1-6]|ExtThread[1-6]).*;/)
hgs
parents:
diff changeset
   261
			{
hgs
parents:
diff changeset
   262
				my $trace_name = "SymbianTrace" . $1;
hgs
parents:
diff changeset
   263
	
hgs
parents:
diff changeset
   264
				if ($line =~ /.*?\/\/.*?SymbianTrace/)
hgs
parents:
diff changeset
   265
				{
hgs
parents:
diff changeset
   266
					next;
hgs
parents:
diff changeset
   267
				}						
hgs
parents:
diff changeset
   268
			
hgs
parents:
diff changeset
   269
				# print $trace_name . "\n";
hgs
parents:
diff changeset
   270
				
hgs
parents:
diff changeset
   271
				my $spaces = "";				
hgs
parents:
diff changeset
   272
				if ($line =~ /^(\s+).*?SymbianTrace/)
hgs
parents:
diff changeset
   273
				{
hgs
parents:
diff changeset
   274
					$spaces = $1;
hgs
parents:
diff changeset
   275
				}
hgs
parents:
diff changeset
   276
				
hgs
parents:
diff changeset
   277
				my $prefix = "";				
hgs
parents:
diff changeset
   278
				if ($line =~ /^\s*(.*?)SymbianTrace/)
hgs
parents:
diff changeset
   279
				{
hgs
parents:
diff changeset
   280
					$prefix = $1;
hgs
parents:
diff changeset
   281
				}
hgs
parents:
diff changeset
   282
				
hgs
parents:
diff changeset
   283
				$line =~ s/^.*(SymbianTrace.+;).*/$1/;
hgs
parents:
diff changeset
   284
				
hgs
parents:
diff changeset
   285
				#print $line . "\n";
hgs
parents:
diff changeset
   286
				
hgs
parents:
diff changeset
   287
				# Get trace id name
hgs
parents:
diff changeset
   288
				if ($line =~ /\(\s*(.+?)[\s\),]{1,2}(.*?)\)\s*;$/)
hgs
parents:
diff changeset
   289
				{
hgs
parents:
diff changeset
   290
					$line_converted = 1;
hgs
parents:
diff changeset
   291
					$traces_converted = 1;
hgs
parents:
diff changeset
   292
					
hgs
parents:
diff changeset
   293
					my $trace_id_name = $1;
hgs
parents:
diff changeset
   294
					my $rest_of_parameters = $2;
hgs
parents:
diff changeset
   295
					
hgs
parents:
diff changeset
   296
					my $new_trace_id_name = $trace_id_name;
hgs
parents:
diff changeset
   297
					
hgs
parents:
diff changeset
   298
					$new_file_content .= $spaces . "// " . $prefix . $line . "\n";
hgs
parents:
diff changeset
   299
									
hgs
parents:
diff changeset
   300
					#print $trace_id_name . "\n";
hgs
parents:
diff changeset
   301
					#print $rest_of_parameters . "\n";
hgs
parents:
diff changeset
   302
					
hgs
parents:
diff changeset
   303
					if ($trace_name ne "SymbianTraceIsTraceActive")
hgs
parents:
diff changeset
   304
					{
hgs
parents:
diff changeset
   305
						while (grep(/$new_trace_id_name/, @trace_id_names))
hgs
parents:
diff changeset
   306
						{
hgs
parents:
diff changeset
   307
							# Duplicate trace
hgs
parents:
diff changeset
   308
							$new_trace_id_name .= "_";
hgs
parents:
diff changeset
   309
						}
hgs
parents:
diff changeset
   310
						
hgs
parents:
diff changeset
   311
						push(@trace_id_names, $new_trace_id_name);
hgs
parents:
diff changeset
   312
					}
hgs
parents:
diff changeset
   313
								
hgs
parents:
diff changeset
   314
					my $trace_text = $map_trace_to_text{$trace_id_name};
hgs
parents:
diff changeset
   315
					
hgs
parents:
diff changeset
   316
					my @params = split(",", $rest_of_parameters);
hgs
parents:
diff changeset
   317
									
hgs
parents:
diff changeset
   318
					$trace_text .= GetFormatText($trace_id_name, @params);
hgs
parents:
diff changeset
   319
					
hgs
parents:
diff changeset
   320
					my $type_string = IsStringType($trace_id_name, @params);
hgs
parents:
diff changeset
   321
					
hgs
parents:
diff changeset
   322
					my $group_name = $map_trace_to_group{$trace_id_name};
hgs
parents:
diff changeset
   323
					if (not defined $group_name or $group_name eq "")
hgs
parents:
diff changeset
   324
					{
hgs
parents:
diff changeset
   325
						$group_name = "DEFAULT_GROUP";
hgs
parents:
diff changeset
   326
						$trace_text = "";
hgs
parents:
diff changeset
   327
					}
hgs
parents:
diff changeset
   328
					
hgs
parents:
diff changeset
   329
					my $new_trace = GetNewSymbianTraceName($trace_name, $type_string);
hgs
parents:
diff changeset
   330
					$new_trace .= "( " . $group_name . ", " . 
hgs
parents:
diff changeset
   331
												$new_trace_id_name . ", " .
hgs
parents:
diff changeset
   332
												"\"" . $trace_text . "\"";
hgs
parents:
diff changeset
   333
												
hgs
parents:
diff changeset
   334
					if ($rest_of_parameters ne "")
hgs
parents:
diff changeset
   335
					{
hgs
parents:
diff changeset
   336
						 $new_trace .= ", " . $rest_of_parameters;
hgs
parents:
diff changeset
   337
					}
hgs
parents:
diff changeset
   338
					
hgs
parents:
diff changeset
   339
					$new_trace .= ");";
hgs
parents:
diff changeset
   340
					
hgs
parents:
diff changeset
   341
					$new_file_content .= $spaces . $new_trace . "\n";
hgs
parents:
diff changeset
   342
					
hgs
parents:
diff changeset
   343
					#print $new_trace . "\n\n";
hgs
parents:
diff changeset
   344
				}
hgs
parents:
diff changeset
   345
				else
hgs
parents:
diff changeset
   346
				{
hgs
parents:
diff changeset
   347
					print STDERR "Cannot find trace id name. From line: $line\n";
hgs
parents:
diff changeset
   348
				}
hgs
parents:
diff changeset
   349
			}
hgs
parents:
diff changeset
   350
			
hgs
parents:
diff changeset
   351
			if (not $line_converted)
hgs
parents:
diff changeset
   352
			{
hgs
parents:
diff changeset
   353
				$new_file_content .= $line . "\n";
hgs
parents:
diff changeset
   354
			}
hgs
parents:
diff changeset
   355
			
hgs
parents:
diff changeset
   356
		}
hgs
parents:
diff changeset
   357
	
hgs
parents:
diff changeset
   358
		close FILE;	
hgs
parents:
diff changeset
   359
		
hgs
parents:
diff changeset
   360
		if ($traces_converted == 1)
hgs
parents:
diff changeset
   361
		{		
hgs
parents:
diff changeset
   362
			SaveNewSourceFile($source_file, $new_file_content, $last_include_line, $file_name, 1);
hgs
parents:
diff changeset
   363
		}
hgs
parents:
diff changeset
   364
	}
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
CreateOSTTraceDefinitionsHeader();
hgs
parents:
diff changeset
   367
}
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
hgs
parents:
diff changeset
   370
#-------------------------------------------------------
hgs
parents:
diff changeset
   371
# Convert PRINTF traces to OST traces
hgs
parents:
diff changeset
   372
#-------------------------------------------------------
hgs
parents:
diff changeset
   373
sub convertPrintf
hgs
parents:
diff changeset
   374
{
hgs
parents:
diff changeset
   375
	my ($macro, @sources) = @_;
hgs
parents:
diff changeset
   376
	debug("\nConvertPrintf starts, macro is: $macro");
hgs
parents:
diff changeset
   377
	
hgs
parents:
diff changeset
   378
	# Go through all found source files
hgs
parents:
diff changeset
   379
	foreach my $source_file (@sources)
hgs
parents:
diff changeset
   380
	{
hgs
parents:
diff changeset
   381
		debug("Source file $source_file");
hgs
parents:
diff changeset
   382
		print $source_file . "\n";
hgs
parents:
diff changeset
   383
		
hgs
parents:
diff changeset
   384
		RemoveLineBreaksFromTracesInFile($source_file, 0);
hgs
parents:
diff changeset
   385
		
hgs
parents:
diff changeset
   386
		open FILE, "<$source_file" or die $!;
hgs
parents:
diff changeset
   387
		
hgs
parents:
diff changeset
   388
		my $new_file_content;
hgs
parents:
diff changeset
   389
		
hgs
parents:
diff changeset
   390
		my $traces_converted = 0;
hgs
parents:
diff changeset
   391
		my $file_name = "";
hgs
parents:
diff changeset
   392
		my $last_include_line = 0;
hgs
parents:
diff changeset
   393
		my $line_number = 0;
hgs
parents:
diff changeset
   394
		my $traceNumber = 0;
hgs
parents:
diff changeset
   395
	
hgs
parents:
diff changeset
   396
		if ($source_file =~ /.*\\(.+?)\..+/)
hgs
parents:
diff changeset
   397
		{
hgs
parents:
diff changeset
   398
			$file_name = $1;
hgs
parents:
diff changeset
   399
		}
hgs
parents:
diff changeset
   400
		
hgs
parents:
diff changeset
   401
		foreach my $line (<FILE>)
hgs
parents:
diff changeset
   402
		{
hgs
parents:
diff changeset
   403
			$line_number += 1;
hgs
parents:
diff changeset
   404
			
hgs
parents:
diff changeset
   405
			my $line_converted = 0;
hgs
parents:
diff changeset
   406
			
hgs
parents:
diff changeset
   407
			chomp $line;
hgs
parents:
diff changeset
   408
			
hgs
parents:
diff changeset
   409
			if ($line =~ /^\s*\#include/)
hgs
parents:
diff changeset
   410
			{
hgs
parents:
diff changeset
   411
				$last_include_line = $line_number; 
hgs
parents:
diff changeset
   412
			}
hgs
parents:
diff changeset
   413
			
hgs
parents:
diff changeset
   414
			if ($line =~ /Traces\.h/)
hgs
parents:
diff changeset
   415
			{
hgs
parents:
diff changeset
   416
				$line = "// " . $line;
hgs
parents:
diff changeset
   417
			}
hgs
parents:
diff changeset
   418
			
hgs
parents:
diff changeset
   419
			# Printf macro
hgs
parents:
diff changeset
   420
			if ($line =~ /^\s*$macro.*;/i)
hgs
parents:
diff changeset
   421
			{		
hgs
parents:
diff changeset
   422
				my $spaces;				
hgs
parents:
diff changeset
   423
				my $trace = "";
hgs
parents:
diff changeset
   424
				if ($line =~ /^(\s*)/)
hgs
parents:
diff changeset
   425
				{
hgs
parents:
diff changeset
   426
					$spaces = $1;
hgs
parents:
diff changeset
   427
				}
hgs
parents:
diff changeset
   428
				
hgs
parents:
diff changeset
   429
				$line =~ s/^\s*($macro.+;).*/$1/;
hgs
parents:
diff changeset
   430
				
hgs
parents:
diff changeset
   431
				$trace = $line;
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
				# Remove spaces from the beginning
hgs
parents:
diff changeset
   434
				$trace =~ s/^\s*//g;
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
				print("Trace: " . $line . "\n");
hgs
parents:
diff changeset
   437
				
hgs
parents:
diff changeset
   438
				if (GetBracketCount($line) % 2 == 0)
hgs
parents:
diff changeset
   439
				{
hgs
parents:
diff changeset
   440
					my $param_count = 0;
hgs
parents:
diff changeset
   441
					my $params = $line;
hgs
parents:
diff changeset
   442
					
hgs
parents:
diff changeset
   443
					while($params =~ s/(.*?),/$1/)
hgs
parents:
diff changeset
   444
					{
hgs
parents:
diff changeset
   445
						$param_count++;
hgs
parents:
diff changeset
   446
					}
hgs
parents:
diff changeset
   447
										
hgs
parents:
diff changeset
   448
					$line = $spaces . "// " . $trace ."\n";
hgs
parents:
diff changeset
   449
					$line .= $spaces;
hgs
parents:
diff changeset
   450
					
hgs
parents:
diff changeset
   451
					# Remove the macro from the trace
hgs
parents:
diff changeset
   452
					debug("Trace before removing MACRO $trace");
hgs
parents:
diff changeset
   453
					$trace =~ /\((.*)\)/;
hgs
parents:
diff changeset
   454
					$trace = $1;
hgs
parents:
diff changeset
   455
					debug("Trace after removing MACRO $trace");
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
    				# Remove use of _L(...)
hgs
parents:
diff changeset
   458
    				if ($trace =~ s/\b_L\(//g) 
hgs
parents:
diff changeset
   459
                    {
hgs
parents:
diff changeset
   460
                        $trace =~ s/(.*")\)/$1/; # want to remove the last ") rather than the first one we come across
hgs
parents:
diff changeset
   461
                    }
hgs
parents:
diff changeset
   462
hgs
parents:
diff changeset
   463
					# Convert
hgs
parents:
diff changeset
   464
					# 0 parameters
hgs
parents:
diff changeset
   465
					debug("Convert trace with $param_count parameters");
hgs
parents:
diff changeset
   466
					if ($param_count == 0)
hgs
parents:
diff changeset
   467
					{
hgs
parents:
diff changeset
   468
						$line .= "OstTrace0(DEFAULT_GROUP, DEFAULT_TRACE" . $traceNumber . ", " . $trace . ");";
hgs
parents:
diff changeset
   469
					}
hgs
parents:
diff changeset
   470
					# 1 parameter
hgs
parents:
diff changeset
   471
					elsif	($param_count == 1)
hgs
parents:
diff changeset
   472
					{
hgs
parents:
diff changeset
   473
						$line .= "OstTrace1(DEFAULT_GROUP, DEFAULT_TRACE" . $traceNumber . ", " . $trace . ");";
hgs
parents:
diff changeset
   474
					}
hgs
parents:
diff changeset
   475
					# More than 1 parameters
hgs
parents:
diff changeset
   476
					else
hgs
parents:
diff changeset
   477
					{
hgs
parents:
diff changeset
   478
					$line .= "OstTraceExt" . $param_count . "(DEFAULT_GROUP, DEFAULT_TRACE" . $traceNumber . ", " . $trace . ");";	
hgs
parents:
diff changeset
   479
					}
hgs
parents:
diff changeset
   480
					
hgs
parents:
diff changeset
   481
					$new_file_content .= $line . "\n";
hgs
parents:
diff changeset
   482
					$line_converted = 1;
hgs
parents:
diff changeset
   483
					$traces_converted = 1;
hgs
parents:
diff changeset
   484
					$traceNumber++;
hgs
parents:
diff changeset
   485
				}
hgs
parents:
diff changeset
   486
			}
hgs
parents:
diff changeset
   487
			else
hgs
parents:
diff changeset
   488
			{
hgs
parents:
diff changeset
   489
				$new_file_content .= $line . "\n";
hgs
parents:
diff changeset
   490
			}
hgs
parents:
diff changeset
   491
		}
hgs
parents:
diff changeset
   492
	
hgs
parents:
diff changeset
   493
		close FILE;	
hgs
parents:
diff changeset
   494
		
hgs
parents:
diff changeset
   495
		if ($traces_converted == 1)
hgs
parents:
diff changeset
   496
		{	
hgs
parents:
diff changeset
   497
			debug("\n\nSave new source file");
hgs
parents:
diff changeset
   498
			SaveNewSourceFile($source_file, $new_file_content, $last_include_line, $file_name, 1);
hgs
parents:
diff changeset
   499
		}
hgs
parents:
diff changeset
   500
	}
hgs
parents:
diff changeset
   501
hgs
parents:
diff changeset
   502
CreateOSTTraceDefinitionsHeader();
hgs
parents:
diff changeset
   503
	
hgs
parents:
diff changeset
   504
}
hgs
parents:
diff changeset
   505
hgs
parents:
diff changeset
   506
hgs
parents:
diff changeset
   507
#-------------------------------------------------------
hgs
parents:
diff changeset
   508
# Get bracket count
hgs
parents:
diff changeset
   509
#-------------------------------------------------------
hgs
parents:
diff changeset
   510
sub GetBracketCount
hgs
parents:
diff changeset
   511
{
hgs
parents:
diff changeset
   512
	my ($line) = @_;
hgs
parents:
diff changeset
   513
	
hgs
parents:
diff changeset
   514
	$line =~ s/\\\(//g;
hgs
parents:
diff changeset
   515
	$line =~ s/\\\)//g;
hgs
parents:
diff changeset
   516
	
hgs
parents:
diff changeset
   517
	my @brackets = ($line =~ /\(|\)/g);
hgs
parents:
diff changeset
   518
	
hgs
parents:
diff changeset
   519
	return scalar @brackets;
hgs
parents:
diff changeset
   520
}
hgs
parents:
diff changeset
   521
hgs
parents:
diff changeset
   522
#-------------------------------------------------------
hgs
parents:
diff changeset
   523
# Save new source file
hgs
parents:
diff changeset
   524
#-------------------------------------------------------
hgs
parents:
diff changeset
   525
sub SaveNewSourceFile
hgs
parents:
diff changeset
   526
{
hgs
parents:
diff changeset
   527
	my ($source_file, $new_file_content, $last_include_line, $file_name, $add_ost_stuff) = @_;
hgs
parents:
diff changeset
   528
	
hgs
parents:
diff changeset
   529
	open FILE, ">$source_file" or die $!;
hgs
parents:
diff changeset
   530
	
hgs
parents:
diff changeset
   531
	my @lines = split("\n", $new_file_content);
hgs
parents:
diff changeset
   532
	
hgs
parents:
diff changeset
   533
	my $line_number = 0;
hgs
parents:
diff changeset
   534
	foreach my $line (@lines)
hgs
parents:
diff changeset
   535
	{	
hgs
parents:
diff changeset
   536
		$line_number++;
hgs
parents:
diff changeset
   537
		
hgs
parents:
diff changeset
   538
		print FILE $line . "\n";
hgs
parents:
diff changeset
   539
		
hgs
parents:
diff changeset
   540
		if ($line_number == $last_include_line && $add_ost_stuff == 1)
hgs
parents:
diff changeset
   541
		{
hgs
parents:
diff changeset
   542
			print FILE "\#include \"OstTraceDefinitions.h\"\n";
hgs
parents:
diff changeset
   543
			print FILE "\#ifdef OST_TRACE_COMPILER_IN_USE\n";
hgs
parents:
diff changeset
   544
			print FILE "\#include \"" . $file_name . "Traces.h\"\n";
hgs
parents:
diff changeset
   545
			print FILE "\#endif\n\n";
hgs
parents:
diff changeset
   546
		}
hgs
parents:
diff changeset
   547
	}
hgs
parents:
diff changeset
   548
	
hgs
parents:
diff changeset
   549
	close FILE;
hgs
parents:
diff changeset
   550
}
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
hgs
parents:
diff changeset
   553
#-------------------------------------------------------
hgs
parents:
diff changeset
   554
# Create OST Trace Definitions header file
hgs
parents:
diff changeset
   555
#-------------------------------------------------------
hgs
parents:
diff changeset
   556
sub CreateOSTTraceDefinitionsHeader
hgs
parents:
diff changeset
   557
{
hgs
parents:
diff changeset
   558
	debug("\nCreateOSTTraceDefinitionsHeader starts");
hgs
parents:
diff changeset
   559
	
hgs
parents:
diff changeset
   560
	# Get path to traces folder
hgs
parents:
diff changeset
   561
	my $mmp_file = $ARGV[0];
hgs
parents:
diff changeset
   562
	my $file_path = $mmp_file;
hgs
parents:
diff changeset
   563
  $file_path =~ s/\\[^\\]+$/\\/i;
hgs
parents:
diff changeset
   564
  $file_path =~ s/\\\\/\\/g;
hgs
parents:
diff changeset
   565
  if ($file_path =~ m/\.mmp/i)
hgs
parents:
diff changeset
   566
  {
hgs
parents:
diff changeset
   567
  	debug("getGroupTraceData. MMP file doesn't have path. Use current dir.");
hgs
parents:
diff changeset
   568
  	my $dir = "$Bin";
hgs
parents:
diff changeset
   569
  	$file_path = $dir;
hgs
parents:
diff changeset
   570
  	$file_path =~ s/\//\\/g;
hgs
parents:
diff changeset
   571
  } 
hgs
parents:
diff changeset
   572
	my $trace_folder_path = concatenatePath($file_path, "..\\traces");
hgs
parents:
diff changeset
   573
	
hgs
parents:
diff changeset
   574
	debug("CreateOSTTraceDefinitionsHeader trace_folder_path: $trace_folder_path");
hgs
parents:
diff changeset
   575
	
hgs
parents:
diff changeset
   576
	mkdir($trace_folder_path);
hgs
parents:
diff changeset
   577
	
hgs
parents:
diff changeset
   578
	
hgs
parents:
diff changeset
   579
	open FILE, ">$trace_folder_path\\OstTraceDefinitions.h" or die $!;
hgs
parents:
diff changeset
   580
	
hgs
parents:
diff changeset
   581
	print FILE "\#ifndef __OSTTRACEDEFINITIONS_H__\n" .
hgs
parents:
diff changeset
   582
							"\#define __OSTTRACEDEFINITIONS_H__\n" .
hgs
parents:
diff changeset
   583
							"// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler\n" .
hgs
parents:
diff changeset
   584
							"// REMOVE BEFORE CHECK-IN TO VERSION CONTROL\n" .
hgs
parents:
diff changeset
   585
							"//\#define OST_TRACE_COMPILER_IN_USE\n" .
hgs
parents:
diff changeset
   586
							"\#include <OpenSystemTrace.h>\n" .
hgs
parents:
diff changeset
   587
							"\#endif\n";
hgs
parents:
diff changeset
   588
hgs
parents:
diff changeset
   589
	
hgs
parents:
diff changeset
   590
	close FILE;
hgs
parents:
diff changeset
   591
}
hgs
parents:
diff changeset
   592
hgs
parents:
diff changeset
   593
hgs
parents:
diff changeset
   594
#-------------------------------------------------------
hgs
parents:
diff changeset
   595
# Get format text
hgs
parents:
diff changeset
   596
#-------------------------------------------------------
hgs
parents:
diff changeset
   597
sub GetFormatText
hgs
parents:
diff changeset
   598
{
hgs
parents:
diff changeset
   599
	my ($trace_id_name, @params) = @_;
hgs
parents:
diff changeset
   600
	
hgs
parents:
diff changeset
   601
	my $format_text = "";
hgs
parents:
diff changeset
   602
	
hgs
parents:
diff changeset
   603
	foreach my $param (@params)
hgs
parents:
diff changeset
   604
	{
hgs
parents:
diff changeset
   605
		if ($param =~ /(\w+)[\s\)]*$/)
hgs
parents:
diff changeset
   606
		{
hgs
parents:
diff changeset
   607
			$param = $1;
hgs
parents:
diff changeset
   608
		}
hgs
parents:
diff changeset
   609
		
hgs
parents:
diff changeset
   610
		my $type = $map_trace_to_parameters{$trace_id_name}{$param};
hgs
parents:
diff changeset
   611
		
hgs
parents:
diff changeset
   612
		if (not defined $type or $type eq "" or $type eq "-DEC")
hgs
parents:
diff changeset
   613
		{
hgs
parents:
diff changeset
   614
			$format_text .= " %d";
hgs
parents:
diff changeset
   615
		}
hgs
parents:
diff changeset
   616
		elsif ($type eq "DEC")
hgs
parents:
diff changeset
   617
		{
hgs
parents:
diff changeset
   618
			$format_text .= " %u";
hgs
parents:
diff changeset
   619
		}
hgs
parents:
diff changeset
   620
		elsif ($type eq "HEX")
hgs
parents:
diff changeset
   621
		{
hgs
parents:
diff changeset
   622
			$format_text .= " 0x%x";
hgs
parents:
diff changeset
   623
		}
hgs
parents:
diff changeset
   624
		elsif ($type eq "STR")
hgs
parents:
diff changeset
   625
		{
hgs
parents:
diff changeset
   626
			$format_text .= " %s";
hgs
parents:
diff changeset
   627
		}
hgs
parents:
diff changeset
   628
	}
hgs
parents:
diff changeset
   629
	
hgs
parents:
diff changeset
   630
	return $format_text;
hgs
parents:
diff changeset
   631
}
hgs
parents:
diff changeset
   632
hgs
parents:
diff changeset
   633
#-------------------------------------------------------
hgs
parents:
diff changeset
   634
# Is string type
hgs
parents:
diff changeset
   635
#-------------------------------------------------------
hgs
parents:
diff changeset
   636
sub IsStringType
hgs
parents:
diff changeset
   637
{
hgs
parents:
diff changeset
   638
	my ($trace_id_name, @params) = @_;
hgs
parents:
diff changeset
   639
	
hgs
parents:
diff changeset
   640
	my $type_string = 0;
hgs
parents:
diff changeset
   641
	
hgs
parents:
diff changeset
   642
	foreach my $param (@params)
hgs
parents:
diff changeset
   643
	{
hgs
parents:
diff changeset
   644
		if ($param =~ /(\w+)[\s\)]*$/)
hgs
parents:
diff changeset
   645
		{
hgs
parents:
diff changeset
   646
			$param = $1;
hgs
parents:
diff changeset
   647
		}
hgs
parents:
diff changeset
   648
		
hgs
parents:
diff changeset
   649
		my $type = $map_trace_to_parameters{$trace_id_name}{$param};
hgs
parents:
diff changeset
   650
		
hgs
parents:
diff changeset
   651
		if (defined $type and $type eq "STR")
hgs
parents:
diff changeset
   652
		{
hgs
parents:
diff changeset
   653
			$type_string = 1;
hgs
parents:
diff changeset
   654
		}
hgs
parents:
diff changeset
   655
	}
hgs
parents:
diff changeset
   656
	
hgs
parents:
diff changeset
   657
	return $type_string;
hgs
parents:
diff changeset
   658
}
hgs
parents:
diff changeset
   659
hgs
parents:
diff changeset
   660
#-------------------------------------------------------
hgs
parents:
diff changeset
   661
# Remove linebreaks from traces
hgs
parents:
diff changeset
   662
#-------------------------------------------------------
hgs
parents:
diff changeset
   663
sub RemoveLineBreaksFromTracesInFile
hgs
parents:
diff changeset
   664
{
hgs
parents:
diff changeset
   665
	my ($file, $convert_back_to_printf) = @_;
hgs
parents:
diff changeset
   666
	
hgs
parents:
diff changeset
   667
	my $file_changed = 0;
hgs
parents:
diff changeset
   668
	my $new_file_content;
hgs
parents:
diff changeset
   669
	my $previous_line_changed = 0;
hgs
parents:
diff changeset
   670
	my $convert_macro = "Kern::Printf";
hgs
parents:
diff changeset
   671
	
hgs
parents:
diff changeset
   672
	if ($convert_back_to_printf == 1)
hgs
parents:
diff changeset
   673
	{
hgs
parents:
diff changeset
   674
		$convert_macro = "OstTrace([01]|Ext|Data)";
hgs
parents:
diff changeset
   675
	}
hgs
parents:
diff changeset
   676
	
hgs
parents:
diff changeset
   677
	open FILE, "<$file" or die $!;
hgs
parents:
diff changeset
   678
	
hgs
parents:
diff changeset
   679
	foreach my $line (<FILE>)
hgs
parents:
diff changeset
   680
	{
hgs
parents:
diff changeset
   681
		chomp($line);
hgs
parents:
diff changeset
   682
			
hgs
parents:
diff changeset
   683
		if ($line =~ /SymbianTrace([0-2]|Data[0-1]{0,1}|Thread[0-2]|ThreadData[0-1]{0,1}|IsTraceActive|Pc[0-2]|ThreadPc[0-2]|PcData[0-1]{0,1}|ThreadPcData[0-1]{0,1}|StartControlBlock|EndControlBlock|Ext[1-6]|ExtThread[1-6])[^;]+$/ or
hgs
parents:
diff changeset
   684
				$line =~ /$convert_macro[^;]+$/ or
hgs
parents:
diff changeset
   685
				$line =~ /(BUILD_TRACE|ASSERT_TRACE|ASSERT_ALWAYS_TRACE|API_TRACE|INTERNAL_TRACE|DATA_DUMP_TRACE|ISIMSG_API_TRACE)[^;]+$/)
hgs
parents:
diff changeset
   686
		{
hgs
parents:
diff changeset
   687
			# We have a trace in multiple lines
hgs
parents:
diff changeset
   688
			$new_file_content .= $line;
hgs
parents:
diff changeset
   689
			
hgs
parents:
diff changeset
   690
			$file_changed = 1;
hgs
parents:
diff changeset
   691
			$previous_line_changed = 1;
hgs
parents:
diff changeset
   692
		}
hgs
parents:
diff changeset
   693
		else
hgs
parents:
diff changeset
   694
		{
hgs
parents:
diff changeset
   695
			if ($previous_line_changed == 1)
hgs
parents:
diff changeset
   696
			{
hgs
parents:
diff changeset
   697
				$line =~ s/\s*(.*)/ $1/;
hgs
parents:
diff changeset
   698
				
hgs
parents:
diff changeset
   699
				$new_file_content .= $line;
hgs
parents:
diff changeset
   700
			}
hgs
parents:
diff changeset
   701
			else
hgs
parents:
diff changeset
   702
			{
hgs
parents:
diff changeset
   703
				$new_file_content .= $line . "\n";
hgs
parents:
diff changeset
   704
			}
hgs
parents:
diff changeset
   705
			
hgs
parents:
diff changeset
   706
			if ($previous_line_changed and $line =~ /;/)
hgs
parents:
diff changeset
   707
			{
hgs
parents:
diff changeset
   708
				$new_file_content .= "\n";
hgs
parents:
diff changeset
   709
				$previous_line_changed = 0;
hgs
parents:
diff changeset
   710
			}
hgs
parents:
diff changeset
   711
		}
hgs
parents:
diff changeset
   712
	}
hgs
parents:
diff changeset
   713
	
hgs
parents:
diff changeset
   714
	close FILE;
hgs
parents:
diff changeset
   715
	
hgs
parents:
diff changeset
   716
	if ($file_changed == 1)
hgs
parents:
diff changeset
   717
	{
hgs
parents:
diff changeset
   718
		open FILE, ">$file" or die $!;
hgs
parents:
diff changeset
   719
	
hgs
parents:
diff changeset
   720
		print FILE $new_file_content;
hgs
parents:
diff changeset
   721
		
hgs
parents:
diff changeset
   722
		close FILE;
hgs
parents:
diff changeset
   723
	}
hgs
parents:
diff changeset
   724
}
hgs
parents:
diff changeset
   725
hgs
parents:
diff changeset
   726
#-------------------------------------------------------
hgs
parents:
diff changeset
   727
# Get new CASW trace name
hgs
parents:
diff changeset
   728
#-------------------------------------------------------
hgs
parents:
diff changeset
   729
sub GetNewCASWTraceName
hgs
parents:
diff changeset
   730
{
hgs
parents:
diff changeset
   731
	my ($old_trace_name, $paramater_count) = @_;
hgs
parents:
diff changeset
   732
	
hgs
parents:
diff changeset
   733
	my $new_trace_name;
hgs
parents:
diff changeset
   734
	
hgs
parents:
diff changeset
   735
	if ($old_trace_name eq "BUILD_TRACE" or 
hgs
parents:
diff changeset
   736
			$old_trace_name eq "ASSERT_TRACE" or
hgs
parents:
diff changeset
   737
			$old_trace_name eq "ASSERT_ALWAYS_TRACE" or
hgs
parents:
diff changeset
   738
			$old_trace_name eq "API_TRACE" or
hgs
parents:
diff changeset
   739
			$old_trace_name eq "INTERNAL_TRACE")
hgs
parents:
diff changeset
   740
	{
hgs
parents:
diff changeset
   741
		if ($paramater_count <= 0)
hgs
parents:
diff changeset
   742
		{
hgs
parents:
diff changeset
   743
			$new_trace_name = "OstTrace0";
hgs
parents:
diff changeset
   744
		}
hgs
parents:
diff changeset
   745
		elsif ($paramater_count <= 5)
hgs
parents:
diff changeset
   746
		{
hgs
parents:
diff changeset
   747
			$new_trace_name = "OstTraceExt" . $paramater_count;
hgs
parents:
diff changeset
   748
		}
hgs
parents:
diff changeset
   749
		else
hgs
parents:
diff changeset
   750
		{
hgs
parents:
diff changeset
   751
			$new_trace_name = "// TODO: Cannot convert trace. Too much parameters.";
hgs
parents:
diff changeset
   752
		}
hgs
parents:
diff changeset
   753
	}
hgs
parents:
diff changeset
   754
	elsif ( $old_trace_name eq "DATA_DUMP_TRACE" or 
hgs
parents:
diff changeset
   755
					$old_trace_name eq "ISIMSG_API_TRACE")
hgs
parents:
diff changeset
   756
	{
hgs
parents:
diff changeset
   757
		$new_trace_name = "OstTraceData";
hgs
parents:
diff changeset
   758
	}
hgs
parents:
diff changeset
   759
	
hgs
parents:
diff changeset
   760
	return $new_trace_name;
hgs
parents:
diff changeset
   761
}
hgs
parents:
diff changeset
   762
hgs
parents:
diff changeset
   763
#-------------------------------------------------------
hgs
parents:
diff changeset
   764
# Get new Symbian trace name
hgs
parents:
diff changeset
   765
#-------------------------------------------------------
hgs
parents:
diff changeset
   766
sub GetNewSymbianTraceName
hgs
parents:
diff changeset
   767
{
hgs
parents:
diff changeset
   768
	my ($old_trace_name, $type_string) = @_;
hgs
parents:
diff changeset
   769
	
hgs
parents:
diff changeset
   770
	my $new_trace_name;
hgs
parents:
diff changeset
   771
	
hgs
parents:
diff changeset
   772
	if ($old_trace_name eq "SymbianTrace0" or 
hgs
parents:
diff changeset
   773
			$old_trace_name eq "SymbianTraceThread0")
hgs
parents:
diff changeset
   774
	{
hgs
parents:
diff changeset
   775
		$new_trace_name = "OstTrace0";
hgs
parents:
diff changeset
   776
	}
hgs
parents:
diff changeset
   777
	elsif (	not $type_string and 
hgs
parents:
diff changeset
   778
					( $old_trace_name eq "SymbianTrace1" or 
hgs
parents:
diff changeset
   779
						$old_trace_name eq "SymbianTraceThread1" or
hgs
parents:
diff changeset
   780
						$old_trace_name eq "SymbianTraceExt1" or
hgs
parents:
diff changeset
   781
						$old_trace_name eq "SymbianTraceExtThread1"))
hgs
parents:
diff changeset
   782
	{
hgs
parents:
diff changeset
   783
		$new_trace_name = "OstTrace1";
hgs
parents:
diff changeset
   784
	}
hgs
parents:
diff changeset
   785
	elsif (	$type_string and 
hgs
parents:
diff changeset
   786
					( $old_trace_name eq "SymbianTrace1" or 
hgs
parents:
diff changeset
   787
						$old_trace_name eq "SymbianTraceThread1" or
hgs
parents:
diff changeset
   788
						$old_trace_name eq "SymbianTraceExt1" or
hgs
parents:
diff changeset
   789
						$old_trace_name eq "SymbianTraceExtThread1"))
hgs
parents:
diff changeset
   790
	{
hgs
parents:
diff changeset
   791
		$new_trace_name = "OstTraceExt1";
hgs
parents:
diff changeset
   792
	}
hgs
parents:
diff changeset
   793
	elsif (	$old_trace_name eq "SymbianTrace2" or 
hgs
parents:
diff changeset
   794
					$old_trace_name eq "SymbianTraceThread2" or
hgs
parents:
diff changeset
   795
					$old_trace_name eq "SymbianTraceExt2" or
hgs
parents:
diff changeset
   796
					$old_trace_name eq "SymbianTraceExtThread2")
hgs
parents:
diff changeset
   797
	{
hgs
parents:
diff changeset
   798
		$new_trace_name = "OstTraceExt2";
hgs
parents:
diff changeset
   799
	}
hgs
parents:
diff changeset
   800
	elsif (	$old_trace_name eq "SymbianTraceExt3" or
hgs
parents:
diff changeset
   801
					$old_trace_name eq "SymbianTraceExtThread3")
hgs
parents:
diff changeset
   802
	{
hgs
parents:
diff changeset
   803
		$new_trace_name = "OstTraceExt3";
hgs
parents:
diff changeset
   804
	}
hgs
parents:
diff changeset
   805
	elsif (	$old_trace_name eq "SymbianTraceExt4" or
hgs
parents:
diff changeset
   806
					$old_trace_name eq "SymbianTraceExtThread4")
hgs
parents:
diff changeset
   807
	{
hgs
parents:
diff changeset
   808
		$new_trace_name = "OstTraceExt4";
hgs
parents:
diff changeset
   809
	}
hgs
parents:
diff changeset
   810
	elsif (	$old_trace_name eq "SymbianTraceExt5" or
hgs
parents:
diff changeset
   811
					$old_trace_name eq "SymbianTraceExtThread5")
hgs
parents:
diff changeset
   812
	{
hgs
parents:
diff changeset
   813
		$new_trace_name = "OstTraceExt5";
hgs
parents:
diff changeset
   814
	}
hgs
parents:
diff changeset
   815
	elsif (	$old_trace_name eq "SymbianTraceExt6" or
hgs
parents:
diff changeset
   816
					$old_trace_name eq "SymbianTraceExtThread6")
hgs
parents:
diff changeset
   817
	{
hgs
parents:
diff changeset
   818
		$new_trace_name = "// TODO: Cannot convert SymbianTraceExt6";
hgs
parents:
diff changeset
   819
	}
hgs
parents:
diff changeset
   820
	elsif (	$old_trace_name eq "SymbianTraceExt7" or
hgs
parents:
diff changeset
   821
					$old_trace_name eq "SymbianTraceExtThread7")
hgs
parents:
diff changeset
   822
	{
hgs
parents:
diff changeset
   823
		$new_trace_name = "// TODO: Cannot convert SymbianTraceExt7";
hgs
parents:
diff changeset
   824
	}
hgs
parents:
diff changeset
   825
	elsif (	$old_trace_name eq "SymbianTraceData" or 
hgs
parents:
diff changeset
   826
					$old_trace_name eq "SymbianTraceData0" or 
hgs
parents:
diff changeset
   827
					$old_trace_name eq "SymbianTraceThreadData" or 
hgs
parents:
diff changeset
   828
					$old_trace_name eq "SymbianTraceThreadData0")
hgs
parents:
diff changeset
   829
	{
hgs
parents:
diff changeset
   830
		$new_trace_name = "OstTraceData";
hgs
parents:
diff changeset
   831
	}	
hgs
parents:
diff changeset
   832
	elsif ($old_trace_name eq "SymbianTraceData1")
hgs
parents:
diff changeset
   833
	{
hgs
parents:
diff changeset
   834
		$new_trace_name = "// TODO: Cannot convert SymbianTraceData1";
hgs
parents:
diff changeset
   835
	}
hgs
parents:
diff changeset
   836
	elsif ($old_trace_name eq "SymbianTraceIsTraceActive")
hgs
parents:
diff changeset
   837
	{
hgs
parents:
diff changeset
   838
		$new_trace_name = "// TODO: Cannot convert SymbianTraceIsTraceActive";
hgs
parents:
diff changeset
   839
	}
hgs
parents:
diff changeset
   840
	elsif (	$old_trace_name eq "SymbianTracePc0" or
hgs
parents:
diff changeset
   841
					$old_trace_name eq "SymbianTracePc1" or
hgs
parents:
diff changeset
   842
					$old_trace_name eq "SymbianTracePc2")
hgs
parents:
diff changeset
   843
	{
hgs
parents:
diff changeset
   844
		$new_trace_name = "// TODO: Cannot convert SymbianTracePc";
hgs
parents:
diff changeset
   845
	}
hgs
parents:
diff changeset
   846
	elsif (	$old_trace_name eq "SymbianTraceThreadPc0" or
hgs
parents:
diff changeset
   847
					$old_trace_name eq "SymbianTraceThreadPc1" or
hgs
parents:
diff changeset
   848
					$old_trace_name eq "SymbianTraceThreadPc2")
hgs
parents:
diff changeset
   849
	{
hgs
parents:
diff changeset
   850
		$new_trace_name = "// TODO: Cannot convert SymbianTraceThreadPc";
hgs
parents:
diff changeset
   851
	}
hgs
parents:
diff changeset
   852
	elsif (	$old_trace_name eq "SymbianTracePcData" or
hgs
parents:
diff changeset
   853
					$old_trace_name eq "SymbianTracePcData0" or
hgs
parents:
diff changeset
   854
					$old_trace_name eq "SymbianTracePcData1")
hgs
parents:
diff changeset
   855
	{
hgs
parents:
diff changeset
   856
		$new_trace_name = "// TODO: Cannot convert SymbianTracePcData";
hgs
parents:
diff changeset
   857
	}
hgs
parents:
diff changeset
   858
	elsif (	$old_trace_name eq "SymbianTraceThreadPcData" or
hgs
parents:
diff changeset
   859
					$old_trace_name eq "SymbianTraceThreadPcData0" or
hgs
parents:
diff changeset
   860
					$old_trace_name eq "SymbianTraceThreadPcData1")
hgs
parents:
diff changeset
   861
	{
hgs
parents:
diff changeset
   862
		$new_trace_name = "// TODO: Cannot convert SymbianTraceThreadPcData";
hgs
parents:
diff changeset
   863
	}
hgs
parents:
diff changeset
   864
	elsif (	$old_trace_name eq "SymbianTraceStartControlBlock")
hgs
parents:
diff changeset
   865
	{
hgs
parents:
diff changeset
   866
		$new_trace_name = "// TODO: Cannot convert SymbianTraceStartControlBlock";
hgs
parents:
diff changeset
   867
	}
hgs
parents:
diff changeset
   868
	elsif (	$old_trace_name eq "SymbianTraceEndControlBlock")
hgs
parents:
diff changeset
   869
	{
hgs
parents:
diff changeset
   870
		$new_trace_name = "// TODO: Cannot convert SymbianTraceEndControlBlock";
hgs
parents:
diff changeset
   871
	}
hgs
parents:
diff changeset
   872
	
hgs
parents:
diff changeset
   873
	return $new_trace_name;
hgs
parents:
diff changeset
   874
}
hgs
parents:
diff changeset
   875
hgs
parents:
diff changeset
   876
#-------------------------------------------------------
hgs
parents:
diff changeset
   877
# Get group names
hgs
parents:
diff changeset
   878
#-------------------------------------------------------
hgs
parents:
diff changeset
   879
sub getGroupTraceData
hgs
parents:
diff changeset
   880
{
hgs
parents:
diff changeset
   881
	my ($map_trace_to_group, $map_trace_to_text, $map_trace_to_parameters, $traces_folder) = @_;
hgs
parents:
diff changeset
   882
	
hgs
parents:
diff changeset
   883
	debug("\n\ngetGroupTraceData starts with: $traces_folder");
hgs
parents:
diff changeset
   884
	
hgs
parents:
diff changeset
   885
	# Get path to traces folder
hgs
parents:
diff changeset
   886
	my $mmp_file = $ARGV[0];
hgs
parents:
diff changeset
   887
	my $file_path = $mmp_file;
hgs
parents:
diff changeset
   888
  $file_path =~ s/\\[^\\]+$/\\/i;
hgs
parents:
diff changeset
   889
  $file_path =~ s/\\\\/\\/g;
hgs
parents:
diff changeset
   890
  if ($file_path =~ m/\.mmp/i)
hgs
parents:
diff changeset
   891
  {
hgs
parents:
diff changeset
   892
  	debug("getGroupTraceData file doesn't have path. Use current dir.");
hgs
parents:
diff changeset
   893
  	my $dir = "$Bin";
hgs
parents:
diff changeset
   894
  	$file_path = $dir;
hgs
parents:
diff changeset
   895
  	$file_path =~ s/\//\\/g;
hgs
parents:
diff changeset
   896
  } 
hgs
parents:
diff changeset
   897
  
hgs
parents:
diff changeset
   898
	my $trace_folder_path = concatenatePath($file_path, $traces_folder);
hgs
parents:
diff changeset
   899
	
hgs
parents:
diff changeset
   900
	debug("getGroupTraceData MMP file: $mmp_file");
hgs
parents:
diff changeset
   901
	debug("getGroupTraceData folder path: $trace_folder_path");
hgs
parents:
diff changeset
   902
	
hgs
parents:
diff changeset
   903
	if (not -e $trace_folder_path)
hgs
parents:
diff changeset
   904
	{
hgs
parents:
diff changeset
   905
		return;
hgs
parents:
diff changeset
   906
	}
hgs
parents:
diff changeset
   907
	
hgs
parents:
diff changeset
   908
	# Get all header files in traces folder
hgs
parents:
diff changeset
   909
	my $dir_return = qx("dir $trace_folder_path\\*.h /b");
hgs
parents:
diff changeset
   910
	my @header_files = split("\n", $dir_return);
hgs
parents:
diff changeset
   911
	
hgs
parents:
diff changeset
   912
	my $found_header = 0;
hgs
parents:
diff changeset
   913
	
hgs
parents:
diff changeset
   914
	foreach my $header_file (@header_files)
hgs
parents:
diff changeset
   915
	{
hgs
parents:
diff changeset
   916
		debug("getGroupTraceData file: $header_file");
hgs
parents:
diff changeset
   917
		open FILE, "<$trace_folder_path\\$header_file" or die $!;
hgs
parents:
diff changeset
   918
		
hgs
parents:
diff changeset
   919
		debug("getGroupTraceData file: Found header!");
hgs
parents:
diff changeset
   920
		$found_header = 1;
hgs
parents:
diff changeset
   921
		
hgs
parents:
diff changeset
   922
		my $trace_id_name;
hgs
parents:
diff changeset
   923
		my $trace_group_name;
hgs
parents:
diff changeset
   924
		
hgs
parents:
diff changeset
   925
		foreach my $line (<FILE>)
hgs
parents:
diff changeset
   926
		{
hgs
parents:
diff changeset
   927
			if ($line =~ /\s*TRACE_GROUP_BEGIN\(\s*(.+?)[\s,]/)
hgs
parents:
diff changeset
   928
			{
hgs
parents:
diff changeset
   929
				$trace_group_name = $1;
hgs
parents:
diff changeset
   930
			}
hgs
parents:
diff changeset
   931
						
hgs
parents:
diff changeset
   932
			if ($line =~ /VALUE\s*\(\s*(-*)\d\d\s*,.+?,\s*(.+?),.*?,\s*(.+?)[\s\)]/)
hgs
parents:
diff changeset
   933
			{
hgs
parents:
diff changeset
   934
				my $sign = $1;
hgs
parents:
diff changeset
   935
				my $variable = $2;
hgs
parents:
diff changeset
   936
				my $type = $3;
hgs
parents:
diff changeset
   937
				
hgs
parents:
diff changeset
   938
				$map_trace_to_parameters{$trace_id_name}{$variable} = $1 . $type;
hgs
parents:
diff changeset
   939
				
hgs
parents:
diff changeset
   940
				#print $variable . " => " . $type . "\n";
hgs
parents:
diff changeset
   941
			}
hgs
parents:
diff changeset
   942
			
hgs
parents:
diff changeset
   943
			if ($line =~ /STRING_REF\s*\(\s*.+?\s*,.+?,\s*(.+?),.*?,\s*.+?[\s\)]/)
hgs
parents:
diff changeset
   944
			{
hgs
parents:
diff changeset
   945
				my $variable = $1;
hgs
parents:
diff changeset
   946
				
hgs
parents:
diff changeset
   947
				$map_trace_to_parameters{$trace_id_name}{$variable} = "STR";
hgs
parents:
diff changeset
   948
			}
hgs
parents:
diff changeset
   949
			
hgs
parents:
diff changeset
   950
			if ($line =~ /\s*TRACE_GROUP_END/)
hgs
parents:
diff changeset
   951
			{
hgs
parents:
diff changeset
   952
				$trace_group_name = "";
hgs
parents:
diff changeset
   953
			}
hgs
parents:
diff changeset
   954
hgs
parents:
diff changeset
   955
			if ($line =~ /TRACE_BEGIN\(\s*(.+?)[\s,]+\"(.*)\"/)
hgs
parents:
diff changeset
   956
			{
hgs
parents:
diff changeset
   957
				$trace_id_name = $1;
hgs
parents:
diff changeset
   958
				my $trace_text = $2;
hgs
parents:
diff changeset
   959
				
hgs
parents:
diff changeset
   960
				$trace_text =~ s/\%//g;
hgs
parents:
diff changeset
   961
				
hgs
parents:
diff changeset
   962
				if ($trace_group_name eq "")
hgs
parents:
diff changeset
   963
				{
hgs
parents:
diff changeset
   964
					print STDERR "Invalid trace definition header file: $header_file\nMost likely bug in this script...";
hgs
parents:
diff changeset
   965
				}
hgs
parents:
diff changeset
   966
				else
hgs
parents:
diff changeset
   967
				{
hgs
parents:
diff changeset
   968
					#print "$trace_id_name => $trace_group_name\n";
hgs
parents:
diff changeset
   969
					#print "$trace_id_name => $trace_text\n";
hgs
parents:
diff changeset
   970
				
hgs
parents:
diff changeset
   971
					$map_trace_to_group{$trace_id_name} = $trace_group_name;
hgs
parents:
diff changeset
   972
					$map_trace_to_text{$trace_id_name} = $trace_text;
hgs
parents:
diff changeset
   973
				}
hgs
parents:
diff changeset
   974
			}
hgs
parents:
diff changeset
   975
		}
hgs
parents:
diff changeset
   976
		
hgs
parents:
diff changeset
   977
		close FILE;
hgs
parents:
diff changeset
   978
	}
hgs
parents:
diff changeset
   979
	
hgs
parents:
diff changeset
   980
	return $found_header;
hgs
parents:
diff changeset
   981
}
hgs
parents:
diff changeset
   982
hgs
parents:
diff changeset
   983
#-------------------------------------------------------
hgs
parents:
diff changeset
   984
# Convert OST traces to PRINTF traces
hgs
parents:
diff changeset
   985
#-------------------------------------------------------
hgs
parents:
diff changeset
   986
sub convertOstToPrintf
hgs
parents:
diff changeset
   987
{
hgs
parents:
diff changeset
   988
	my ($macro, @sources) = @_;
hgs
parents:
diff changeset
   989
	debug("convertOstToPrintf starts, macro is: $macro");
hgs
parents:
diff changeset
   990
	
hgs
parents:
diff changeset
   991
	# Go through all found source files
hgs
parents:
diff changeset
   992
	foreach my $source_file (@sources)
hgs
parents:
diff changeset
   993
	{
hgs
parents:
diff changeset
   994
		debug("Source file $source_file");
hgs
parents:
diff changeset
   995
		print $source_file . "\n";
hgs
parents:
diff changeset
   996
		
hgs
parents:
diff changeset
   997
		RemoveLineBreaksFromTracesInFile($source_file, 1);
hgs
parents:
diff changeset
   998
		
hgs
parents:
diff changeset
   999
		open FILE, "<$source_file" or die $!;
hgs
parents:
diff changeset
  1000
		
hgs
parents:
diff changeset
  1001
		my $new_file_content;
hgs
parents:
diff changeset
  1002
		
hgs
parents:
diff changeset
  1003
		my $traces_converted = 0;
hgs
parents:
diff changeset
  1004
		my $file_name = "";
hgs
parents:
diff changeset
  1005
		my $last_include_line = 0;
hgs
parents:
diff changeset
  1006
		my $line_number = 0;
hgs
parents:
diff changeset
  1007
		my $traceNumber = 0;
hgs
parents:
diff changeset
  1008
	
hgs
parents:
diff changeset
  1009
		if ($source_file =~ /.*\\(.+?)\..+/)
hgs
parents:
diff changeset
  1010
		{
hgs
parents:
diff changeset
  1011
			$file_name = $1;
hgs
parents:
diff changeset
  1012
		}
hgs
parents:
diff changeset
  1013
		
hgs
parents:
diff changeset
  1014
		foreach my $line (<FILE>)
hgs
parents:
diff changeset
  1015
		{
hgs
parents:
diff changeset
  1016
			$line_number += 1;
hgs
parents:
diff changeset
  1017
			
hgs
parents:
diff changeset
  1018
			my $line_converted = 0;
hgs
parents:
diff changeset
  1019
			
hgs
parents:
diff changeset
  1020
			chomp $line;
hgs
parents:
diff changeset
  1021
			
hgs
parents:
diff changeset
  1022
			if ($line =~ /^\s*\#include/)
hgs
parents:
diff changeset
  1023
			{
hgs
parents:
diff changeset
  1024
				$last_include_line = $line_number; 
hgs
parents:
diff changeset
  1025
			}
hgs
parents:
diff changeset
  1026
			
hgs
parents:
diff changeset
  1027
			if ($line =~ /Traces\.h/)
hgs
parents:
diff changeset
  1028
			{
hgs
parents:
diff changeset
  1029
				$line = "// " . $line;
hgs
parents:
diff changeset
  1030
			}
hgs
parents:
diff changeset
  1031
			
hgs
parents:
diff changeset
  1032
			# Printf macro
hgs
parents:
diff changeset
  1033
			if ($line =~ /^\s*OstTrace.*;/i)
hgs
parents:
diff changeset
  1034
			{		
hgs
parents:
diff changeset
  1035
				my $spaces;				
hgs
parents:
diff changeset
  1036
				my $trace = "";
hgs
parents:
diff changeset
  1037
				if ($line =~ /^(\s*)/)
hgs
parents:
diff changeset
  1038
				{
hgs
parents:
diff changeset
  1039
					$spaces = $1;
hgs
parents:
diff changeset
  1040
				}
hgs
parents:
diff changeset
  1041
				
hgs
parents:
diff changeset
  1042
				$line =~ s/^\s*(OstTrace.+;).*/$1/;
hgs
parents:
diff changeset
  1043
				
hgs
parents:
diff changeset
  1044
				# Remove spaces from the beginning
hgs
parents:
diff changeset
  1045
				$trace = $line;
hgs
parents:
diff changeset
  1046
				$trace =~ s/^\s*//g;
hgs
parents:
diff changeset
  1047
				
hgs
parents:
diff changeset
  1048
				print("Trace: " . $line . "\n");
hgs
parents:
diff changeset
  1049
				
hgs
parents:
diff changeset
  1050
				if (GetBracketCount($line) % 2 == 0)
hgs
parents:
diff changeset
  1051
				{									
hgs
parents:
diff changeset
  1052
					$line = $spaces . "// " . $trace ."\n";
hgs
parents:
diff changeset
  1053
					$line .= $spaces;
hgs
parents:
diff changeset
  1054
					
hgs
parents:
diff changeset
  1055
					# Remove the macro from the trace
hgs
parents:
diff changeset
  1056
					debug("Trace before removing MACRO $trace");
hgs
parents:
diff changeset
  1057
					
hgs
parents:
diff changeset
  1058
					# Check if Function Entry or Exit trace
hgs
parents:
diff changeset
  1059
					if ($trace =~ /^\s*OstTraceFunction.*;/i)
hgs
parents:
diff changeset
  1060
					{
hgs
parents:
diff changeset
  1061
						$trace =~ /\(\s*(.*?)([,\s\)])/;
hgs
parents:
diff changeset
  1062
						$trace = "\"" . $1 . "\"";		
hgs
parents:
diff changeset
  1063
					}
hgs
parents:
diff changeset
  1064
					
hgs
parents:
diff changeset
  1065
					# Other OST traces
hgs
parents:
diff changeset
  1066
					else
hgs
parents:
diff changeset
  1067
					{
hgs
parents:
diff changeset
  1068
						$trace =~ /\((.*?,)(.*?,)\s?(.*)\)/;
hgs
parents:
diff changeset
  1069
						$trace = $3;
hgs
parents:
diff changeset
  1070
					}
hgs
parents:
diff changeset
  1071
					debug("Trace after removing MACRO $trace");
hgs
parents:
diff changeset
  1072
					
hgs
parents:
diff changeset
  1073
					# Convert
hgs
parents:
diff changeset
  1074
					$line .= $macro . "(" . $trace . ");";
hgs
parents:
diff changeset
  1075
					
hgs
parents:
diff changeset
  1076
					$new_file_content .= $line . "\n";
hgs
parents:
diff changeset
  1077
					$line_converted = 1;
hgs
parents:
diff changeset
  1078
					$traces_converted = 1;
hgs
parents:
diff changeset
  1079
					$traceNumber++;
hgs
parents:
diff changeset
  1080
				}
hgs
parents:
diff changeset
  1081
			}
hgs
parents:
diff changeset
  1082
			else
hgs
parents:
diff changeset
  1083
			{
hgs
parents:
diff changeset
  1084
				$new_file_content .= $line . "\n";
hgs
parents:
diff changeset
  1085
			}
hgs
parents:
diff changeset
  1086
		}
hgs
parents:
diff changeset
  1087
	
hgs
parents:
diff changeset
  1088
		close FILE;	
hgs
parents:
diff changeset
  1089
		
hgs
parents:
diff changeset
  1090
		if ($traces_converted == 1)
hgs
parents:
diff changeset
  1091
		{	
hgs
parents:
diff changeset
  1092
			debug("\n\nSave new source file");
hgs
parents:
diff changeset
  1093
			SaveNewSourceFile($source_file, $new_file_content, $last_include_line, $file_name, 0);
hgs
parents:
diff changeset
  1094
		}
hgs
parents:
diff changeset
  1095
	}	
hgs
parents:
diff changeset
  1096
}
hgs
parents:
diff changeset
  1097
hgs
parents:
diff changeset
  1098
#-------------------------------------------------------
hgs
parents:
diff changeset
  1099
# Get source files
hgs
parents:
diff changeset
  1100
#-------------------------------------------------------
hgs
parents:
diff changeset
  1101
sub getSourceFiles
hgs
parents:
diff changeset
  1102
{
hgs
parents:
diff changeset
  1103
	debug("getSourceFiles starts");
hgs
parents:
diff changeset
  1104
	my @sources;
hgs
parents:
diff changeset
  1105
	
hgs
parents:
diff changeset
  1106
	# Open mmp file
hgs
parents:
diff changeset
  1107
	foreach my $mmp_file (@ARGV)
hgs
parents:
diff changeset
  1108
	{
hgs
parents:
diff changeset
  1109
		debug("getSourceFiles MMP file: $mmp_file");
hgs
parents:
diff changeset
  1110
		my $file_path = $mmp_file;
hgs
parents:
diff changeset
  1111
		$file_path =~ s/\\[^\\]+$/\\/i;
hgs
parents:
diff changeset
  1112
		$file_path =~ s/\\\\/\\/g;
hgs
parents:
diff changeset
  1113
	  if ($file_path =~ m/\.mmp/i)
hgs
parents:
diff changeset
  1114
	  {
hgs
parents:
diff changeset
  1115
	  	debug("getSourceFiles file doesn't have path. Use current dir");
hgs
parents:
diff changeset
  1116
	  	my $dir = "$Bin";
hgs
parents:
diff changeset
  1117
	  	$file_path = $dir;
hgs
parents:
diff changeset
  1118
	  	$file_path =~ s/\//\\/g;
hgs
parents:
diff changeset
  1119
	  } 
hgs
parents:
diff changeset
  1120
	
hgs
parents:
diff changeset
  1121
		# print "File path: $file_path\n";
hgs
parents:
diff changeset
  1122
		
hgs
parents:
diff changeset
  1123
		my $module_name = $mmp_file;
hgs
parents:
diff changeset
  1124
		$module_name =~ s/.*\\([^\.]*).*/$1/;
hgs
parents:
diff changeset
  1125
		
hgs
parents:
diff changeset
  1126
		# print "Module name: $module_name\n";
hgs
parents:
diff changeset
  1127
		
hgs
parents:
diff changeset
  1128
		my $uid = 0;
hgs
parents:
diff changeset
  1129
		my $current_src_path;
hgs
parents:
diff changeset
  1130
		
hgs
parents:
diff changeset
  1131
		if (-e $mmp_file)
hgs
parents:
diff changeset
  1132
		{
hgs
parents:
diff changeset
  1133
			debug("getSourceFiles MMP file exists");
hgs
parents:
diff changeset
  1134
			# Go through lines
hgs
parents:
diff changeset
  1135
			open FILE, "<$mmp_file" or die $!;
hgs
parents:
diff changeset
  1136
			foreach my $line (<FILE>)
hgs
parents:
diff changeset
  1137
			{
hgs
parents:
diff changeset
  1138
				$line =~ s/\//\\/g;
hgs
parents:
diff changeset
  1139
				
hgs
parents:
diff changeset
  1140
				# Find uid
hgs
parents:
diff changeset
  1141
				if ($line =~ /uid.+0x([a-fA-F0-9]+)?/i)
hgs
parents:
diff changeset
  1142
			  {
hgs
parents:
diff changeset
  1143
			  	$uid = $1;
hgs
parents:
diff changeset
  1144
			  	debug("getSourceFiles Found UID: $uid");
hgs
parents:
diff changeset
  1145
			  	# print "Uid: $uid\n";
hgs
parents:
diff changeset
  1146
			  }
hgs
parents:
diff changeset
  1147
			   
hgs
parents:
diff changeset
  1148
			  # Find source path 
hgs
parents:
diff changeset
  1149
			  if ($line =~ /sourcepath\s+([^\s]+)/i)
hgs
parents:
diff changeset
  1150
			  {
hgs
parents:
diff changeset
  1151
			  	my $src_path = $1;
hgs
parents:
diff changeset
  1152
			  	
hgs
parents:
diff changeset
  1153
			  	# Check absolute path
hgs
parents:
diff changeset
  1154
			  	if ($src_path =~ /^[^\\]/)
hgs
parents:
diff changeset
  1155
					{
hgs
parents:
diff changeset
  1156
			  		$current_src_path = concatenatePath($file_path, $src_path . "\\");
hgs
parents:
diff changeset
  1157
			  	}
hgs
parents:
diff changeset
  1158
			  	else
hgs
parents:
diff changeset
  1159
			  	{
hgs
parents:
diff changeset
  1160
			  		$current_src_path = substr($file_path, 0, 2) . $src_path;
hgs
parents:
diff changeset
  1161
			  	}
hgs
parents:
diff changeset
  1162
			  	
hgs
parents:
diff changeset
  1163
			  	debug("getSourceFiles current src path: $current_src_path");
hgs
parents:
diff changeset
  1164
			  	# print "Current src path: $current_src_path\n";
hgs
parents:
diff changeset
  1165
			  }
hgs
parents:
diff changeset
  1166
			  
hgs
parents:
diff changeset
  1167
			  while ($line =~ /source\s+([^\s]+)/i)
hgs
parents:
diff changeset
  1168
			  {
hgs
parents:
diff changeset
  1169
			  	my $src = $1;
hgs
parents:
diff changeset
  1170
			  	
hgs
parents:
diff changeset
  1171
					my $src_path = concatenatePath($current_src_path, $src);
hgs
parents:
diff changeset
  1172
			  	
hgs
parents:
diff changeset
  1173
			  	if (-e $src_path)
hgs
parents:
diff changeset
  1174
			  	{
hgs
parents:
diff changeset
  1175
						push (@sources, $src_path);
hgs
parents:
diff changeset
  1176
			  		debug("getSourceFiles found source: $src_path");
hgs
parents:
diff changeset
  1177
			  		# print "SRC: $src_path\n";
hgs
parents:
diff changeset
  1178
			  	}
hgs
parents:
diff changeset
  1179
			  	
hgs
parents:
diff changeset
  1180
			  	$line =~ s/\Q$src//;
hgs
parents:
diff changeset
  1181
			  }
hgs
parents:
diff changeset
  1182
			}
hgs
parents:
diff changeset
  1183
			close FILE;
hgs
parents:
diff changeset
  1184
			
hgs
parents:
diff changeset
  1185
		}
hgs
parents:
diff changeset
  1186
	}
hgs
parents:
diff changeset
  1187
	
hgs
parents:
diff changeset
  1188
	return @sources;
hgs
parents:
diff changeset
  1189
}
hgs
parents:
diff changeset
  1190
hgs
parents:
diff changeset
  1191
#--------------------------------------------------------------
hgs
parents:
diff changeset
  1192
# Get operation
hgs
parents:
diff changeset
  1193
#--------------------------------------------------------------
hgs
parents:
diff changeset
  1194
sub get_operation
hgs
parents:
diff changeset
  1195
{
hgs
parents:
diff changeset
  1196
	print "\nSelect operation:\n";
hgs
parents:
diff changeset
  1197
	print "Convert Symbian traces to OST traces        (1)\n";
hgs
parents:
diff changeset
  1198
	print "Convert Kern::Printf traces to OST traces   (2)\n";
hgs
parents:
diff changeset
  1199
	print "Convert RDebug::Printf traces to OST traces (3)\n";
hgs
parents:
diff changeset
  1200
	print "Convert own MACRO to OST traces             (4)\n";
hgs
parents:
diff changeset
  1201
	print "Convert OST traces to Kern::Printf traces   (5)\n";
hgs
parents:
diff changeset
  1202
	print "Convert OST traces to RDebug::Printf traces (6)\n";
hgs
parents:
diff changeset
  1203
	  
hgs
parents:
diff changeset
  1204
  my $selection = <STDIN>;
hgs
parents:
diff changeset
  1205
  chomp $selection;
hgs
parents:
diff changeset
  1206
  
hgs
parents:
diff changeset
  1207
  if ($selection != 1 and
hgs
parents:
diff changeset
  1208
  		$selection != 2 and
hgs
parents:
diff changeset
  1209
  		$selection != 3 and
hgs
parents:
diff changeset
  1210
  		$selection != 4 and
hgs
parents:
diff changeset
  1211
  		$selection != 5 and
hgs
parents:
diff changeset
  1212
  		$selection != 6)
hgs
parents:
diff changeset
  1213
  {
hgs
parents:
diff changeset
  1214
  	print STDERR "Invalid input!\n";
hgs
parents:
diff changeset
  1215
  	die;		
hgs
parents:
diff changeset
  1216
	}
hgs
parents:
diff changeset
  1217
	
hgs
parents:
diff changeset
  1218
	if ($selection == 4)
hgs
parents:
diff changeset
  1219
	{
hgs
parents:
diff changeset
  1220
		print "\nGive the macro name (e.g. \"TRACE\" if your maco is like TRACE(\"Text\")\n";
hgs
parents:
diff changeset
  1221
		$selection = <STDIN>;
hgs
parents:
diff changeset
  1222
		chomp $selection;
hgs
parents:
diff changeset
  1223
	}
hgs
parents:
diff changeset
  1224
  
hgs
parents:
diff changeset
  1225
  return $selection;
hgs
parents:
diff changeset
  1226
}
hgs
parents:
diff changeset
  1227
hgs
parents:
diff changeset
  1228
#--------------------------------------------------------------
hgs
parents:
diff changeset
  1229
# Get traces folder
hgs
parents:
diff changeset
  1230
#--------------------------------------------------------------
hgs
parents:
diff changeset
  1231
sub get_traces_folder
hgs
parents:
diff changeset
  1232
{
hgs
parents:
diff changeset
  1233
	my $traces_folder;
hgs
parents:
diff changeset
  1234
	
hgs
parents:
diff changeset
  1235
	if (not defined $traces_folder and getGroupTraceData(\%map_trace_to_group, \%map_trace_to_text, \%map_trace_to_parameters, "..\\..\\traces"))
hgs
parents:
diff changeset
  1236
	{
hgs
parents:
diff changeset
  1237
		$traces_folder = "..\\..\\traces";
hgs
parents:
diff changeset
  1238
	}
hgs
parents:
diff changeset
  1239
	
hgs
parents:
diff changeset
  1240
	if (not defined $traces_folder and getGroupTraceData(\%map_trace_to_group, \%map_trace_to_text, \%map_trace_to_parameters, "..\\traces"))
hgs
parents:
diff changeset
  1241
	{
hgs
parents:
diff changeset
  1242
		$traces_folder = "..\\traces";
hgs
parents:
diff changeset
  1243
	}
hgs
parents:
diff changeset
  1244
	
hgs
parents:
diff changeset
  1245
	if (not defined $traces_folder and getGroupTraceData(\%map_trace_to_group, \%map_trace_to_text, \%map_trace_to_parameters, "..\\..\\symbian_traces\\autogen"))
hgs
parents:
diff changeset
  1246
	{
hgs
parents:
diff changeset
  1247
		$traces_folder = "..\\..\\symbian_traces\\autogen";
hgs
parents:
diff changeset
  1248
	}
hgs
parents:
diff changeset
  1249
	
hgs
parents:
diff changeset
  1250
	if (not defined $traces_folder and getGroupTraceData(\%map_trace_to_group, \%map_trace_to_text, \%map_trace_to_parameters, "..\\..\\..\\symbian_traces\\autogen"))
hgs
parents:
diff changeset
  1251
	{
hgs
parents:
diff changeset
  1252
		$traces_folder = "..\\..\\..\\symbian_traces\\autogen";
hgs
parents:
diff changeset
  1253
	}
hgs
parents:
diff changeset
  1254
	
hgs
parents:
diff changeset
  1255
	if (not defined $traces_folder and getGroupTraceData(\%map_trace_to_group, \%map_trace_to_text, \%map_trace_to_parameters, "..\\..\\..\\..\\symbian_traces\\autogen"))
hgs
parents:
diff changeset
  1256
	{
hgs
parents:
diff changeset
  1257
		$traces_folder = "..\\..\\..\\..\\symbian_traces\\autogen";
hgs
parents:
diff changeset
  1258
	}
hgs
parents:
diff changeset
  1259
	
hgs
parents:
diff changeset
  1260
	if (not defined $traces_folder and getGroupTraceData(\%map_trace_to_group, \%map_trace_to_text, \%map_trace_to_parameters, "..\\..\\autogen"))
hgs
parents:
diff changeset
  1261
	{
hgs
parents:
diff changeset
  1262
		$traces_folder = "..\\..\\autogen";
hgs
parents:
diff changeset
  1263
	}
hgs
parents:
diff changeset
  1264
	
hgs
parents:
diff changeset
  1265
	if (not defined $traces_folder and getGroupTraceData(\%map_trace_to_group, \%map_trace_to_text, \%map_trace_to_parameters, "..\\..\\..\\autogen"))
hgs
parents:
diff changeset
  1266
	{
hgs
parents:
diff changeset
  1267
		$traces_folder = "..\\..\\..\\autogen";
hgs
parents:
diff changeset
  1268
	}
hgs
parents:
diff changeset
  1269
	
hgs
parents:
diff changeset
  1270
	if (not defined $traces_folder and getGroupTraceData(\%map_trace_to_group, \%map_trace_to_text, \%map_trace_to_parameters, "..\\..\\..\\..\\autogen"))
hgs
parents:
diff changeset
  1271
	{
hgs
parents:
diff changeset
  1272
		$traces_folder = "..\\..\\..\\..\\autogen";
hgs
parents:
diff changeset
  1273
	}
hgs
parents:
diff changeset
  1274
	
hgs
parents:
diff changeset
  1275
	if (not defined $traces_folder)
hgs
parents:
diff changeset
  1276
	{
hgs
parents:
diff changeset
  1277
		print STDERR "Cannot find traces folder...";
hgs
parents:
diff changeset
  1278
		exit;
hgs
parents:
diff changeset
  1279
	}
hgs
parents:
diff changeset
  1280
	return $traces_folder;
hgs
parents:
diff changeset
  1281
}
hgs
parents:
diff changeset
  1282
hgs
parents:
diff changeset
  1283
hgs
parents:
diff changeset
  1284
#-------------------------------------------------------
hgs
parents:
diff changeset
  1285
# Concatenate path
hgs
parents:
diff changeset
  1286
#-------------------------------------------------------
hgs
parents:
diff changeset
  1287
sub concatenatePath
hgs
parents:
diff changeset
  1288
{
hgs
parents:
diff changeset
  1289
	my ($concatenatePathBase, $concatenatePathFile) = @_;
hgs
parents:
diff changeset
  1290
	
hgs
parents:
diff changeset
  1291
	my $backCount = 0;
hgs
parents:
diff changeset
  1292
	
hgs
parents:
diff changeset
  1293
	# Find how many back references there are and remove them
hgs
parents:
diff changeset
  1294
	while ($concatenatePathFile =~ /\.\.\\/g) 
hgs
parents:
diff changeset
  1295
	{ 
hgs
parents:
diff changeset
  1296
		$backCount++ 
hgs
parents:
diff changeset
  1297
	}
hgs
parents:
diff changeset
  1298
	$concatenatePathFile =~ s/\.\.\\//g;
hgs
parents:
diff changeset
  1299
	
hgs
parents:
diff changeset
  1300
	# If there is \ in the end of the base remove it
hgs
parents:
diff changeset
  1301
	my $lastChar = chop($concatenatePathBase);
hgs
parents:
diff changeset
  1302
	if ($lastChar ne "\\")
hgs
parents:
diff changeset
  1303
	{
hgs
parents:
diff changeset
  1304
		$concatenatePathBase = "$concatenatePathBase$lastChar";
hgs
parents:
diff changeset
  1305
	}
hgs
parents:
diff changeset
  1306
	
hgs
parents:
diff changeset
  1307
	# Remove directories from the end of the path
hgs
parents:
diff changeset
  1308
	$concatenatePathBase = reverse($concatenatePathBase);
hgs
parents:
diff changeset
  1309
	for (my $i=0; $i<$backCount; $i++)
hgs
parents:
diff changeset
  1310
	{
hgs
parents:
diff changeset
  1311
		$concatenatePathBase =~ s/.*?\\//;
hgs
parents:
diff changeset
  1312
	}
hgs
parents:
diff changeset
  1313
	$concatenatePathBase = reverse($concatenatePathBase);
hgs
parents:
diff changeset
  1314
	
hgs
parents:
diff changeset
  1315
	my $concatenatePathFullFilePath = "$concatenatePathBase\\$concatenatePathFile";
hgs
parents:
diff changeset
  1316
	
hgs
parents:
diff changeset
  1317
	return $concatenatePathFullFilePath;	
hgs
parents:
diff changeset
  1318
}
hgs
parents:
diff changeset
  1319
hgs
parents:
diff changeset
  1320
hgs
parents:
diff changeset
  1321
#-------------------------------------------------------
hgs
parents:
diff changeset
  1322
# Debug print
hgs
parents:
diff changeset
  1323
#-------------------------------------------------------
hgs
parents:
diff changeset
  1324
sub debug
hgs
parents:
diff changeset
  1325
{
hgs
parents:
diff changeset
  1326
	my ($print) = @_;
hgs
parents:
diff changeset
  1327
	
hgs
parents:
diff changeset
  1328
	if ($DEBUG)
hgs
parents:
diff changeset
  1329
	{
hgs
parents:
diff changeset
  1330
		print $print . "\n";
hgs
parents:
diff changeset
  1331
	}
hgs
parents:
diff changeset
  1332
}
hgs
parents:
diff changeset
  1333
hgs
parents:
diff changeset
  1334
warn "\n";
hgs
parents:
diff changeset
  1335
warn "Warning: this script is not supported and the Dynamic Analysis Tools team\n";
hgs
parents:
diff changeset
  1336
warn "does NOT promise to fix any bugs or add any functionality to it.\n";
hgs
parents:
diff changeset
  1337
warn "\n";