Diff for /loncom/build/lpml_parse.pl between versions 1.26 and 1.29

version 1.26, 2001/12/05 01:39:08 version 1.29, 2001/12/07 04:45:16
Line 1 Line 1
 #!/usr/bin/perl  #!/usr/bin/perl
   
 # Scott Harrison  # The LearningOnline Network with CAPA
   # lpml_parse.pl - Linux Packaging Markup Language parser
   #
   # $Id$
   #
   # Written by Scott Harrison, harris41@msu.edu
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
 # YEAR=2001  # YEAR=2001
 # May 2001  # May 2001
 # 06/19/2001,06/20,06/24 - Scott Harrison  # 06/19/2001,06/20,06/24 - Scott Harrison
 # 9/5/2001,9/6,9/7,9/8 - Scott Harrison  # 9/5/2001,9/6,9/7,9/8 - Scott Harrison
 # 9/17,9/18 - Scott Harrison  # 9/17,9/18 - Scott Harrison
 # 11/4,11/5,11/6,11/7,11/16,11/17 - Scott Harrison  # 11/4,11/5,11/6,11/7,11/16,11/17 - Scott Harrison
   # 12/2,12/3,12/4,12/5,12/6 - Scott Harrison
 #  #
 # $Id$  
 ###  ###
   
 ###############################################################################  ###############################################################################
Line 77  if (@ARGV) { Line 105  if (@ARGV) {
   
 my $targetroot;  my $targetroot;
 my $sourceroot;  my $sourceroot;
   my $targetrootarg;
   my $sourcerootarg;
 if (@ARGV) {  if (@ARGV) {
     $sourceroot = shift @ARGV;      $sourceroot = shift @ARGV;
 }  }
Line 85  if (@ARGV) { Line 115  if (@ARGV) {
 }  }
 $sourceroot=~s/\/$//;  $sourceroot=~s/\/$//;
 $targetroot=~s/\/$//;  $targetroot=~s/\/$//;
   $sourcerootarg=$sourceroot;
   $targetrootarg=$targetroot;
   
 my $logcmd='| tee -a WARNINGS';  my $logcmd='| tee -a WARNINGS';
   
Line 193  $cleanstring=~s/\>\s*\n\s*\</\>\</g; Line 225  $cleanstring=~s/\>\s*\n\s*\</\>\</g;
 # storage variables  # storage variables
 my $lpml;  my $lpml;
 my $categories;  my $categories;
   my @categorynamelist;
 my $category;  my $category;
 my $category_att_name;  my $category_att_name;
 my $category_att_type;  my $category_att_type;
Line 240  my @links; Line 273  my @links;
 my %categoryhash;  my %categoryhash;
 my $dpathlength;  my $dpathlength;
 my %fab; # file category abbreviation  my %fab; # file category abbreviation
   my $directory_count;
   my $file_count;
   my $link_count;
   my $fileglob_count;
   my $fileglobnames_count;
   my %categorycount;
   # START TEMP WAY
   #my %bytecount;  # TEMP WAY TO COUNT INFORMATION
   #my %linecount;  # TEMP WAY TO COUNT INFORMATION
   # END TEMP WAY
   
 my @buildall;  my @buildall;
 my @buildinfo;  my @buildinfo;
Line 322  exit; Line 365  exit;
 # ------------------------ Final output at end of markup parsing and formatting  # ------------------------ Final output at end of markup parsing and formatting
 sub end {  sub end {
     if ($mode eq 'html') {      if ($mode eq 'html') {
  return "</body></html>\n";   # START TEMP WAY
   # my $totallinecount;
   # my $totalbytecount;
   # map {$totallinecount+=$linecount{$_};
   #     $totalbytecount+=$bytecount{$_}}
   #  @categorynamelist;
           # END TEMP WAY
    return "<br />&nbsp;<br />".
       "<a name='summary' /><font size='+2'>Summary of Source Repository".
       "</font>".
       "<br />&nbsp;<br />".
       "<table border='1' cellpadding='5'>".
       "<caption>Files, Directories, and Symbolic Links</caption>".
       "<tr><td>Files (not referenced by globs)</td><td>$file_count</td>".
       "</tr>".
       "<tr><td>Files (referenced by globs)</td>".
       "<td>$fileglobnames_count</td>".
       "</tr>".
       "<tr><td>Total Files</td>".
       "<td>".($fileglobnames_count+$file_count)."</td>".
       "</tr>".
       "<tr><td>File globs</td>".
       "<td>".$fileglob_count."</td>".
       "</tr>".
       "<tr><td>Directories</td>".
       "<td>".$directory_count."</td>".
       "</tr>".
       "<tr><td>Symbolic links</td>".
       "<td>".$link_count."</td>".
       "</tr>".
       "</table>".
       "<table border='1' cellpadding='5'>".
       "<caption>File Category Count</caption>".
       "<tr><th>Icon</th><th>Name</th><th>Number of Occurrences</th>".
       join("\n",(map {"<tr><td><img src='$fab{$_}.gif' ".
    "alt='$_ icon' /></td>".
             "<td>$_</td><td>$categorycount{$_}</td></tr>"}
    @categorynamelist)).
       "</table>".
       "</body></html>\n";
   
   # START TEMP WAY
   #    join("\n",(map {"<tr><td><img src='$fab{$_}.gif' ".
   # "alt='$_ icon' /></td>".
   #         "<td>$_</td><td>$categorycount{$_}</td><td>$linecount{$_}</td><td>$bytecount{$_}</td></tr>"}
   # @categorynamelist)).
   #    "<br />&nbsp;<br />".
   #    "Total Lines of Code: $totallinecount".
   #    "<br />&nbsp;<br />".
   #    "Total Bytes: $totalbytecount".
   # END TEMP WAY
     }      }
     if ($mode eq 'install') {      if ($mode eq 'install') {
  return '';   return '';
Line 360  Descriptions</a></li> Line 453  Descriptions</a></li>
 <li><a href='#package'>Software Package Description</a></li>  <li><a href='#package'>Software Package Description</a></li>
 <li><a href='#directories'>Directory Structure</a></li>  <li><a href='#directories'>Directory Structure</a></li>
 <li><a href='#files'>Files</a></li>  <li><a href='#files'>Files</a></li>
   <li><a href='#summary'>Summary of Source Repository</a></li>
 </ul>  </ul>
 END  END
         $lpml .=<<END;          $lpml .=<<END;
Line 367  END Line 461  END
 <font size='+2'>About this file</font>  <font size='+2'>About this file</font>
 <p>  <p>
 This file is generated dynamically by <tt>lpml_parse.pl</tt> as  This file is generated dynamically by <tt>lpml_parse.pl</tt> as
 part of a development compilation process.  Author: Scott  part of a development compilation process.</p>
 Harrison (harris41\@msu.edu).  <p>LPML written by Scott Harrison (harris41\@msu.edu).
 </p>  </p>
 END  END
     }      }
Line 493  sub format_category { Line 587  sub format_category {
     $fab{$category_att_name}=$abbreviation;      $fab{$category_att_name}=$abbreviation;
     if ($mode eq 'html') {      if ($mode eq 'html') {
  if ($category_att_type eq $categorytype) {   if ($category_att_type eq $categorytype) {
       push @categorynamelist,$category_att_name;
       $categoryhash{$category_att_name}="$chmod $chown";
     return $category="<tr>".      return $category="<tr>".
  "<td><img src='$abbreviation.gif' ".   "<td><img src='$abbreviation.gif' ".
            "alt='${category_att_name}' /></td>\n".             "alt='${category_att_name}' /></td>\n".
Line 779  sub format_directory { Line 875  sub format_directory {
     $targetdir='';$categoryname='';$description='';      $targetdir='';$categoryname='';$description='';
     $parser->get_text('/directory');      $parser->get_text('/directory');
     $parser->get_tag('/directory');      $parser->get_tag('/directory');
       $directory_count++;
       $categorycount{$categoryname}++;
     if ($mode eq 'html') {      if ($mode eq 'html') {
  my @a;   my @a;
  @a=($targetdir=~/\//g);   @a=($targetdir=~/\//g);
Line 786  sub format_directory { Line 884  sub format_directory {
  $dpathlength=$d if $d>$dpathlength;   $dpathlength=$d if $d>$dpathlength;
  my $thtml=$targetdir;   my $thtml=$targetdir;
  $thtml=~s/\//\<\/td\>\<td bgcolor='#ffffff'\>/g;   $thtml=~s/\//\<\/td\>\<td bgcolor='#ffffff'\>/g;
    my ($chmod,$chown)=split(/\s/,$categoryhash{$categoryname});
  return $directory="\n<tr><td rowspan='2' bgcolor='#ffffff'>".   return $directory="\n<tr><td rowspan='2' bgcolor='#ffffff'>".
     "$categoryname</td>".      "$categoryname</td>".
     "<td rowspan='2' bgcolor='#ffffff'><!-- POSTEVAL: -->&nbsp;</td>".      "<td rowspan='2' bgcolor='#ffffff'><!-- POSTEVAL verify.pl directory /$targetdir $categoryhash{$categoryname} -->&nbsp;</td>".
     "<td rowspan='2' bgcolor='#ffffff'>$chmod<br />$chown</td>".      "<td rowspan='2' bgcolor='#ffffff'>$chmod<br />$chown</td>".
     "<td bgcolor='#ffffff'>$thtml</td></tr>".      "<td bgcolor='#ffffff'>$thtml</td></tr>".
     "<tr><td bgcolor='#ffffff' colspan='[{{{{{DPATHLENGTH}}}}}]'>".      "<tr><td bgcolor='#ffffff' colspan='[{{{{{DPATHLENGTH}}}}}]'>".
Line 948  sub format_file { Line 1047  sub format_file {
     $note=''; $build=''; $status=''; $dependencies='';      $note=''; $build=''; $status=''; $dependencies='';
     my $text=&trim($parser->get_text('/file'));      my $text=&trim($parser->get_text('/file'));
     my $buildtest;      my $buildtest;
       $file_count++;
       $categorycount{$categoryname}++;
       # START TEMP WAY
   #    if (-T "$sourcerootarg/$source") {
   # $linecount{$categoryname}+=`wc -l $sourcerootarg/$source`;
   #    }
   #    my $bytesize=(-s "$sourcerootarg/$source");
   #    $bytecount{$categoryname}+=$bytesize;
       # END TEMP WAY
     if ($source) {      if ($source) {
  $parser->get_tag('/file');   $parser->get_tag('/file');
  if ($mode eq 'html') {   if ($mode eq 'html') {
     return ($file="\n<!-- FILESORT:$target -->".      return ($file="\n<!-- FILESORT:$target -->".
     "<tr>".      "<tr>".
     "<td>&nbsp;</td><td><img src='$fab{$categoryname}.gif' ".      "<td><!-- POSTEVAL verify.pl file '$sourcerootarg' ".
       "'$targetrootarg' ".
       "'$source' '$target' ".
       "$categoryhash{$categoryname} -->&nbsp;</td><td>".
       "<img src='$fab{$categoryname}.gif' ".
     "alt='$categoryname icon' /></td>".      "alt='$categoryname icon' /></td>".
     "<td>$categoryname</td>".      "<td>$categoryname<br /><font size='-1'>".
       $categoryhash{$categoryname}."</font></td>".
     "<td>SOURCE: $source<br />TARGET: $target</td>".      "<td>SOURCE: $source<br />TARGET: $target</td>".
     "<td>$description</td>".      "<td>$description</td>".
     "<td>$note</td>".      "<td>$note</td>".
Line 1011  $buildtest \@if !(test -e "${sourceroot} Line 1124  $buildtest \@if !(test -e "${sourceroot}
  case "\$\$ECODE" in \\   case "\$\$ECODE" in \\
  1) echo "${targetroot}/${target} is unchanged";; \\   1) echo "${targetroot}/${target} is unchanged";; \\
  2) echo "**** WARNING **** target file ${targetroot}/${target} is newer than CVS source; saving current (old) target file to ${targetroot}/${target}.lpmlsave and then overwriting"$logcmd && install -o www -g www -m 0600 ${targetroot}/${target} ${targetroot}/${target}.lpmlsave && install $categoryhash{$categoryname} ${sourceroot}/${source} ${targetroot}/${target};; \\   2) echo "**** WARNING **** target file ${targetroot}/${target} is newer than CVS source; saving current (old) target file to ${targetroot}/${target}.lpmlsave and then overwriting"$logcmd && install -o www -g www -m 0600 ${targetroot}/${target} ${targetroot}/${target}.lpmlsave && install $categoryhash{$categoryname} ${sourceroot}/${source} ${targetroot}/${target};; \\
  0) echo "install $categoryhash{$categorname} ${sourceroot}/${source} ${targetroot}/${target}" && install $categoryhash{$categoryname} ${sourceroot}/${source} ${targetroot}/${target};; \\   0) echo "install $categoryhash{$categoryname} ${sourceroot}/${source} ${targetroot}/${target}" && install $categoryhash{$categoryname} ${sourceroot}/${source} ${targetroot}/${target};; \\
  esac; \\   esac; \\
  perl verifymodown.pl ${targetroot}/${target} "$categoryhash{$categoryname}"$logcmd; \\   perl verifymodown.pl ${targetroot}/${target} "$categoryhash{$categoryname}"$logcmd; \\
  fi   fi
Line 1066  END Line 1179  END
 # --------------------------------------------------------- Format link section  # --------------------------------------------------------- Format link section
 sub format_link {  sub format_link {
     my @tokeninfo=@_;      my @tokeninfo=@_;
     $link=''; $linkto=''; $target=''; $categoryname=''; $description='';      $link=''; $linkto=''; $source=''; $target=''; $categoryname=''; 
     $note=''; $build=''; $status=''; $dependencies='';      $description=''; $note=''; $build=''; $status=''; $dependencies='';
     my $text=&trim($parser->get_text('/link'));      my $text=&trim($parser->get_text('/link'));
       my @links;
     if ($linkto) {      if ($linkto) {
  $parser->get_tag('/link');   $parser->get_tag('/link');
  if ($mode eq 'html') {   if ($mode eq 'html') {
     return $link="\n<tr><td colspan='6'>BEGIN LINK\n".      my @targets=map {s/^\s*//;s/\s$//;$_} split(/\;/,$target);
  "$linkto $target $categoryname $description $note " .      $link_count+=scalar(@targets);
  "$build $status $dependencies" .      foreach my $tgt (@targets) {
     "\nEND LINK</td></tr>";   $categorycount{$categoryname}++;
    push @links,("\n<!-- FILESORT:$tgt -->".
       "<tr>".
       "<td><!-- POSTEVAL verify.pl link ".
       "'/$targetrootarg$linkto' '/$targetrootarg$tgt' ".
       "$categoryhash{$categoryname} -->&nbsp;</td><td>".
       "<img src='$fab{$categoryname}.gif' ".
       "alt='$categoryname icon' /></td>".
       "<td><font size='-1'>$categoryname</font></td>".
       "<td>LINKTO: $linkto<br />TARGET: $tgt</td>".
       "<td>$description</td>".
       "<td>$note</td>".
       "</tr>");
   # push @links,"\t".'ln -fs /'.$linkto.' /'.$targetroot.$tgt.
   #    "\n";
       }
       return join('',@links);
   #    return ($link="\n<!-- FILESORT:$target -->".
   #    "<tr>".
   #    "<td>&nbsp;</td><td><img src='$fab{$categoryname}.gif' ".
   #    "alt='$categoryname icon' /></td>".
   #    "<td>$categoryname</td>".
   #    "<td>LINKTO: $linkto<br />TARGET: $target</td>".
   #    "<td>$description</td>".
   #    "<td>$note</td>".
   #    "</tr>");
   #    return $link="\n<tr><td colspan='6'>BEGIN LINK\n".
   # "$linkto $target $categoryname $description $note " .
   # "$build $status $dependencies" .
   #    "\nEND LINK</td></tr>";
  }   }
  elsif ($mode eq 'install') {   elsif ($mode eq 'install') {
     my @targets=map {s/^\s*//;s/\s$//;$_} split(/\;/,$target);      my @targets=map {s/^\s*//;s/\s$//;$_} split(/\;/,$target);
Line 1099  sub format_fileglob { Line 1242  sub format_fileglob {
     $note=''; $build=''; $status=''; $dependencies='';      $note=''; $build=''; $status=''; $dependencies='';
     $filenames='';      $filenames='';
     my $text=&trim($parser->get_text('/fileglob'));      my $text=&trim($parser->get_text('/fileglob'));
       my $filenames2=$filenames;$filenames2=~s/\s//g;
       $fileglob_count++;
       my @semi=($filenames2=~/(\;)/g);
       $fileglobnames_count+=scalar(@semi)+1;
       $categorycount{$categoryname}+=scalar(@semi)+1;
       # START TEMP WAY
   #    for my $f (split(/\;/,$filenames2)) {
   # if (-T "$sourcerootarg/$sourcedir/$f") {
   #    $linecount{$categoryname}+=`wc -l $sourcerootarg/$sourcedir/$f`;
   #    open OUT,">>/tmp/junk123";
   #    print OUT "$linecount{$categoryname} $categoryname $sourcerootarg/$sourcedir/$f\n";
   #    close OUT;
   # }
   # my $bytesize=(-s "$sourcerootarg/$sourcedir/$f");
   # $bytecount{$categoryname}+=$bytesize;
   #    }
       # END TEMP WAY
     if ($sourcedir) {      if ($sourcedir) {
  $parser->get_tag('/fileglob');   $parser->get_tag('/fileglob');
  if ($mode eq 'html') {   if ($mode eq 'html') {
     return $fileglob="\n<tr><td colspan='6'>BEGIN FILEGLOB\n".      return $fileglob="\n<tr>".
  "$glob sourcedir $targetdir $categoryname $description $note ".   "<td><!-- POSTEVAL verify.pl fileglob '$sourcerootarg' ".
  "$build $status $dependencies $filenames" .   "'$targetrootarg' ".
  "\nEND FILEGLOB</td></tr>";   "'$glob' '$sourcedir' '$filenames2' '$targetdir' ".
    "$categoryhash{$categoryname} -->&nbsp;</td>".
    "<td>"."<img src='$fab{$categoryname}.gif' ".
           "alt='$categoryname icon' /></td>".
    "<td>$categoryname<br />".
    "<font size='-1'>".$categoryhash{$categoryname}."</font></td>".
    "<td>SOURCEDIR: $sourcedir<br />".
    "TARGETDIR: $targetdir<br />".
                   "GLOB: $glob<br />".
                   "FILENAMES: $filenames".
    "</td>".
    "<td>$description</td>".
    "<td>$note</td>".
    "</tr>";
   #    return $fileglob="\n<tr><td colspan='6'>BEGIN FILEGLOB\n".
   # "$glob sourcedir $targetdir $categoryname $description $note ".
   # "$build $status $dependencies $filenames" .
   # "\nEND FILEGLOB</td></tr>";
  }   }
  elsif ($mode eq 'install') {   elsif ($mode eq 'install') {
     return "\t".'install '.      return "\t".'install '.

Removed from v.1.26  
changed lines
  Added in v.1.29


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>