common/tools/ats/hlm_prep_package.pl
author Simon Howkins <simonh@symbian.org>
Tue, 10 Aug 2010 18:11:17 +0100
changeset 1206 4518bca1baf0
parent 1155 1bd0e92dbd45
child 1209 10d9bc494ce9
permissions -rw-r--r--
Improved diagnostic output: when the build fails because a package cannot be cloned into the build drive, it says which package and the repo source and destination. Improved caching logic, so that it doesn't depend on network availability as much. Improved indentation.

#!/usr/bin/perl

# Copyright (c) 2009 Symbian Foundation Ltd
# This component and the accompanying materials are made available
# under the terms of the License "Eclipse Public License v1.0"
# which accompanies this distribution, and is available
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
#
# Initial Contributors:
# Symbian Foundation Ltd - initial contribution.
#   Maciej Seroka, maciej@symbian.org
#
# Description:
#   This is a script for fixing pkg and ini files.

use strict;
use File::Copy;
use Tie::File;
use File::Find;

my @files;
my @ini_files;
my @lines;
my $file;
my $n;
my $file_fixed;
sub Wanted;
sub Parse_ini;

my $package_path;
if ($ARGV[0]) {
  $package_path = $ARGV[0];
 }
else { die "Missing parameter \"package path\". For example: D:\\sf\\app\\musicplayer"; }

find(\&Wanted, $package_path);

#Copy a pkg file and replace \armv5\urel with $(platform)\$(target)
foreach $file (@files) { #Replace "//v800020/Publish" with "http://cdn.symbian,org"
	copy($file,$file . ".orig") or die ("Cannot copy file \"$file\". $!\n");
	tie (@lines, 'Tie::File', $file, recsep => "\n") or die ("Cannot tie file \"$file\". $!\n");
	$n = 0;
	$file_fixed = 0;
	print @lines[49] . "\n";
	foreach (@lines) {
		if (lc(@lines[$n]) =~ m/epoc32\\release\\armv5\\urel\\/) {
			@lines[$n] = lc(@lines[$n]);
			@lines[$n] =~ s/\\armv5\\urel\\/\\\$(platform)\\\$(target)\\/;
			$file_fixed = 1;
		}
		if (lc(@lines[$n]) =~ m/epoc32\/release\/armv5\/urel\//) {
			@lines[$n] = lc(@lines[$n]);
			@lines[$n] =~ s/\/armv5\/urel\//\/\$(platform)\/\$(target)\//;
			$file_fixed = 1;
		}
		if (lc(@lines[$n]) =~ m/epoc32\\release\\armv5\\udeb\\/) {
			@lines[$n] = lc(@lines[$n]);
			@lines[$n] =~ s/\\armv5\\udeb\\/\\\$(platform)\\\$(target)\\/;
			$file_fixed = 1;
		}
#		if (lc(@lines[$n]) =~ m/e:\\/) { # Replace e: with c:
#			@lines[$n] = lc(@lines[$n]);
#			@lines[$n] =~ s/e:\\/c:\\/;
#			$file_fixed = 1;
#		}
		$n++;
	}
	if ($file_fixed) { print $file . " fixed.\n"; }
	untie @lines;
}

find(\&Parse_ini, $package_path);

foreach $file (@ini_files) {
	if ((lc($file) =~ m/\/init\//) || (lc($file) =~ m/\/group\//)) { # Only operate on files from /init/ directories
		copy($file,$file . ".orig") or die ("Cannot copy file \"$file\". $!\n");
		tie (@lines, 'Tie::File', $file, recsep => "\n") or die ("Cannot tie file \"$file\". $!\n");
		$n = 0;
		$file_fixed = 0;
		foreach (@lines) {
			if (lc(@lines[$n]) =~ m/^separateprocesses/) {
				@lines[$n] = '#' . @lines[$n];
				$file_fixed = 1;
			}
			if (lc(@lines[$n]) =~ m/^uitestingsupport/) {
				@lines[$n] = '#' . @lines[$n];
				$file_fixed = 1;
			}
			$n++;
		}
		if ($file_fixed) { print $file . " fixed.\n"; }
		untie @lines;
	}
}

sub Wanted {
    # only operate on .pkg files
	/.pkg$/ or return;
    push (@files, $File::Find::name);
}

sub Parse_ini {
    # only operate on .ini files
	/\.ini$/ or return;
    push (@ini_files, $File::Find::name);
}