diff -r a9d4531388d0 -r d90029decf65 bldsystemtools/commonbldutils/clean.pl --- a/bldsystemtools/commonbldutils/clean.pl Wed Mar 31 23:20:42 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,358 +0,0 @@ -# -# Copyright (c) 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: -# - -use strict; - -use Getopt::Long; -use File::Path; -use File::Spec::Functions; - -my $gRealTimeBuildErrors = 0; -sub RealTimeBuildError($) -{ - $gRealTimeBuildErrors++; - print STDERR "ERROR: RealTimeBuild: ", @_, "\n"; - return "RealTimeBuild error"; -} - -# Process the commandline -my ($iDataSource, $iSrc, $iMRPSrc, $platform, $iDummy, $iVerbose) = ProcessCommandLine(); - -my ($iDirList)= ProcessList($iDataSource, $iSrc, $iMRPSrc, $platform, $iVerbose); -my @delete; - -search_dir($iSrc, $iDirList, \@delete, $iVerbose); - -foreach my $leftover (keys %$iDirList) -{ - print "REMARK: LEFTOVER: $leftover ($$iDirList{$leftover})\n"; -} - -if ($gRealTimeBuildErrors && !$iDummy) -{ - print STDERR "\nWARNING: Files will NOT be deleted, because of earlier real time build errors\n\n"; - $iDummy = 1; -} - -foreach my $delete (@delete) -{ - if ($iDummy) - { - print "REMARK: $delete is not referenced by any MRP\n"; - } else { - # Delete the files or directories - # make sure it is not read only - #Convert back to \ for dos command - $delete =~ s#\/#\\#g; - system("attrib -r /s /d \"$delete\""); - my $deletenum = rmtree($delete); - if ($deletenum == 0) - { - RealTimeBuildError("failed to deleted $delete"); - } elsif (-d "$delete") { - RealTimeBuildError("failed to deleted directory $delete"); #Because it still exists - } elsif ($deletenum > 1) { - print "REMARK: deleted $deletenum files in directory $delete as they are not referenced by any MRP\n"; - } else { - print "REMARK: deleted $delete as it is not referenced by any MRP\n"; - } - } -} - -sub search_dir -{ - my ($dir, $iDirList, $delete, $iVerbose) = @_; - my @flist; - - print "Processing $dir\n" if ($iVerbose); - if (opendir(DIRH,"$dir")) - { - @flist=readdir(DIRH); - closedir DIRH; - ENTRY: foreach my $entry (@flist) - { - # ignore . and .. : - next if ($entry eq "." || $entry eq ".."); - my $partial_match; - # Check entry again $iDirList for matches - foreach my $sourceline (keys %$iDirList) - { - if ($sourceline =~ m#^$dir/$entry$#i) - { - # Exact match delete entry in %$iDirList - # Check to see if something has already partial matched - print "REMARK: $dir/$entry is probably covered more than once\n" if ($partial_match); - if ($iVerbose) - { - if (-d "$dir/$entry") - { - print "Keeping directory $dir/$entry ($$iDirList{$sourceline})\n"; - } else { - print "Keeping file $dir/$entry ($$iDirList{$sourceline})\n"; - } - } - delete $$iDirList{$sourceline}; - # No more processing required - next ENTRY; - } - # Check to see if there is reference to inside this directory - if ($sourceline =~ m#^$dir/$entry/#i) - { - # something reference this as a directory need more processing - $partial_match = 1 if (-d "$dir/$entry"); - } - } - if ($partial_match) - { - search_dir("$dir/$entry", $iDirList, $delete, $iVerbose) if (-d "$dir/$entry"); - next ENTRY; - } - # No match place on deletion list - push @$delete, "$dir/$entry"; - print "Marking $dir/$entry for delete\n" if ($iVerbose); - } - }else{ - RealTimeBuildError("can not read directory $dir"); - } -} - -# ProcessList -# -# Inputs -# $iDataSource - ref to array of files to process -# $iSrc - real location of source files -# $iMRPSrc - where the mrp thinks they are -# -# Outputs -# -# Description -# This function processes mrp files -sub ProcessList -{ - my ($iDataSource, $iSrc, $iMRPSrc, $platform, $iVerbose) = @_; - - my %Sources; - my @ComponentList; - my %mrpHash; - - # Need the dir swap - $iDataSource =~ s/^$iMRPSrc/$iSrc/; - # Read the options.txt - open OPTIONS, $iDataSource or die RealTimeBuildError("Cannot open $iDataSource $!"); - while() - { - if (/^GT\+Techview baseline mrp location:\s*(\S+)\s*$/i) - { - $mrpHash{lc $1} = $1; - next; - } - if (/^GT only baseline mrp location:\s*(\S+)\s*$/i) - { - $mrpHash{lc $1} = $1; - next; - } - if (/^Strong crypto mrp location:\s*(\S+)\s*$/i) - { - $mrpHash{lc $1} = $1; - next; - } - if (/^Techview component list:\s*(\S+)\s*$/i) - { - push @ComponentList, $1; - next; - } - if (/^GT component list:\s*(\S+)\s*$/i) - { - push @ComponentList, $1; - next; - } - } - close OPTIONS; - for (my $i = 0; $i < scalar(@ComponentList); $i++) - { - # Fix path - $ComponentList[$i] =~ s#\\#\/#g; - # Need the dir swap - $ComponentList[$i] =~ s/^$iMRPSrc/$iSrc/; - open IN, $ComponentList[$i] or die RealTimeBuildError("Cannot open ".$ComponentList[$i]." $!"); - while() - { - my ($mrp) = /^\s*\S+\s+(\S+)\s*$/; - $mrpHash{lc $mrp} = $mrp; - } - close IN; - } - - my @mrpList = sort values %mrpHash; - for (my $i = 0; $i < scalar(@mrpList); $i++) - { - # Fix path - $mrpList[$i] =~ s#\\#\/#g; - # Need the dir swap - $mrpList[$i] =~ s/^$iMRPSrc/$iSrc/i; - # Fix the CustKit / Devkit and techviewexamplesdk mrp locations - $mrpList[$i] =~ s#^/product/CustKit#$iSrc/os/unref/orphan/cedprd/CustKit#i; - $mrpList[$i] =~ s#^/product/DevKit#$iSrc/os/unref/orphan/cedprd/DevKit#i; - $mrpList[$i] =~ s#^/product/techviewexamplesdk#$iSrc/os/unref/orphan/cedprd/techviewexamplesdk#i; - $Sources{"$iSrc/os/unref/orphan/cedprd/SuppKit"} = "clean.pl"; - $Sources{"$iSrc/os/unref/orphan/cedprd/tools"} = "clean.pl"; - $Sources{"$iSrc/os/buildtools/toolsandutils/productionbldtools"} = "clean.pl"; - - if (open MRP, $mrpList[$i]) - { - my $mrpfile = $mrpList[$i]; - my $mrpfile_in_source = 0; - - while() - { - my $dir; - if (/^\s*source\s+(\S.*\S)\s*$/i) # must allow for spaces in names - { - my $origdir = $1; - $dir = $origdir; - - #Find any relative paths and add them to the end of the mrp location to create a full path - if (($dir =~ /\.\\/)||($dir =~ /\.\.\\/)||($dir !~ /\\/)) - { - $dir =~ s#\.\.#\.#g; # .. becomes . - $dir =~ s#^\.#\\\.#g; # add an extra \ incase one is not present at start of path, canonpath wil cleanup multiple \ - - $dir = "\\".$dir if ($dir !~ /\\/); #add \ to start of path if source line only specifies a file - - # Fix paths to / - $dir =~ s#\\#\/#g; - - $dir =~ s/$iMRPSrc/$iSrc/i if ($dir =~ /^$iMRPSrc/); - - $dir = $iSrc.$dir if ($dir !~ /^$iMRPSrc/); - - $dir = canonpath($dir); - } - - # Fix paths to / - $dir =~ s#\\#\/#g; - - # Remove any / from the end of the sourceline just in case the directory was ended in one - $dir =~ s#\/$##; - # Need the dir swap - $dir =~ s/^$iMRPSrc/$iSrc/i; - # Fix the CustKit / Devkit and techviewexamplesdk mrp locations - $dir =~ s#^/product/CustKit#$iSrc/os/unref/orphan/cedprd/CustKit#i; - $dir =~ s#^/product/DevKit#$iSrc/os/unref/orphan/cedprd/DevKit#i; - $dir =~ s#^/product/techviewexamplesdk#$iSrc/os/unref/orphan/cedprd/techviewexamplesdk#i; - - if ($mrpfile =~ /^$dir$/i || $mrpfile =~ /^$dir\//i) { - # mrpfile covered by source statements - $mrpfile_in_source = 1; - } - - # ignore location of release notes - next if ($dir =~ /^\/component_defs/i); - - if (!-e $dir) { - # CBR tools consider missing source as a fatal error - RealTimeBuildError("$dir does not exist (listed as source in $mrpfile)"); - } elsif (!defined $Sources{$dir}) { - $Sources{$dir} = $mrpfile; - } else { - print "REMARK: $origdir in $mrpfile is already defined in $Sources{$dir}\n"; - } - } - } - close MRP; - print "REMARK: $mrpList[$i] does not include itself as source\n" if (!$mrpfile_in_source); - } else { - RealTimeBuildError("Cannot open ".$mrpList[$i]." $!"); - } - } - return \%Sources; -} - -# ProcessCommandLine -# -# Inputs -# -# Outputs -# @iDataSource array of multiple (txt file(s) to process) -# $iSrc - real location of files -# $iMRPSrc - where the mrp thinks they are -# @iDummy - do not delete anything -# -# Description -# This function processes the commandline - -sub ProcessCommandLine { - my ($iHelp, $iDataSource, $iSrc, $iMRPSrc, $platform, $iDummy, $iVerbose); - GetOptions('h' => \$iHelp, 'o=s' =>\$iDataSource, 's=s' =>\$iSrc, 'm=s' =>\$iMRPSrc, 'p=s' =>\$platform,'n' => \$iDummy, 'v' => \$iVerbose); - - if (($iHelp) || (!defined $iSrc) || (!defined $iMRPSrc) || (!defined $platform)) - { - Usage(); - } - - die RealTimeBuildError("Source directory $iSrc must be an absolute path with no drive letter") if ($iSrc !~ m#^[\\\/]#); - die RealTimeBuildError("Source directory $iMRPSrc must be an absolute path with no drive letter") if ($iMRPSrc !~ m#^[\\\/]#); - # Fix the paths - $iSrc =~ s#\\#\/#g; - $iMRPSrc =~ s#\\#\/#g; - $iDataSource =~ s#\\#\/#g; - if (! -d "$iSrc") - { - die RealTimeBuildError("$iSrc is not a directory") ; - } - - # Need the dir swap - $iDataSource =~ s/^$iMRPSrc/$iSrc/i; - if (! -e "$iDataSource") - { - die RealTimeBuildError("Cannot open $iDataSource"); - } - - return($iDataSource, $iSrc, $iMRPSrc, $platform, $iDummy, $iVerbose); -} - -# Usage -# -# Output Usage Information. -# - -sub Usage { - print <