--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/tracecompiler/tracecompiler.pl Thu Sep 02 22:05:40 2010 +0300
@@ -0,0 +1,296 @@
+#
+# Copyright (c) 2009-2010 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:
+#
+# Finds MMP paths from component makefiles and forwards them to MMP parser
+#
+#!perl -w
+use FindBin;
+my $trace_compiler_path;
+
+BEGIN
+{
+ # Get current directory as TraceCompiler path
+ $trace_compiler_path = $FindBin::Bin; # e.g. X:/epoc32/tools
+ $trace_compiler_path =~ s/\\/\//g; # Replace all "\" with "/"
+ $trace_compiler_path =~ s/\/$//; # Remove possible trailing slash
+}
+
+use lib $trace_compiler_path;
+
+use strict;
+use env;
+use Cwd;
+use tracecompiler;
+use tracecompiler_mmp_data;
+
+# EPOC root is two levels down from TraceCompiler level
+my $epocroot = tracecompiler::concatenatePath($trace_compiler_path, "../../");
+$epocroot =~ s/\/$//; # Remove possible trailing slash
+my $drive = substr($epocroot, 0, 2);
+my $build_target;
+my $project_name;
+my $action = "RUN";
+
+# Get Java command or EXIT if not found
+my $java_command = tracecompiler::getJavaCommand();
+
+if (not defined $java_command)
+{
+ print STDERR "Java 1.5 or newer required!\n";
+ exit;
+}
+
+#-------------------------------------------------------
+# Go through command line arguments
+#-------------------------------------------------------
+while ( @ARGV )
+{
+ my $arg = shift(@ARGV);
+
+ # Print version information
+ if ($arg eq "-v")
+ {
+ my $version = tracecompiler::getTraceCompilerVersion();
+ print $version;
+ exit;
+ }
+ # Clean TraceCompiler generated files
+ elsif ($arg eq "-clean")
+ {
+ $action = "CLEAN";
+ }
+ # Finalize TraceCompiler running
+ elsif ($arg eq "-final")
+ {
+ $action = "FINAL";
+ }
+ # Build target (e.g. armv5)
+ elsif (not defined $build_target)
+ {
+ $build_target = $arg;
+ }
+ # Project name (e.g. MyComponent)
+ else
+ {
+ $project_name = $arg;
+ }
+}
+
+#-------------------------------------------------------
+# Build target must now be defined or print usage info
+#-------------------------------------------------------
+if (not defined $build_target)
+{
+ my $version = tracecompiler::getTraceCompilerVersion();
+ print $version;
+ print "\nUsage: tracecompiler.pl build_target in the folder containing bld.inf. bldmake bldfiles must be run before this.\n";
+ print "Example: tracecompiler.pl armv5\n";
+ exit;
+}
+
+my $return_string = "";
+
+#-------------------------------------------------------
+# Find component makefile path from abld.bat
+#-------------------------------------------------------
+tracecompiler::debugTraceCompilerVersion();
+tracecompiler::debugMsg("Find component makefile path from abld.bat");
+open(ABLD, "<abld.bat") or die $!;
+my $makefile;
+while (<ABLD>)
+{
+ if (/ABLD.PL/)
+ {
+ my $makefilepath = $_;
+ $makefilepath =~ s/perl -S ABLD.PL "(.*)\\" .*$/$1/;
+ chop($makefilepath);
+
+ # Change all "\" characters to "/"
+ $makefilepath =~ s/\\/\//g;
+
+ $makefilepath = "$epocroot/epoc32/build".$makefilepath;
+ $makefile = $makefilepath.$build_target.".MAKE";
+ }
+}
+close ABLD or die $!;
+
+#-------------------------------------------------------
+# Find project makefile paths from component makefile
+#-------------------------------------------------------
+my @projectmakefiles;
+my $mmps;
+
+tracecompiler::debugMsg("Find project makefile paths from component makefile $makefile");
+
+open(MAKEFILE, "<$makefile") or (print STDERR "Cannot open makefile $makefile\n" and exit);
+while (<MAKEFILE>)
+{
+ my $line = $_;
+
+ if ($line =~ /\"([^\"]+?)\"\s+\"PRJ_.*MMPFILES\s+MMP\"\s+\"([^\"]+?)\"/i)
+ {
+ my $bldinf = $1;
+ my $mmp = $2;
+
+ tracecompiler::debugMsg("Found BLD file: $bldinf");
+
+ # Remove bld.inf from the end of the path
+ $bldinf =~ s/(.*)[\\\/].*/$1\//;
+
+ my $mmp_file = tracecompiler::concatenatePath($bldinf, $mmp);
+
+ # Change all "//" to "/"
+ $mmp_file =~ s/\/\//\//g;
+
+ # If .mmp is missing from the end, add it
+ if ($mmp_file !~ /\.mmp$/i)
+ {
+ $mmp_file .= ".mmp";
+ }
+
+ tracecompiler::debugMsg("Found MMP file: $drive$mmp_file\n");
+
+ # If project name is defined, only add that MMP to the list of mmp files
+ if (defined $project_name)
+ {
+ if ($mmp_file =~ /($project_name.mmp)$/i)
+ {
+ $mmps .= $drive . $mmp_file . " ";
+ }
+ }
+ else
+ {
+ $mmps .= $drive . $mmp_file . " ";
+ }
+ }
+
+}
+close MAKEFILE or die $!;
+
+#-------------------------------------------------------
+# Call the MMP parser for each MMP (or clean / final)
+#-------------------------------------------------------
+if (defined $mmps)
+{
+ foreach my $mmp (split(" ", $mmps))
+ {
+ # Pass MMP file path to Parse MMP
+ if ($action eq "RUN")
+ {
+ my $command = "perl $trace_compiler_path/tracecompiler_parse_mmp.pl $mmp";
+ tracecompiler::debugMsg("Call the MMP parser. Command: $command\n");
+ print qx($command);
+ }
+
+ # Clean files using this MMP
+ elsif ($action eq "CLEAN")
+ {
+ my $mmpObject = tracecompiler_mmp_data->new($mmp);
+ cleanTraceCompilerFiles($mmpObject);
+ }
+
+ # Finalize files using this MMP
+ elsif ($action eq "FINAL")
+ {
+ my $mmpObject = tracecompiler_mmp_data->new($mmp);
+ finalizeTraceCompilerRun($mmpObject);
+ }
+ }
+}
+else
+{
+ tracecompiler::debugMsg("Could not find any MMP files!");
+}
+
+
+
+
+
+#-------------------------------------------------------#
+#-------------------------------------------------------#
+#--------------------SUBROUTINES------------------------#
+#-------------------------------------------------------#
+#-------------------------------------------------------#
+
+#-------------------------------------------------------
+# Cleans TraceCompiler generated files
+#-------------------------------------------------------
+sub cleanTraceCompilerFiles
+{
+ tracecompiler::debugMsg("Clean TraceCompiler Files");
+ my $mmpObj = $_[0];
+ if($mmpObj->{tracespaths}) {
+ foreach my $tracesFolder (@{$mmpObj->{tracespaths}})
+ {
+ if (-e $tracesFolder and opendir(DIR, $tracesFolder))
+ {
+ while (defined(my $file = readdir(DIR)))
+ {
+ # Delete files ending with *Traces.h
+ if ($file =~ /Traces\.h$/i)
+ {
+ print "Cleaning: " . $tracesFolder . "/" . $file . "\n";
+ unlink $tracesFolder . "/" . $file || print $!;
+ }
+ # Delete cache files
+ elsif ($file =~ /\.cache$/i)
+ {
+ print "Cleaning: " . $tracesFolder . "/" . $file . "\n";
+ unlink $tracesFolder . "/" . $file || print $!;
+ }
+ }
+ closedir(DIR);
+ }
+ }
+ }
+
+ tracecompiler::debugMsg("Cleaning TraceCompiler Files ready\n");
+
+ # Finalize TraceCompiler run
+ finalizeTraceCompilerRun($mmpObj);
+}
+
+#-------------------------------------------------------
+# Finalizes TraceCompiler run
+#-------------------------------------------------------
+sub finalizeTraceCompilerRun
+{
+ tracecompiler::debugMsg("Finalize TraceCompiler Run");
+ my $mmpObj = $_[0];
+ if($mmpObj->{tracespaths}) {
+ foreach my $tracesFolder (@{$mmpObj->{tracespaths}})
+ {
+ my $defFile = $tracesFolder . "/" . "OstTraceDefinitions.h";
+ # Open OstTraceDefinitions.h and read stuff to array
+ if (-e $defFile and open(FILE,"<$defFile"))
+ {
+ my @lines = <FILE>;
+ close(FILE);
+
+ # Write stuff back to OstTraceDefinitions.h
+ open(FILE,">$defFile") || exit;
+ foreach my $line (@lines)
+ {
+ # Comment out the define
+ $line =~ s/(.*)#define OST_TRACE_COMPILER_IN_USE/\/\/ #define OST_TRACE_COMPILER_IN_USE/;
+ print FILE $line;
+ }
+ close(FILE);
+ }
+ }
+}
+
+tracecompiler::debugMsg("Finalizing TraceCompiler Run ready\n");
+}