tools/exportall
changeset 0 7f656887cf89
--- /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