--- loncom/build/Attic/parse.pl 2000/12/07 20:42:13 1.3 +++ loncom/build/Attic/parse.pl 2000/12/08 20:28:57 1.4 @@ -5,25 +5,34 @@ # Read in loncapa tags and metagroup tags -# -------------------------------------------- Read in command line arguments +# ---------------------------------------------- Read in command line arguments my ($file,$mode)=@ARGV; -# -------------------------------------------- Read in master data file +# ---------------------------------------------------- Read in master data file open IN,"<$file"; my @lines=; close IN; - my $info=join('',@lines); my $info2=$info; # value to allow for meta data group retrieval -my %ihash; # big data storage object +# ------------------------------------------------------- Make default settings +my $distribution="redhat6.2"; +my $date=`date +'%B %e, %Y'`; chop $date; +my $buildhost=`hostname`; chop $buildhost; + +# ---------------------------------------------------- Parse the marked up data +my %info; # big data storage object while ($info=~/\/isg) { my $keystring=$1; + # In the parsing of LON-CAPA tags, remove boundary white-space, + # and handle quotation commands. my %hash=map {my ($key,$value)=split(/\=(?!")|\=(?=\s*"[^"]*"[^"]*$)/); $value=~s/^"//; $value=~s/"$//; (uc($key),$value);} split(/\s+(?=\w+\s*\=)/,$keystring); + + # Handle the different types of commands if (uc($hash{'TYPE'}) eq "OWNERSHIP") { $info{$hash{'TYPE'}}{$hash{'CATEGORY'}}{'CHMOD'}=$hash{'CHMOD'}; $info{$hash{'TYPE'}}{$hash{'CATEGORY'}}{'CHOWN'}=$hash{'CHOWN'}; @@ -37,12 +46,16 @@ while ($info=~/\/isg) $info{$hash{'TYPE'}}{$hash{'NAME'}}=$hash{'VALUE'}; } elsif (uc($hash{'TYPE'}) eq "DIRECTORY") { - $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'CATEGORY'}=$hash{'CATEGORY'}; - $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'DESCRIPTION'}=$hash{'DESCRIPTION'} if $hash{'DESCRIPTION'}; + $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'CATEGORY'}= + $hash{'CATEGORY'}; + $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'DESCRIPTION'}= + $hash{'DESCRIPTION'} if $hash{'DESCRIPTION'}; } elsif (uc($hash{'TYPE'}) eq "LOCATION") { - $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'CATEGORY'}=$hash{'CATEGORY'}; - $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'SOURCE'}=$hash{'SOURCE'}; + $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'CATEGORY'}= + $hash{'CATEGORY'}; + $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'SOURCE'}= + $hash{'SOURCE'}; # get surrounding metagroup information my $ckeystring=$keystring; $ckeystring=~s/(SOURCE\=\"[^"]*)\*/$1\\\*/g; $info2=~/.*\<(?:metagroup|metasupergroup)\>(.*?)\(.*?)\<\/(?:metagroup|metasupergroup)\>/is; @@ -51,8 +64,8 @@ while ($info=~/\/isg) foreach my $m (@meta) { if ($data=~/\<($m)\>(.*?)\<\/$m\>/sgi) { my ($key,$value)=($1,$2); - $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{$key}=$value; -# print "$key\n\n$value\n\n\n\n"; + $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{$key}= + $value; } } } @@ -61,4 +74,204 @@ while ($info=~/\/isg) } } +if ($mode eq "ALL" || $mode eq "HTML") { + my $a; + $a=&begin_description_page; + print $a; + $a=&make_rpm_description_block; + print $a; + @directories=&determine_directory_structure; + $a=&make_directory_structure_description_block(\@directories); + print $a; + $a=&make_directory_and_file_structure_description_block(\@directories); + print $a; + $a=&end_description_page; + print $a; +} + +# ------------------------------------------------- Begin description page +sub begin_description_page { + my $description=< + +LON-CAPA Software Description Page ($distribution, $date) + + +LON-CAPA Software Description Page ($distribution, $date) +
Michigan State University +
Learning Online with CAPA +
Contact korte\@lon-capa.org +
    +
  • About this file +
  • Software Package Description +
  • Directory Structure +
  • File and Directory Structure +
+About this file +

+This file is generated dynamically by parse.pl as +part of a development compilation process. See +http://install.lon-capa.org/compile/index.html for more +information. +

+END + return $description; +} + +# ------------------------------------------------- End description page +sub end_description_page { + my $description=< +LON-CAPA Software Development Team + + +END + return $description; +} + +# ------------------------------------------------- Make RPM description block +sub make_rpm_description_block { + my $description=<Rolled in a RedHat 6.2 RPM, $date +

+ + +
+
+Name        : $info{'RPM'}{'Name'}
+Version     : $info{'RPM'}{'Version'}
+Vendor      : $info{'RPM'}{'Vendor'} 
+Release     : $info{'RPM'}{'Release'}                             
+Build Host  : $buildhost
+Group       : $info{'RPM'}{'Group'}
+License     : $info{'RPM'}{'Copyright'}
+Summary     : $info{'RPM'}{'Summary'}
+Description : 
+
+$info{'RPM'}{'description'}
+
+
+

+END + return $description; +} + +# ----------------------------------------------- Determine directory structure +sub determine_directory_structure { + my @directories=keys %{$info{'DIRECTORY'}{$distribution}}; + return (sort @directories); +} + +# ---------------------------------- Make directory structure description block +sub make_directory_structure_description_block { + my ($dirs)=@_; + my $description=<Directory Structure Description, $date +

+ +END + my $maxcount=0; + foreach my $d (@$dirs) { + my (@matches)=($d=~/\//g); + my $count=scalar(@matches); + $maxcount=$count if $count>$maxcount; + } + $description.=< + + + +END + $description.="\n"; + foreach my $d (@$dirs) { + my $dtable=$d; + $dtable=~s/\//\<\/TD\>\/g; + my $category=$info{'DIRECTORY'}{$distribution}{$d}{'CATEGORY'}; + my $chown=$info{'OWNERSHIP'}{$category}{'CHOWN'}; + my $chmod=$info{'OWNERSHIP'}{$category}{'CHMOD'}; + my $devchown=$info{'DEVOWNERSHIP'}{$category}{'CHOWN'}; + my $devchmod=$info{'DEVOWNERSHIP'}{$category}{'CHMOD'}; + $description.=< + + + + + +END + } + $description.=< +

+END + return $description; +} + +# ------------------------- Make directory and file structure description block +sub make_directory_and_file_structure_description_block { + my ($dirs)=@_; + my $description=<Directory and File Structure Description, $date +

+

CategoryPermissionsDevelopment
Permissions
Directory Path$category$chmod $chown$devchmod $devchown +$dtable +
+END + my $counter=0; + my @colorindex=("#80FF80","#80FFFF","#FFFF80"); + my @allfiles=keys %{$info{'LOCATION'}{$distribution}{'TARGET'}}; + foreach my $d (@$dirs) { + # set color + my $color=$colorindex[$counter%3]; + # set other values + my $dirdescription=$info{'DIRECTORY'}{$distribution}{$d}{'DESCRIPTION'}; + $dirdescription="(" . $dirdescription . ")" if $dirdescription; + # find subdirectories that are contained in this directory + my @subdirs; + foreach my $d2 (@$dirs) { + if ($d2=~/$d\/([^\/]+)/) { + push @subdirs,$1; + } + } + # find files that are contained in this directory + my @files; + foreach my $f (@allfiles) { + if ($file=~/$d\/(.+)/) { + push @files,$1; + } + } + # render starting HTML formatting elements + if (@subdirs || @files) { + my $subdirstring="
* Relevant subdirectories: " . join(", ",@subdirs) if @subdirs; + $description.=< +END + } + if (@files) { + $description.=< + + + + + +END + } + $description.=< +END + $counter++; + } + $description.=< +

+END + return $description; +}
directoryDIRECTORY -- $d $dirdescription +$subdirstring +END + } + else { + $description.=<empty directoryEMPTY DIRECTORY - $d $dirdescriptionTypeFile NameFunctionNotes