version 1.16, 2001/11/07 16:53:52
|
version 1.27, 2001/12/06 00:22:53
|
Line 6
|
Line 6
|
# 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 - Scott Harrison |
# 11/4,11/5,11/6,11/7,11/16,11/17 - Scott Harrison |
|
# 12/2,12/3,12/4,12/5 - Scott Harrison |
|
# $Id$ |
|
### |
|
|
############################################################################### |
############################################################################### |
## ## |
## ## |
Line 46 Only the 1st argument is mandatory for t
|
Line 49 Only the 1st argument is mandatory for t
|
Example: |
Example: |
|
|
cat ../../doc/loncapafiles.lpml |\\ |
cat ../../doc/loncapafiles.lpml |\\ |
perl lpml_parse.pl html default /home/sherbert/loncapa /tmp/install |
perl lpml_parse.pl html development default /home/sherbert/loncapa /tmp/install |
END |
END |
|
|
# ------------------------------------------------- Grab command line arguments |
# ------------------------------------------------- Grab command line arguments |
Line 74 if (@ARGV) {
|
Line 77 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 82 if (@ARGV) {
|
Line 87 if (@ARGV) {
|
} |
} |
$sourceroot=~s/\/$//; |
$sourceroot=~s/\/$//; |
$targetroot=~s/\/$//; |
$targetroot=~s/\/$//; |
|
$sourcerootarg=$sourceroot; |
|
$targetrootarg=$targetroot; |
|
|
|
my $logcmd='| tee -a WARNINGS'; |
|
|
my $invocation; |
my $invocation; |
# --------------------------------------------------- Record program invocation |
# --------------------------------------------------- Record program invocation |
if ($mode eq 'install') { |
if ($mode eq 'install' or $mode eq 'configinstall' or $mode eq 'build') { |
$invocation=(<<END); |
$invocation=(<<END); |
# Invocation: STDINPUT | lpml_parse.pl |
# Invocation: STDINPUT | lpml_parse.pl |
# 1st argument (mode) is: $mode |
# 1st argument (mode) is: $mode |
Line 193 my $category_att_name;
|
Line 202 my $category_att_name;
|
my $category_att_type; |
my $category_att_type; |
my $chown; |
my $chown; |
my $chmod; |
my $chmod; |
|
my $abbreviation; # space-free abbreviation; esp. for image names |
my $rpm; |
my $rpm; |
my $rpmSummary; |
my $rpmSummary; |
my $rpmName; |
my $rpmName; |
Line 232 my $dependencies;
|
Line 242 my $dependencies;
|
my $dependency; |
my $dependency; |
my @links; |
my @links; |
my %categoryhash; |
my %categoryhash; |
|
my $dpathlength; |
|
my %fab; # file category abbreviation |
|
|
my @buildall; |
my @buildall; |
my @buildinfo; |
my @buildinfo; |
Line 245 $parser = HTML::TokeParser->new(\$cleans
|
Line 257 $parser = HTML::TokeParser->new(\$cleans
|
$parser->xml_mode('1'); |
$parser->xml_mode('1'); |
|
|
# Define handling methods for mode-dependent text rendering |
# Define handling methods for mode-dependent text rendering |
|
|
$parser->{textify}={ |
$parser->{textify}={ |
targetroot => \&format_targetroot, |
targetroot => \&format_targetroot, |
sourceroot => \&format_sourceroot, |
sourceroot => \&format_sourceroot, |
categories => \&format_categories, |
categories => \&format_categories, |
category => \&format_category, |
category => \&format_category, |
|
abbreviation => \&format_abbreviation, |
targetdir => \&format_targetdir, |
targetdir => \&format_targetdir, |
chown => \&format_chown, |
chown => \&format_chown, |
chmod => \&format_chmod, |
chmod => \&format_chmod, |
Line 312 exit;
|
Line 326 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 "<br />THE END\n"; |
return "</body></html>\n"; |
} |
} |
if ($mode eq 'install') { |
if ($mode eq 'install') { |
return ''; |
return ''; |
Line 331 sub format_lpml {
|
Line 345 sub format_lpml {
|
my (@tokeninfo)=@_; |
my (@tokeninfo)=@_; |
my $date=`date`; chop $date; |
my $date=`date`; chop $date; |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
$lpml = "<br />LPML BEGINNING: $date"; |
$lpml=<<END; |
|
<html> |
|
<head> |
|
<title>LPML Description Page |
|
(dist=$dist, categorytype=$categorytype, $date)</title> |
|
</head> |
|
<body> |
|
END |
|
$lpml .= "<br /><font size='+2'>LPML Description Page (dist=$dist, ". |
|
"categorytype=$categorytype, $date)". |
|
"</font>"; |
|
$lpml .=<<END; |
|
<ul> |
|
<li><a href='#about'>About this file</a></li> |
|
<li><a href='#ownperms'>File Type Ownership and Permissions |
|
Descriptions</a></li> |
|
<li><a href='#package'>Software Package Description</a></li> |
|
<li><a href='#directories'>Directory Structure</a></li> |
|
<li><a href='#files'>Files</a></li> |
|
</ul> |
|
END |
|
$lpml .=<<END; |
|
<br /> <br /><a name='about' /> |
|
<font size='+2'>About this file</font> |
|
<p> |
|
This file is generated dynamically by <tt>lpml_parse.pl</tt> as |
|
part of a development compilation process. Author: Scott |
|
Harrison (harris41\@msu.edu). |
|
</p> |
|
END |
|
} |
|
elsif ($mode eq 'text') { |
|
$lpml = "LPML Description Page (dist=$dist, $date)"; |
|
$lpml .=<<END; |
|
|
|
* About this file |
|
* Software Package Description |
|
* Directory Structure |
|
* File Type Ownership and Permissions |
|
* Files |
|
END |
|
$lpml .=<<END; |
|
|
|
About this file |
|
|
|
This file is generated dynamically by lpml_parse.pl as |
|
part of a development compilation process. Author: Scott |
|
Harrison (harris41\@msu.edu). |
|
|
|
END |
} |
} |
elsif ($mode eq 'install') { |
elsif ($mode eq 'install') { |
print '# LPML install targets. Linux Packaging Markup Language,'; |
print '# LPML install targets. Linux Packaging Markup Language,'; |
Line 341 sub format_lpml {
|
Line 404 sub format_lpml {
|
$lpml .= "SHELL=\"/bin/bash\"\n\n"; |
$lpml .= "SHELL=\"/bin/bash\"\n\n"; |
} |
} |
elsif ($mode eq 'configinstall') { |
elsif ($mode eq 'configinstall') { |
print '# LPML configuration targets. Linux Packaging Markup Language,'; |
print '# LPML configuration file targets (configinstall).'."\n"; |
|
print '# Linux Packaging Markup Language,'; |
print ' by Scott Harrison 2001'."\n"; |
print ' by Scott Harrison 2001'."\n"; |
print '# This file was automatically generated on '.`date`; |
print '# This file was automatically generated on '.`date`; |
print "\n".$invocation; |
print "\n".$invocation; |
Line 351 sub format_lpml {
|
Line 415 sub format_lpml {
|
$lpml = "# LPML build targets. Linux Packaging Markup Language,"; |
$lpml = "# LPML build targets. Linux Packaging Markup Language,"; |
$lpml .= ' by Scott Harrison 2001'."\n"; |
$lpml .= ' by Scott Harrison 2001'."\n"; |
$lpml .= '# This file was automatically generated on '.`date`; |
$lpml .= '# This file was automatically generated on '.`date`; |
$lpml .= "\n"; |
$lpml .= "\n".$invocation; |
$lpml .= "SHELL=\"/bin/sh\"\n\n"; |
$lpml .= "SHELL=\"/bin/sh\"\n\n"; |
} |
} |
else { |
else { |
Line 366 sub format_targetroot {
|
Line 430 sub format_targetroot {
|
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $targetroot="\n<br />TARGETROOT: $text"; |
return $targetroot="\n<br />TARGETROOT: $text"; |
} |
} |
elsif ($mode eq 'install') { |
elsif ($mode eq 'install' or $mode eq 'build' or |
return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n"; |
$mode eq 'configinstall') { |
} |
|
elsif ($mode eq 'build') { |
|
return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n"; |
return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n"; |
} |
} |
else { |
else { |
Line 384 sub format_sourceroot {
|
Line 446 sub format_sourceroot {
|
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $sourceroot="\n<br />SOURCEROOT: $text"; |
return $sourceroot="\n<br />SOURCEROOT: $text"; |
} |
} |
elsif ($mode eq 'install') { |
elsif ($mode eq 'install' or $mode eq 'build' or |
return '# SOURCE CODE LOCATION IS "'.$sourceroot."\"\n";; |
$mode eq 'configinstall') { |
} |
|
elsif ($mode eq 'build') { |
|
return '# SOURCE CODE LOCATION IS "'.$sourceroot."\"\n";; |
return '# SOURCE CODE LOCATION IS "'.$sourceroot."\"\n";; |
} |
} |
else { |
else { |
Line 399 sub format_categories {
|
Line 459 sub format_categories {
|
my $text=&trim($parser->get_text('/categories')); |
my $text=&trim($parser->get_text('/categories')); |
$parser->get_tag('/categories'); |
$parser->get_tag('/categories'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $categories="\n<br />BEGIN CATEGORIES\n$text\n". |
return $categories="\n<br /> <br />". |
"<br />END CATEGORIES\n"; |
"\n<a name='ownperms'>". |
|
"\n<font size='+2'>File Type Ownership and Permissions". |
|
" Descriptions</font>". |
|
"\n<p>This table shows what permissions and ownership settings ". |
|
"correspond to each category.</p>". |
|
"\n<table border='1' cellpadding='5' width='60%'>\n". |
|
"<tr>". |
|
"<th align='left' bgcolor='#ffffff'>Icon</th>". |
|
"<th align='left' bgcolor='#ffffff'>Category Name</th>". |
|
"<th align='left' bgcolor='#ffffff'>Permissions ". |
|
"($categorytype)</th>". |
|
"</tr>". |
|
"\n$text\n". |
|
"</table>\n"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $categories="\n". |
|
"\nFile Type Ownership and Permissions". |
|
" Descriptions". |
|
"\n$text". |
|
"\n"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 411 sub format_category {
|
Line 491 sub format_category {
|
my (@tokeninfo)=@_; |
my (@tokeninfo)=@_; |
$category_att_name=$tokeninfo[2]->{'name'}; |
$category_att_name=$tokeninfo[2]->{'name'}; |
$category_att_type=$tokeninfo[2]->{'type'}; |
$category_att_type=$tokeninfo[2]->{'type'}; |
$chmod='';$chown=''; |
$abbreviation=''; $chmod='';$chown=''; |
$parser->get_text('/category'); |
$parser->get_text('/category'); |
$parser->get_tag('/category'); |
$parser->get_tag('/category'); |
|
$fab{$category_att_name}=$abbreviation; |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $category="\n<br />CATEGORY $category_att_name ". |
if ($category_att_type eq $categorytype) { |
"$category_att_type $chmod $chown"; |
$categoryhash{$category_att_name}="$chmod $chown"; |
|
return $category="<tr>". |
|
"<td><img src='$abbreviation.gif' ". |
|
"alt='${category_att_name}' /></td>\n". |
|
"<td>${category_att_name}</td>\n". |
|
"<td>$chmod $chown</td>\n". |
|
"</tr>". |
|
"\n"; |
|
# return $category="\n<br />CATEGORY $category_att_name ". |
|
# "$category_att_type $chmod $chown"; |
|
} |
} |
} |
else { |
else { |
if ($category_att_type eq $categorytype) { |
if ($category_att_type eq $categorytype) { |
Line 427 sub format_category {
|
Line 518 sub format_category {
|
return ''; |
return ''; |
} |
} |
} |
} |
|
# --------------------------------------------------- Format categories section |
|
sub format_abbreviation { |
|
my @tokeninfo=@_; |
|
$abbreviation=''; |
|
my $text=&trim($parser->get_text('/abbreviation')); |
|
if ($text) { |
|
$parser->get_tag('/abbreviation'); |
|
$abbreviation=$text; |
|
} |
|
return ''; |
|
} |
# -------------------------------------------------------- Format chown section |
# -------------------------------------------------------- Format chown section |
sub format_chown { |
sub format_chown { |
my @tokeninfo=@_; |
my @tokeninfo=@_; |
Line 454 sub format_rpm {
|
Line 556 sub format_rpm {
|
my $text=&trim($parser->get_text('/rpm')); |
my $text=&trim($parser->get_text('/rpm')); |
$parser->get_tag('/rpm'); |
$parser->get_tag('/rpm'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpm="\n<br />BEGIN RPM\n$text\n<br />END RPM"; |
return $rpm=<<END; |
|
<br /> <br /> |
|
<a name='package' /> |
|
<font size='+2'>Software Package Description</font> |
|
<p> |
|
<table bgcolor='#ffffff' border='0' cellpadding='10' cellspacing='0'> |
|
<tr><td><pre> |
|
$text |
|
</pre></td></tr> |
|
</table> |
|
END |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpm=<<END; |
|
Software Package Description |
|
|
|
$text |
|
END |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 465 sub format_rpmSummary {
|
Line 584 sub format_rpmSummary {
|
my $text=&trim($parser->get_text('/rpmSummary')); |
my $text=&trim($parser->get_text('/rpmSummary')); |
$parser->get_tag('/rpmSummary'); |
$parser->get_tag('/rpmSummary'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmSummary="\n<br />RPMSUMMARY $text"; |
return $rpmSummary="\nSummary : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmSummary="\nSummary : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 476 sub format_rpmName {
|
Line 598 sub format_rpmName {
|
my $text=&trim($parser->get_text('/rpmName')); |
my $text=&trim($parser->get_text('/rpmName')); |
$parser->get_tag('/rpmName'); |
$parser->get_tag('/rpmName'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmName="\n<br />RPMNAME $text"; |
return $rpmName="\nName : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmName="\nName : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 487 sub format_rpmVersion {
|
Line 612 sub format_rpmVersion {
|
my $text=$parser->get_text('/rpmVersion'); |
my $text=$parser->get_text('/rpmVersion'); |
$parser->get_tag('/rpmVersion'); |
$parser->get_tag('/rpmVersion'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmVersion="\n<br />RPMVERSION $text"; |
return $rpmVersion="\nVersion : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmVersion="\nVersion : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 498 sub format_rpmRelease {
|
Line 626 sub format_rpmRelease {
|
my $text=$parser->get_text('/rpmRelease'); |
my $text=$parser->get_text('/rpmRelease'); |
$parser->get_tag('/rpmRelease'); |
$parser->get_tag('/rpmRelease'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmRelease="\n<br />RPMRELEASE $text"; |
return $rpmRelease="\nRelease : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmRelease="\nRelease : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 509 sub format_rpmVendor {
|
Line 640 sub format_rpmVendor {
|
my $text=$parser->get_text('/rpmVendor'); |
my $text=$parser->get_text('/rpmVendor'); |
$parser->get_tag('/rpmVendor'); |
$parser->get_tag('/rpmVendor'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmVendor="\n<br />RPMVENDOR $text"; |
return $rpmVendor="\nVendor : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmVendor="\nVendor : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 520 sub format_rpmBuildRoot {
|
Line 654 sub format_rpmBuildRoot {
|
my $text=$parser->get_text('/rpmBuildRoot'); |
my $text=$parser->get_text('/rpmBuildRoot'); |
$parser->get_tag('/rpmBuildRoot'); |
$parser->get_tag('/rpmBuildRoot'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmBuildRoot="\n<br />RPMBUILDROOT $text"; |
return $rpmBuildRoot="\nBuild Root : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmBuildRoot="\nBuild Root : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 531 sub format_rpmCopyright {
|
Line 668 sub format_rpmCopyright {
|
my $text=$parser->get_text('/rpmCopyright'); |
my $text=$parser->get_text('/rpmCopyright'); |
$parser->get_tag('/rpmCopyright'); |
$parser->get_tag('/rpmCopyright'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmCopyright="\n<br />RPMCOPYRIGHT $text"; |
return $rpmCopyright="\nLicense : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmCopyright="\nLicense : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 542 sub format_rpmGroup {
|
Line 682 sub format_rpmGroup {
|
my $text=$parser->get_text('/rpmGroup'); |
my $text=$parser->get_text('/rpmGroup'); |
$parser->get_tag('/rpmGroup'); |
$parser->get_tag('/rpmGroup'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmGroup="\n<br />RPMGROUP $text"; |
return $rpmGroup="\nGroup : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmGroup="\nGroup : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 553 sub format_rpmSource {
|
Line 696 sub format_rpmSource {
|
my $text=$parser->get_text('/rpmSource'); |
my $text=$parser->get_text('/rpmSource'); |
$parser->get_tag('/rpmSource'); |
$parser->get_tag('/rpmSource'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmSource="\n<br />RPMSOURCE $text"; |
return $rpmSource="\nSource : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmSource="\nSource : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 564 sub format_rpmAutoReqProv {
|
Line 710 sub format_rpmAutoReqProv {
|
my $text=$parser->get_text('/rpmAutoReqProv'); |
my $text=$parser->get_text('/rpmAutoReqProv'); |
$parser->get_tag('/rpmAutoReqProv'); |
$parser->get_tag('/rpmAutoReqProv'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmAutoReqProv="\n<br />RPMAUTOREQPROV $text"; |
return $rpmAutoReqProv="\nAutoReqProv : $text"; |
|
} |
|
if ($mode eq 'text') { |
|
return $rpmAutoReqProv="\nAutoReqProv : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 575 sub format_rpmdescription {
|
Line 724 sub format_rpmdescription {
|
my $text=$parser->get_text('/rpmdescription'); |
my $text=$parser->get_text('/rpmdescription'); |
$parser->get_tag('/rpmdescription'); |
$parser->get_tag('/rpmdescription'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmdescription="\n<br />RPMDESCRIPTION $text"; |
$text=~s/\n//g; |
|
$text=~s/\\n/\n/g; |
|
return $rpmdescription="\nDescription : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
$text=~s/\n//g; |
|
$text=~s/\\n/\n/g; |
|
return $rpmdescription="\nDescription : $text"; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 586 sub format_rpmpre {
|
Line 742 sub format_rpmpre {
|
my $text=$parser->get_text('/rpmpre'); |
my $text=$parser->get_text('/rpmpre'); |
$parser->get_tag('/rpmpre'); |
$parser->get_tag('/rpmpre'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $rpmpre="\n<br />RPMPRE $text"; |
# return $rpmpre="\n<br />RPMPRE $text"; |
|
return ''; |
} |
} |
else { |
else { |
return ''; |
return ''; |
Line 597 sub format_directories {
|
Line 754 sub format_directories {
|
my $text=$parser->get_text('/directories'); |
my $text=$parser->get_text('/directories'); |
$parser->get_tag('/directories'); |
$parser->get_tag('/directories'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $directories="\n<br />BEGIN DIRECTORIES\n$text\n<br />". |
$text=~s/\[\{\{\{\{\{DPATHLENGTH\}\}\}\}\}\]/$dpathlength/g; |
"END DIRECTORIES\n"; |
return $directories="\n<br /> <br />". |
|
"<a name='directories' />". |
|
"<font size='+2'>Directory Structure</font>". |
|
"\n<br /> <br />". |
|
"<table border='1' cellpadding='3' cellspacing='0'>\n". |
|
"<tr><th bgcolor='#ffffff'>Category</th>". |
|
"<th bgcolor='#ffffff'>Status</th>\n". |
|
"<th bgcolor='#ffffff'>Expected Permissions & Ownership</th>\n". |
|
"<th bgcolor='#ffffff' colspan='$dpathlength'>Target Directory ". |
|
"Path</th></tr>\n". |
|
"\n$text\n</table><br />"."\n"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $directories="\nDirectory Structure\n$text\n". |
|
"\n"; |
} |
} |
elsif ($mode eq 'install') { |
elsif ($mode eq 'install') { |
return "\n".'directories:'."\n".$text; |
return "\n".'directories:'."\n".$text; |
Line 614 sub format_directory {
|
Line 785 sub format_directory {
|
$parser->get_text('/directory'); |
$parser->get_text('/directory'); |
$parser->get_tag('/directory'); |
$parser->get_tag('/directory'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $directory="\n<br />DIRECTORY $targetdir $categoryname ". |
my @a; |
|
@a=($targetdir=~/\//g); |
|
my $d=scalar(@a)+1; |
|
$dpathlength=$d if $d>$dpathlength; |
|
my $thtml=$targetdir; |
|
$thtml=~s/\//\<\/td\>\<td bgcolor='#ffffff'\>/g; |
|
return $directory="\n<tr><td rowspan='2' bgcolor='#ffffff'>". |
|
"$categoryname</td>". |
|
"<td rowspan='2' bgcolor='#ffffff'><!-- POSTEVAL: --> </td>". |
|
"<td rowspan='2' bgcolor='#ffffff'>$chmod<br />$chown</td>". |
|
"<td bgcolor='#ffffff'>$thtml</td></tr>". |
|
"<tr><td bgcolor='#ffffff' colspan='[{{{{{DPATHLENGTH}}}}}]'>". |
|
"$description</td></tr>"; |
|
} |
|
if ($mode eq 'text') { |
|
return $directory="\nDIRECTORY $targetdir $categoryname ". |
"$description"; |
"$description"; |
} |
} |
elsif ($mode eq 'install') { |
elsif ($mode eq 'install') { |
Line 663 sub format_files {
|
Line 849 sub format_files {
|
my $text=$parser->get_text('/files'); |
my $text=$parser->get_text('/files'); |
$parser->get_tag('/files'); |
$parser->get_tag('/files'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $directories="\n<br />BEGIN FILES\n$text\n<br />END FILES\n"; |
return $directories="\n<br /> <br />". |
|
"<a name='files' />". |
|
"<font size='+2'>Files</font><br /> <br />". |
|
"<p>All source and target locations are relative to the ". |
|
"sourceroot and targetroot values at the beginning of this ". |
|
"document.</p>". |
|
"\n<table border='1' cellpadding='5'>". |
|
"<tr><th>Status</th><th colspan='2'>Category</th>". |
|
"<th>Name/Location</th>". |
|
"<th>Description</th><th>Notes</th></tr>". |
|
"$text</table>\n". |
|
"\n"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $directories="\n". |
|
"File and Directory Structure". |
|
"\n$text\n". |
|
"\n"; |
} |
} |
elsif ($mode eq 'install') { |
elsif ($mode eq 'install') { |
return "\n".'files:'."\n".$text. |
return "\n".'files:'."\n".$text. |
Line 695 sub format_files {
|
Line 898 sub format_files {
|
$depstring.="\telif !(test -r $command/$dep);\\\n"; |
$depstring.="\telif !(test -r $command/$dep);\\\n"; |
$depstring.="\t\tthen echo ". |
$depstring.="\t\tthen echo ". |
"\"**** WARNING **** missing the file: ". |
"\"**** WARNING **** missing the file: ". |
"$command/$dep\";\\\n"; |
"$command/$dep\"$logcmd;\\\n"; |
$depstring.="\t\ttest -e $source || test -e $target || echo ". |
$depstring.="\t\ttest -e $source || test -e $target || echo ". |
"'**** ERROR **** neither source=$source nor target=". |
"'**** ERROR **** neither source=$source nor target=". |
"$target exist and they cannot be built';\\\n"; |
"$target exist and they cannot be built'$logcmd;\\\n"; |
$depstring.="\t\tmake -f Makefile.build ${source}___DEPS;\\\n"; |
$depstring.="\t\tmake -f Makefile.build ${source}___DEPS;\\\n"; |
if ($olddep) { |
if ($olddep) { |
$depstring2.="\t\tECODE=0;\\\n"; |
$depstring2.="\t\tECODE=0;\\\n"; |
$depstring2.="\t\t! test -e $source && test -r $command/$olddep &&". |
$depstring2.="\t\t! test -e $source && test -r $command/$olddep &&". |
" { perl filecompare.pl -B $command/$olddep $target || ECODE=\$\$?; } && { [ \$\$ECODE != \"2\" ] || echo \"**** WARNING **** dependency $command/$olddep is newer than target file $target; SOMETHING MAY BE WRONG\"; };\\\n"; |
" { perl filecompare.pl -b2 $command/$olddep $target || ECODE=\$\$?; } && { [ \$\$ECODE != \"2\" ] || echo \"**** WARNING **** dependency $command/$olddep is newer than target file $target; SOMETHING MAY BE WRONG\"$logcmd; };\\\n"; |
} |
} |
$olddep=$dep; |
$olddep=$dep; |
} |
} |
$binfo.="$source: $tword\n". |
$binfo.="$source: $tword\n". |
"\t\@if !(echo \"\");\\\n\t\tthen echo ". |
"\t\@if !(echo \"\");\\\n\t\tthen echo ". |
"\"**** WARNING **** Strange shell. ". |
"\"**** WARNING **** Strange shell. ". |
"Check your path settings.\";\\\n". |
"Check your path settings.\"$logcmd;\\\n". |
$depstring. |
$depstring. |
"\telse \\\n\t\t$command2\n\tfi\n\n"; |
"\telse \\\n\t\t$command2\n\tfi\n\n"; |
$binfo.="${source}___DEPS:\n".$depstring2."\t\tECODE=0;\n\n"; |
$binfo.="${source}___DEPS:\n".$depstring2."\t\tECODE=0;\n\n"; |
Line 753 sub format_file {
|
Line 956 sub format_file {
|
if ($source) { |
if ($source) { |
$parser->get_tag('/file'); |
$parser->get_tag('/file'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return ($file="\n<br />BEGIN FILE\n". |
return ($file="\n<!-- FILESORT:$target -->". |
"$source $target $categoryname $description $note " . |
"<tr>". |
"$build $status $dependencies" . |
"<td><!-- POSTEVAL --> </td><td>". |
"\nEND FILE"); |
"<img src='$fab{$categoryname}.gif' ". |
|
"alt='$categoryname icon' /></td>". |
|
"<td>$categoryname<br /><font size='-1'>". |
|
$categoryhash{$categoryname}."</font></td>". |
|
"<td>SOURCE: $source<br />TARGET: $target</td>". |
|
"<td>$description</td>". |
|
"<td>$note</td>". |
|
"</tr>"); |
|
# return ($file="\n<br />BEGIN FILE\n". |
|
# "$source $target $categoryname $description $note " . |
|
# "$build $status $dependencies" . |
|
# "\nEND FILE"); |
} |
} |
elsif ($mode eq 'install' && $categoryname ne 'conf') { |
elsif ($mode eq 'install' && $categoryname ne 'conf') { |
if ($build) { |
if ($build) { |
Line 770 sub format_file {
|
Line 984 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)'); DEP="1"; \\ |
test -e $command/$dep || (echo '**** WARNING **** cannot evaluate status of dependency $command/$dep (for building ${sourceroot}/${source} with)'$logcmd); DEP="1"; \\ |
[ -n DEP ] && { perl filecompare.pl -B $command/$dep ${targetroot}/${target} || ECODE=\$\$?; } || DEP="1"; \\ |
[ -n DEP ] && { perl filecompare.pl -b2 $command/$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";; \\ |
2) echo "**** WARNING **** dependency $command/$dep is newer than target file ${targetroot}/${target}; you may want to run make build"$logcmd;; \\ |
esac; \\ |
esac; \\ |
END |
END |
} |
} |
chomp $depstring; |
chomp $depstring; |
$buildtest=<<END; |
$buildtest=<<END; |
\@if !(test -e "${sourceroot}/${source}") && !(test -e "${targetroot}/${target}"); then \\ |
\@if !(test -e "${sourceroot}/${source}") && !(test -e "${targetroot}/${target}"); then \\ |
echo "**** ERROR **** ${sourceroot}/${source} is missing and is also not present at target location ${targetroot}/${target}; you must run make build"; exit; \\ |
echo "**** ERROR **** ${sourceroot}/${source} is missing and is also not present at target location ${targetroot}/${target}; you must run make build"$logcmd; exit; \\ |
END |
END |
$buildtest.=<<END if $depstring; |
$buildtest.=<<END if $depstring; |
elif !(test -e "${sourceroot}/${source}"); then \\ |
elif !(test -e "${sourceroot}/${source}"); then \\ |
Line 790 END
|
Line 1004 END
|
fi |
fi |
END |
END |
} |
} |
my $bflag='-b'; |
my $bflag='-b1'; |
$bflag='-g' if $dependencies or $buildlink; |
$bflag='-b3' if $dependencies or $buildlink; |
return <<END; |
return <<END; |
$buildtest \@if !(test -e "${sourceroot}/${source}"); then \\ |
$buildtest \@if !(test -e "${sourceroot}/${source}") && !(test -e "${targetroot}/${target}"); then \\ |
echo "**** WARNING **** CVS source file does not exist: ${sourceroot}/${source}"; \\ |
echo "**** ERROR **** CVS source file does not exist: ${sourceroot}/${source} and neither does target: ${targetroot}/${target}"$logcmd; \\ |
|
elif !(test -e "${sourceroot}/${source}"); then \\ |
|
echo "**** WARNING **** CVS source file does not exist: ${sourceroot}/${source}"$logcmd; \\ |
|
perl verifymodown.pl ${targetroot}/${target} "$categoryhash{$categoryname}"$logcmd; \\ |
else \\ |
else \\ |
ECODE=0; \\ |
ECODE=0; \\ |
perl filecompare.pl $bflag ${sourceroot}/${source} ${targetroot}/${target} || ECODE=\$\$?; \\ |
perl filecompare.pl $bflag ${sourceroot}/${source} ${targetroot}/${target} || ECODE=\$\$?; \\ |
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; creating ${targetroot}/${target}.lpmlnewfile instead" && install -o www -g www -m 0500 ${sourceroot}/${source} ${targetroot}/${target}.lpmlnewfile;; \\ |
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 -o www -g www -m 0500 ${sourceroot}/${source} ${targetroot}/${target}" && install -o www -g www -m 0500 ${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; \\ |
fi |
fi |
END |
END |
# return "\t".'@test -e '.$sourceroot.'/'.$source. |
|
# ' && perl filecompare.pl -b '.$sourceroot.'/'.$source.' '. |
|
# $targetroot.'/'.$target. |
|
# ' && install '. |
|
# $categoryhash{$categoryname}.' '. |
|
# $sourceroot.'/'.$source.' '. |
|
# $targetroot.'/'.$target. |
|
# ' || echo "**** LON-CAPA WARNING '. |
|
# '**** CVS source file does not exist: '.$sourceroot.'/'. |
|
# $source.'"'."\n"; |
|
} |
} |
elsif ($mode eq 'configinstall' && $categoryname eq 'conf') { |
elsif ($mode eq 'configinstall' && $categoryname eq 'conf') { |
push @configall,$targetroot.'/'.$target; |
push @configall,$targetroot.'/'.$target; |
return $targetroot.'/'.$target.': alwaysrun'."\n". |
return $targetroot.'/'.$target.': alwaysrun'."\n". |
"\t".'@echo -n ""; ECODE=0 && { perl filecompare.pl -G '.$sourceroot.'/'.$source.' '.$targetroot.'/'.$target.' || ECODE=$$?; } && { [ $$ECODE != "2" ] || (install '.$categoryhash{$categoryname}.' '. |
"\t".'@echo -n ""; ECODE=0 && { perl filecompare.pl -b4 '. |
|
$sourceroot.'/'.$source.' '.$targetroot.'/'.$target. |
|
' || ECODE=$$?; } && '. |
|
'{ [ $$ECODE != "2" ] || (install '. |
|
$categoryhash{$categoryname}.' '. |
$sourceroot.'/'.$source.' '. |
$sourceroot.'/'.$source.' '. |
$targetroot.'/'.$target.'.lpmlnewconf'. |
$targetroot.'/'.$target.'.lpmlnew'. |
' && echo "*** CONFIGURATION FILE CHANGE ***" && echo "'. |
' && echo "**** NOTE: CONFIGURATION FILE CHANGE ****"'. |
|
$logcmd.' && echo "'. |
'You likely need to compare contents of '. |
'You likely need to compare contents of '. |
''.$targetroot.'/'.$target.' with the new '. |
''.$targetroot.'/'.$target.' with the new '. |
''.$targetroot.'/'.$target.'.lpmlnewconf"'. |
''.$targetroot.'/'.$target.'.lpmlnew"'. |
"); };\n\n"; |
"$logcmd); } && ". |
|
'{ [ $$ECODE != "3" ] || (install '. |
|
$categoryhash{$categoryname}.' '. |
|
$sourceroot.'/'.$source.' '. |
|
$targetroot.'/'.$target.''. |
|
' && echo "**** WARNING: NEW CONFIGURATION FILE ADDED ****"'. |
|
$logcmd.' && echo "'. |
|
'You likely need to review the contents of '. |
|
''.$targetroot.'/'.$target.' to make sure its '. |
|
'settings are compatible with your overall system"'. |
|
"$logcmd); } && ". |
|
'{ [ $$ECODE != "1" ] || ('. |
|
'echo "**** ERROR ****"'. |
|
$logcmd.' && echo "'. |
|
'Configuration source file does not exist '. |
|
''.$sourceroot.'/'.$source.'"'. |
|
"$logcmd); } && perl verifymodown.pl ${targetroot}/${target} \"$categoryhash{$categoryname}\"$logcmd;\n\n"; |
} |
} |
elsif ($mode eq 'build' && $build) { |
elsif ($mode eq 'build' && $build) { |
push @buildall,$sourceroot.'/'.$source; |
push @buildall,$sourceroot.'/'.$source; |
Line 844 END
|
Line 1073 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')); |
if ($linkto) { |
if ($linkto) { |
$parser->get_tag('/link'); |
$parser->get_tag('/link'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $link="\n<br />BEGIN LINK\n". |
my @targets=map {s/^\s*//;s/\s$//;$_} split(/\;/,$target); |
"$linkto $target $categoryname $description $note " . |
foreach my $tgt (@targets) { |
"$build $status $dependencies" . |
push @links,("\n<!-- FILESORT:$tgt -->". |
"\nEND LINK"; |
"<tr>". |
|
"<td><!-- POSTEVAL --> </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> </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 877 sub format_fileglob {
|
Line 1131 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; |
if ($sourcedir) { |
if ($sourcedir) { |
$parser->get_tag('/fileglob'); |
$parser->get_tag('/fileglob'); |
if ($mode eq 'html') { |
if ($mode eq 'html') { |
return $fileglob="\n<br />BEGIN FILEGLOB\n". |
return $fileglob="\n<tr>". |
"$glob sourcedir $targetdir $categoryname $description $note ". |
"<td><!-- POSTEVAL2 verify.pl fileglob '$sourcerootarg' ". |
"$build $status $dependencies $filenames" . |
"'$targetrootarg' ". |
"\nEND FILEGLOB"; |
"'$glob' '$sourcedir' '$filenames2' '$targetdir' ". |
|
"$categoryhash{$categoryname} --> </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 '. |
Line 934 sub format_source {
|
Line 1206 sub format_source {
|
sub format_note { |
sub format_note { |
my @tokeninfo=@_; |
my @tokeninfo=@_; |
$note=''; |
$note=''; |
my $text=&trim($parser->get_text('/note')); |
# my $text=&trim($parser->get_text('/note')); |
|
my $aref; |
|
my $text; |
|
while ($aref=$parser->get_token()) { |
|
if ($aref->[0] eq 'E' && $aref->[1] eq 'note') { |
|
last; |
|
} |
|
elsif ($aref->[0] eq 'S') { |
|
$text.=$aref->[4]; |
|
} |
|
elsif ($aref->[0] eq 'E') { |
|
$text.=$aref->[2]; |
|
} |
|
else { |
|
$text.=$aref->[1]; |
|
} |
|
} |
if ($text) { |
if ($text) { |
$parser->get_tag('/note'); |
# $parser->get_tag('/note'); |
$note=$text; |
$note=$text; |
} |
} |
return ''; |
return ''; |
Line 1031 sub trim {
|
Line 1319 sub trim {
|
} |
} |
|
|
# ----------------------------------- POD (plain old documentation, CPAN style) |
# ----------------------------------- POD (plain old documentation, CPAN style) |
|
|
|
=head1 NAME |
|
|
|
lpml_parse.pl - This is meant to parse files meeting the lpml document type. |
|
See lpml.dtd. LPML=Linux Packaging Markup Language. |
|
|
|
=head1 SYNOPSIS |
|
|
|
Usage is for lpml file to come in through standard input. |
|
|
|
=over 4 |
|
|
|
=item * |
|
|
|
1st argument is the mode of parsing. |
|
|
|
=item * |
|
|
|
2nd argument is the category permissions to use (runtime or development) |
|
|
|
=item * |
|
|
|
3rd argument is the distribution |
|
(default,redhat6.2,debian2.2,redhat7.1,etc). |
|
|
|
=item * |
|
|
|
4th argument is to manually specify a sourceroot. |
|
|
|
=item * |
|
|
|
5th argument is to manually specify a targetroot. |
|
|
|
=back |
|
|
|
Only the 1st argument is mandatory for the program to run. |
|
|
|
Example: |
|
|
|
cat ../../doc/loncapafiles.lpml |\\ |
|
perl lpml_parse.pl html default /home/sherbert/loncapa /tmp/install |
|
|
|
=head1 DESCRIPTION |
|
|
|
I am using a multiple pass-through approach to parsing |
|
the lpml file. This saves memory and makes sure the server |
|
will never be overloaded. |
|
|
|
=head1 README |
|
|
|
I am using a multiple pass-through approach to parsing |
|
the lpml file. This saves memory and makes sure the server |
|
will never be overloaded. |
|
|
|
=head1 PREREQUISITES |
|
|
|
HTML::TokeParser |
|
|
|
=head1 COREQUISITES |
|
|
|
=head1 OSNAMES |
|
|
|
linux |
|
|
|
=head1 SCRIPT CATEGORIES |
|
|
|
Packaging/Administrative |
|
|
|
=cut |