From ed163d67a674b1c4ac6b7e917a509029da446dfb Mon Sep 17 00:00:00 2001 From: kergoth Date: Tue, 05 Nov 2002 02:33:22 +0000 Subject: config.in generation to reduce maintainance headaches --- (limited to 'scripts/makecfg.pl') diff --git a/scripts/makecfg.pl b/scripts/makecfg.pl new file mode 100755 index 0000000..20c23f5 --- a/dev/null +++ b/scripts/makecfg.pl @@ -0,0 +1,98 @@ +#!/usr/bin/perl -w +eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' +if 0; #$running_under_some_shell + +use strict; +use File::Find; + +my $packages=""; +open(FILE, "<./packages"); +while(){$packages.=$_;} +close(FILE); + +my ($dirname,$dir,$cfg,$filename,$tagname,$name,$caps,$pre,$post,$sources,@dupecheck); +$cfg = shift || die; +($dirname=$cfg)=~s,(.*)/(.*),$1,; +($filename=$cfg)=~s,(.*/)(.*),$2,; +($tagname=$dirname)=~s,.*/,,; +($caps=$tagname)=~tr/[a-z]/[A-Z]/; +#print "cfg is $cfg\n"; +#print "dir is $dirname\n"; +#print "filename is $filename\n"; +sub wanted; + +if(-e "$dirname/config.in.in"){ + my $contents; + open(FILE, "<$dirname/config.in.in"); + while(){ $contents.=$_; } + close(FILE); + if($contents=~/\@sources\@/){ + ($post = $contents) =~ s/^.*\@sources\@//s; + ($pre = $contents) =~ s/\@sources\@.*$//s; + } else { + $pre = $contents; + } +} else { + $pre = "menu \"$tagname\"\n"; + $post = "endmenu\n"; +} + +open(CFG, ">$cfg") || die "Unable to open $cfg for writing\n"; +select(CFG); +print $pre; +@dupecheck=(); +File::Find::find({wanted => \&wanted}, $dirname); +print $post; +select(STDOUT); +close(CFG); + +exit; + +open(FILE,">$dir/config.in"); +select(FILE); +print "menu \"$name\"\n"; +print "\n"; +my @subdirs=(); +my @dirs; +foreach(grep(/^$dir/, @dirs)){ + chomp; + /^$dir\/$name.pro$/ && next; + my $localdir=$_; + if($dir=~m,^$localdir$,){ + next; + } +#($locadir=$_)~s,/[^/]+$,,g; + if($localdir=~/^\.$/){next;} + if(grep(/^$localdir$/, @subdirs)){next;} + my $nslashes = $localdir =~ tr!/!!; + my $dirnslashes = $dir =~ tr!/!!; + $dirnslashes++; + if($dirnslashes != $nslashes ){next;} + print STDERR "$localdir/config.in\n"; + print " source $localdir/config.in\n"; + push(@subdirs, $localdir); + print "endmenu\n"; + select(STDOUT); + close(FILE); +} + +use vars qw/*name *dir *prune/; +*name = *File::Find::name; +*dir = *File::Find::dir; +*prune = *File::Find::prune; + +sub wanted { + if( /config.in/s ) { + if(grep(/^$File::Find::dir\/config.in$/, @dupecheck)){ + return; + } + my $nslashes = $File::Find::dir =~ tr!/!!; + my $dirnslashes = $dirname =~ tr!/!!; + $dirnslashes++; +# print STDERR "dirnslashes is $dirnslashes\n"; +# print STDERR "nslashes is $nslashes\n"; + if($dirnslashes != $nslashes){return;} + print " source " . $File::Find::dir . "/config.in\n"; + push(@dupecheck, $File::Find::dir . "/config.in"); + } +} -- cgit v0.9.0.2