summaryrefslogtreecommitdiff
path: root/scripts/makecfg.pl
Unidiff
Diffstat (limited to 'scripts/makecfg.pl') (more/less context) (ignore whitespace changes)
-rwxr-xr-xscripts/makecfg.pl37
1 files changed, 7 insertions, 30 deletions
diff --git a/scripts/makecfg.pl b/scripts/makecfg.pl
index 5dd66a4..d7dc41e 100755
--- a/scripts/makecfg.pl
+++ b/scripts/makecfg.pl
@@ -1,102 +1,79 @@
1#!/usr/bin/perl -w 1#!/usr/bin/perl -w
2eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' 2eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
3if 0; #$running_under_some_shell 3if 0; #$running_under_some_shell
4 4
5use strict; 5use strict;
6use File::Find; 6use File::Find;
7 7
8my $packages=""; 8my $packages="";
9open(FILE, "<./packages"); 9open(FILE, "<./packages");
10while(<FILE>){$packages.=$_;} 10while(<FILE>){$packages.=$_;}
11close(FILE); 11close(FILE);
12 12
13my ($dirname,$dir,$file,@files,$filename,$tagname,$name,$caps,$pre,$post,$sources,@dupecheck); 13my ($dirname,$dir,$file,@files,$filename,$tagname,$name,$caps,$pre,$post,$sources,@dupecheck,$basedir);
14$file = shift || die; 14$file = shift || die;
15$basedir = shift;
15push(@files, $file); 16push(@files, $file);
16 17
17foreach(@files){ 18foreach(@files){
18my $cfg=$_; 19my $cfg=$_;
19($dirname=$cfg)=~s,(.*)/(.*),$1,; 20($dirname=$cfg)=~s,(.*)/(.*),$1,;
20($filename=$cfg)=~s,(.*/)(.*),$2,; 21($filename=$cfg)=~s,(.*/)(.*),$2,;
21($tagname=$dirname)=~s,.*/,,; 22($tagname=$dirname)=~s,.*/,,;
22($caps=$tagname)=~tr/[a-z]/[A-Z]/; 23($caps=$tagname)=~tr/[a-z]/[A-Z]/;
23#print "cfg is $cfg\n"; 24#print "cfg is $cfg\n";
24#print "dir is $dirname\n"; 25#print "dir is $dirname\n";
25#print "filename is $filename\n"; 26#print "filename is $filename\n";
26sub wanted; 27sub wanted;
27 28
28if(-e "$dirname/config.in.in"){ 29if(-e "$dirname/config.in.in"){
29 my $contents; 30 my $contents;
30 open(FILE, "<$dirname/config.in.in"); 31 open(FILE, "<$dirname/config.in.in");
31 while(<FILE>){ $contents.=$_; } 32 while(<FILE>){ $contents.=$_; }
32 close(FILE); 33 close(FILE);
33 if($contents=~/\@sources\@/){ 34 if($contents=~/\@sources\@/){
34 ($post = $contents) =~ s/^.*\@sources\@//s; 35 ($post = $contents) =~ s/^.*\@sources\@//s;
35 ($pre = $contents) =~ s/\@sources\@.*$//s; 36 ($pre = $contents) =~ s/\@sources\@.*$//s;
36 } else { 37 } else {
37 $pre = $contents; 38 $pre = $contents;
38 } 39 }
39} else { 40} else {
40 $pre = "menu \"$tagname\"\n"; 41 $pre = "menu \"$tagname\"\n";
41 $post = "endmenu\n"; 42 $post = "endmenu\n";
42} 43}
43 44
44open(CFG, ">$cfg") || die "Unable to open $cfg for writing\n"; 45open(CFG, ">$cfg") || die "Unable to open $cfg for writing\n";
45select(CFG); 46select(CFG);
46print $pre; 47print $pre;
47@dupecheck=(); 48@dupecheck=();
48File::Find::find({wanted => \&wanted}, $dirname); 49File::Find::find({wanted => \&wanted}, $dirname);
49print $post; 50print $post;
50select(STDOUT); 51select(STDOUT);
51close(CFG); 52close(CFG);
52} 53}
53exit; 54exit;
54 55
55open(FILE,">$dir/config.in");
56select(FILE);
57print "menu \"$name\"\n";
58print "\n";
59my @subdirs=();
60my @dirs;
61foreach(grep(/^$dir/, @dirs)){
62 chomp;
63 /^$dir\/$name.pro$/ && next;
64 my $localdir=$_;
65 if($dir=~m,^$localdir$,){
66 next;
67 }
68#($locadir=$_)~s,/[^/]+$,,g;
69 if($localdir=~/^\.$/){next;}
70 if(grep(/^$localdir$/, @subdirs)){next;}
71 my $nslashes = $localdir =~ tr!/!!;
72 my $dirnslashes = $dir =~ tr!/!!;
73 $dirnslashes++;
74 if($dirnslashes != $nslashes ){next;}
75 print STDERR "$localdir/config.in\n";
76 print " source $localdir/config.in\n";
77 push(@subdirs, $localdir);
78 print "endmenu\n";
79 select(STDOUT);
80 close(FILE);
81}
82
83use vars qw/*name *dir *prune/; 56use vars qw/*name *dir *prune/;
84*name = *File::Find::name; 57*name = *File::Find::name;
85*dir = *File::Find::dir; 58*dir = *File::Find::dir;
86*prune = *File::Find::prune; 59*prune = *File::Find::prune;
87 60
88sub wanted { 61sub wanted {
89 if( /config.in$/s ) { 62 if( /config.in$/s ) {
90 if(grep(/^$File::Find::dir\/config.in$/, @dupecheck)){ 63 if(grep(/^$File::Find::dir\/config.in$/, @dupecheck)){
91 return; 64 return;
92 } 65 }
93 my $nslashes = $File::Find::dir =~ tr!/!!; 66 my $nslashes = $File::Find::dir =~ tr!/!!;
94 my $dirnslashes = $dirname =~ tr!/!!; 67 my $dirnslashes = $dirname =~ tr!/!!;
95 $dirnslashes++; 68 $dirnslashes++;
96 # print STDERR "dirnslashes is $dirnslashes\n"; 69 # print STDERR "dirnslashes is $dirnslashes\n";
97 # print STDERR "nslashes is $nslashes\n"; 70 # print STDERR "nslashes is $nslashes\n";
98 if($dirnslashes != $nslashes){return;} 71 if($dirnslashes != $nslashes){return;}
99 print " source " . $File::Find::dir . "/config.in\n"; 72 my $reldir;
73 if (defined($basedir)) {
74 ($reldir=$File::Find::dir)=~s,^$basedir/,,;
75 }
76 print " source " . $reldir . "/config.in\n";
100 push(@dupecheck, $File::Find::dir . "/config.in"); 77 push(@dupecheck, $File::Find::dir . "/config.in");
101 } 78 }
102} 79}