--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/toolsandutils/productionbldtools/AllKitsRebaseline.pm Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,379 @@
+#!perl
+
+# AllKitsRebaseline.pm
+
+# 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:
+# Version Info:
+# Run with the substed build drive as the current directory.
+# e.g. subst m: <mapped drive to build machine>/04640/output>
+# m:
+# <location of tool>\AllKitsRebaseline.pl <absolute target directory of new packages> <codeline-tree>
+#
+#
+
+
+use Win32::Registry;
+
+
+package AllKitsRebaseline;
+
+use Win32::Process;
+use Win32::Registry;
+use File::Path;
+use File::Copy;
+
+use KitStandardLocations;
+use ZipLog2Pkg;
+
+
+
+# ------------------------------------- Global variables -----------------------------------
+
+# Drive/directory for new packages
+my $SaveToDir = "";
+my $iprTool = "$SourceDir\\os\\buildtools\\bldsystemtools\\commonbldutils\\iprtool.pl";
+my $commonToolsDirectory = "";
+
+
+# --------------------------------- Start of CreatePackages() ----------------------------------
+#
+#
+sub CreateFileLists()
+{
+
+ # main array: within each entry is:
+ # file name
+ # IPR category to filter on
+ # directory to filter on
+ # a flag to indicate if warnings should be ignored if the directory does not exist
+ # additional flags for CreateProcess call
+ my @RequiredLists =
+ (
+ # common generic
+ ["GT-common-A", "A", "$SourceDir\\common\\generic"],
+ ["GT-common-B", "B", "$SourceDir\\common\\generic"],
+ ["GT-common-I", "I", "$SourceDir\\common\\generic"],
+ ["GT-common-O", "O", "$SourceDir\\common\\generic"],
+ ["GT-common-C", "C", "$SourceDir\\common\\generic"],
+ ["GT-common-DET", "DET", "$SourceDir\\common\\generic", "", "-e"],
+ ["GT-common-FG", "FG", "$SourceDir\\common\\generic"],
+
+ # tree generic
+ ["GT-$Platform-A", "A", "$SourceDir\\$Platform\\generic"],
+ ["GT-$Platform-B", "B", "$SourceDir\\$Platform\\generic"],
+ ["GT-$Platform-I", "I", "$SourceDir\\$Platform\\generic"],
+ ["GT-$Platform-O", "O", "$SourceDir\\$Platform\\generic"],
+ ["GT-$Platform-C", "C", "$SourceDir\\$Platform\\generic"],
+ ["GT-$Platform-DET", "DET", "$SourceDir\\$Platform\\generic", "", "-e"],
+ ["GT-$Platform-FG", "FG", "$SourceDir\\$Platform\\generic"],
+
+ # common UI
+ ["UI-common-A", "A", "$SourceDir\\common\\techview"],
+ ["UI-common-B", "B", "$SourceDir\\common\\techview"],
+ ["UI-common-I", "I", "$SourceDir\\common\\techview"],
+ ["UI-common-O", "O", "$SourceDir\\common\\techview"],
+ ["UI-common-C", "C", "$SourceDir\\common\\techview"],
+ ["UI-common-DET", "DET", "$SourceDir\\common\\techview"],
+ ["UI-common-FG", "FG", "$SourceDir\\common\\techview"],
+
+ # tree UI
+ ["UI-$Platform-A", "A", "$SourceDir\\$Platform\\techview", "nowarn"],
+ ["UI-$Platform-B", "B", "$SourceDir\\$Platform\\techview", "nowarn"],
+ ["UI-$Platform-I", "I", "$SourceDir\\$Platform\\techview", "nowarn"],
+ ["UI-$Platform-O", "O", "$SourceDir\\$Platform\\techview", "nowarn"],
+ ["UI-$Platform-C", "C", "$SourceDir\\$Platform\\techview", "nowarn"],
+ ["UI-$Platform-DET", "DET", "$SourceDir\\$Platform\\techview", "nowarn"],
+ ["UI-$Platform-FG", "FG", "$SourceDir\\$Platform\\techview", "nowarn"],
+
+ # testtools
+ ["TestTools", "DEFGT", "$SourceDir\\os\\unref\\orphan\\comtt"],
+
+ # docs
+ ["Doc-DET", "DET", "$OutputDir\\documentation"],
+ ["Doc-FGX", "FGX", "$OutputDir\\documentation"],
+ ["Doc-common-DET", "DET", "$SourceDir\\common\\developerlibrary"],
+ ["Doc-common-FGX", "FGX", "$SourceDir\\common\\developerlibrary"],
+ ["Doc-common-system-FGX", "FGX", "$SourceDir\\common\\system"],
+
+ ["Conn-common-Src", "DEFGT", "$SourceDir\\common\\epocconnect", "nowarn"],
+ ["Conn-$Platform-Src", "DEFGT", "$SourceDir\\$Platform\\epocconnect", "nowarn"],
+ ["Conn-Bin", "DEFGXT", "$OutputDir\\symbianconnect", "nowarn"],
+
+ ["TechViewExampleSDK", "DEFGXT","$SourceDir\\$Platform\\product\\TechViewExampleSDK"]
+ ) ;
+
+
+
+
+ sub ErrorReport
+ {
+ print "Error: ".Win32::FormatMessage( Win32::GetLastError() );
+ }
+
+
+ # get Perl bin directory
+ if ( ( $main::HKEY_LOCAL_MACHINE->Open("SOFTWARE\\Perl", $RegObj) ) && ( $RegObj->QueryValueEx("bindir", my $Type, $Value) ) )
+ {
+ # fix problem where Perl 5.6's bindir registry variable contains the exe, but 5.005's doesn't; remove exe name
+ $Value =~ s|\\perl\.exe$||i;
+ }
+ else
+ {
+ print "Unable to find Perl key\n";
+ exit;
+ }
+ $RegObj->Close();
+
+
+ # preserve STDOUT, STDERR
+ open(OLDOUT, ">&STDOUT") or die $!; # backup filehandles
+ open(OLDERR, ">&STDERR") or die $!;
+ open(STDERR, ">NUL") or die $!;
+
+
+ # start the processes
+ my @Processes ;
+ my $ProcessObj;
+ foreach $entry (@RequiredLists)
+ {
+ my $FileName = $entry->[0];
+ my $Category = $entry->[1];
+ my $Directory = $entry->[2];
+ my $noWarn = $entry->[3];
+ my $ExtraFlag = $entry->[4];
+
+ if (-d "$Directory")
+ {
+ # direct STDOUT to output file
+ open(STDOUT,">$SaveToDir\\$FileName");
+ select(STDOUT); # force a flush on stdout so that any output will be in sync.
+
+ # create process and inherit STDOUT
+ Win32::Process::Create($ProcessObj, "$Value\\perl.exe", "perl.exe ".$iprTool." -c $Category -f -1 -s $ExtraFlag", 1, NORMAL_PRIORITY_CLASS, "$Directory") || die ErrorReport();
+ push @Processes, $ProcessObj;
+ }
+ else
+ {
+ print OLDOUT "INFO: Directory not found: $Directory\n" if ($noWarn !~ /nowarn/i);
+ open(FILE,">$SaveToDir\\$FileName");
+ print FILE "\n"; # force all output files to exist, even if no content found by iprtool
+ close FILE;
+ }
+ };
+
+
+
+ # wait for them to complete
+ while (scalar(@Processes) > 0)
+ {
+ $ProcessObj = pop @Processes;
+ $ProcessObj->Wait(INFINITE);
+ print ".";
+ } print "\n";
+
+
+ open(STDOUT, ">&OLDOUT") or die $!; # restore filehandle
+ open(STDERR, ">&OLDERR") or die $!;
+
+ my $SourceDirWithoutDrive = $SourceDir;
+ $SourceDirWithoutDrive =~ s/^\w://; # remove initial drive letter
+ $SourceDirWithoutDrive =~ s#\\#\\\\#g; # ensure slash is escaped
+
+ my $OutputDirWithoutDrive = $OutputDir;
+ $OutputDirWithoutDrive =~ s/^\w://; # remove initial drive letter
+ $OutputDirWithoutDrive =~ s#\\#\\\\#g; # ensure slash is escaped
+
+ # remove IPR status info and the initial directory (\src, \bin etc.)
+
+ foreach $entry (@RequiredLists)
+ {
+ my $FileName = $entry->[0];
+
+ # read in file
+ if (open (FILE, "<$SaveToDir\\$FileName"))
+ {
+ my @file = <FILE>;
+ close(FILE);
+
+ unlink("$SaveToDir\\$FileName");
+
+ if (open (FILE, ">$SaveToDir\\$FileName"))
+ {
+
+ foreach $line (@file)
+ {
+ chomp($line);
+ if ($line =~ m/^\s*([\\\/].+[^\/\\]$)/)
+ {
+ # remove whitespace at start of line
+ $line =~ s/^\s*//i;
+
+ # if file name includes "common", replace preceeding part with ''
+ $line =~ s/^$SourceDirWithoutDrive([\\\/]common[\\\/].*$)/$1/i;
+
+ # if file name includes $Platform, replace preceeding part with ''
+ $line =~ s/^$SourceDirWithoutDrive([\\\/]$Platform[\\\/].*$)/$1/i;
+
+ # if file name includes bin\$Platform\<build_type>\epoc32, replace with 'epoc32'
+ $line =~ s/^$OutputDirWithoutDrive[\\\/][^\\\/]*([\\\/]epoc32[\\\/].*$)/$1/i;
+
+ # if file name includes bin\$Platform\, delete (for bin.connect, docs)
+ $line =~ s/^$OutputDirWithoutDrive//i;
+
+ # replace & with &
+ $line =~ s/&/&/i;
+
+ print FILE "$line\n" ;
+ }
+ }
+ close(FILE);
+ }
+ else
+ {
+ print "ERROR: Couldn't create file $SaveToDir\\$FileName\n";
+ }
+ }
+ else
+ {
+ print "ERROR: Couldn't open file $SaveToDir\\$FileName\n";
+ }
+ }
+ return 0;
+
+}
+
+
+
+# --------------------------------- Start of ProcessPackageDefinitions() ----------------------------------------
+
+sub ProcessPackageDefinitions()
+{
+
+ my $PackageName = "com.symbian.src.package-definitions" ;
+
+ my $header1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<packagedef version=\"1.0\">\n <package name=\"";
+ my $header2 = "\" major-version=\"0\" minor-version=\"0\">\n <supplier>Symbian Ltd<\/supplier>\n <sdk-version>7.0s<\/sdk-version>\n";
+ my $depends = " <dependencies>\n <dependency name=\"$dependency\" major-version=\"0\" minor-version=\"0\" build-number=\"0\"\/>\n <\/dependencies>\n";
+ my $header3 = " <\/package>\n\n <manifest>\n";
+ my $footer = " <\/manifest>\n<\/packagedef>";
+
+ chdir ($commonToolsDirectory); # ensure correct drive
+ chdir $CustKitPath."\\".$PkgDefDir or die "Failed to change directory to ".$CustKitPath."\\".$PkgDefDir;
+
+ # open pkgdef file here so it's included in it's own list!
+ open (FILE, ">$PackageName.pkgdef") or die "Couldn't open file $PackageName.pkgdef";
+ print FILE $header1.$PackageName.$header2.$header3;
+
+ # CustKit packages first
+ my @Packages = <com.symbian.*.pkgdef>;
+ foreach $package (@Packages)
+ {
+ print FILE " <item src=\"\\$CustKitDir\\$PkgDefDir\\$package\" dest=\"[sdkroot]\\src\\$Platform\\$ProductDir\\$CustKitDir\\$PkgDefDir\\$package\"/>\n";
+ }
+ print FILE " <item src=\"\\$CustKitDir\\$PkgDefDir\\distribution.policy\" dest=\"[sdkroot]\\src\\$Platform\\$ProductDir\\$CustKitDir\\$PkgDefDir\\distribution.policy\"/>\n" if (-e "$CustKitPath\\$PkgDefDir\\distribution.policy");
+ # single srcdef file & IPR
+ print FILE " <item src=\"\\$CustKitDir\\$SrcDefDir\\CustKit.srcdef\" dest=\"[sdkroot]\\src\\$Platform\\$ProductDir\\$CustKitDir\\$SrcDefDir\\CustKit.srcdef\"/>\n";
+ print FILE " <item src=\"\\$CustKitDir\\$SrcDefDir\\distribution.policy\" dest=\"[sdkroot]\\src\\$Platform\\$ProductDir\\$CustKitDir\\$SrcDefDir\\distribution.policy\"/>\n" if (-e "$CustKitPath\\$SrcDefDir\\distribution.policy");
+
+
+ # DevKit packages
+ chdir $DevKitPath."\\".$PkgDefDir or die "Failed to change directory to $DevKitPath\\$PkgDefDir" ;
+ @Packages = <com.symbian.*pkgdef>;
+ foreach $package (@Packages)
+ {
+ print FILE " <item src=\"\\$DevKitDir\\$PkgDefDir\\$package\" dest=\"[sdkroot]\\src\\$Platform\\$ProductDir\\$DevKitDir\\$PkgDefDir\\$package\"/>\n";
+ }
+ print FILE " <item src=\"\\$DevKitDir\\$PkgDefDir\\distribution.policy\" dest=\"[sdkroot]\\src\\$Platform\\$ProductDir\\$DevKitDir\\$PkgDefDir\\distribution.policy\"/>\n" if (-e "$DevKitPath\\$PkgDefDir\\distribution.policy");
+ # single srcdef file & IPR
+ print FILE " <item src=\"\\$DevKitDir\\$SrcDefDir\\DevKit.srcdef\" dest=\"[sdkroot]\\src\\$Platform\\$ProductDir\\$DevKitDir\\$SrcDefDir\\DevKit.srcdef\"/>\n";
+ print FILE " <item src=\"\\$DevKitDir\\$SrcDefDir\\distribution.policy\" dest=\"[sdkroot]\\src\\$Platform\\$ProductDir\\$DevKitDir\\$SrcDefDir\\distribution.policy\"/>\n" if (-e "$DevKitPath\\$SrcDefDir\\distribution.policy");
+
+ print FILE $footer;
+ close(FILE);
+}
+
+
+
+
+# --------------------------------- Start of AllKitsRebaseline() ----------------------------------------
+
+sub AllKitsRebaseline($)
+{
+ $SaveToDir = shift;
+
+ # get initial directory so other tools/scripts in this directory can be found
+ $commonToolsDirectory = $FindBin::Bin;
+ my $platformToolsDirectory = $commonToolsDirectory;
+ $platformToolsDirectory =~ s/common/$Platform/i;
+
+
+ if ($SaveToDir eq "")
+ {
+ die "Parameter (SaveToDir) is required - please run with parameter\n";
+ }
+
+ # Create directory for saving temporary packages
+ if (! -e $SaveToDir)
+ {
+ mkpath $SaveToDir or die "Unable to create directory $SaveToDir - $!";
+ }
+
+
+ # Create the categorised lists of files
+ print "** CreateFileLists()\n";
+ CreateFileLists();
+
+
+ # prepare special file lists for static packages - assumes supplementary packages will build correctly
+ open (FILE,">$SaveToDir\\static");
+ my $OutputDirWithoutDrive = $OutputDir;
+ $OutputDirWithoutDrive =~ s/^\w:[\/\\]//; # remove initial drive letter and slash
+ print FILE "$OutputDirWithoutDrive\\techview\\epoc32\\tools\\productinstaller\\License.txt\n" if (-e "$SourceDir\\common\\generic\\tools\\custkits\\ProductInstaller\\pkgdef\\License.txt");
+ print FILE "lockit.zip\n" if (-e "$ZipDir\\lockit.zip");
+ close(FILE);
+
+
+ # copy package definition files from source code control system to build directories
+ (mkpath $DevKitPath or print "WARNING: Unable to create directory $DevKitPath - $!\n") if (! -d $DevKitPath);
+ (mkpath $SuppKitPath or print "WARNING: Unable to create directory $SuppKitPath - $!\n") if (! -d $SuppKitPath);
+
+
+ system ("xcopy $SourceDir\\$Platform\\$ProductDir\\$DevKitDir $DevKitPath /E /Z /I /Q");
+ system ("xcopy $SourceDir\\$Platform\\$ProductDir\\$SuppKitDir $SuppKitPath /E /Z /I /Q");
+
+
+ # generate the package definition files
+ chdir ("$SaveToDir") or print "Unable to change to directory $SaveToDir\n";
+ print "** Source packages\n";
+ ZipLog2Pkg::ZipLog2Pkg ("$platformToolsDirectory\\".$BuildBaseName."_src", "-batch");
+
+ print "** Static packages\n";
+ ZipLog2Pkg::ZipLog2Pkg ("$platformToolsDirectory\\".$BuildBaseName."_static", "-batch");
+
+ # change to directory of new files and generate the non-source files
+ chdir($FindBin::Bin) or print "Unable to change to directory $FindBin::Bin\n";
+
+ print "** NonSourceRebaseline - generating logs\n";
+ $ENV{"ProductDir"}=$ProductDir; # required by exports.bat
+ system ("call $commonToolsDirectory\\exports.bat");
+
+ print "** NonSourceRebaseline - generating non source packages\n";
+ ZipLog2Pkg::ZipLog2Pkg ("$platformToolsDirectory\\".$BuildBaseName."_bin", "-batch");
+
+
+}
+
+
+return 1;