diff -r 000000000000 -r 7f656887cf89 tools/exportall --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/exportall Wed Jun 23 15:52:26 2010 +0100 @@ -0,0 +1,145 @@ +#!perl +# exportall +# +# Copyright (c) 2008 - 2010 Accenture. All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the "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: +# Accenture - Initial contribution +# + +# Description: +# exportall - A tool to export a whole folder of files from a bld.inf + +use strict; +use Cwd; +use Getopt::Long; +use File::Copy; +use File::Basename; +use File::Path; + +sub ProcessCommandLine(); +sub DisplayHelp(); +sub FindSourceFiles(); +sub DoCopy($$); + +my %options; +my $sourceDir; +my $destDir; + +ProcessCommandLine(); + +my $sourceFiles = FindSourceFiles(); +my @destFiles = @$sourceFiles; +map { s|^\Q$sourceDir\E(.*)|$destDir$1| } @destFiles; +map { s|\\\\|\\| } @destFiles; # get rid of double \\ + +if ($options{what}) { + if (@destFiles > 0) { + local $, = "\n"; + print @destFiles; + print "\n"; + } +} elsif ($options{clean}) { + map {unlink} @destFiles; +} else { + local $, = "\n"; + map { my $src =$_; + s|^\Q$sourceDir\E(.*)|$destDir$1|; + DoCopy($src, $_); + } @$sourceFiles; +} + +sub ProcessCommandLine() { + my $help; + GetOptions('h|help' => \$help, + 'v|verbose' => \$options{verbose}, + 'w|what' => \$options{what}, + 'c|clean' => \$options{clean}) or DisplayHelp(); + + DisplayHelp() if $help; + + if (scalar(@ARGV)!=2) { + print "ERROR: Invalid number of arguments.\n"; + DisplayHelp(); + } + $sourceDir = shift(@ARGV); + $destDir = shift(@ARGV); + print STDERR "Exporting from $sourceDir to $destDir\n" if ($options{verbose}); +} + +sub DoCopy($$) { + my ($src, $dest) = @_; + my $destDir = dirname($dest); + unless (-d $destDir) { + mkpath $destDir or die "Can't create $destDir: $!"; + } + if (-e $dest) { + unlink $dest; + } + copy($src, $dest) or die "Can't copy $src to $_: $!" +} + +sub FindSourceFiles() { + my @sourceFiles; + my @dirStack; + push @dirStack, $sourceDir; + while (scalar(@dirStack)) { + my $dir = pop(@dirStack); + opendir DIR, "$dir"; + my @dirContents = readdir(DIR); + closedir(DIR); + push @sourceFiles, (map {"$dir\\$_"} (grep {-f "$dir\\$_"} @dirContents)); + push @dirStack, (map {"$dir\\$_"} (grep {(-d "$dir\\$_") && !(m|^\.\.?|)} @dirContents)); + } + return \@sourceFiles; +} + +sub DisplayHelp() { + require Pod::Text; + print "\n"; + my $parser = Pod::Text->new(); + $parser->parse_from_file($0); + exit; +} + +__END__ + +=head1 NAME + +exportall - A tool to export an entire directory tree from a project. Designed to be invoked from a custom makefile. + +=head1 SYNOPSIS + + exportall [options] sourceDir destDir + +options: + +=over + +=item -h + +Show help + +=item -v + +Verbose + +=item -w + +Print list of files to be exported, for a C<-what>. + +=item -c + +Clean. Deletes all files that aer exported. + +=back + +=head1 COPYRIGHT + +Copyright (c) 2008-2010 Accenture. All rights reserved. + +=cut=cut