Diff for /loncom/build/lpml_parse.pl between versions 1.4 and 1.15

version 1.4, 2001/09/07 16:49:18 version 1.15, 2001/11/06 03:06:03
Line 4 Line 4
 # YEAR=2001  # YEAR=2001
 # May 2001  # May 2001
 # 06/19/2001,06/20,06/24 - Scott Harrison  # 06/19/2001,06/20,06/24 - Scott Harrison
 # 9/5/2001,9/6 - Scott Harrison  # 9/5/2001,9/6,9/7,9/8 - Scott Harrison
   # 9/17,9/18 - Scott Harrison
   # 11/4 - Scott Harrison
   
 ###############################################################################  ###############################################################################
 ##                                                                           ##  ##                                                                           ##
Line 14 Line 16
 ## 3. First pass through (grab distribution-specific information)            ##  ## 3. First pass through (grab distribution-specific information)            ##
 ## 4. Second pass through (parse out what is not necessary)                  ##  ## 4. Second pass through (parse out what is not necessary)                  ##
 ## 5. Third pass through (translate markup according to specified mode)      ##  ## 5. Third pass through (translate markup according to specified mode)      ##
   ## 6. Functions (most all just format contents of different markup tags)     ##
   ## 7. POD (plain old documentation, CPAN style)                              ##
 ##                                                                           ##  ##                                                                           ##
 ###############################################################################  ###############################################################################
   
Line 79  if (@ARGV) { Line 83  if (@ARGV) {
 $sourceroot=~s/\/$//;  $sourceroot=~s/\/$//;
 $targetroot=~s/\/$//;  $targetroot=~s/\/$//;
   
   my $invocation;
   # --------------------------------------------------- Record program invocation
   if ($mode eq 'install') {
       $invocation=(<<END);
   # Invocation: STDINPUT | lpml_parse.pl
   #             1st argument (mode) is: $mode
   #             2nd argument (category type) is: $categorytype
   #             3rd argument (distribution) is: $dist
   #             4th argument (targetroot) is: described below
   #             5th argument (sourceroot) is: described below
   END
   }
   
 # ---------------------------------------------------- Start first pass through  # ---------------------------------------------------- Start first pass through
 my @parsecontents = <>;  my @parsecontents = <>;
 my $parsestring = join('',@parsecontents);  my $parsestring = join('',@parsecontents);
Line 164  while ($token = $parser->get_token()) { Line 181  while ($token = $parser->get_token()) {
     }      }
 }  }
 $cleanstring=&trim($cleanstring);  $cleanstring=&trim($cleanstring);
 $cleanstring=~s/\s*\n\s*//g;  $cleanstring=~s/\>\s*\n\s*\</\>\</g;
   
 # ---------------------------------------------------- Start final pass through  # ---------------------------------------------------- Start final pass through
   
 # storage variables  # storage variables
Line 206  my $target; Line 224  my $target;
 my $source;  my $source;
 my $note;  my $note;
 my $build;  my $build;
   my $buildlink;
 my $commands;  my $commands;
 my $command;  my $command;
 my $status;  my $status;
Line 214  my $dependency; Line 233  my $dependency;
 my @links;  my @links;
 my %categoryhash;  my %categoryhash;
   
   my @buildall;
   my @buildinfo;
   
   my @configall;
   
 # Make new parser with distribution specific input  # Make new parser with distribution specific input
 undef $parser;  undef $parser;
 $parser = HTML::TokeParser->new(\$cleanstring) or  $parser = HTML::TokeParser->new(\$cleanstring) or
Line 258  $parser->{textify}={ Line 282  $parser->{textify}={
     build => \&format_build,      build => \&format_build,
     status => \&format_status,      status => \&format_status,
     dependencies => \&format_dependencies,      dependencies => \&format_dependencies,
       buildlink => \&format_buildlink,
     glob => \&format_glob,      glob => \&format_glob,
     sourcedir => \&format_sourcedir,      sourcedir => \&format_sourcedir,
     filenames => \&format_filenames,      filenames => \&format_filenames,
Line 282  while ($token = $parser->get_tag('lpml') Line 307  while ($token = $parser->get_tag('lpml')
 }  }
 exit;  exit;
   
   # ---------- Functions (most all just format contents of different markup tags)
   
   # ------------------------ Final output at end of markup parsing and formatting
 sub end {  sub end {
     if ($mode eq 'html') {      if ($mode eq 'html') {
  return "THE END\n";   return "<br />THE END\n";
     }      }
     if ($mode eq 'install') {      if ($mode eq 'install') {
  return '';   return '';
Line 303  sub format_lpml { Line 331  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 = "LPML BEGINNING: $date";   $lpml = "<br />LPML BEGINNING: $date";
     }      }
     elsif ($mode eq 'install') {      elsif ($mode eq 'install') {
  print '# LPML install targets. Linux Packaging Markup Language,';   print '# LPML install targets. 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;
    $lpml .= "SHELL=\"/bin/bash\"\n\n";
       }
       elsif ($mode eq 'build') {
    $lpml = "# LPML build targets. Linux Packaging Markup Language,";
    $lpml .= ' by Scott Harrison 2001'."\n";
    $lpml .= '# This file was automatically generated on '.`date`;
    $lpml .= "\n";
    $lpml .= "SHELL=\"/bin/sh\"\n\n";
     }      }
     else {      else {
  return '';   return '';
Line 320  sub format_targetroot { Line 357  sub format_targetroot {
     $text=$targetroot if $targetroot;      $text=$targetroot if $targetroot;
     $parser->get_tag('/targetroot');      $parser->get_tag('/targetroot');
     if ($mode eq 'html') {      if ($mode eq 'html') {
  return $targetroot="\nTARGETROOT: $text";   return $targetroot="\n<br />TARGETROOT: $text";
     }      }
     elsif ($mode eq 'install') {      elsif ($mode eq 'install') {
  return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n";   return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n";
     }      }
       elsif ($mode eq 'build') {
    return '# TARGET INSTALL LOCATION is "'.$targetroot."\"\n";
       }
     else {      else {
  return '';   return '';
     }      }
Line 335  sub format_sourceroot { Line 375  sub format_sourceroot {
     $text=$sourceroot if $sourceroot;      $text=$sourceroot if $sourceroot;
     $parser->get_tag('/sourceroot');      $parser->get_tag('/sourceroot');
     if ($mode eq 'html') {      if ($mode eq 'html') {
  return $sourceroot="\nSOURCEROOT: $text";   return $sourceroot="\n<br />SOURCEROOT: $text";
     }      }
     elsif ($mode eq 'install') {      elsif ($mode eq 'install') {
  return '# SOURCE CODE LOCATION IS "'.$sourceroot."\"\n";;   return '# SOURCE CODE LOCATION IS "'.$sourceroot."\"\n";;
     }      }
       elsif ($mode eq 'build') {
    return '# SOURCE CODE LOCATION IS "'.$sourceroot."\"\n";;
       }
     else {      else {
  return '';   return '';
     }      }
Line 349  sub format_categories { Line 392  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="\nBEGIN CATEGORIES\n$text\nEND CATEGORIES\n";   return $categories="\n<br />BEGIN CATEGORIES\n$text\n".
       "<br />END CATEGORIES\n";
     }      }
     else {      else {
  return '';   return '';
Line 364  sub format_category { Line 408  sub format_category {
     $parser->get_text('/category');      $parser->get_text('/category');
     $parser->get_tag('/category');      $parser->get_tag('/category');
     if ($mode eq 'html') {      if ($mode eq 'html') {
  return $category="\nCATEGORY $category_att_name $category_att_type ".   return $category="\n<br />CATEGORY $category_att_name ".
     "$chmod $chown";      "$category_att_type $chmod $chown";
     }      }
     else {      else {
  if ($category_att_type eq $categorytype) {   if ($category_att_type eq $categorytype) {
Line 403  sub format_rpm { Line 447  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="\nBEGIN RPM\n$text\nEND RPM";   return $rpm="\n<br />BEGIN RPM\n$text\n<br />END RPM";
     }      }
     else {      else {
  return '';   return '';
Line 414  sub format_rpmSummary { Line 458  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="\nRPMSUMMARY $text";   return $rpmSummary="\n<br />RPMSUMMARY $text";
     }      }
     else {      else {
  return '';   return '';
Line 425  sub format_rpmName { Line 469  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="\nRPMNAME $text";   return $rpmName="\n<br />RPMNAME $text";
     }      }
     else {      else {
  return '';   return '';
Line 436  sub format_rpmVersion { Line 480  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="\nRPMVERSION $text";   return $rpmVersion="\n<br />RPMVERSION $text";
     }      }
     else {      else {
  return '';   return '';
Line 447  sub format_rpmRelease { Line 491  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="\nRPMRELEASE $text";   return $rpmRelease="\n<br />RPMRELEASE $text";
     }      }
     else {      else {
  return '';   return '';
Line 458  sub format_rpmVendor { Line 502  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="\nRPMVENDOR $text";   return $rpmVendor="\n<br />RPMVENDOR $text";
     }      }
     else {      else {
  return '';   return '';
Line 469  sub format_rpmBuildRoot { Line 513  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="\nRPMBUILDROOT $text";   return $rpmBuildRoot="\n<br />RPMBUILDROOT $text";
     }      }
     else {      else {
  return '';   return '';
Line 480  sub format_rpmCopyright { Line 524  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="\nRPMCOPYRIGHT $text";   return $rpmCopyright="\n<br />RPMCOPYRIGHT $text";
     }      }
     else {      else {
  return '';   return '';
Line 491  sub format_rpmGroup { Line 535  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="\nRPMGROUP $text";   return $rpmGroup="\n<br />RPMGROUP $text";
     }      }
     else {      else {
  return '';   return '';
Line 502  sub format_rpmSource { Line 546  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="\nRPMSOURCE $text";   return $rpmSource="\n<br />RPMSOURCE $text";
     }      }
     else {      else {
  return '';   return '';
Line 513  sub format_rpmAutoReqProv { Line 557  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="\nRPMAUTOREQPROV $text";   return $rpmAutoReqProv="\n<br />RPMAUTOREQPROV $text";
     }      }
     else {      else {
  return '';   return '';
Line 524  sub format_rpmdescription { Line 568  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="\nRPMDESCRIPTION $text";   return $rpmdescription="\n<br />RPMDESCRIPTION $text";
     }      }
     else {      else {
  return '';   return '';
Line 535  sub format_rpmpre { Line 579  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="\nRPMPRE $text";   return $rpmpre="\n<br />RPMPRE $text";
     }      }
     else {      else {
  return '';   return '';
Line 546  sub format_directories { Line 590  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="\nBEGIN DIRECTORIES\n$text\nEND DIRECTORIES\n";   return $directories="\n<br />BEGIN DIRECTORIES\n$text\n<br />".
       "END DIRECTORIES\n";
     }      }
     elsif ($mode eq 'install') {      elsif ($mode eq 'install') {
  return "\n".'directories:'."\n".$text;   return "\n".'directories:'."\n".$text;
Line 562  sub format_directory { Line 607  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="\nDIRECTORY $targetdir $categoryname $description";   return $directory="\n<br />DIRECTORY $targetdir $categoryname ".
       "$description";
     }      }
     elsif ($mode eq 'install') {      elsif ($mode eq 'install') {
  return "\t".'install '.$categoryhash{$categoryname}.' -d '.   return "\t".'install '.$categoryhash{$categoryname}.' -d '.
     $targetroot.$targetdir."\n";      $targetroot.'/'.$targetdir."\n";
     }      }
     else {      else {
  return '';   return '';
Line 598  sub format_categoryname { Line 644  sub format_categoryname {
 sub format_description {  sub format_description {
     my @tokeninfo=@_;      my @tokeninfo=@_;
     $description='';      $description='';
     my $text=&trim($parser->get_text('/description'));      my $text=&htmlsafe(&trim($parser->get_text('/description')));
     if ($text) {      if ($text) {
  $parser->get_tag('/description');   $parser->get_tag('/description');
  $description=$text;   $description=$text;
Line 610  sub format_files { Line 656  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="\nBEGIN FILES\n$text\nEND FILES\n";   return $directories="\n<br />BEGIN FILES\n$text\n<br />END FILES\n";
     }      }
     elsif ($mode eq 'install') {      elsif ($mode eq 'install') {
  return "\n".'files:'."\n".$text.   return "\n".'files:'."\n".$text.
     "\n".'links:'."\n".join('',@links);      "\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'; 
       $command=~s/\/([^\/]*)$//;
       $command2="cd $command; sh ./$1;\\";
       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\";\\\n";
    $depstring.="\t\ttest -e $source || test -e $target || echo ".
       "'**** ERROR **** neither source=$source nor target=".
       "$target exist and they cannot be built';\\\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 -B $command/$olddep $target ||  ECODE=\$\$?; } && { [ \$\$ECODE != \"2\" ] || echo \"**** WARNING **** dependency $command/$olddep is newer than target file $target; SOMETHING MAY BE WRONG\"; };\\\n";
    }
    $olddep=$dep;
       }
       $binfo.="$source: $tword\n".
    "\t\@if !(echo \"\");\\\n\t\tthen echo ".
    "\"**** WARNING **** Strange shell. ".
            "Check your path settings.\";\\\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";
       }
     else {      else {
  return '';   return '';
     }      }
Line 630  sub format_links { Line 727  sub format_links {
     my $text=$parser->get_text('/links');      my $text=$parser->get_text('/links');
     $parser->get_tag('/links');      $parser->get_tag('/links');
     if ($mode eq 'html') {      if ($mode eq 'html') {
  return $links="\nBEGIN LINKS\n$text\nEND LINKS\n";   return $links="\n<br />BEGIN LINKS\n$text\n<br />END LINKS\n";
     }      }
     elsif ($mode eq 'install') {      elsif ($mode eq 'install') {
  return "\n".'links:'."\n\t".$text;   return "\n".'links:'."\n\t".$text;
Line 645  sub format_file { Line 742  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;
     if ($source) {      if ($source) {
  $parser->get_tag('/file');   $parser->get_tag('/file');
  if ($mode eq 'html') {   if ($mode eq 'html') {
     return ($file="\nBEGIN FILE\n".      return ($file="\n<br />BEGIN FILE\n".
  "$source $target $categoryname $description $note " .   "$source $target $categoryname $description $note " .
  "$build $status $dependencies" .   "$build $status $dependencies" .
  "\nEND FILE");   "\nEND FILE");
  }   }
  elsif ($mode eq 'install') {   elsif ($mode eq 'install' && $categoryname ne 'conf') {
     return "\t".'@test -e '.$sourceroot.$source.      if ($build) {
  '/loncom/html/index.html && install '.   my $bi=$sourceroot.'/'.$source.';'.$build.';'.
  $categoryhash{$categoryname}.' '.      $dependencies;
  $sourceroot.$source.'/loncom/html/index.html '.   my ($source2,$command,$trigger,@deps)=split(/\;/,$bi);
  $targetroot.$target.   $tword=''; $tword=' alwaysrun' if $trigger eq 'always run'; 
  '/home/httpd/html/index.html || echo "**** LON-CAPA WARNING '.   $command=~s/\/([^\/]*)$//;
  '**** CVS source file does not exist: '.$sourceroot.$source.   $command2="cd $command; sh ./$1;\\";
         '/loncom/html/index.html"'."\n";   my $depstring;
    foreach my $dep (@deps) {
       $depstring.=<<END;
    ECODE=0; DEP=''; \\
    test -e $command/$dep || (echo '**** WARNING **** cannot evaluate status of dependency $command/$dep (for building ${sourceroot}/${source} with)'); DEP="1"; \\
    [ -n DEP ] && { perl filecompare.pl -B $command/$dep ${targetroot}/${target} || ECODE=\$\$?; } || DEP="1"; \\
    case "\$\$ECODE" in \\
    2) echo "**** WARNING **** dependency $command/$dep is newer than target file ${targetroot}/${target}; you may want to run make build";; \\
    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"; exit; \\
   END
                   $buildtest.=<<END if $depstring;
    elif !(test -e "${sourceroot}/${source}"); then \\
   $depstring
   END
                   $buildtest.=<<END;
    fi
   END
       }
               my $bflag='-b';
               $bflag='-g' if $dependencies or $buildlink;
       return <<END;
   $buildtest \@if !(test -e "${sourceroot}/${source}"); then \\
    echo "**** WARNING **** CVS source file does not exist: ${sourceroot}/${source}"; \\
    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; creating ${targetroot}/${target}.lpmlnewfile instead" && 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};; \\
    esac; \\
    fi
   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') {
       push @configall,$targetroot.'/'.$target;
       return $targetroot.'/'.$target.': alwaysrun'."\n".
    "\t".'@echo -n ""; ECODE=0 && { perl filecompare.pl -G '.$sourceroot.'/'.$source.' '.$targetroot.'/'.$target.' || ECODE=$$?; } && { [ $$ECODE != "2" ] || (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,$targetroot.'/'.$target.';'.$sourceroot.'/'.
    $source.';'.$build.';'.
    $dependencies;
   #    return '# need to build '.$source.";
  }   }
  else {   else {
     return '';      return '';
Line 678  sub format_link { Line 843  sub format_link {
     if ($linkto) {      if ($linkto) {
  $parser->get_tag('/link');   $parser->get_tag('/link');
  if ($mode eq 'html') {   if ($mode eq 'html') {
     return $link="\nBEGIN LINK\n".      return $link="\n<br />BEGIN LINK\n".
  "$linkto $target $categoryname $description $note " .   "$linkto $target $categoryname $description $note " .
  "$build $status $dependencies" .   "$build $status $dependencies" .
     "\nEND LINK";      "\nEND LINK";
  }   }
  elsif ($mode eq 'install') {   elsif ($mode eq 'install') {
     push @links,"\t".'ln -s /'.$linkto.' /'.$targetroot.$target.' '.      my @targets=map {s/^\s*//;s/\s$//;$_} split(/\;/,$target);
  $categoryname."\n";      foreach my $tgt (@targets) {
    push @links,"\t".'ln -fs /'.$linkto.' /'.$targetroot.$tgt.
       "\n";
       }
     return '';      return '';
  }   }
  else {   else {
Line 705  sub format_fileglob { Line 873  sub format_fileglob {
     if ($sourcedir) {      if ($sourcedir) {
  $parser->get_tag('/fileglob');   $parser->get_tag('/fileglob');
  if ($mode eq 'html') {   if ($mode eq 'html') {
     return $fileglob="\nBEGIN FILEGLOB\n".      return $fileglob="\n<br />BEGIN FILEGLOB\n".
  "$glob sourcedir $targetdir $categoryname $description $note ".   "$glob sourcedir $targetdir $categoryname $description $note ".
  "$build $status $dependencies $filenames" .   "$build $status $dependencies $filenames" .
     "\nEND FILEGLOB";      "\nEND FILEGLOB";
  }   }
    elsif ($mode eq 'install') {
       return "\t".'install '.
    $categoryhash{$categoryname}.' '.
    $sourceroot.'/'.$sourcedir.'[^C][^V][^S]'.$glob.' '.
    $targetroot.'/'.$targetdir.'.'."\n";
    }
  else {   else {
     return '';      return '';
  }   }
Line 768  sub format_build { Line 942  sub format_build {
     my $text=&trim($parser->get_text('/build'));      my $text=&trim($parser->get_text('/build'));
     if ($text) {      if ($text) {
  $parser->get_tag('/build');   $parser->get_tag('/build');
  $build=$text;   $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 '';      return '';
 }  }
Line 790  sub format_dependencies { Line 975  sub format_dependencies {
     my $text=&trim($parser->get_text('/dependencies'));      my $text=&trim($parser->get_text('/dependencies'));
     if ($text) {      if ($text) {
  $parser->get_tag('/dependencies');   $parser->get_tag('/dependencies');
  $dependencies=$text;   $dependencies=join(';',
         (map {s/^\s*//;s/\s$//;$_} split(/\;/,$text)));
     }      }
     return '';      return '';
 }  }
Line 808  sub format_glob { Line 994  sub format_glob {
 # ---------------------------------------------------- Format filenames section  # ---------------------------------------------------- Format filenames section
 sub format_filenames {  sub format_filenames {
     my @tokeninfo=@_;      my @tokeninfo=@_;
     $glob='';  
     my $text=&trim($parser->get_text('/filenames'));      my $text=&trim($parser->get_text('/filenames'));
     if ($text) {      if ($text) {
  $parser->get_tag('/filenames');   $parser->get_tag('/filenames');
Line 819  sub format_filenames { Line 1004  sub format_filenames {
 # ------------------------------------------------------- Format linkto section  # ------------------------------------------------------- Format linkto section
 sub format_linkto {  sub format_linkto {
     my @tokeninfo=@_;      my @tokeninfo=@_;
     $glob='';  
     my $text=&trim($parser->get_text('/linkto'));      my $text=&trim($parser->get_text('/linkto'));
     if ($text) {      if ($text) {
  $parser->get_tag('/linkto');   $parser->get_tag('/linkto');
Line 827  sub format_linkto { Line 1011  sub format_linkto {
     }      }
     return '';      return '';
 }  }
   # ------------------------------------- Render less-than and greater-than signs
   sub htmlsafe {
       my $text=@_[0];
       $text =~ s/</&lt;/g;
       $text =~ s/>/&gt;/g;
       return $text;
   }
 # --------------------------------------- remove starting and ending whitespace  # --------------------------------------- remove starting and ending whitespace
 sub trim {  sub trim {
     my ($s)=@_; $s=~s/^\s*//; $s=~s/\s*$//; return $s;      my ($s)=@_; $s=~s/^\s*//; $s=~s/\s*$//; return $s;
 }   } 
   
   # ----------------------------------- POD (plain old documentation, CPAN style)

Removed from v.1.4  
changed lines
  Added in v.1.15


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>