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

version 1.29, 2001/12/07 04:45:16 version 1.38, 2002/01/31 17:08:40
Line 35 Line 35
 # 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  # 12/2,12/3,12/4,12/5,12/6,12/13,12/19,12/29 - Scott Harrison
   # YEAR=2002
   # 1/8,1/9 - Scott Harrison
 #  #
 ###  ###
   
Line 128  if ($mode eq 'install' or $mode eq 'conf Line 130  if ($mode eq 'install' or $mode eq 'conf
 #             1st argument (mode) is: $mode  #             1st argument (mode) is: $mode
 #             2nd argument (category type) is: $categorytype  #             2nd argument (category type) is: $categorytype
 #             3rd argument (distribution) is: $dist  #             3rd argument (distribution) is: $dist
 #             4th argument (targetroot) is: described below  #             4th argument (sourceroot) is: described below
 #             5th argument (sourceroot) is: described below  #             5th argument (targetroot) is: described below
 END  END
 }  }
   
Line 279  my $link_count; Line 281  my $link_count;
 my $fileglob_count;  my $fileglob_count;
 my $fileglobnames_count;  my $fileglobnames_count;
 my %categorycount;  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 298  $parser->xml_mode('1'); Line 296  $parser->xml_mode('1');
 # Define handling methods for mode-dependent text rendering  # Define handling methods for mode-dependent text rendering
   
 $parser->{textify}={  $parser->{textify}={
       specialnotices => \&format_specialnotices,
       specialnotice => \&format_specialnotice,
     targetroot => \&format_targetroot,      targetroot => \&format_targetroot,
     sourceroot => \&format_sourceroot,      sourceroot => \&format_sourceroot,
     categories => \&format_categories,      categories => \&format_categories,
Line 319  $parser->{textify}={ Line 319  $parser->{textify}={
     rpmAutoReqProv => \&format_rpmAutoReqProv,      rpmAutoReqProv => \&format_rpmAutoReqProv,
     rpmdescription => \&format_rpmdescription,      rpmdescription => \&format_rpmdescription,
     rpmpre => \&format_rpmpre,      rpmpre => \&format_rpmpre,
       rpmRequires => \&format_rpmRequires,
     directories => \&format_directories,      directories => \&format_directories,
     directory => \&format_directory,      directory => \&format_directory,
     categoryname => \&format_categoryname,      categoryname => \&format_categoryname,
Line 365  exit; Line 366  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') {
  # START TEMP WAY  
 # my $totallinecount;  
 # my $totalbytecount;  
 # map {$totallinecount+=$linecount{$_};  
 #     $totalbytecount+=$bytecount{$_}}  
 #  @categorynamelist;  
         # END TEMP WAY  
  return "<br />&nbsp;<br />".   return "<br />&nbsp;<br />".
     "<a name='summary' /><font size='+2'>Summary of Source Repository".      "<a name='summary' /><font size='+2'>Summary of Source Repository".
     "</font>".      "</font>".
Line 399  sub end { Line 393  sub end {
     "<table border='1' cellpadding='5'>".      "<table border='1' cellpadding='5'>".
     "<caption>File Category Count</caption>".      "<caption>File Category Count</caption>".
     "<tr><th>Icon</th><th>Name</th><th>Number of Occurrences</th>".      "<tr><th>Icon</th><th>Name</th><th>Number of Occurrences</th>".
       "<th>Number of Incorrect Counts</th>".
       "</tr>".
     join("\n",(map {"<tr><td><img src='$fab{$_}.gif' ".      join("\n",(map {"<tr><td><img src='$fab{$_}.gif' ".
  "alt='$_ icon' /></td>".   "alt='$_ icon' /></td>".
           "<td>$_</td><td>$categorycount{$_}</td></tr>"}            "<td>$_</td><td>$categorycount{$_}</td>".
    "<td><!-- POSTEVALINLINE $_ --></td></tr>"}
  @categorynamelist)).   @categorynamelist)).
     "</table>".      "</table>".
     "</body></html>\n";      "</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 659  $text Line 646  $text
 </table>  </table>
 END  END
     }      }
       elsif ($mode eq 'make_rpm') {
    return $text;
       }
     elsif ($mode eq 'text') {      elsif ($mode eq 'text') {
  return $rpm=<<END;   return $rpm=<<END;
 Software Package Description  Software Package Description
Line 680  sub format_rpmSummary { Line 670  sub format_rpmSummary {
     elsif ($mode eq 'text') {      elsif ($mode eq 'text') {
  return $rpmSummary="\nSummary     : $text";   return $rpmSummary="\nSummary     : $text";
     }      }
       elsif ($mode eq 'make_rpm') {
    return <<END;
   <summary>$text</summary>
   END
       }
     else {      else {
  return '';   return '';
     }      }
Line 694  sub format_rpmName { Line 689  sub format_rpmName {
     elsif ($mode eq 'text') {      elsif ($mode eq 'text') {
  return $rpmName="\nName        : $text";   return $rpmName="\nName        : $text";
     }      }
       elsif ($mode eq 'make_rpm') {
    return <<END;
   <name>$text</name>
   END
       }
     else {      else {
  return '';   return '';
     }      }
Line 736  sub format_rpmVendor { Line 736  sub format_rpmVendor {
     elsif ($mode eq 'text') {      elsif ($mode eq 'text') {
  return $rpmVendor="\nVendor      : $text";   return $rpmVendor="\nVendor      : $text";
     }      }
       elsif ($mode eq 'make_rpm') {
    return <<END;
   <vendor>$text</vendor>
   END
       }
     else {      else {
  return '';   return '';
     }      }
Line 764  sub format_rpmCopyright { Line 769  sub format_rpmCopyright {
     elsif ($mode eq 'text') {      elsif ($mode eq 'text') {
  return $rpmCopyright="\nLicense     : $text";   return $rpmCopyright="\nLicense     : $text";
     }      }
       elsif ($mode eq 'make_rpm') {
    return <<END;
   <copyright>$text</copyright>
   END
       }
     else {      else {
  return '';   return '';
     }      }
Line 778  sub format_rpmGroup { Line 788  sub format_rpmGroup {
     elsif ($mode eq 'text') {      elsif ($mode eq 'text') {
  return $rpmGroup="\nGroup       : $text";   return $rpmGroup="\nGroup       : $text";
     }      }
       elsif ($mode eq 'make_rpm') {
    return <<END;
   <group>Utilities/System</group>
   END
       }
     else {      else {
  return '';   return '';
     }      }
Line 803  sub format_rpmAutoReqProv { Line 818  sub format_rpmAutoReqProv {
     if ($mode eq 'html') {      if ($mode eq 'html') {
  return $rpmAutoReqProv="\nAutoReqProv : $text";   return $rpmAutoReqProv="\nAutoReqProv : $text";
     }      }
     if ($mode eq 'text') {      elsif ($mode eq 'text') {
  return $rpmAutoReqProv="\nAutoReqProv : $text";   return $rpmAutoReqProv="\nAutoReqProv : $text";
     }      }
       elsif ($mode eq 'make_rpm') {
    return <<END;
   <AutoReqProv>$text</AutoReqProv>
   END
       }
     else {      else {
  return '';   return '';
     }      }
Line 824  sub format_rpmdescription { Line 844  sub format_rpmdescription {
  $text=~s/\\n/\n/g;   $text=~s/\\n/\n/g;
  return $rpmdescription="\nDescription : $text";   return $rpmdescription="\nDescription : $text";
     }      }
       elsif ($mode eq 'make_rpm') {
    $text=~s/\n//g;
    $text=~s/\\n/\n/g;
    return <<END;
   <description>$text</description>
   END
       }
     else {      else {
  return '';   return '';
     }      }
Line 836  sub format_rpmpre { Line 863  sub format_rpmpre {
 # return $rpmpre="\n<br />RPMPRE $text";  # return $rpmpre="\n<br />RPMPRE $text";
  return '';   return '';
     }      }
       elsif ($mode eq 'make_rpm') {
    return <<END;
   <pre>$text</pre>
   END
       }
       else {
    return '';
       }
   }
   # -------------------------------------------------- Format requires section
   sub format_rpmRequires {
       my @tokeninfo=@_;
       my $aref;
       my $text;
       if ($mode eq 'make_rpm') {
    while ($aref=$parser->get_token()) {
       if ($aref->[0] eq 'E' && $aref->[1] eq 'rpmRequires') {
    last;
       }
       elsif ($aref->[0] eq 'S') {
    $text.=$aref->[4];
       }
       elsif ($aref->[0] eq 'E') {
    $text.=$aref->[2];
       }
       else {
    $text.=$aref->[1];
       }
    }
       }
     else {      else {
    $parser->get_tag('/rpmRequires');
  return '';   return '';
     }      }
       return '<rpmRequires>'.$text.'</rpmRequires>';
 }  }
 # -------------------------------------------------- Format directories section  # -------------------------------------------------- Format directories section
 sub format_directories {  sub format_directories {
Line 864  sub format_directories { Line 923  sub format_directories {
     }      }
     elsif ($mode eq 'install') {      elsif ($mode eq 'install') {
  return "\n".'directories:'."\n".$text;   return "\n".'directories:'."\n".$text;
    }      }
       elsif ($mode eq 'rpm_file_list') {
    return $text;
       }
     else {      else {
  return '';   return '';
     }      }
Line 887  sub format_directory { Line 949  sub format_directory {
  my ($chmod,$chown)=split(/\s/,$categoryhash{$categoryname});   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 verify.pl directory /$targetdir $categoryhash{$categoryname} -->&nbsp;</td>".      "<td rowspan='2' bgcolor='#ffffff'><!-- POSTEVAL [$categoryname] 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 901  sub format_directory { Line 963  sub format_directory {
  return "\t".'install '.$categoryhash{$categoryname}.' -d '.   return "\t".'install '.$categoryhash{$categoryname}.' -d '.
     $targetroot.'/'.$targetdir."\n";      $targetroot.'/'.$targetdir."\n";
     }      }
       elsif ($mode eq 'rpm_file_list') {
    return $targetroot.'/'.$targetdir."\n";
       }
     else {      else {
  return '';   return '';
     }      }
Line 980  sub format_files { Line 1045  sub format_files {
  foreach my $bi (@buildinfo) {   foreach my $bi (@buildinfo) {
     my ($target,$source,$command,$trigger,@deps)=split(/\;/,$bi);      my ($target,$source,$command,$trigger,@deps)=split(/\;/,$bi);
     $tword=''; $tword=' alwaysrun' if $trigger eq 'always run';       $tword=''; $tword=' alwaysrun' if $trigger eq 'always run'; 
     $command=~s/\/([^\/]*)$//;      if ($command!~/\s/) {
     $command2="cd $command; sh ./$1;\\";   $command=~s/\/([^\/]*)$//;
    $command2="cd $command; sh ./$1;\\";
       }
       else {
    $command=~s/(.*?\/)([^\/]+\s+.*)$/$1/;
    $command2="cd $command; sh ./$2;\\";
       }
     my $depstring;      my $depstring;
     my $depstring2="\t\t\@echo '';\\\n";      my $depstring2="\t\t\@echo '';\\\n";
     my $olddep;      my $olddep;
Line 1017  sub format_files { Line 1088  sub format_files {
  $binfo."\n".   $binfo."\n".
  "alwaysrun:\n\n";   "alwaysrun:\n\n";
     }      }
       elsif ($mode eq 'rpm_file_list') {
    return $text;
       }
     else {      else {
  return '';   return '';
     }      }
Line 1049  sub format_file { Line 1123  sub format_file {
     my $buildtest;      my $buildtest;
     $file_count++;      $file_count++;
     $categorycount{$categoryname}++;      $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><!-- POSTEVAL verify.pl file '$sourcerootarg' ".      "<td><!-- POSTEVAL [$categoryname] verify.pl file '$sourcerootarg' ".
     "'$targetrootarg' ".      "'$targetrootarg' ".
     "'$source' '$target' ".      "'$source' '$target' ".
     "$categoryhash{$categoryname} -->&nbsp;</td><td>".      "$categoryhash{$categoryname} -->&nbsp;</td><td>".
Line 1090  sub format_file { Line 1157  sub format_file {
  foreach my $dep (@deps) {   foreach my $dep (@deps) {
     $depstring.=<<END;      $depstring.=<<END;
  ECODE=0; DEP=''; \\   ECODE=0; DEP=''; \\
  test -e $command/$dep || (echo '**** WARNING **** cannot evaluate status of dependency $command/$dep (for building ${sourceroot}/${source} with)'$logcmd); DEP="1"; \\   test -e $dep || (echo '**** WARNING **** cannot evaluate status of dependency $dep (for building ${sourceroot}/${source} with)'$logcmd); DEP="1"; \\
  [ -n DEP ] && { perl filecompare.pl -b2 $command/$dep ${targetroot}/${target} || ECODE=\$\$?; } || DEP="1"; \\   [ -n DEP ] && { perl filecompare.pl -b2 $dep ${targetroot}/${target} || ECODE=\$\$?; } || DEP="1"; \\
  case "\$\$ECODE" in \\   case "\$\$ECODE" in \\
  2) echo "**** WARNING **** dependency $command/$dep is newer than target file ${targetroot}/${target}; you may want to run make build"$logcmd;; \\   2) echo "**** WARNING **** dependency $dep is newer than target file ${targetroot}/${target}; you may want to run make build"$logcmd;; \\
  esac; \\   esac; \\
 END  END
  }   }
Line 1170  END Line 1237  END
  $dependencies;   $dependencies;
 #    return '# need to build '.$source.";  #    return '# need to build '.$source.";
  }   }
           elsif ($mode eq 'rpm_file_list') {
       if ($categoryname eq 'doc') {
    return $targetroot.'/'.$target.' # doc'."\n";
       }
       elsif ($categoryname eq 'conf') {
    return $targetroot.'/'.$target.' # config'."\n";
       }
       else {
    return $targetroot.'/'.$target."\n";
       }
    }
  else {   else {
     return '';      return '';
  }   }
Line 1182  sub format_link { Line 1260  sub format_link {
     $link=''; $linkto=''; $source=''; $target=''; $categoryname='';       $link=''; $linkto=''; $source=''; $target=''; $categoryname=''; 
     $description=''; $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') {
Line 1192  sub format_link { Line 1269  sub format_link {
  $categorycount{$categoryname}++;   $categorycount{$categoryname}++;
  push @links,("\n<!-- FILESORT:$tgt -->".   push @links,("\n<!-- FILESORT:$tgt -->".
     "<tr>".      "<tr>".
     "<td><!-- POSTEVAL verify.pl link ".      "<td><!-- POSTEVAL [$categoryname] verify.pl link ".
     "'/$targetrootarg$linkto' '/$targetrootarg$tgt' ".      "'/$targetrootarg$linkto' '/$targetrootarg$tgt' ".
     "$categoryhash{$categoryname} -->&nbsp;</td><td>".      "$categoryhash{$categoryname} -->&nbsp;</td><td>".
     "<img src='$fab{$categoryname}.gif' ".      "<img src='$fab{$categoryname}.gif' ".
Line 1223  sub format_link { Line 1300  sub format_link {
  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);
     foreach my $tgt (@targets) {      foreach my $tgt (@targets) {
  push @links,"\t".'ln -fs /'.$linkto.' /'.$targetroot.$tgt.   push @links,"\t".'ln -fs /'.$linkto.' '.$targetroot.'/'.$tgt.
     "\n";      "\n";
     }      }
   #    return join('',@links);
     return '';      return '';
  }   }
    elsif ($mode eq 'rpm_file_list') {
       my @linklocs;
       my @targets=map {s/^\s*//;s/\s$//;$_} split(/\;/,$target);
       foreach my $tgt (@targets) {
    push @linklocs,''.$targetroot.'/'.$tgt."\n";
       }
       return join('',@linklocs);
    }
  else {   else {
     return '';      return '';
  }   }
Line 1247  sub format_fileglob { Line 1333  sub format_fileglob {
     my @semi=($filenames2=~/(\;)/g);      my @semi=($filenames2=~/(\;)/g);
     $fileglobnames_count+=scalar(@semi)+1;      $fileglobnames_count+=scalar(@semi)+1;
     $categorycount{$categoryname}+=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>".      return $fileglob="\n<tr>".
  "<td><!-- POSTEVAL verify.pl fileglob '$sourcerootarg' ".   "<td><!-- POSTEVAL [$categoryname] verify.pl fileglob '$sourcerootarg' ".
  "'$targetrootarg' ".   "'$targetrootarg' ".
  "'$glob' '$sourcedir' '$filenames2' '$targetdir' ".   "'$glob' '$sourcedir' '$filenames2' '$targetdir' ".
  "$categoryhash{$categoryname} -->&nbsp;</td>".   "$categoryhash{$categoryname} -->&nbsp;</td>".
Line 1285  sub format_fileglob { Line 1359  sub format_fileglob {
 # "\nEND FILEGLOB</td></tr>";  # "\nEND FILEGLOB</td></tr>";
  }   }
  elsif ($mode eq 'install') {   elsif ($mode eq 'install') {
       my $eglob=$glob;
       if ($glob eq '*') {
    $eglob='[^C][^V][^S]'.$glob;
       }
     return "\t".'install '.      return "\t".'install '.
  $categoryhash{$categoryname}.' '.   $categoryhash{$categoryname}.' '.
  $sourceroot.'/'.$sourcedir.'[^C][^V][^S]'.$glob.' '.   $sourceroot.'/'.$sourcedir.$eglob.' '.
  $targetroot.'/'.$targetdir.'.'."\n";   $targetroot.'/'.$targetdir.'.'."\n";
  }   }
    elsif ($mode eq 'rpm_file_list') {
       my $eglob=$glob;
       if ($glob eq '*') {
    $eglob='[^C][^V][^S]'.$glob;
       }
       my $targetdir2=$targetdir;$targetdir2=~s/\/$//;
       my @gfiles=map {s/^.*\///;"$targetroot/$targetdir2/$_\n"}
                  glob("$sourceroot/$sourcedir/$eglob");
       return join('',@gfiles);
    }
  else {   else {
     return '';      return '';
  }   }
Line 1423  sub format_filenames { Line 1511  sub format_filenames {
     }      }
     return '';      return '';
 }  }
   # ----------------------------------------------- Format specialnotices section
   sub format_specialnotices {
       $parser->get_tag('/specialnotices');
       return '';
   }
   # ------------------------------------------------ Format specialnotice section
   sub format_specialnotice {
       $parser->get_tag('/specialnotice');
       return '';
   }
 # ------------------------------------------------------- Format linkto section  # ------------------------------------------------------- Format linkto section
 sub format_linkto {  sub format_linkto {
     my @tokeninfo=@_;      my @tokeninfo=@_;

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


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