7 my $class = ref($proto) || $proto;
11 my $options = \${$self->{OPTIONS}};
12 my $output = \${$self->{OUTPUT}};
13 my $spec_files = \%{$self->{SPEC_FILES}};
14 my $modules = \%{$self->{MODULES}};
19 my $current_dir = shift;
20 my $file_type = shift;
21 my $module_file = shift;
23 $module_file =~ s/^\.\///;
25 my @all_spec_files = map {
27 if(&$file_type($_) eq "library") {
32 } split(/\n/, `find $wine_dir -name \\*.spec`);
35 foreach my $file (@all_spec_files) {
36 $all_spec_files{$file}++ ;
39 if($$options->progress) {
40 $$output->progress("$module_file");
46 open(IN, "< $module_file");
49 s/^\s*?(.*?)\s*$/$1/; # remove whitespace at begining and end of line
50 s/^(.*?)\s*#.*$/$1/; # remove comments
51 /^$/ && next; # skip empty lines
55 if($wine_dir eq ".") {
56 $all_spec_files{$spec_file}--;
58 $all_spec_files{"$wine_dir/$spec_file"}--;
60 $$spec_files{""}{$spec_file}++; # FIXME: Kludge
65 $$spec_files{$allowed_dir}{$spec_file}++;
67 if(!-d "$wine_dir/$allowed_dir") {
68 $$output->write("$module_file: $spec_file: directory ($allowed_dir) doesn't exist or is no directory\n");
73 foreach my $spec_file (sort(keys(%all_spec_files))) {
74 if($all_spec_files{$spec_file} > 0) {
75 $$output->write("$module_file: $spec_file: exists but is not specified\n");
82 sub spec_file_module {
85 my $modules = \%{$self->{MODULES}};
87 my $spec_file = shift;
88 $spec_file =~ s/^\.\///;
92 $$modules{$spec_file}{$module}++;
95 sub is_allowed_module_in_file {
98 my $spec_files = \%{$self->{SPEC_FILES}};
99 my $modules = \%{$self->{MODULES}};
106 $dir =~ s/\/[^\/]*$//;
108 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
109 if($$modules{$spec_file}{$module}) {
117 sub allowed_modules_in_file {
120 my $spec_files = \%{$self->{SPEC_FILES}};
121 my $modules = \%{$self->{MODULES}};
127 $dir =~ s/\/[^\/]*$//;
129 my %allowed_modules = ();
130 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
131 foreach my $module (sort(keys(%{$$modules{$spec_file}}))) {
132 $allowed_modules{$module}++;
136 return join(" & ", sort(keys(%allowed_modules)));
139 sub allowed_spec_files {
142 my $options = \${$self->{OPTIONS}};
143 my $output = \${$self->{OUTPUT}};
144 my $spec_files = \%{$self->{SPEC_FILES}};
146 my $wine_dir = shift;
147 my $current_dir = shift;
154 if($current_dir ne ".") {
160 } split(/\n/, `find . -type d ! -name CVS`);
162 my %allowed_spec_files = ();
163 foreach my $dir (sort(@dirs)) {
164 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
165 $allowed_spec_files{$spec_file}++;
169 return sort(keys(%allowed_spec_files));