#!/usr/bin/perl # # Make tar file of a tgcm model distribution $tgcmroot/$model. # use Getopt::Long; use File::Basename; # ($progname = $0) =~ s!(.*)/!!; &GetOptions( "m|model=s" => \$model, "tgcmroot:s" => \$tgcmroot, "usr_srcdirs:s" => \$usr_srcdirs, "cvs" => \$cvs, "h|help" => \$help ) or usage(); if ($help) { usage(); } # provide usage if help was requested # if (! defined $model or $model eq "") { print "\n>>> Please specfiy desired model by using the -model option.\n"; usage(); } # # Order of precedence for determining tgcmroot is: # 0: If doing cvs checkout, set tgcmroot to /tmp # 1: Option to this program (-tgcmroot) # 2: Environment variable $TGCMROOT # 3: The default directory on hao or scd systems. # $tgcmroot_default_hao = "/home/tgcm"; $tgcmroot_default_scd = "/fis/hao/tgcm"; if (! $cvs) { if (! defined $tgcmroot or $tgcmroot eq "") { if (defined $ENV{TGCMROOT}) { $tgcmroot = $ENV{TGCMROOT}; print "\n$0: Using tgcmroot from TGCMROOT env var: $tgcmroot\n"; } elsif (-d $tgcmroot_default_hao) { $tgcmroot = $tgcmroot_default_hao; print "\n$0: Using default tgcmroot at HAO: $tgcmroot\n"; } elsif (-d $tgcmroot_default_scd) { $tgcmroot = $tgcmroot_default_scd; print "\n$0: Using default tgcmroot at SCD: $tgcmroot\n"; } else { die "\n>>> $0: Could not determine tgcmroot (please use -tgcmroot option)\n\n"; } } } else { $tgcmroot = "/tmp"; # dir in which to do cvs co } if (defined $usr_srcdirs) { if ($usr_srcdirs eq '') { print ">>> $progname: empty usr_srcdirs\n"; } else { my @dirs = split(',', $usr_srcdirs); while (my $dir = shift @dirs) { if (-d $dir) { push(@usrpaths,"$dir"); } else { die "\n>>> $progname: Cannot find user source directory $dir\n"; } } } } # # Do cvs checkout if requested (use /tmp for now, see tgcmroot above): # if ($cvs) { $cwd = `pwd`; $command = "csh -c \"cd $tgcmroot ; cvs checkout $model ; cd $cwd\""; print "Executing: $command\n"; $stat = system($command); if ($stat) { die ">>> Error executing cvs checkout\nSystem command: $command\n"; } } # # Make tar file of model from tgcmroot: # $command = "tar cf $model.tar -C $tgcmroot $model"; $stat = system($command); print "Executing: $command\n"; if ($stat != 0) { die ">>> Error from the tar command: stat=$stat\n"; } else { print "$progname: Wrote tar file $model.tar\n"; } # if (@usrpaths) { foreach $dir (@usrpaths) { $basedir = basename($dir); $stat = system("tar uf $model.tar -C $dir/.. $basedir"); if ($stat != 0) { die ">>> Error updating $model.tar with directory $dir\n"; } else { print "$progname: Updated $model.tar with directory $dir\n"; } } } # # If cvs co was done, remove the checked out model, now that the tar file # has been made: # if ($cvs) { if (-e "$tgcmroot/$model") { print "Removing $tgcmroot/$model and its contents..\n"; $command = "cd $tgcmroot ; rm -r $model"; $stat = system($command); if ($stat) { die ">>> Error removing $model\nSystem command: $command\n"; } } else { print "WARNING: could not find cvs checked-out directory $tgcmroot/$model\n"; } } # print "$progname: Completed writing file $model.tar\n\n"; exit; #------------------------------------------------------------------------- sub usage { die <