#!/soft/apps/bin/perl -w # make-auto-db - builds a .software database from the packages installed # # $Id: make-auto-db,v 1.2 1997/09/23 21:27:34 bester Exp $ # # $Log: make-auto-db,v $ # Revision 1.2 1997/09/23 21:27:34 bester # perl4 clean with -w # # Revision 1.1 1997/09/23 20:48:18 bester # Initial revision # # if(! -r '/software/common/adm/packages/software-5.0/etc/software.config') { print "Can't read software config file!\n"; exit 1; } require "/software/common/adm/packages/software-5.0/etc/software.config"; link("$auto_db", "$auto_db.old"); umask(0222); open(DB,">$auto_db.new"); print DB "# DO NOT MODIFY THIS FILE\n"; print DB "# It was automatically generated by \n# $0.\n"; %bin=(); %man=(); # find all of the packages @all_pkgs = ; while($_=shift @all_pkgs) { ($_,$_,$_,$col,$_,$pkg) = split(/\//,$_); unshift(@col, $col); unshift(@pkg, $pkg); } foreach $arch ('common', keys %supported) { for($i = 0; $i < @pkg; $i++) { if(-d "/software/$arch/$col[$i]/packages/$pkg[$i]/bin") { $bin{"$arch:$col[$i]:$pkg[$i]"}= "/software/$arch/$col[$i]/packages/$pkg[$i]/bin"; } if(-d "/software/$arch/$col[$i]/packages/$pkg[$i]/man") { $man{"$arch:$col[$i]:$pkg[$i]"}= "/software/$arch/$col[$i]/packages/$pkg[$i]/man"; } $env{"$arch:$col[$i]:$pkg[$i]"}=""; if(-f "/software/$arch/$col[$i]/packages/$pkg[$i]/admin/env") { open (ENV, "/software/$arch/$col[$i]/packages/$pkg[$i]/admin/env"); @vars=(); while() { chop; push(@vars, split(/=/, $_)); } $env{"$arch:$col[$i]:$pkg[$i]"}=join(" ",@vars); close ENV; } if(-f "/software/$arch/$col[$i]/packages/$pkg[$i]/admin/link") { $pkg=$pkg[$i]; $pkg=~s,(.*)-[x0-9]+\..*,$1,; # ignore unversioned packages for this unless($pkg eq $pkg[$i]) { $packages{"$col[$i]:$pkg"}=1; $bin{"$arch:$col[$i]:$pkg"} = $bin{"$arch:$col[$i]:$pkg[$i]"}; $man{"$arch:$col[$i]:$pkg"} = $man{"$arch:$col[$i]:$pkg[$i]"}; $env{"$arch:$col[$i]:$pkg"} = $env{"$arch:$col[$i]:$pkg[$i]"}; } } } } for($i = 0; $i < $#pkg; $i++) { foreach $arch (keys %supported) { if($bin{"$arch:$col[$i]:$pkg[$i]"}) { open(PKGINFO, "/software/$arch/$col[$i]/packages/$pkg[$i]/admin/pkginfo") || next; ($oneliner,$_)=grep(/^ONELINER .*/,); close PKGINFO; chop $oneliner; $oneliner=~s,ONELINER *,,; $oneliner=~s,,,; unless($oneliner eq "") { $oneliner{"$col[$i]:$pkg[$i]"}=$oneliner; last; } } } } # Add packages to the database for($i = 0; $i < $#pkg; $i++) { if(&empty_pkg($i)) { next; } else { &add_package($col[$i],$pkg[$i]); } } foreach (keys %packages) { &add_package(split(/:/,$_,2)); } sub add_package { local ($col,$pkg) = ($_[0],$_[1]); local ($hashkey) = "$col:$pkg"; print DB "($pkg) "; if($oneliner{"$hashkey"}) { print DB '"' . $oneliner{"$hashkey"} . '" '; } print DB "{\n"; $combin=$bin{"common:$hashkey"}; $comman=$man{"common:$hashkey"}; $comenv=$env{"common:$hashkey"}; if($combin || $comman || $comenv) { print DB "[]\n"; if($combin) { print DB "\t$combin\n"; } else { print DB "\t-\n"; } if($comman) { print DB "\t$comman\n"; } else { print DB "\t-\n" }; if($comenv) { print DB "\t$comenv\n"; } } foreach $arch (keys %supported) { if($arch eq 'common') { next; } $bin = $bin{"$arch:$col:$pkg"}; $man = $man{"$arch:$col:$pkg"}; $env = $env{"$arch:$col:$pkg"}; if($bin || $man || $env) { print DB "[$arch]\n"; if($combin) { if($bin) { print DB "\t$bin\n"; } else { print DB "\t\$\$\n"; } } else { if($bin) { print DB "\t$bin\n"; } else { print DB "\t-\n" } } if($comman) { if($man) { print DB "\t$man:\$\$\n"; } else { print DB "\t\$\$\n"; } } else { if($man) { print DB "\t$man\n"; } else { print DB "\t-\n"; } } unless($env eq "") { print DB "\t$env\n"; } } } print DB "}\n\n"; } close DB; unlink("$auto_db"); link("$auto_db.new", "$auto_db"); unlink("$auto_db.new"); unlink("$auto_db.old"); sub empty_pkg { local($x) =$_[0]; local($rest)="$col[$x]:$pkg[$x]"; local($ret) =1; if( $bin{"common:$rest"} || $man{"common:$rest"} || $env{"common:$rest"}) { $ret=0; } foreach (keys %supported) { if( $bin{"$_:$rest"} || $man{"$_:$rest"} || $env{"$_:$rest"}) { $ret=0; } } return $ret; }