version 1.15, 2001/11/06 03:06:03
|
version 1.20, 2001/11/17 21:30:28
|
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 - Scott Harrison |
|
# |
|
# $Id$ |
|
### |
|
|
############################################################################### |
############################################################################### |
## ## |
## ## |
Line 83 if (@ARGV) {
|
Line 86 if (@ARGV) {
|
$sourceroot=~s/\/$//; |
$sourceroot=~s/\/$//; |
$targetroot=~s/\/$//; |
$targetroot=~s/\/$//; |
|
|
|
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 340 sub format_lpml {
|
Line 345 sub format_lpml {
|
print "\n".$invocation; |
print "\n".$invocation; |
$lpml .= "SHELL=\"/bin/bash\"\n\n"; |
$lpml .= "SHELL=\"/bin/bash\"\n\n"; |
} |
} |
|
elsif ($mode eq 'configinstall') { |
|
print '# LPML 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; |
|
$lpml .= "SHELL=\"/bin/bash\"\n\n"; |
|
} |
elsif ($mode eq 'build') { |
elsif ($mode eq 'build') { |
$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 359 sub format_targetroot {
|
Line 372 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 377 sub format_sourceroot {
|
Line 388 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 688 sub format_files {
|
Line 697 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 763 sub format_file {
|
Line 772 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 783 END
|
Line 792 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; \\ |
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; creating ${targetroot}/${target}.lpmlnewfile instead"$logcmd && install -o www -g www -m 0500 ${sourceroot}/${source} ${targetroot}/${target}.lpmlnewfile;; \\ |
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 -o www -g www -m 0500 ${sourceroot}/${source} ${targetroot}/${target}" && install -o www -g www -m 0500 ${sourceroot}/${source} ${targetroot}/${target};; \\ |
esac; \\ |
esac; \\ |
fi |
fi |
Line 805 END
|
Line 816 END
|
# $categoryhash{$categoryname}.' '. |
# $categoryhash{$categoryname}.' '. |
# $sourceroot.'/'.$source.' '. |
# $sourceroot.'/'.$source.' '. |
# $targetroot.'/'.$target. |
# $targetroot.'/'.$target. |
# ' || echo "**** LON-CAPA WARNING '. |
# ' || echo "**** WARNING '. |
# '**** CVS source file does not exist: '.$sourceroot.'/'. |
# '**** CVS source file does not exist: '.$sourceroot.'/'. |
# $source.'"'."\n"; |
# $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.'.lpmlnewconf'. |
' && 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.'.lpmlnewconf"'. |
"); };\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); };\n\n"; |
} |
} |
elsif ($mode eq 'build' && $build) { |
elsif ($mode eq 'build' && $build) { |
push @buildall,$sourceroot.'/'.$source; |
push @buildall,$sourceroot.'/'.$source; |
Line 1024 sub trim {
|
Line 1056 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 |