Index: trunk/psconfig/mkdist
===================================================================
--- trunk/psconfig/mkdist	(revision 11651)
+++ trunk/psconfig/mkdist	(revision 11730)
@@ -1,3 +1,5 @@
 #!/usr/bin/env perl
+
+$tagsets = "tagsets";
 
 $cvs  = 0;
@@ -6,5 +8,5 @@
 $deltag = 0;
 $setbranch = 0;
-$list = 0;
+$setdevtag = 0;
 $module = "";
 @tARGV = ();
@@ -22,10 +24,10 @@
         shift; next;
     }
+    if ($ARGV[0] eq "-devtag") {
+	$setdevtag = 1;
+        shift; next;
+    }
     if ($ARGV[0] eq "-deltag") {
 	$deltag = 1;
-        shift; next;
-    }
-    if ($ARGV[0] eq "-list") {
-	$list = 1;
         shift; next;
     }
@@ -39,4 +41,7 @@
         shift; next;
     }
+    if ($ARGV[0] eq "-list") {
+	&list_distributions ();
+    }
     if ($ARGV[0] eq "-h")     { &usage (); }
     if ($ARGV[0] eq "-help")  { &usage (); }
@@ -47,116 +52,30 @@
 @ARGV = @tARGV;
 
-$distdir = "tagsets";
+if ( @ARGV != 1) { &usage (); }
 
-if (!$list && @ARGV != 1) { &usage (); }
-if ( $list && @ARGV != 0) { &usage (); }
-
-$file = "$distdir/$ARGV[0].dst";
-open (FILE, $file) || die "ERROR: can't open distribution file\n";
-@list = <FILE>;
-close (FILE);
-
-$version = $ARGV[0];
-
-@name = ();
-@tag = ();
-@branch = ();
-
-if ($list) { 
-    printf STDERR "Available Distributions\n";
-    printf STDERR "%-16s  %7s\n", "Module", "Version";
-    printf STDERR "-------------------------\n";
-}
-
-foreach $line (@list) {
-    chop $line;
-    if ($line =~ m|^\s*$|) { next; }
-    if ($line =~ m|^\s*\#|) { next; }
-
-    ($name, $branch, $branchver, $mode) = split (":", $line);
-    
-    if ($name eq "") { die "missing module name\n"; }
-    
-    if ($branch eq "") {
-	$branch = "HEAD";
-    } 
-    if ($branch eq "HEAD") {
-	$tag = "HEAD";
-    }
-    if ($branch eq "NONE") { 
-	$tag = "NONE";
-    }
-    if (($tag ne "HEAD") && ($branchver eq "")) {
-	$branchver = "0";
-    }
-    if (($branch ne "HEAD") && ($branch ne NONE)) {
-	$tag = "$branch-$branchver";
-    }
-    if (($branch ne "HEAD") && ($branch ne "NONE") && ($branchver eq "NONE")) {
-	$tag = "$branch";
-    }
-    # print  "module: $name, tag: $tag, branch: $branch\n"; 
-
-    push @name, $name;
-    push @branch, $branch;
-    push @tag, $tag;
-    push @mode, $mode;
-}
-
-if ($list) { exit 0; }
+$distribution = $ARGV[0];
+&load_distfile ();
 
 if ($diff) { &difflist (); }
-
 if ($settag) { &settags (); }
 
-mkdir $version;
-chdir $version;
-for ($i = 0; $i < @name; $i++) {
-    if (($module ne "") && ($module ne $name[$i])) { next; }
-    if ($mode[$i] eq "SKIP") { next; }
-    if ($tag[$i] eq "HEAD") {
-	&vsystem ("cvs co $name[$i]");
-	if ($status) { die "error running cvs"; }
-    } else {
-	&vsystem ("cvs co -r $tag[$i] $name[$i]");
-	if ($status) { die "error running cvs"; }
-    }	
-}
-chdir "..";
-if ($cvs) { exit 0; }
-
-&vsystem ("rm -r `find $version -name CVS`");
-if (! -e tarballs) { mkdir "tarballs"; }
-&vsystem ("tar cvzf tarballs/$version.tgz  $version");
-if ($status) { die "error creating tarball\n"; }
-exit 0;
+&package_distribution ();
 
 sub vsystem {
     print STDERR "@_\n";
-    $status = system ("@_");
-    $status;
-}
-
-sub usage {
-    print STDERR "USAGE: mkdist -list\n";
-    print STDERR "     : list valid distributions \n\n";
-    print STDERR "USAGE: mkdist (group) (version) [-cvs]\n";
-    print STDERR "     : make a distribution tarball\n";
-    print STDERR "     : -cvs  : only check out the cvs tree, don't make a tarball\n\n";
-    print STDERR "USAGE: mkdist -diff (group) (version)\n";
-    print STDERR "     : show the difference between the distribution and current tree\n\n";
-    exit 2;
+    #$status = system ("@_");
+    #$status;
 }
 
 sub difflist {
 
-    for ($i = 0; $i < @name; $i++) {
+    for ($i = 0; $i < @cvsname; $i++) {
 	# the base component cannot be rdiffed
-	print STDERR "--- $name[$i] ---\n";
-	if ($name[$i] eq "base") { next; }
+	print STDERR "--- $cvsname[$i] ---\n";
+	if ($cvsname[$i] eq "base") { next; }
 	if ($tag[$i] eq "") {
-	    &vsystem ("cvs -q rdiff -s -r HEAD $name[$i]");
+	    &vsystem ("cvs -q rdiff -s -r HEAD $cvsname[$i]");
 	} else {
-	    &vsystem ("cvs -q rdiff -s -r $tag[$i] $name[$i]");
+	    &vsystem ("cvs -q rdiff -s -r $tag[$i] $cvsname[$i]");
 	}	
 	print STDERR "\n\n";
@@ -167,25 +86,109 @@
 sub settags {
     print STDERR "setting tags\n";
-    for ($i = 0; $i < @name; $i++) {
-	# can the base component be tagged?
-	if ($name[$i] eq "base") { 
-	    # make this automatic by checking it out and cd'ing there
-	    print STDERR "remember to set the base tag by hand\n";
+    for ($i = 0; $i < @cvsname; $i++) {
+	if (($module ne "") && ($module ne $cvsname[$i])) { next; }
+	($do_tag, $do_build, $do_package, $do_update) = $mode[$i] =~ m|(\S)(\S)(\S)(\S)|;
+	if ($do_tag eq "N") { 
+	    push @remind, $cvsname[$i];
 	    next; 
 	}
-	if ($tag[$i] eq "") { next; }
-	if ($tag[$i] eq "HEAD") { next; }
-	if ($tag[$i] eq "NONE") { next; }
-	if ($mode[$i] eq "EXTERN") { 
-	    print STDERR "remember to set tag for $name[$i]\n";
-	    next; 
+	if ($branchtag[$i] eq "") { die "branch tag missing for $cvsname[$i]\n"; }
+	if ($branchver[$i] eq "") { die "branch tag version missing\n"; }
+	$tag = "$branchtag[$i]$branchver[$i]";
+	if ($setbranch) { 
+	    &vsystem ("cvs -q rtag -b $branchtag[$i] $cvsname[$i]");
+	    next;
+	} 
+	if ($setdevtag) {
+	    &vsystem ("cvs -q rtag $tag $cvsname[$i]");
+	    next;
 	}
-	$flag = "";
-	if ($setbranch) { 
-	    &vsystem ("cvs -q rtag -b $branch[$i] $name[$i]");
-	} else {
-	    &vsystem ("cvs -q rtag -r $branch[$i] $tag[$i] $name[$i]");
-	}
+	&vsystem ("cvs -q rtag -r $branchtag[$i] $tag $cvsname[$i]");
+    }
+    for ($i = 0; $i < @remind; $i++) {
+	print STDERR "remember to set tag for $remind[$i] if needed\n";
     }
     exit 0;
 }
+
+sub package_distribution {
+    # package distribution into a tarball
+    mkdir $distribution;
+    chdir $distribution;
+    for ($i = 0; $i < @cvsname; $i++) {
+	if (($module ne "") && ($module ne $cvsname[$i])) { next; }
+	($do_tag, $do_build, $do_package, $do_update) = $mode[$i] =~ m|(\S)(\S)(\S)(\S)|;
+	if ($do_package eq "N") { next; }
+	if ($tag[$i] eq "HEAD") {
+	    &vsystem ("cvs co $cvsname[$i]");
+	    if ($status) { die "error running cvs"; }
+	} else {
+	    &vsystem ("cvs co -r $tag[$i] $cvsname[$i]");
+	    if ($status) { die "error running cvs"; }
+	}	
+    }
+    chdir "..";
+    if ($cvs) { exit 0; }
+
+    &vsystem ("rm -r `find $distribution -name CVS`");
+    if (! -e tarballs) { mkdir "tarballs"; }
+    &vsystem ("tar cvzf tarballs/$distribution.tgz  $distribution");
+    if ($status) { die "error creating tarball\n"; }
+    exit 0;
+}
+
+sub list_distributions {
+
+    vsystem ("ls $tagsets/*.dst");
+    exit 2;
+}
+
+sub load_distfile {
+    # open and read the distribution file
+    # results go into @cvsname, @branchtag, @branchver, @mode
+    $file = "$tagsets/$ARGV[0].dst";
+    open (FILE, $file) || die "ERROR: can't open distribution file $file\n";
+    @list = <FILE>;
+    close (FILE);
+
+    @mode = ();
+    @cvsname = ();
+    @branchtag = ();
+    @branchver = ();
+
+    foreach $line (@list) {
+	chop $line;
+	if ($line =~ m|^\s*$|) { next; }
+	if ($line =~ m|^\s*\#|) { next; }
+
+	($mode, $cvsname, $branchtag, $branchver) = split (" ", $line);
+	
+	if ($cvsname eq "") { die "missing module name\n"; }
+
+	($do_tag, $do_build, $do_package, $do_update) = $mode =~ m|(\S)(\S)(\S)(\S)|;
+	if (($do_tag ne "Y") && ($do_tag ne "N")) { die "invalid tag option $do_tag\n"; }
+	if (($do_build ne "Y") && ($do_build ne "N")) { die "invalid tag option $do_build\n"; }
+	if (($do_package ne "Y") && ($do_package ne "N")) { die "invalid tag option $do_package\n"; }
+	if (($do_update ne "Y") && ($do_update ne "N")) { die "invalid tag option $do_update\n"; }
+	
+	print "module: $cvsname, branchtag: $branchtag, branchver: $branchver "; 
+	print "tag: $do_tag, build: $do_build, package: $do_package, update: $do_update\n";
+
+	push @mode, $mode;
+	push @cvsname, $cvsname;
+	push @branchtag, $branchtag;
+	push @branchver, $branchver;
+    }
+}
+
+sub usage {
+    print STDERR "USAGE: mkdist -list\n";
+    print STDERR "     : list valid distributions \n\n";
+    print STDERR "USAGE: mkdist (distribution) [-cvs]\n";
+    print STDERR "     : make a distribution tarball\n";
+    print STDERR "     : -cvs  : only check out the cvs tree, don't make a tarball\n\n";
+    print STDERR "USAGE: mkdist -diff (group) (version)\n";
+    print STDERR "     : show the difference between the distribution and current tree\n\n";
+    exit 2;
+}
+
