#!/usr/local/bin/perl -w ################################################################################ # # psf # # Builds a Product Specification File (psf) from the directories listed # on the command line. It assumes that the following naming convention # has been used for the directory names. The first part of the directory # name is the product name, and the rest is the product version. # # Author: David C. Snyder # # $Log: psf,v $ # Revision 1.2 1997/09/05 11:44:16 dsnyder # Changed the name of the script to psf (from psfls) # # Revision 1.1 1997/09/02 15:00:42 dsnyder # Initial revision # ################################################################################ use vars qw($length); use strict; die "Usage: $0: dir ...\n" unless ( @ARGV ); my ($dir, $tag, $revision); while ( $dir = shift ) { next unless ( -d $dir ); $dir =~ m{.*/(\D+)(.*)$} or $dir =~ m{(\D+)(.*)$}; $length = length( $1 . $2 ); $tag = uc $1; $revision = $2; $tag =~ s/\W+/_/g; # Change non-word characters to '_' $tag =~ s/_+$//; # Remove trailing '_'s $tag = substr( $tag, 0, 16 ); # Truncate to 16 or fewer characters $revision =~ s/^\W+//; # Remove leading punctuation print " product tag $tag revision $revision fileset tag ", lc $tag, "\n"; listdir( $dir ) if ( -d $dir ); print " end\nend\n"; } exit( 0 ); sub listdir { my $dir = shift; my ( $mode, $entry ); my @directories; opendir CWD, "$dir" or die "$0: opendir $dir: $!\n"; printf " directory %s=/usr/local%s\n", $dir, substr( $dir, $length ); foreach $entry ( sort readdir CWD ) { next if ( $entry eq "." or $entry eq ".." or $entry eq "..install_finish" or $entry eq "..install_start" ); lstat "$dir/$entry" or die "$0: stat $dir/$entry: $!\n"; if ( -d _ ) { push @directories, $entry; } else { printf " file %s\n", $entry; } } foreach $entry ( sort @directories ) { listdir( "$dir/$entry" ); } closedir CWD; }