--- loncom/build/Attic/parse.pl 2000/12/10 03:06:11 1.8
+++ loncom/build/Attic/parse.pl 2001/01/23 16:12:56 1.26
@@ -65,6 +65,7 @@ while ($info1=~/\/isg)
}
elsif (uc($hash{'TYPE'}) eq "LOCATION") {
$info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'CATEGORY'}= $hash{'CATEGORY'};
+ $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'LINKTO'}= $hash{'LINKTO'};
$info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{'SOURCE'}= $hash{'SOURCE'};
# get surrounding metagroup information
my $ckeystring=$keystring; $ckeystring=~s/(SOURCE\=\"[^"]*)\*/$1\\\*/g;
@@ -75,7 +76,7 @@ while ($info1=~/\/isg)
foreach my $m (@meta) {
if ($data=~/\<($m)\>(.*?)\<\/$m\>/sgi) {
my ($key,$value)=($1,$2);
- $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{$key}=
+ $info{$hash{'TYPE'}}{$hash{'DIST'}}{$hash{'TARGET'}}{uc($key)}=
$value;
}
}
@@ -85,8 +86,9 @@ while ($info1=~/\/isg)
}
}
-if ($mode eq "ALL" || $mode eq "HTML") {
- my $a;
+my $a;
+my @directories;
+if ($mode eq "HTML") {
$a=&begin_description_page;
print $a;
$a=&make_rpm_description_block;
@@ -101,10 +103,860 @@ if ($mode eq "ALL" || $mode eq "HTML") {
$a=&end_description_page;
print $a;
}
+elsif ($mode eq "SPEC") {
+ my $out=$info{'RPM'}{'Name'} . '-' . $info{'RPM'}{'Version'} . '.spec';
+ open OUT,">$out";
+ $a=&make_rpm_spec_block;
+ print OUT $a;
+ $a=&make_rpm_build_block;
+ print OUT $a;
+ @directories=&determine_directory_structure;
+ $a=&make_directory_structure_spec_block(\@directories);
+ print OUT $a;
+ $a=&make_directory_and_file_structure_spec_block(\@directories);
+ print OUT $a;
+ $a=&end_spec_page;
+ print OUT $a;
+ close OUT;
+}
+elsif ($mode eq "LCMakefile") {
+ @directories=&determine_directory_structure;
+ $a=&make_directory_LCMakefile_segment(\@directories);
+ print $a;
+ $a=&make_files_LCMakefile_segment(\@directories);
+ print $a;
+ $a=&make_links_LCMakefile_segment(\@directories);
+ print $a;
+}
+elsif ($mode eq "BinaryRoot") {
+ mkdir "BinaryRoot",0755;
+ open OUT,">Makefile.BinaryRoot";
+ @directories=&determine_directory_structure;
+ $a=&make_directory_binaryroot_segment(\@directories);
+ print OUT $a;
+ $a=&make_files_binaryroot_segment(\@directories);
+ print OUT $a;
+ $a=&make_links_binaryroot_segment(\@directories);
+ print OUT $a;
+ close OUT;
+ print `make -f Makefile.BinaryRoot TARGET='BinaryRoot' SOURCE='../..' directories`;
+ print `make -f Makefile.BinaryRoot TARGET='BinaryRoot' SOURCE='../..' files`;
+ print `make -f Makefile.BinaryRoot TARGET='BinaryRoot' SOURCE='../..' links`;
+ open OUT,">base_file_list.txt";
+ $a=&make_file_list(\@directories);
+ print OUT $a;
+ close OUT;
+ open OUT,">setup_file_list.txt";
+ print OUT "BinaryRoot/etc/passwd\n";
+ close OUT;
+ open OUT,">BinaryRoot/etc/passwd";
+ print OUT<>setup_file_list.txt";
+ print OUT "BinaryRoot/etc/hosts.deny\n";
+ close OUT;
+ open OUT,">BinaryRoot/etc/hosts.deny";
+ print OUT<>setup_file_list.txt";
+ print OUT "BinaryRoot/etc/pam.d/passwd\n";
+ close OUT;
+ open OUT,">BinaryRoot/etc/pam.d/passwd";
+ print OUT<>setup_file_list.txt";
+ print OUT "BinaryRoot/etc/pam.d/login\n";
+ close OUT;
+ open OUT,">BinaryRoot/etc/pam.d/login";
+ print OUT<
LON-CAPA Software Description Page ($distribution, $date)
@@ -129,7 +981,35 @@ http://install.lon-capa.org/compile/inde
information.
END
+}
+ else {
+ $description=<
+
+LON-CAPA Software File System Status Page ($distribution, $date)
+
+
+LON-CAPA Software File System Status Page ($distribution, $date)
+
Michigan State University
+
Learning Online with CAPA
+
Contact korte\@lon-capa.org
+
+- About this file
+
- Software Package Description
+
- Directory Structure
+
- File Type Ownership and Permissions
+
- File and Directory Structure
+
+About this file
+
+This file is generated dynamically by parse.pl as
+part of a status checking process. See http://install.lon-capa.org/
+for more information.
+
+END
+ }
return $description;
+
}
# ------------------------------------------------- End description page
@@ -145,7 +1025,10 @@ END
# ------------------------------------------------- Make RPM description block
sub make_rpm_description_block {
- my $description=<Rolled in a RedHat 6.2 RPM, $date
@@ -160,13 +1043,64 @@ Group : $info{'RPM'}{'Group'}
License : $info{'RPM'}{'Copyright'}
Summary : $info{'RPM'}{'Summary'}
Description :
-
$info{'RPM'}{'description'}
END
+}
+ else {
+ my $exist=`rpm -q LON-CAPA-base 2>/dev/null`;
+ unless ($exist) {
+ $description=<No LON-CAPA RPM on the system, (installed ??????)
+
+
+
+Error! A LON-CAPA-base RPM
+was never installed on this system!
+ |
+
+
+
+END
+ }
+ else {
+ chop $exist;
+ my $rpmname=`rpm -q --queryformat '%{NAME}' LON-CAPA-base`;
+ my $rpmversion=`rpm -q --queryformat '%{VERSION}' LON-CAPA-base`;
+ my $rpmrelease=`rpm -q --queryformat '%{RELEASE}' LON-CAPA-base`;
+ my $idate=`rpm -q --queryformat '%{INSTALLTIME:date}' LON-CAPA-base`;
+ my $rpmvendor=`rpm -q --queryformat '%{VENDOR}' LON-CAPA-base`;
+ my $rpmbuildhost=`rpm -q --queryformat '%{BUILDHOST}' LON-CAPA-base`;
+ my $rpmgroup=`rpm -q --queryformat '%{GROUP}' LON-CAPA-base`;
+ my $rpmlicense=`rpm -q --queryformat '%{LICENSE}' LON-CAPA-base`;
+ my $rpmsummary=`rpm -q --queryformat '%{SUMMARY}' LON-CAPA-base`;
+ my $rpmdescription=`rpm -q --queryformat '%{DESCRIPTION}' LON-CAPA-base`;
+ $description=<Current RedHat RPM on the system, (installed $idate)
+
+
+
+
+Name : $rpmname
+Version : $rpmversion
+Vendor : $rpmvendor
+Release : $rpmrelease
+Build Host : $rpmbuildhost
+Group : $rpmgroup
+License : $rpmlicense
+Summary : $rpmsummary
+Description :
+$rpmdescription
+
+ |
+
+
+END
+}
+ }
return $description;
}
@@ -179,10 +1113,18 @@ sub determine_directory_structure {
# ---------------------------------- Make directory structure description block
sub make_directory_structure_description_block {
- my ($dirs)=@_;
+ my ($dirs,$mode)=@_;
+ my $dirstatus; my $statusheader;
my $description=<Directory Structure Description, $date
+The directory structure description below shows only those
+directories which either contain LON-CAPA specific files
+or normally do not exist on a RedHat Linux system (and
+must be generated to allow proper placement of files
+during LON-CAPA run-time operation).
+
+
END
my $maxcount=0;
@@ -198,8 +1140,12 @@ END
$maxcount=$count if $count>$maxcount;
delete $diraccount{$d};
}
+ if ($mode eq 'status') {
+ $statusheader="Current Status | ";
+ }
$description.=<
+$statusheader
Category |
Permissions |
Development Permissions |
@@ -220,8 +1166,34 @@ END
my $chmod=$info{'OWNERSHIP'}{$category}{'CHMOD'};
my $devchown=$info{'DEVOWNERSHIP'}{$category}{'CHOWN'};
my $devchmod=$info{'DEVOWNERSHIP'}{$category}{'CHMOD'};
+ if ($mode eq 'status') {
+ my $ds=`find /$d -type d -prune -printf "\%m\t\%u\t\%g" 2>/dev/null`;
+ unless ($ds) {
+ $dirstatus='MISSING | ';
+ }
+ else {
+ my @dss=split(/\t/,$ds);
+ my $dssz=$dss[0];
+ $dssz="0" . $dss[0] if length($dss[0])<4;
+ $dss[0]=$dssz;
+ $ds="$dss[0] $dss[1]:$dss[2]";
+ if ($ds eq "$chmod $chown" && $ds eq "$devchmod $devchown") {
+ $dirstatus='runtime+development | ';
+ }
+ elsif ($ds eq "$chmod $chown") {
+ $dirstatus='runtime | ';
+ }
+ elsif ($ds eq "$devchmod $devchown") {
+ $dirstatus='development | ';
+ }
+ else {
+ $dirstatus="ERROR $ds | ";
+ }
+ }
+ }
$description.=<
+$dirstatus
$category |
$chmod $chown |
$devchmod $devchown |
@@ -240,6 +1212,7 @@ END
# ------------------- Make file type ownership and permissions description block
sub make_file_type_ownership_and_permissions_description_block {
+ my ($mode)=@_;
my $description=<File Type Ownership and Permissions Descriptions, $date
@@ -279,7 +1252,8 @@ END
# ------------------------- Make directory and file structure description block
sub make_directory_and_file_structure_description_block {
- my ($dirs)=@_;
+ my ($dirs,$mode)=@_;
+ my $statusheader; my $filestatus;
my $description=<Directory and File Structure Description, $date
@@ -292,7 +1266,7 @@ the specified location, then the text is
red.
-
+
END
my $counter=0;
my @colorindex=("#80FF80","#80FFFF","#FFFF80");
@@ -333,8 +1307,14 @@ END
END
}
if (@files) {
+ if ($mode eq 'status') {
+ $statusheader=<Current Status
+END
+ }
$description.=<
+$statusheader
Type |
File Name |
Function |
@@ -346,22 +1326,105 @@ END
my $category=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'CATEGORY'};
my $fdescription=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'DESCRIPTION'};
my $source=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'SOURCE'};
+ my $note=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'NOTE'};
+ $note.="
" if $note;
+ my $listing=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'FILES'};
+ my @E=split(/\s+/,$listing);
+ $source=~/(.*)\/[^\/]+$/;
+ my $sd=$1;
+ my $eflag=0;
+ foreach my $e (@E) {
+ unless (-e "../../$sd/$e") {
+ $e="$e";
+ $eflag=1;
+ }
+ }
+ $listing=join("\n",@E);
+ $listing="listing
$listing" if $listing;
+ $listing.="
" if $listing;
+ my $build=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'BUILD'};
+ $build="build
$build" if $build;
+ $build.="
" if $build;
+ my $dependencies=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'DEPENDENCIES'};
+ $dependencies="dependencies
$dependencies" if $dependencies;
+ $dependencies.="
" if $dependencies;
unless (-e "../../$source") {
$source=~/([^\/]+)$/;
my $s=$1;
- $source="$source";
-# my $fr=`cd ../../; find . -name $s`;
-# $source.="
$fr\n";
+ if ($source!~/\*/) {
+ $source="$source";
+ }
+ elsif ($eflag) {
+ $source="$source";
+ }
}
- my $notes=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'NOTES'};
+ if ($mode eq 'status') {
+ $filestatus='';
+ my $fs;
+ my $listing2=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'FILES'};
+ my @E=split(/\s+/,$listing2); shift @E;
+ if (@E) {
+ $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g\n" 2>/dev/null | wc -l`; chop $fs;
+ if ($fs!=(@E+0)) {
+ $ecount=(@E+0);
+ $estuff=join(",",@E);
+ $filestatus="ERROR. SOME FILES ARE MISSING | ";
+ }
+ $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g\n" 2>/dev/null | sort | uniq | wc -l`; chop $fs;
+ if ($fs!=1) {
+ $filestatus='ERROR. THERE ARE MULTIPLE OWNERSHIPS/PERMISSIONS WHEN ALL THESE FILES SHOULD HAVE THE SAME CONFIGURATION | ';
+ }
+ else {
+ $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g\n" 2>/dev/null | sort | uniq`; chop $fs;
+ }
+ }
+ else {
+ $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g" 2>/dev/null`;
+ }
+ my $fsl=`find /$filesfull[$i] -type l -prune -printf "\%m\t\%u\t\%g" 2>/dev/null`;
+ unless ($fs || $filestatus) {
+ $filestatus='MISSING | ';
+ }
+ elsif (!$filestatus) {
+
+ $chmod=$info{'OWNERSHIP'}{$category}{'CHMOD'};
+ $chown=$info{'OWNERSHIP'}{$category}{'CHOWN'};
+ $devchmod=$info{'DEVOWNERSHIP'}{$category}{'CHMOD'};
+ $devchown=$info{'DEVOWNERSHIP'}{$category}{'CHOWN'};
+
+ my @fss=split(/\t/,$fs);
+ my $fssz=$fss[0];
+ $fssz="0" . $fss[0] if length($fss[0])<4;
+ $fss[0]=$fssz;
+ $fs="$fss[0] $fss[1]:$fss[2]";
+ $s=' ';
+ if ($fsl) {
+ $fs="$fss[1]:$fss[2]";
+ $s='';
+ }
+ if ($fs eq "$chmod$s$chown" && $fs eq "$devchmod$s$devchown") {
+ $filestatus='runtime+development | ';
+ }
+ elsif ($fs eq "$chmod$s$chown") {
+ $filestatus='runtime | ';
+ }
+ elsif ($fs eq "$devchmod$s$devchown") {
+ $filestatus='development | ';
+ }
+ else {
+ $filestatus="ERROR $fs | ";
+ }
+ }
+ }
$description.=<
+$filestatus
|
$category |
$files[$i] |
$fdescription |
$source |
-$notes |
+$note$listing$build$dependencies |
END
}