version 1.1, 2002/01/29 10:43:02
|
version 1.4, 2002/02/05 01:29:22
|
Line 30
|
Line 30
|
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
# YEAR=2002 |
# YEAR=2002 |
# 1/28 - Scott Harrison |
# 1/28,1/29,1/30,1/31 - Scott Harrison |
# |
# |
### |
### |
|
|
Line 61 use HTML::TokeParser;
|
Line 61 use HTML::TokeParser;
|
my $usage=<<END; |
my $usage=<<END; |
**** ERROR ERROR ERROR ERROR **** |
**** ERROR ERROR ERROR ERROR **** |
Usage is for piml file to come in through standard input. |
Usage is for piml file to come in through standard input. |
1st argument is the mode of parsing. |
1st argument is the category permissions to use (runtime or development) |
2nd argument is the category permissions to use (runtime or development) |
2nd argument is the distribution (default,redhat6.2,debian2.2,redhat7.1,etc). |
3rd argument is the distribution (default,redhat6.2,debian2.2,redhat7.1,etc). |
3rd argument is to manually specify a targetroot |
4th argument is to manually specify a sourceroot. |
|
5th argument is to manually specify a targetroot. |
|
|
|
Only the 1st argument is mandatory for the program to run. |
Only the 1st argument is mandatory for the program to run. |
|
|
Line 78 END
|
Line 76 END
|
# ------------------------------------------------- Grab command line arguments |
# ------------------------------------------------- Grab command line arguments |
|
|
my $mode; |
my $mode; |
if (@ARGV==4) { |
if (@ARGV==3) { |
$mode = shift @ARGV; |
$mode = shift @ARGV; |
} |
} |
else { |
else { |
Line 99 if (@ARGV) {
|
Line 97 if (@ARGV) {
|
} |
} |
|
|
my $targetroot; |
my $targetroot; |
my $sourceroot; |
|
my $targetrootarg; |
my $targetrootarg; |
my $sourcerootarg; |
|
if (@ARGV) { |
if (@ARGV) { |
$targetroot = shift @ARGV; |
$targetroot = shift @ARGV; |
} |
} |
$sourceroot=~s/\/$//; |
|
$targetroot=~s/\/$//; |
$targetroot=~s/\/$//; |
$sourcerootarg=$sourceroot; |
|
$targetrootarg=$targetroot; |
$targetrootarg=$targetroot; |
|
|
my $logcmd='| tee -a WARNINGS'; |
my $logcmd='| tee -a WARNINGS'; |
Line 117 my $invocation;
|
Line 111 my $invocation;
|
if ($mode eq 'install' or $mode eq 'configinstall' or $mode eq 'build') { |
if ($mode eq 'install' or $mode eq 'configinstall' or $mode eq 'build') { |
$invocation=(<<END); |
$invocation=(<<END); |
# Invocation: STDINPUT | piml_parse.pl |
# Invocation: STDINPUT | piml_parse.pl |
# 1st argument (mode) is: $mode |
# 1st argument (category type) is: $categorytype |
# 2nd argument (category type) is: $categorytype |
# 2nd argument (distribution) is: $dist |
# 3rd argument (distribution) is: $dist |
# 3rd argument (targetroot) is: described below |
# 4th argument (sourceroot) is: described below |
|
# 5th argument (targetroot) is: described below |
|
END |
END |
} |
} |
|
|
Line 198 while ($token = $parser->get_token()) {
|
Line 190 while ($token = $parser->get_token()) {
|
$cleanstring.=$token->[4]; |
$cleanstring.=$token->[4]; |
} |
} |
if ($token->[4]=~/\/>$/) { |
if ($token->[4]=~/\/>$/) { |
$hloc--; |
# $hloc--; |
} |
} |
} |
} |
if ($token->[0] eq 'E') { |
if ($token->[0] eq 'E') { |
Line 224 my $category_att_type;
|
Line 216 my $category_att_type;
|
my $chown; |
my $chown; |
my $chmod; |
my $chmod; |
my $abbreviation; # space-free abbreviation; esp. for image names |
my $abbreviation; # space-free abbreviation; esp. for image names |
my $rpm; |
|
my $rpmSummary; |
|
my $rpmName; |
|
my $rpmVersion; |
|
my $rpmRelease; |
|
my $rpmVendor; |
|
my $rpmBuildRoot; |
|
my $rpmCopyright; |
|
my $rpmGroup; |
|
my $rpmSource; |
|
my $rpmAutoReqProv; |
|
my $rpmdescription; |
|
my $rpmpre; |
|
my $directories; |
|
my $directory; |
|
my $targetdirs; |
|
my $targetdir; |
|
my $categoryname; |
my $categoryname; |
my $description; |
my $description; |
my $files; |
my $files; |
my $fileglobs; |
|
my $links; |
|
my $file; |
my $file; |
my $link; |
|
my $fileglob; |
|
my $sourcedir; |
|
my $targets; |
|
my $target; |
my $target; |
my $source; |
|
my $note; |
my $note; |
my $build; |
|
my $buildlink; |
|
my $commands; |
my $commands; |
my $command; |
my $command; |
my $status; |
|
my $dependencies; |
my $dependencies; |
my $dependency; |
|
my @links; |
my @links; |
my %categoryhash; |
my %categoryhash; |
my $dpathlength; |
my $dpathlength; |
Line 271 my $link_count;
|
Line 235 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 $mode; |
#my %linecount; # TEMP WAY TO COUNT INFORMATION |
|
# END TEMP WAY |
|
|
|
my @buildall; |
my @buildall; |
my @buildinfo; |
my @buildinfo; |
Line 293 $parser->{textify}={
|
Line 255 $parser->{textify}={
|
specialnotices => \&format_specialnotices, |
specialnotices => \&format_specialnotices, |
specialnotice => \&format_specialnotice, |
specialnotice => \&format_specialnotice, |
targetroot => \&format_targetroot, |
targetroot => \&format_targetroot, |
sourceroot => \&format_sourceroot, |
|
categories => \&format_categories, |
categories => \&format_categories, |
category => \&format_category, |
category => \&format_category, |
abbreviation => \&format_abbreviation, |
abbreviation => \&format_abbreviation, |
targetdir => \&format_targetdir, |
|
chown => \&format_chown, |
chown => \&format_chown, |
chmod => \&format_chmod, |
chmod => \&format_chmod, |
rpm => \&format_rpm, |
|
rpmSummary => \&format_rpmSummary, |
|
rpmName => \&format_rpmName, |
|
rpmVersion => \&format_rpmVersion, |
|
rpmRelease => \&format_rpmRelease, |
|
rpmVendor => \&format_rpmVendor, |
|
rpmBuildRoot => \&format_rpmBuildRoot, |
|
rpmCopyright => \&format_rpmCopyright, |
|
rpmGroup => \&format_rpmGroup, |
|
rpmSource => \&format_rpmSource, |
|
rpmAutoReqProv => \&format_rpmAutoReqProv, |
|
rpmdescription => \&format_rpmdescription, |
|
rpmpre => \&format_rpmpre, |
|
rpmRequires => \&format_rpmRequires, |
|
directories => \&format_directories, |
|
directory => \&format_directory, |
|
categoryname => \&format_categoryname, |
categoryname => \&format_categoryname, |
description => \&format_description, |
|
files => \&format_files, |
files => \&format_files, |
file => \&format_file, |
file => \&format_file, |
fileglob => \&format_fileglob, |
|
links => \&format_links, |
|
link => \&format_link, |
|
linkto => \&format_linkto, |
|
source => \&format_source, |
|
target => \&format_target, |
target => \&format_target, |
note => \&format_note, |
note => \&format_note, |
build => \&format_build, |
build => \&format_build, |
status => \&format_status, |
|
dependencies => \&format_dependencies, |
dependencies => \&format_dependencies, |
buildlink => \&format_buildlink, |
|
glob => \&format_glob, |
|
sourcedir => \&format_sourcedir, |
|
filenames => \&format_filenames, |
filenames => \&format_filenames, |
|
perlscript => \&format_perlscript, |
|
TARGET => \&format_TARGET, |
}; |
}; |
|
|
my $text; |
my $text; |
Line 348 while ($token = $parser->get_tag('piml')
|
Line 284 while ($token = $parser->get_tag('piml')
|
$token = $parser->get_tag('/piml'); |
$token = $parser->get_tag('/piml'); |
print $piml; |
print $piml; |
print "\n"; |
print "\n"; |
# $text=~s/\s*\n\s*\n\s*/\n/g; |
|
print $text; |
print $text; |
print "\n"; |
print "\n"; |
print &end(); |
print &end(); |
Line 359 exit;
|
Line 294 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') { |
|
# START TEMP WAY |
|
# my $totallinecount; |
|
# my $totalbytecount; |
|
# map {$totallinecount+=$linecount{$_}; |
|
# $totalbytecount+=$bytecount{$_}} |
|
# @categorynamelist; |
|
# END TEMP WAY |
|
return "<br /> <br />". |
|
"<a name='summary' /><font size='+2'>Summary of Source Repository". |
|
"</font>". |
|
"<br /> <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>". |
|
"<th>Number of Incorrect Counts</th>". |
|
"</tr>". |
|
join("\n",(map {"<tr><td><img src='$fab{$_}.gif' ". |
|
"alt='$_ icon' /></td>". |
|
"<td>$_</td><td>$categorycount{$_}</td>". |
|
"<td><!-- POSTEVALINLINE $_ --></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 /> <br />". |
|
# "Total Lines of Code: $totallinecount". |
|
# "<br /> <br />". |
|
# "Total Bytes: $totalbytecount". |
|
# END TEMP WAY |
|
} |
|
if ($mode eq 'install') { |
|
return ''; |
|
} |
|
} |
} |
|
|
# ----------------------- Take in string to parse and the separation expression |
# ----------------------- Take in string to parse and the separation expression |
Line 431 sub extract_array {
|
Line 308 sub extract_array {
|
sub format_piml { |
sub format_piml { |
my (@tokeninfo)=@_; |
my (@tokeninfo)=@_; |
my $date=`date`; chop $date; |
my $date=`date`; chop $date; |
if ($mode eq 'html') { |
$piml=<<END; |
$piml=<<END; |
#!/usr/bin/perl |
<html> |
|
<head> |
|
<title>PIML Description Page |
|
(dist=$dist, categorytype=$categorytype, $date)</title> |
|
</head> |
|
<body> |
|
END |
|
$piml .= "<br /><font size='+2'>PIML Description Page (dist=$dist, ". |
|
"categorytype=$categorytype, $date)". |
|
"</font>"; |
|
$piml .=<<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> |
|
<li><a href='#summary'>Summary of Source Repository</a></li> |
|
</ul> |
|
END |
|
$piml .=<<END; |
|
<br /> <br /><a name='about' /> |
|
<font size='+2'>About this file</font> |
|
<p> |
|
This file is generated dynamically by <tt>piml_parse.pl</tt> as |
|
part of a development compilation process.</p> |
|
<p>PIML written by Scott Harrison (harris41\@msu.edu). |
|
</p> |
|
END |
|
} |
|
elsif ($mode eq 'text') { |
|
$piml = "PIML Description Page (dist=$dist, $date)"; |
|
$piml .=<<END; |
|
|
|
* About this file |
|
* Software Package Description |
|
* Directory Structure |
|
* File Type Ownership and Permissions |
|
* Files |
|
END |
|
$piml .=<<END; |
|
|
|
About this file |
# Generated from a PIML (Post Installation Markup Language) document |
|
|
This file is generated dynamically by piml_parse.pl as |
|
part of a development compilation process. Author: Scott |
|
Harrison (harris41\@msu.edu). |
|
|
|
END |
END |
} |
|
elsif ($mode eq 'install') { |
|
print '# PIML install targets. Linux Packaging Markup Language,'; |
|
print ' by Scott Harrison 2001'."\n"; |
|
print '# This file was automatically generated on '.`date`; |
|
print "\n".$invocation; |
|
$piml .= "SHELL=\"/bin/bash\"\n\n"; |
|
} |
|
elsif ($mode eq 'configinstall') { |
|
print '# PIML configuration file targets (configinstall).'."\n"; |
|
print '# Linux Packaging Markup Language,'; |
|
print ' by Scott Harrison 2001'."\n"; |
|
print '# This file was automatically generated on '.`date`; |
|
print "\n".$invocation; |
|
$piml .= "SHELL=\"/bin/bash\"\n\n"; |
|
} |
|
elsif ($mode eq 'build') { |
|
$piml = "# PIML build targets. Linux Packaging Markup Language,"; |
|
$piml .= ' by Scott Harrison 2001'."\n"; |
|
$piml .= '# This file was automatically generated on '.`date`; |
|
$piml .= "\n".$invocation; |
|
$piml .= "SHELL=\"/bin/sh\"\n\n"; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
} |
# --------------------------------------------------- Format targetroot section |
# --------------------------------------------------- Format targetroot section |
sub format_targetroot { |
sub format_targetroot { |
my $text=&trim($parser->get_text('/targetroot')); |
my $text=&trim($parser->get_text('/targetroot')); |
$text=$targetroot if $targetroot; |
$text=$targetroot if $targetroot; |
$parser->get_tag('/targetroot'); |
$parser->get_tag('/targetroot'); |
if ($mode eq 'html') { |
return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n"; |
return $targetroot="\n<br />TARGETROOT: $text"; |
|
} |
|
elsif ($mode eq 'install' or $mode eq 'build' or |
|
$mode eq 'configinstall') { |
|
return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n"; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
} |
# --------------------------------------------------- Format sourceroot section |
# -------------------------------------------------- Format perl script section |
sub format_sourceroot { |
sub format_perlscript { |
my $text=&trim($parser->get_text('/sourceroot')); |
my (@tokeninfo)=@_; |
$text=$sourceroot if $sourceroot; |
$mode=$tokeninfo->[2]{'mode'}; |
$parser->get_tag('/sourceroot'); |
my $text=$parser->get_text('/perlscript'); |
if ($mode eq 'html') { |
$parser->get_tag('/perlscript'); |
return $sourceroot="\n<br />SOURCEROOT: $text"; |
return $text; |
} |
} |
elsif ($mode eq 'install' or $mode eq 'build' or |
# --------------------------------------------------------------- Format TARGET |
$mode eq 'configinstall') { |
sub format_TARGET { |
return '# SOURCE CODE LOCATION IS "'.$sourceroot."\"\n";; |
my (@tokeninfo)=@_; |
} |
$parser->get_tag('/TARGET'); |
else { |
return $target; |
return ''; |
|
} |
|
} |
} |
# --------------------------------------------------- Format categories section |
# --------------------------------------------------- Format categories section |
sub format_categories { |
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') { |
return '# CATEGORIES'."\n".$text; |
return $categories="\n<br /> <br />". |
|
"\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 { |
|
return ''; |
|
} |
|
} |
} |
# --------------------------------------------------- Format categories section |
# --------------------------------------------------- Format categories section |
sub format_category { |
sub format_category { |
Line 583 sub format_category {
|
Line 351 sub format_category {
|
$parser->get_text('/category'); |
$parser->get_text('/category'); |
$parser->get_tag('/category'); |
$parser->get_tag('/category'); |
$fab{$category_att_name}=$abbreviation; |
$fab{$category_att_name}=$abbreviation; |
if ($mode eq 'html') { |
if ($category_att_type eq $categorytype) { |
if ($category_att_type eq $categorytype) { |
my ($user,$group)=split(/\:/,$chown); |
push @categorynamelist,$category_att_name; |
$categoryhash{$category_att_name}='-o '.$user.' -g '.$group. |
$categoryhash{$category_att_name}="$chmod $chown"; |
' -m '.$chmod; |
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 { |
|
if ($category_att_type eq $categorytype) { |
|
my ($user,$group)=split(/\:/,$chown); |
|
$categoryhash{$category_att_name}='-o '.$user.' -g '.$group. |
|
' -m '.$chmod; |
|
} |
|
return ''; |
|
} |
} |
|
return ''; |
} |
} |
# --------------------------------------------------- Format categories section |
# --------------------------------------------------- Format categories section |
sub format_abbreviation { |
sub format_abbreviation { |
Line 640 sub format_chmod {
|
Line 391 sub format_chmod {
|
} |
} |
return ''; |
return ''; |
} |
} |
# ---------------------------------------------------------- Format rpm section |
|
sub format_rpm { |
|
my $text=&trim($parser->get_text('/rpm')); |
|
$parser->get_tag('/rpm'); |
|
if ($mode eq 'html') { |
|
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 'make_rpm') { |
|
return $text; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpm=<<END; |
|
Software Package Description |
|
|
|
$text |
|
END |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# --------------------------------------------------- Format rpmSummary section |
|
sub format_rpmSummary { |
|
my $text=&trim($parser->get_text('/rpmSummary')); |
|
$parser->get_tag('/rpmSummary'); |
|
if ($mode eq 'html') { |
|
return $rpmSummary="\nSummary : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmSummary="\nSummary : $text"; |
|
} |
|
elsif ($mode eq 'make_rpm') { |
|
return <<END; |
|
<summary>$text</summary> |
|
END |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ------------------------------------------------------ Format rpmName section |
|
sub format_rpmName { |
|
my $text=&trim($parser->get_text('/rpmName')); |
|
$parser->get_tag('/rpmName'); |
|
if ($mode eq 'html') { |
|
return $rpmName="\nName : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmName="\nName : $text"; |
|
} |
|
elsif ($mode eq 'make_rpm') { |
|
return <<END; |
|
<name>$text</name> |
|
END |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# --------------------------------------------------- Format rpmVersion section |
|
sub format_rpmVersion { |
|
my $text=$parser->get_text('/rpmVersion'); |
|
$parser->get_tag('/rpmVersion'); |
|
if ($mode eq 'html') { |
|
return $rpmVersion="\nVersion : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmVersion="\nVersion : $text"; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# --------------------------------------------------- Format rpmRelease section |
|
sub format_rpmRelease { |
|
my $text=$parser->get_text('/rpmRelease'); |
|
$parser->get_tag('/rpmRelease'); |
|
if ($mode eq 'html') { |
|
return $rpmRelease="\nRelease : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmRelease="\nRelease : $text"; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ---------------------------------------------------- Format rpmVendor section |
|
sub format_rpmVendor { |
|
my $text=$parser->get_text('/rpmVendor'); |
|
$parser->get_tag('/rpmVendor'); |
|
if ($mode eq 'html') { |
|
return $rpmVendor="\nVendor : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmVendor="\nVendor : $text"; |
|
} |
|
elsif ($mode eq 'make_rpm') { |
|
return <<END; |
|
<vendor>$text</vendor> |
|
END |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ------------------------------------------------- Format rpmBuildRoot section |
|
sub format_rpmBuildRoot { |
|
my $text=$parser->get_text('/rpmBuildRoot'); |
|
$parser->get_tag('/rpmBuildRoot'); |
|
if ($mode eq 'html') { |
|
return $rpmBuildRoot="\nBuild Root : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmBuildRoot="\nBuild Root : $text"; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ------------------------------------------------- Format rpmCopyright section |
|
sub format_rpmCopyright { |
|
my $text=$parser->get_text('/rpmCopyright'); |
|
$parser->get_tag('/rpmCopyright'); |
|
if ($mode eq 'html') { |
|
return $rpmCopyright="\nLicense : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmCopyright="\nLicense : $text"; |
|
} |
|
elsif ($mode eq 'make_rpm') { |
|
return <<END; |
|
<copyright>$text</copyright> |
|
END |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ----------------------------------------------------- Format rpmGroup section |
|
sub format_rpmGroup { |
|
my $text=$parser->get_text('/rpmGroup'); |
|
$parser->get_tag('/rpmGroup'); |
|
if ($mode eq 'html') { |
|
return $rpmGroup="\nGroup : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmGroup="\nGroup : $text"; |
|
} |
|
elsif ($mode eq 'make_rpm') { |
|
return <<END; |
|
<group>Utilities/System</group> |
|
END |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ---------------------------------------------------- Format rpmSource section |
|
sub format_rpmSource { |
|
my $text=$parser->get_text('/rpmSource'); |
|
$parser->get_tag('/rpmSource'); |
|
if ($mode eq 'html') { |
|
return $rpmSource="\nSource : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmSource="\nSource : $text"; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ----------------------------------------------- Format rpmAutoReqProv section |
|
sub format_rpmAutoReqProv { |
|
my $text=$parser->get_text('/rpmAutoReqProv'); |
|
$parser->get_tag('/rpmAutoReqProv'); |
|
if ($mode eq 'html') { |
|
return $rpmAutoReqProv="\nAutoReqProv : $text"; |
|
} |
|
elsif ($mode eq 'text') { |
|
return $rpmAutoReqProv="\nAutoReqProv : $text"; |
|
} |
|
elsif ($mode eq 'make_rpm') { |
|
return <<END; |
|
<AutoReqProv>$text</AutoReqProv> |
|
END |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ----------------------------------------------- Format rpmdescription section |
|
sub format_rpmdescription { |
|
my $text=$parser->get_text('/rpmdescription'); |
|
$parser->get_tag('/rpmdescription'); |
|
if ($mode eq 'html') { |
|
$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"; |
|
} |
|
elsif ($mode eq 'make_rpm') { |
|
$text=~s/\n//g; |
|
$text=~s/\\n/\n/g; |
|
return <<END; |
|
<description>$text</description> |
|
END |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ------------------------------------------------------- Format rpmpre section |
|
sub format_rpmpre { |
|
my $text=$parser->get_text('/rpmpre'); |
|
$parser->get_tag('/rpmpre'); |
|
if ($mode eq 'html') { |
|
# return $rpmpre="\n<br />RPMPRE $text"; |
|
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 { |
|
$parser->get_tag('/rpmRequires'); |
|
return ''; |
|
} |
|
return '<rpmRequires>'.$text.'</rpmRequires>'; |
|
} |
|
# -------------------------------------------------- Format directories section |
|
sub format_directories { |
|
my $text=$parser->get_text('/directories'); |
|
$parser->get_tag('/directories'); |
|
if ($mode eq 'html') { |
|
$text=~s/\[\{\{\{\{\{DPATHLENGTH\}\}\}\}\}\]/$dpathlength/g; |
|
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') { |
|
return "\n".'directories:'."\n".$text; |
|
} |
|
elsif ($mode eq 'rpm_file_list') { |
|
return $text; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ---------------------------------------------------- Format directory section |
|
sub format_directory { |
|
my (@tokeninfo)=@_; |
|
$targetdir='';$categoryname='';$description=''; |
|
$parser->get_text('/directory'); |
|
$parser->get_tag('/directory'); |
|
$directory_count++; |
|
$categorycount{$categoryname}++; |
|
if ($mode eq 'html') { |
|
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; |
|
my ($chmod,$chown)=split(/\s/,$categoryhash{$categoryname}); |
|
return $directory="\n<tr><td rowspan='2' bgcolor='#ffffff'>". |
|
"$categoryname</td>". |
|
"<td rowspan='2' bgcolor='#ffffff'><!-- POSTEVAL [$categoryname] verify.pl directory /$targetdir $categoryhash{$categoryname} --> </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"; |
|
} |
|
elsif ($mode eq 'install') { |
|
return "\t".'install '.$categoryhash{$categoryname}.' -d '. |
|
$targetroot.'/'.$targetdir."\n"; |
|
} |
|
elsif ($mode eq 'rpm_file_list') { |
|
return $targetroot.'/'.$targetdir."\n"; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ---------------------------------------------------- Format targetdir section |
|
sub format_targetdir { |
|
my @tokeninfo=@_; |
|
$targetdir=''; |
|
my $text=&trim($parser->get_text('/targetdir')); |
|
if ($text) { |
|
$parser->get_tag('/targetdir'); |
|
$targetdir=$text; |
|
} |
|
return ''; |
|
} |
|
# ------------------------------------------------- Format categoryname section |
# ------------------------------------------------- Format categoryname section |
sub format_categoryname { |
sub format_categoryname { |
my @tokeninfo=@_; |
my @tokeninfo=@_; |
Line 1003 sub format_categoryname {
|
Line 402 sub format_categoryname {
|
} |
} |
return ''; |
return ''; |
} |
} |
# -------------------------------------------------- Format description section |
|
sub format_description { |
|
my @tokeninfo=@_; |
|
$description=''; |
|
my $text=&htmlsafe(&trim($parser->get_text('/description'))); |
|
if ($text) { |
|
$parser->get_tag('/description'); |
|
$description=$text; |
|
} |
|
return ''; |
|
} |
|
# -------------------------------------------------------- Format files section |
# -------------------------------------------------------- Format files section |
sub format_files { |
sub format_files { |
my $text=$parser->get_text('/files'); |
my $text=$parser->get_text('/files'); |
$parser->get_tag('/files'); |
$parser->get_tag('/files'); |
if (1==1) { |
return "\n".'# There are '.$file_count.' files this script works on'. |
return '# Files'."\n".$text; |
"\n\n".$text; |
} |
|
elsif ($mode eq 'html') { |
|
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') { |
|
return "\n".'files:'."\n".$text. |
|
"\n".'links:'."\n".join('',@links); |
|
} |
|
elsif ($mode eq 'configinstall') { |
|
return "\n".'configfiles: '. |
|
join(' ',@configall). |
|
"\n\n".$text. |
|
"\n\nalwaysrun:\n\n"; |
|
} |
|
elsif ($mode eq 'build') { |
|
my $binfo; |
|
my $tword; |
|
my $command2; |
|
my @deps; |
|
foreach my $bi (@buildinfo) { |
|
my ($target,$source,$command,$trigger,@deps)=split(/\;/,$bi); |
|
$tword=''; $tword=' alwaysrun' if $trigger eq 'always run'; |
|
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; |
|
foreach my $dep (@deps) { |
|
unless ($olddep) { |
|
$olddep=$deps[$#deps]; |
|
} |
|
$depstring.="\telif !(test -r $command/$dep);\\\n"; |
|
$depstring.="\t\tthen echo ". |
|
"\"**** WARNING **** missing the file: ". |
|
"$command/$dep\"$logcmd;\\\n"; |
|
$depstring.="\t\ttest -e $source || test -e $target || echo ". |
|
"'**** ERROR **** neither source=$source nor target=". |
|
"$target exist and they cannot be built'$logcmd;\\\n"; |
|
$depstring.="\t\tmake -f Makefile.build ${source}___DEPS;\\\n"; |
|
if ($olddep) { |
|
$depstring2.="\t\tECODE=0;\\\n"; |
|
$depstring2.="\t\t! test -e $source && test -r $command/$olddep &&". |
|
" { 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; |
|
} |
|
$binfo.="$source: $tword\n". |
|
"\t\@if !(echo \"\");\\\n\t\tthen echo ". |
|
"\"**** WARNING **** Strange shell. ". |
|
"Check your path settings.\"$logcmd;\\\n". |
|
$depstring. |
|
"\telse \\\n\t\t$command2\n\tfi\n\n"; |
|
$binfo.="${source}___DEPS:\n".$depstring2."\t\tECODE=0;\n\n"; |
|
} |
|
return 'all: '.join(' ',@buildall)."\n\n". |
|
$text. |
|
$binfo."\n". |
|
"alwaysrun:\n\n"; |
|
} |
|
elsif ($mode eq 'rpm_file_list') { |
|
return $text; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
|
# ---------------------------------------------------- Format fileglobs section |
|
sub format_fileglobs { |
|
|
|
} |
|
# -------------------------------------------------------- Format links section |
|
# deprecated.. currently <link></link>'s are included in <files></files> |
|
sub format_links { |
|
my $text=$parser->get_text('/links'); |
|
$parser->get_tag('/links'); |
|
if ($mode eq 'html') { |
|
return $links="\n<br />BEGIN LINKS\n$text\n<br />END LINKS\n"; |
|
} |
|
elsif ($mode eq 'install') { |
|
return "\n".'links:'."\n\t".$text; |
|
} |
|
else { |
|
return ''; |
|
} |
|
} |
} |
# --------------------------------------------------------- Format file section |
# --------------------------------------------------------- Format file section |
sub format_file { |
sub format_file { |
Line 1134 sub format_file {
|
Line 415 sub format_file {
|
$file=''; $source=''; $target=''; $categoryname=''; $description=''; |
$file=''; $source=''; $target=''; $categoryname=''; $description=''; |
$note=''; $build=''; $status=''; $dependencies=''; |
$note=''; $build=''; $status=''; $dependencies=''; |
my $text=&trim($parser->get_text('/file')); |
my $text=&trim($parser->get_text('/file')); |
my $buildtest; |
|
$file_count++; |
$file_count++; |
$categorycount{$categoryname}++; |
$categorycount{$categoryname}++; |
# START TEMP WAY |
$parser->get_tag('/file'); |
# if (-T "$sourcerootarg/$source") { |
return "# File: $target\n". |
# $linecount{$categoryname}+=`wc -l $sourcerootarg/$source`; |
"$text\n"; |
# } |
|
# my $bytesize=(-s "$sourcerootarg/$source"); |
|
# $bytecount{$categoryname}+=$bytesize; |
|
# END TEMP WAY |
|
# if ($source) { |
|
$parser->get_tag('/file'); |
|
if (1==1) { |
|
return "File: $target\n". |
|
"$dependencies\n"; |
|
} |
|
elsif ($mode eq 'html') { |
|
return ($file="\n<!-- FILESORT:$target -->". |
|
"<tr>". |
|
"<td><!-- POSTEVAL [$categoryname] verify.pl file '$sourcerootarg' ". |
|
"'$targetrootarg' ". |
|
"'$source' '$target' ". |
|
"$categoryhash{$categoryname} --> </td><td>". |
|
"<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') { |
|
if ($build) { |
|
my $bi=$sourceroot.'/'.$source.';'.$build.';'. |
|
$dependencies; |
|
my ($source2,$command,$trigger,@deps)=split(/\;/,$bi); |
|
$tword=''; $tword=' alwaysrun' if $trigger eq 'always run'; |
|
$command=~s/\/([^\/]*)$//; |
|
$command2="cd $command; sh ./$1;\\"; |
|
my $depstring; |
|
foreach my $dep (@deps) { |
|
$depstring.=<<END; |
|
ECODE=0; DEP=''; \\ |
|
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 $dep ${targetroot}/${target} || ECODE=\$\$?; } || DEP="1"; \\ |
|
case "\$\$ECODE" in \\ |
|
2) echo "**** WARNING **** dependency $dep is newer than target file ${targetroot}/${target}; you may want to run make build"$logcmd;; \\ |
|
esac; \\ |
|
END |
|
} |
|
chomp $depstring; |
|
$buildtest=<<END; |
|
\@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"$logcmd; exit; \\ |
|
END |
|
$buildtest.=<<END if $depstring; |
|
elif !(test -e "${sourceroot}/${source}"); then \\ |
|
$depstring |
|
END |
|
$buildtest.=<<END; |
|
fi |
|
END |
|
} |
|
my $bflag='-b1'; |
|
$bflag='-b3' if $dependencies or $buildlink; |
|
return <<END; |
|
$buildtest \@if !(test -e "${sourceroot}/${source}") && !(test -e "${targetroot}/${target}"); then \\ |
|
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 \\ |
|
ECODE=0; \\ |
|
perl filecompare.pl $bflag ${sourceroot}/${source} ${targetroot}/${target} || ECODE=\$\$?; \\ |
|
case "\$\$ECODE" in \\ |
|
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}.pimlsave and then overwriting"$logcmd && install -o www -g www -m 0600 ${targetroot}/${target} ${targetroot}/${target}.pimlsave && install $categoryhash{$categoryname} ${sourceroot}/${source} ${targetroot}/${target};; \\ |
|
0) echo "install $categoryhash{$categoryname} ${sourceroot}/${source} ${targetroot}/${target}" && install $categoryhash{$categoryname} ${sourceroot}/${source} ${targetroot}/${target};; \\ |
|
esac; \\ |
|
perl verifymodown.pl ${targetroot}/${target} "$categoryhash{$categoryname}"$logcmd; \\ |
|
fi |
|
END |
|
} |
|
elsif ($mode eq 'configinstall' && $categoryname eq 'conf') { |
|
push @configall,$targetroot.'/'.$target; |
|
return $targetroot.'/'.$target.': alwaysrun'."\n". |
|
"\t".'@echo -n ""; ECODE=0 && { perl filecompare.pl -b4 '. |
|
$sourceroot.'/'.$source.' '.$targetroot.'/'.$target. |
|
' || ECODE=$$?; } && '. |
|
'{ [ $$ECODE != "2" ] || (install '. |
|
$categoryhash{$categoryname}.' '. |
|
$sourceroot.'/'.$source.' '. |
|
$targetroot.'/'.$target.'.pimlnew'. |
|
' && echo "**** NOTE: CONFIGURATION FILE CHANGE ****"'. |
|
$logcmd.' && echo "'. |
|
'You likely need to compare contents of '. |
|
''.$targetroot.'/'.$target.' with the new '. |
|
''.$targetroot.'/'.$target.'.pimlnew"'. |
|
"$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) { |
|
push @buildall,$sourceroot.'/'.$source; |
|
push @buildinfo,$targetroot.'/'.$target.';'.$sourceroot.'/'. |
|
$source.';'.$build.';'. |
|
$dependencies; |
|
# 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 { |
|
return ''; |
|
} |
|
# } |
|
return ''; |
|
} |
|
# --------------------------------------------------------- Format link section |
|
sub format_link { |
|
my @tokeninfo=@_; |
|
$link=''; $linkto=''; $source=''; $target=''; $categoryname=''; |
|
$description=''; $note=''; $build=''; $status=''; $dependencies=''; |
|
my $text=&trim($parser->get_text('/link')); |
|
if ($linkto) { |
|
$parser->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<!-- FILESORT:$tgt -->". |
|
"<tr>". |
|
"<td><!-- POSTEVAL [$categoryname] verify.pl link ". |
|
"'/$targetrootarg$linkto' '/$targetrootarg$tgt' ". |
|
"$categoryhash{$categoryname} --> </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') { |
|
my @targets=map {s/^\s*//;s/\s$//;$_} split(/\;/,$target); |
|
foreach my $tgt (@targets) { |
|
push @links,"\t".'ln -fs /'.$linkto.' '.$targetroot.'/'.$tgt. |
|
"\n"; |
|
} |
|
# return join('',@links); |
|
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 { |
|
return ''; |
|
} |
|
} |
|
return ''; |
|
} |
|
# ----------------------------------------------------- Format fileglob section |
|
sub format_fileglob { |
|
my @tokeninfo=@_; |
|
$fileglob=''; $glob=''; $sourcedir=''; |
|
$targetdir=''; $categoryname=''; $description=''; |
|
$note=''; $build=''; $status=''; $dependencies=''; |
|
$filenames=''; |
|
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) { |
|
$parser->get_tag('/fileglob'); |
|
if ($mode eq 'html') { |
|
return $fileglob="\n<tr>". |
|
"<td><!-- POSTEVAL [$categoryname] verify.pl fileglob '$sourcerootarg' ". |
|
"'$targetrootarg' ". |
|
"'$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') { |
|
my $eglob=$glob; |
|
if ($glob eq '*') { |
|
$eglob='[^C][^V][^S]'.$glob; |
|
} |
|
return "\t".'install '. |
|
$categoryhash{$categoryname}.' '. |
|
$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 ''; |
|
} |
|
} |
|
return ''; |
|
} |
|
# ---------------------------------------------------- Format sourcedir section |
|
sub format_sourcedir { |
|
my @tokeninfo=@_; |
|
$sourcedir=''; |
|
my $text=&trim($parser->get_text('/sourcedir')); |
|
if ($text) { |
|
$parser->get_tag('/sourcedir'); |
|
$sourcedir=$text; |
|
} |
|
return ''; |
return ''; |
} |
} |
# ------------------------------------------------------- Format target section |
# ------------------------------------------------------- Format target section |
Line 1439 sub format_target {
|
Line 429 sub format_target {
|
my $text=&trim($parser->get_text('/target')); |
my $text=&trim($parser->get_text('/target')); |
if ($text) { |
if ($text) { |
$parser->get_tag('/target'); |
$parser->get_tag('/target'); |
$target=$text; |
$target=$targetrootarg.$text; |
} |
|
return ''; |
|
} |
|
# ------------------------------------------------------- Format source section |
|
sub format_source { |
|
my @tokeninfo=@_; |
|
$source=''; |
|
my $text=&trim($parser->get_text('/source')); |
|
if ($text) { |
|
$parser->get_tag('/source'); |
|
$source=$text; |
|
} |
} |
return ''; |
return ''; |
} |
} |
Line 1458 sub format_source {
|
Line 437 sub format_source {
|
sub format_note { |
sub format_note { |
my @tokeninfo=@_; |
my @tokeninfo=@_; |
$note=''; |
$note=''; |
# my $text=&trim($parser->get_text('/note')); |
|
my $aref; |
my $aref; |
my $text; |
my $text; |
while ($aref=$parser->get_token()) { |
while ($aref=$parser->get_token()) { |
Line 1476 sub format_note {
|
Line 454 sub format_note {
|
} |
} |
} |
} |
if ($text) { |
if ($text) { |
# $parser->get_tag('/note'); |
|
$note=$text; |
$note=$text; |
} |
} |
return ''; |
return ''; |
|
|
} |
} |
# -------------------------------------------------------- Format build section |
|
sub format_build { |
|
my @tokeninfo=@_; |
|
$build=''; |
|
my $text=&trim($parser->get_text('/build')); |
|
if ($text) { |
|
$parser->get_tag('/build'); |
|
$build=$sourceroot.'/'.$text.';'.$tokeninfo[2]{'trigger'}; |
|
} |
|
return ''; |
|
} |
|
# -------------------------------------------------------- Format build section |
|
sub format_buildlink { |
|
my @tokeninfo=@_; |
|
$buildlink=''; |
|
my $text=&trim($parser->get_text('/buildlink')); |
|
if ($text) { |
|
$parser->get_tag('/buildlink'); |
|
$buildlink=$sourceroot.'/'.$text; |
|
} |
|
return ''; |
|
} |
|
# ------------------------------------------------------- Format status section |
|
sub format_status { |
|
my @tokeninfo=@_; |
|
$status=''; |
|
my $text=&trim($parser->get_text('/status')); |
|
if ($text) { |
|
$parser->get_tag('/status'); |
|
$status=$text; |
|
} |
|
return ''; |
|
} |
|
# ------------------------------------------------- Format dependencies section |
# ------------------------------------------------- Format dependencies section |
sub format_dependencies { |
sub format_dependencies { |
my @tokeninfo=@_; |
my @tokeninfo=@_; |
Line 1527 sub format_dependencies {
|
Line 471 sub format_dependencies {
|
} |
} |
return ''; |
return ''; |
} |
} |
# --------------------------------------------------------- Format glob section |
|
sub format_glob { |
|
my @tokeninfo=@_; |
|
$glob=''; |
|
my $text=&trim($parser->get_text('/glob')); |
|
if ($text) { |
|
$parser->get_tag('/glob'); |
|
$glob=$text; |
|
} |
|
return ''; |
|
} |
|
# ---------------------------------------------------- Format filenames section |
|
sub format_filenames { |
|
my @tokeninfo=@_; |
|
my $text=&trim($parser->get_text('/filenames')); |
|
if ($text) { |
|
$parser->get_tag('/filenames'); |
|
$filenames=$text; |
|
} |
|
return ''; |
|
} |
|
# ------------------------------------------------ Format specialnotice section |
# ------------------------------------------------ Format specialnotice section |
sub format_specialnotices { |
sub format_specialnotices { |
$parser->get_tag('/specialnotices'); |
$parser->get_tag('/specialnotices'); |
Line 1558 sub format_specialnotice {
|
Line 481 sub format_specialnotice {
|
$parser->get_tag('/specialnotice'); |
$parser->get_tag('/specialnotice'); |
return ''; |
return ''; |
} |
} |
# ------------------------------------------------------- Format linkto section |
|
sub format_linkto { |
|
my @tokeninfo=@_; |
|
my $text=&trim($parser->get_text('/linkto')); |
|
if ($text) { |
|
$parser->get_tag('/linkto'); |
|
$linkto=$text; |
|
} |
|
return ''; |
|
} |
|
# ------------------------------------- Render less-than and greater-than signs |
# ------------------------------------- Render less-than and greater-than signs |
sub htmlsafe { |
sub htmlsafe { |
my $text=@_[0]; |
my $text=@_[0]; |
Line 1585 sub trim {
|
Line 498 sub trim {
|
=head1 NAME |
=head1 NAME |
|
|
piml_parse.pl - This is meant to parse files meeting the piml document type. |
piml_parse.pl - This is meant to parse files meeting the piml document type. |
See piml.dtd. PIML=Linux Packaging Markup Language. |
See piml.dtd. PIML=Post Installation Markup Language. |
|
|
=head1 SYNOPSIS |
=head1 SYNOPSIS |
|
|
Line 1593 Usage is for piml file to come in throug
|
Line 506 Usage is for piml file to come in throug
|
|
|
=over 4 |
=over 4 |
|
|
=item * |
|
|
|
1st argument is the mode of parsing. |
|
|
|
=item * |
=item * |
|
|
2nd argument is the category permissions to use (runtime or development) |
1st argument is the category permissions to use (runtime or development) |
|
|
=item * |
=item * |
|
|
3rd argument is the distribution |
2nd argument is the distribution |
(default,redhat6.2,debian2.2,redhat7.1,etc). |
(default,redhat6.2,debian2.2,redhat7.1,etc). |
|
|
=item * |
=item * |
|
|
4th argument is to manually specify a sourceroot. |
3rd argument is to manually specify a targetroot. |
|
|
=item * |
|
|
|
5th argument is to manually specify a targetroot. |
|
|
|
=back |
=back |
|
|