summaryrefslogtreecommitdiff
path: root/scripts/makecfg.pl
authorkergoth <kergoth>2002-11-05 02:33:22 (UTC)
committer kergoth <kergoth>2002-11-05 02:33:22 (UTC)
commited163d67a674b1c4ac6b7e917a509029da446dfb (patch) (side-by-side diff)
treed444f6395e82b1dd66f0ce8a413348a6f183bad3 /scripts/makecfg.pl
parent9ac6d0a443c417158e3f2acf2de0629c51b6511c (diff)
downloadopie-ed163d67a674b1c4ac6b7e917a509029da446dfb.zip
opie-ed163d67a674b1c4ac6b7e917a509029da446dfb.tar.gz
opie-ed163d67a674b1c4ac6b7e917a509029da446dfb.tar.bz2
config.in generation to reduce maintainance headaches
Diffstat (limited to 'scripts/makecfg.pl') (more/less context) (ignore whitespace changes)
-rwxr-xr-xscripts/makecfg.pl98
1 files changed, 98 insertions, 0 deletions
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(<FILE>){$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(<FILE>){ $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");
+ }
+}