--- loncom/build/lpml_parse.pl 2001/12/06 23:14:33 1.28 +++ loncom/build/lpml_parse.pl 2002/01/29 10:40:17 1.36 @@ -3,7 +3,7 @@ # The LearningOnline Network with CAPA # lpml_parse.pl - Linux Packaging Markup Language parser # -# $Id: lpml_parse.pl,v 1.28 2001/12/06 23:14:33 harris41 Exp $ +# $Id: lpml_parse.pl,v 1.36 2002/01/29 10:40:17 harris41 Exp $ # # Written by Scott Harrison, harris41@msu.edu # @@ -35,7 +35,9 @@ # 9/5/2001,9/6,9/7,9/8 - Scott Harrison # 9/17,9/18 - 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 # ### @@ -128,8 +130,8 @@ if ($mode eq 'install' or $mode eq 'conf # 1st argument (mode) is: $mode # 2nd argument (category type) is: $categorytype # 3rd argument (distribution) is: $dist -# 4th argument (targetroot) is: described below -# 5th argument (sourceroot) is: described below +# 4th argument (sourceroot) is: described below +# 5th argument (targetroot) is: described below END } @@ -225,6 +227,7 @@ $cleanstring=~s/\>\s*\n\s*\\xml_mode('1'); # Define handling methods for mode-dependent text rendering $parser->{textify}={ + specialnotices => \&format_specialnotices, + specialnotice => \&format_specialnotice, targetroot => \&format_targetroot, sourceroot => \&format_sourceroot, categories => \&format_categories, @@ -308,6 +323,7 @@ $parser->{textify}={ rpmAutoReqProv => \&format_rpmAutoReqProv, rpmdescription => \&format_rpmdescription, rpmpre => \&format_rpmpre, + rpmRequires => \&format_rpmRequires, directories => \&format_directories, directory => \&format_directory, categoryname => \&format_categoryname, @@ -354,7 +370,60 @@ exit; # ------------------------ Final output at end of markup parsing and formatting sub end { if ($mode eq 'html') { - return "\n"; + # START TEMP WAY +# my $totallinecount; +# my $totalbytecount; +# map {$totallinecount+=$linecount{$_}; +# $totalbytecount+=$bytecount{$_}} +# @categorynamelist; + # END TEMP WAY + return "
 
". + "Summary of Source Repository". + "". + "
 
". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "". + "
Files, Directories, and Symbolic Links
Files (not referenced by globs)$file_count
Files (referenced by globs)$fileglobnames_count
Total Files".($fileglobnames_count+$file_count)."
File globs".$fileglob_count."
Directories".$directory_count."
Symbolic links".$link_count."
". + "". + "". + "". + "". + "". + join("\n",(map {"". + "". + ""} + @categorynamelist)). + "
File Category Count
IconNameNumber of OccurrencesNumber of Incorrect Counts
$_$categorycount{$_}
". + "\n"; + +# START TEMP WAY +# join("\n",(map {"". +# "$_$categorycount{$_}$linecount{$_}$bytecount{$_}"} +# @categorynamelist)). +# "
 
". +# "Total Lines of Code: $totallinecount". +# "
 
". +# "Total Bytes: $totalbytecount". +# END TEMP WAY } if ($mode eq 'install') { return ''; @@ -392,6 +461,7 @@ Descriptions
  • Software Package Description
  • Directory Structure
  • Files
  • +
  • Summary of Source Repository
  • END $lpml .=< END } + elsif ($mode eq 'make_rpm') { + return $text; + } elsif ($mode eq 'text') { return $rpm=<$text +END + } else { return ''; } @@ -631,6 +710,11 @@ sub format_rpmName { elsif ($mode eq 'text') { return $rpmName="\nName : $text"; } + elsif ($mode eq 'make_rpm') { + return <$text +END + } else { return ''; } @@ -673,6 +757,11 @@ sub format_rpmVendor { elsif ($mode eq 'text') { return $rpmVendor="\nVendor : $text"; } + elsif ($mode eq 'make_rpm') { + return <$text +END + } else { return ''; } @@ -701,6 +790,11 @@ sub format_rpmCopyright { elsif ($mode eq 'text') { return $rpmCopyright="\nLicense : $text"; } + elsif ($mode eq 'make_rpm') { + return <$text +END + } else { return ''; } @@ -715,6 +809,11 @@ sub format_rpmGroup { elsif ($mode eq 'text') { return $rpmGroup="\nGroup : $text"; } + elsif ($mode eq 'make_rpm') { + return <Utilities/System +END + } else { return ''; } @@ -740,9 +839,14 @@ sub format_rpmAutoReqProv { if ($mode eq 'html') { return $rpmAutoReqProv="\nAutoReqProv : $text"; } - if ($mode eq 'text') { + elsif ($mode eq 'text') { return $rpmAutoReqProv="\nAutoReqProv : $text"; } + elsif ($mode eq 'make_rpm') { + return <$text +END + } else { return ''; } @@ -761,6 +865,13 @@ sub format_rpmdescription { $text=~s/\\n/\n/g; return $rpmdescription="\nDescription : $text"; } + elsif ($mode eq 'make_rpm') { + $text=~s/\n//g; + $text=~s/\\n/\n/g; + return <$text +END + } else { return ''; } @@ -773,9 +884,41 @@ sub format_rpmpre { # return $rpmpre="\n
    RPMPRE $text"; return ''; } + elsif ($mode eq 'make_rpm') { + return <$text +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 { + $parser->get_tag('/rpmRequires'); return ''; } + return ''.$text.''; } # -------------------------------------------------- Format directories section sub format_directories { @@ -801,7 +944,10 @@ sub format_directories { } elsif ($mode eq 'install') { return "\n".'directories:'."\n".$text; - } + } + elsif ($mode eq 'rpm_file_list') { + return $text; + } else { return ''; } @@ -812,6 +958,8 @@ sub format_directory { $targetdir='';$categoryname='';$description=''; $parser->get_text('/directory'); $parser->get_tag('/directory'); + $directory_count++; + $categorycount{$categoryname}++; if ($mode eq 'html') { my @a; @a=($targetdir=~/\//g); @@ -822,7 +970,7 @@ sub format_directory { my ($chmod,$chown)=split(/\s/,$categoryhash{$categoryname}); return $directory="\n". "$categoryname". - " ". + " ". "$chmod
    $chown". "$thtml". "". @@ -836,6 +984,9 @@ sub format_directory { return "\t".'install '.$categoryhash{$categoryname}.' -d '. $targetroot.'/'.$targetdir."\n"; } + elsif ($mode eq 'rpm_file_list') { + return $targetroot.'/'.$targetdir."\n"; + } else { return ''; } @@ -915,8 +1066,14 @@ sub format_files { foreach my $bi (@buildinfo) { my ($target,$source,$command,$trigger,@deps)=split(/\;/,$bi); $tword=''; $tword=' alwaysrun' if $trigger eq 'always run'; - $command=~s/\/([^\/]*)$//; - $command2="cd $command; sh ./$1;\\"; + if ($command!~/\s/) { + $command=~s/\/([^\/]*)$//; + $command2="cd $command; sh ./$1;\\"; + } + else { + $command=~s/(.*?\/)([^\/]+\s+.*)$/$1/; + $command2="cd $command; sh ./$2;\\"; + } my $depstring; my $depstring2="\t\t\@echo '';\\\n"; my $olddep; @@ -952,6 +1109,9 @@ sub format_files { $binfo."\n". "alwaysrun:\n\n"; } + elsif ($mode eq 'rpm_file_list') { + return $text; + } else { return ''; } @@ -982,12 +1142,21 @@ sub format_file { $note=''; $build=''; $status=''; $dependencies=''; my $text=&trim($parser->get_text('/file')); 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) { $parser->get_tag('/file'); if ($mode eq 'html') { return ($file="\n". "". - " ". @@ -1016,10 +1185,10 @@ sub format_file { foreach my $dep (@deps) { $depstring.=<get_tag('/link'); if ($mode eq 'html') { my @targets=map {s/^\s*//;s/\s$//;$_} split(/\;/,$target); + $link_count+=scalar(@targets); foreach my $tgt (@targets) { + $categorycount{$categoryname}++; push @links,("\n". "". - " ". "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) { $parser->get_tag('/fileglob'); if ($mode eq 'html') { return $fileglob="\n". - " ". @@ -1192,11 +1399,25 @@ sub format_fileglob { # "\nEND FILEGLOB"; } elsif ($mode eq 'install') { + my $eglob=$glob; + if ($glob eq '*') { + $eglob='[^C][^V][^S]'.$glob; + } return "\t".'install '. $categoryhash{$categoryname}.' '. - $sourceroot.'/'.$sourcedir.'[^C][^V][^S]'.$glob.' '. + $sourceroot.'/'.$sourcedir.$eglob.' '. $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 { return ''; } @@ -1330,6 +1551,16 @@ sub format_filenames { } return ''; } +# ------------------------------------------------ Format specialnotice section +sub format_specialnotices { + $parser->get_tag('/specialnotices'); + return ''; +} +# ------------------------------------------------ Format specialnotice section +sub format_specialnotice { + $parser->get_tag('/specialnotice'); + return ''; +} # ------------------------------------------------------- Format linkto section sub format_linkto { my @tokeninfo=@_;