diff -r 7c11c3d8d025 -r 60be34e1b006 deprecated/buildtools/buildsystemtools/removebuild.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deprecated/buildtools/buildsystemtools/removebuild.pl Wed Oct 27 16:03:51 2010 +0800 @@ -0,0 +1,175 @@ +#!/usr/bin/perl + +# Copyright (c) 2002-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: +# removebuild.pl - prepares a drive for a clean licensee build by removing +# all buildable files from the drive. +# +# + +my ($file) = readOpts(@ARGV); + +exit remove($file); + +sub readOpts(@) + { + my (@args) = @_; + + my $path = undef; + + foreach my $arg (@args) + { + if ($arg =~ /^-/) + { + if ((lc($arg) eq "--help") + ||(lc($arg) eq "-h") + ) + { + showHelp(); + exit 0; + } + else + { + print STDERR "Option '$arg' not recognised.\n\n"; + print STDERR "Try 'removebuild --help' for help.\n"; + exit 1; + } + } + else + { + if (defined($path)) + { + print STDERR "Removebuild accepts only one argument.\n\n"; + print STDERR "Try 'removebuild --help' for help.\n"; + exit 1; + } + else + { + $path = $arg; + } + } + } + + if (!defined($path)) + { + print STDERR "Removebuild must be given a list of files to remove.\n\n"; + print STDERR "Try 'removebuild --help' for help.\n"; + exit 1; + } + + return ($path); + } + +sub remove($) + { + my ($file) = @_; + + open(FILE, $file); + + my $dir = undef; + my $failed = 0; + my $worked = 0; + my $hasentries = 0; + + foreach my $line () + { + chomp($line); + $hasentries = 1; + + if ($line =~ /^\*/) + { + if ($line =~ /^\*DIR:/) + { + $dir = $line; + $dir =~ s/^\*DIR:\s*//; + + $dir =~ s/[\/\\]*$//; # Remove trailing \/ + } + else + { + close(FILE); + die "'$file' is not a valid input.\n('$line' not recognised)\n"; + } + } + else + { + if (defined($dir)) + { + $line =~ s/^[\/\\]*//; # Remove preceding \/ + + # Attempt to delete '$dir\$line' + + $line = $dir."\\".$line; + + if (-e $line) + { + if (-d $line) + { + $failed = 1; + print STDERR "ERROR: Could not remove file '$line' because $line is a directory\n"; + } + else + { + if (!unlink($line)) + { + $failed = 1; + print STDERR "ERROR: Could not remove file '$line'. Make sure it is not write protected.\n"; + } + else + { + $worked = 1; + + # Remove parent dirs if now empty + my $empty = 1; + while (($line =~ /[\/\\]/) && $empty) + { + $line =~ s/[\/\\][^\/\\]*$//; # Go to parent dir + if (!rmdir($line)) + { + # If it fails, the dir can't be empty + $empty = 0; + } + } + } + } + } + } + else + { + close(FILE); + die "'$file' is not a valid input.\n(DIR must be set before '$line')\n"; + } + } + } + + close(FILE); + + if ($hasentries && (!$worked)) + { + print STDERR "WARNING: No files listed in '$file' were found. Is the current directory correct?\n"; + } + + return $failed; + } + +sub showHelp() + { + print "removebuild [options] Filename\n"; + print " - prepares a drive for a 'build from clean' by removing\n"; + print " all buildable files.\n\n"; + print " Filename - The file listing the buildable files to be removed\n\n"; + print "Options:\n"; + print " --help or -h - Display this message\n\n"; + } +