--- loncom/build/lpml_parse.pl 2001/09/08 23:02:55 1.9
+++ loncom/build/lpml_parse.pl 2001/09/18 13:18:33 1.12
@@ -177,7 +177,8 @@ while ($token = $parser->get_token()) {
}
}
$cleanstring=&trim($cleanstring);
-$cleanstring=~s/\s*\n\s*//g;
+$cleanstring=~s/\>\s*\n\s*\\>\new(\$cleanstring) or
@@ -297,7 +303,7 @@ exit;
sub end {
if ($mode eq 'html') {
- return "THE END\n";
+ return "
THE END\n";
}
if ($mode eq 'install') {
return '';
@@ -316,7 +322,7 @@ sub format_lpml {
my (@tokeninfo)=@_;
my $date=`date`; chop $date;
if ($mode eq 'html') {
- $lpml = "LPML BEGINNING: $date";
+ $lpml = "
LPML BEGINNING: $date";
}
elsif ($mode eq 'install') {
print '# LPML install targets. Linux Packaging Markup Language,';
@@ -324,6 +330,12 @@ sub format_lpml {
print '# This file was automatically generated on '.`date`;
print "\n".$invocation;
}
+ elsif ($mode eq 'build') {
+ $lpml = "# Dynamic Makefile generated by LON-CAPA build process\n";
+ $lpml .= '# This file was automatically generated on '.`date`;
+ $lpml .= "\n";
+ $lpml .= "SHELL=\"/bin/sh\"\n\n";
+ }
else {
return '';
}
@@ -334,11 +346,14 @@ sub format_targetroot {
$text=$targetroot if $targetroot;
$parser->get_tag('/targetroot');
if ($mode eq 'html') {
- return $targetroot="\nTARGETROOT: $text";
+ return $targetroot="\n
TARGETROOT: $text";
}
elsif ($mode eq 'install') {
return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n";
}
+ elsif ($mode eq 'build') {
+ return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n";
+ }
else {
return '';
}
@@ -349,11 +364,14 @@ sub format_sourceroot {
$text=$sourceroot if $sourceroot;
$parser->get_tag('/sourceroot');
if ($mode eq 'html') {
- return $sourceroot="\nSOURCEROOT: $text";
+ return $sourceroot="\n
SOURCEROOT: $text";
}
elsif ($mode eq 'install') {
return '# SOURCE CODE LOCATION IS "'.$sourceroot."\"\n";;
}
+ elsif ($mode eq 'build') {
+ return '# SOURCE CODE LOCATION IS "'.$sourceroot."\"\n";;
+ }
else {
return '';
}
@@ -363,7 +381,8 @@ sub format_categories {
my $text=&trim($parser->get_text('/categories'));
$parser->get_tag('/categories');
if ($mode eq 'html') {
- return $categories="\nBEGIN CATEGORIES\n$text\nEND CATEGORIES\n";
+ return $categories="\n
BEGIN CATEGORIES\n$text\n".
+ "
END CATEGORIES\n";
}
else {
return '';
@@ -378,8 +397,8 @@ sub format_category {
$parser->get_text('/category');
$parser->get_tag('/category');
if ($mode eq 'html') {
- return $category="\nCATEGORY $category_att_name $category_att_type ".
- "$chmod $chown";
+ return $category="\n
CATEGORY $category_att_name ".
+ "$category_att_type $chmod $chown";
}
else {
if ($category_att_type eq $categorytype) {
@@ -417,7 +436,7 @@ sub format_rpm {
my $text=&trim($parser->get_text('/rpm'));
$parser->get_tag('/rpm');
if ($mode eq 'html') {
- return $rpm="\nBEGIN RPM\n$text\nEND RPM";
+ return $rpm="\n
BEGIN RPM\n$text\n
END RPM";
}
else {
return '';
@@ -428,7 +447,7 @@ sub format_rpmSummary {
my $text=&trim($parser->get_text('/rpmSummary'));
$parser->get_tag('/rpmSummary');
if ($mode eq 'html') {
- return $rpmSummary="\nRPMSUMMARY $text";
+ return $rpmSummary="\n
RPMSUMMARY $text";
}
else {
return '';
@@ -439,7 +458,7 @@ sub format_rpmName {
my $text=&trim($parser->get_text('/rpmName'));
$parser->get_tag('/rpmName');
if ($mode eq 'html') {
- return $rpmName="\nRPMNAME $text";
+ return $rpmName="\n
RPMNAME $text";
}
else {
return '';
@@ -450,7 +469,7 @@ sub format_rpmVersion {
my $text=$parser->get_text('/rpmVersion');
$parser->get_tag('/rpmVersion');
if ($mode eq 'html') {
- return $rpmVersion="\nRPMVERSION $text";
+ return $rpmVersion="\n
RPMVERSION $text";
}
else {
return '';
@@ -461,7 +480,7 @@ sub format_rpmRelease {
my $text=$parser->get_text('/rpmRelease');
$parser->get_tag('/rpmRelease');
if ($mode eq 'html') {
- return $rpmRelease="\nRPMRELEASE $text";
+ return $rpmRelease="\n
RPMRELEASE $text";
}
else {
return '';
@@ -472,7 +491,7 @@ sub format_rpmVendor {
my $text=$parser->get_text('/rpmVendor');
$parser->get_tag('/rpmVendor');
if ($mode eq 'html') {
- return $rpmVendor="\nRPMVENDOR $text";
+ return $rpmVendor="\n
RPMVENDOR $text";
}
else {
return '';
@@ -483,7 +502,7 @@ sub format_rpmBuildRoot {
my $text=$parser->get_text('/rpmBuildRoot');
$parser->get_tag('/rpmBuildRoot');
if ($mode eq 'html') {
- return $rpmBuildRoot="\nRPMBUILDROOT $text";
+ return $rpmBuildRoot="\n
RPMBUILDROOT $text";
}
else {
return '';
@@ -494,7 +513,7 @@ sub format_rpmCopyright {
my $text=$parser->get_text('/rpmCopyright');
$parser->get_tag('/rpmCopyright');
if ($mode eq 'html') {
- return $rpmCopyright="\nRPMCOPYRIGHT $text";
+ return $rpmCopyright="\n
RPMCOPYRIGHT $text";
}
else {
return '';
@@ -505,7 +524,7 @@ sub format_rpmGroup {
my $text=$parser->get_text('/rpmGroup');
$parser->get_tag('/rpmGroup');
if ($mode eq 'html') {
- return $rpmGroup="\nRPMGROUP $text";
+ return $rpmGroup="\n
RPMGROUP $text";
}
else {
return '';
@@ -516,7 +535,7 @@ sub format_rpmSource {
my $text=$parser->get_text('/rpmSource');
$parser->get_tag('/rpmSource');
if ($mode eq 'html') {
- return $rpmSource="\nRPMSOURCE $text";
+ return $rpmSource="\n
RPMSOURCE $text";
}
else {
return '';
@@ -527,7 +546,7 @@ sub format_rpmAutoReqProv {
my $text=$parser->get_text('/rpmAutoReqProv');
$parser->get_tag('/rpmAutoReqProv');
if ($mode eq 'html') {
- return $rpmAutoReqProv="\nRPMAUTOREQPROV $text";
+ return $rpmAutoReqProv="\n
RPMAUTOREQPROV $text";
}
else {
return '';
@@ -538,7 +557,7 @@ sub format_rpmdescription {
my $text=$parser->get_text('/rpmdescription');
$parser->get_tag('/rpmdescription');
if ($mode eq 'html') {
- return $rpmdescription="\nRPMDESCRIPTION $text";
+ return $rpmdescription="\n
RPMDESCRIPTION $text";
}
else {
return '';
@@ -549,7 +568,7 @@ sub format_rpmpre {
my $text=$parser->get_text('/rpmpre');
$parser->get_tag('/rpmpre');
if ($mode eq 'html') {
- return $rpmpre="\nRPMPRE $text";
+ return $rpmpre="\n
RPMPRE $text";
}
else {
return '';
@@ -560,7 +579,8 @@ sub format_directories {
my $text=$parser->get_text('/directories');
$parser->get_tag('/directories');
if ($mode eq 'html') {
- return $directories="\nBEGIN DIRECTORIES\n$text\nEND DIRECTORIES\n";
+ return $directories="\n
BEGIN DIRECTORIES\n$text\n
".
+ "END DIRECTORIES\n";
}
elsif ($mode eq 'install') {
return "\n".'directories:'."\n".$text;
@@ -576,7 +596,8 @@ sub format_directory {
$parser->get_text('/directory');
$parser->get_tag('/directory');
if ($mode eq 'html') {
- return $directory="\nDIRECTORY $targetdir $categoryname $description";
+ return $directory="\n
DIRECTORY $targetdir $categoryname ".
+ "$description";
}
elsif ($mode eq 'install') {
return "\t".'install '.$categoryhash{$categoryname}.' -d '.
@@ -612,7 +633,7 @@ sub format_categoryname {
sub format_description {
my @tokeninfo=@_;
$description='';
- my $text=&trim($parser->get_text('/description'));
+ my $text=&htmlsafe(&trim($parser->get_text('/description')));
if ($text) {
$parser->get_tag('/description');
$description=$text;
@@ -624,12 +645,46 @@ sub format_files {
my $text=$parser->get_text('/files');
$parser->get_tag('/files');
if ($mode eq 'html') {
- return $directories="\nBEGIN FILES\n$text\nEND FILES\n";
+ return $directories="\n
BEGIN FILES\n$text\n
END FILES\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;
+ }
+ elsif ($mode eq 'build') {
+ my $binfo;
+ my $tword;
+ my $command2;
+ my @deps;
+ foreach my $bi (@buildinfo) {
+ my ($source,$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.="\telif !(test -r $command/$dep);\\\n";
+ $depstring.="\t\tthen echo ".
+ "\"**** LON-CAPA WARNING **** missing the file: ".
+ "$command/$dep\";\\\n";
+ }
+ $binfo.="$source: $tword\n".
+ "\t\@if !(echo \"\");\\\n\t\tthen echo ".
+ "\"**** LON-CAPA WARNING **** Strange shell. ".
+ "Check your path settings.\";\\\n".
+ $depstring.
+ "\telse \\\n\t\t$command2\n\tfi\n\n";
+ }
+ return 'all: '.join(' ',@buildall)."\n\n".
+ $text.
+ $binfo."\n".
+ "alwaysrun:\n\n";
+ }
else {
return '';
}
@@ -644,7 +699,7 @@ sub format_links {
my $text=$parser->get_text('/links');
$parser->get_tag('/links');
if ($mode eq 'html') {
- return $links="\nBEGIN LINKS\n$text\nEND LINKS\n";
+ return $links="\n
BEGIN LINKS\n$text\n
END LINKS\n";
}
elsif ($mode eq 'install') {
return "\n".'links:'."\n\t".$text;
@@ -662,7 +717,7 @@ sub format_file {
if ($source) {
$parser->get_tag('/file');
if ($mode eq 'html') {
- return ($file="\nBEGIN FILE\n".
+ return ($file="\n
BEGIN FILE\n".
"$source $target $categoryname $description $note " .
"$build $status $dependencies" .
"\nEND FILE");
@@ -677,6 +732,24 @@ sub format_file {
'**** CVS source file does not exist: '.$sourceroot.'/'.
$source.'"'."\n";
}
+ elsif ($mode eq 'configinstall' && $categoryname eq 'conf') {
+ push @configall,$targetroot.'/'.$target;
+ return $targetroot.'/'.$target.':'."\n".
+ "\t".'@install '.$categoryhash{$categoryname}.' '.
+ $sourceroot.'/'.$source.' '.
+ $targetroot.'/'.$target.'.lpmlnewconf'.
+ ' && echo "*** CONFIGURATION FILE CHANGE ***" && echo "'.
+ 'You likely need to compare contents of "'.
+ "$targetroot/$target with the new ".
+ "$targetroot/$target.lpmlnewconf".
+ "\n\n";
+ }
+ elsif ($mode eq 'build' && $build) {
+ push @buildall,$sourceroot.'/'.$source;
+ push @buildinfo,$sourceroot.'/'.$source.';'.$build.';'.
+ $dependencies;
+# return '# need to build '.$source.";
+ }
else {
return '';
}
@@ -692,13 +765,13 @@ sub format_link {
if ($linkto) {
$parser->get_tag('/link');
if ($mode eq 'html') {
- return $link="\nBEGIN LINK\n".
+ return $link="\n
BEGIN LINK\n".
"$linkto $target $categoryname $description $note " .
"$build $status $dependencies" .
"\nEND LINK";
}
elsif ($mode eq 'install') {
- my @targets=split(/\;/,$target);
+ my @targets=map {s/^\s*//;s/\s$//;$_} split(/\;/,$target);
foreach my $tgt (@targets) {
push @links,"\t".'ln -fs /'.$linkto.' /'.$targetroot.$tgt.
"\n";
@@ -722,7 +795,7 @@ sub format_fileglob {
if ($sourcedir) {
$parser->get_tag('/fileglob');
if ($mode eq 'html') {
- return $fileglob="\nBEGIN FILEGLOB\n".
+ return $fileglob="\n
BEGIN FILEGLOB\n".
"$glob sourcedir $targetdir $categoryname $description $note ".
"$build $status $dependencies $filenames" .
"\nEND FILEGLOB";
@@ -791,7 +864,7 @@ sub format_build {
my $text=&trim($parser->get_text('/build'));
if ($text) {
$parser->get_tag('/build');
- $build=$text;
+ $build=$sourceroot.'/'.$text.';'.$tokeninfo[2]{'trigger'};
}
return '';
}
@@ -813,7 +886,8 @@ sub format_dependencies {
my $text=&trim($parser->get_text('/dependencies'));
if ($text) {
$parser->get_tag('/dependencies');
- $dependencies=$text;
+ $dependencies=join(';',
+ (map {s/^\s*//;s/\s$//;$_} split(/\;/,$text)));
}
return '';
}
@@ -848,6 +922,13 @@ sub format_linkto {
}
return '';
}
+# ------------------------------------- Render less-than and greater-than signs
+sub htmlsafe {
+ my $text=@_[0];
+ $text =~ s/</g;
+ $text =~ s/>/>/g;
+ return $text;
+}
# --------------------------------------- remove starting and ending whitespace
sub trim {
my ($s)=@_; $s=~s/^\s*//; $s=~s/\s*$//; return $s;