Index: trunk/tools/definetargets
===================================================================
--- trunk/tools/definetargets	(revision 25855)
+++ trunk/tools/definetargets	(revision 25855)
@@ -0,0 +1,76 @@
+#!/usr/bin/env perl
+
+# program to define multiple distribution targets
+# use with care
+
+use warnings;
+use strict;
+
+use Getopt::Long qw( GetOptions :config auto_help auto_version gnu_getopt );
+use Pod::Usage qw( pod2usage );
+
+my ( $stage, $dist_group, $filter, $clean, $disable, $save_temps);
+
+my $dbname;
+
+GetOptions(
+           'stage=s'    => \$stage,
+           'dist_group=s' => \$dist_group,
+           'filter=s'   => \$filter,
+           'clean'      => \$clean,
+           'disable'    => \$disable,
+           'dbname=s'   => \$dbname,
+	   'save-temps' => \$save_temps,
+) or pod2usage( 2 );
+
+pod2usage( -msg => "Unknown option: @ARGV", -exitval => 2 ) if @ARGV;
+pod2usage( -msg => "Required options: --stage --dist_group --dbname",
+           -exitval => 3)
+    unless defined $stage
+    and defined $dist_group
+    and defined $dbname;  
+
+my @all_filters = qw( g r i z y ); 
+my @all_stages = qw( raw chip camera fake warp stack diff );
+
+my @filters;
+if ($filter) {
+    die "$filter is not a known filter\n" if ! in_list($filter, \@all_filters);
+    push @filters, $filter;
+} else {
+    @filters = @all_filters;
+}
+
+my @stages;
+if ($stage eq "all") {
+    @stages = @all_stages;
+} else {
+    @stages = ($stage);
+}
+my @dist_groups = ($dist_group);
+
+foreach my $this_dist_group (@dist_groups) {
+  foreach my $stage (@stages) {
+    foreach $filter (@filters) {
+        my $command = "disttool -definetarget -stage $stage -dist_group $this_dist_group -filter $filter.00000";
+        $command .= " -clean" if $clean;
+        $command .= " -set_state disabled" if $disable;
+        $command .= " -dbname $dbname" if $dbname;
+
+        print "$command\n";
+        my $code = system $command;
+        my $status = $code >> 8;
+        die "$command failed with $code $status\n" if $code;
+    }
+  }
+}
+
+sub in_list {
+    my $val = shift;
+    my $array = shift;
+
+    foreach my $a (@$array) {
+        return 1 if $a eq $val;
+    }
+    return 0;
+}
