diff -r 000000000000 -r 83f4b4db085c toolsandutils/productionbldtools/AllKitsRebaseline.pm --- /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: /04640/output> +# m: +# \AllKitsRebaseline.pl +# +# + + +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 = ; + 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\\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 = "\n\n\n \n Symbian Ltd<\/supplier>\n 7.0s<\/sdk-version>\n"; + my $depends = " \n \n <\/dependencies>\n"; + my $header3 = " <\/package>\n\n \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 = ; + foreach $package (@Packages) + { + print FILE " \n"; + } + print FILE " \n" if (-e "$CustKitPath\\$PkgDefDir\\distribution.policy"); + # single srcdef file & IPR + print FILE " \n"; + print FILE " \n" if (-e "$CustKitPath\\$SrcDefDir\\distribution.policy"); + + + # DevKit packages + chdir $DevKitPath."\\".$PkgDefDir or die "Failed to change directory to $DevKitPath\\$PkgDefDir" ; + @Packages = ; + foreach $package (@Packages) + { + print FILE " \n"; + } + print FILE " \n" if (-e "$DevKitPath\\$PkgDefDir\\distribution.policy"); + # single srcdef file & IPR + print FILE " \n"; + print FILE " \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;