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 $module_file = shift;
22 $module_file =~ s/^\.\///;
24 if($$options->progress) {
25 $$output->progress("$module_file");
31 open(IN, "< $module_file");
34 s/^\s*?(.*?)\s*$/$1/; # remove whitespace at begining and end of line
35 s/^(.*?)\s*#.*$/$1/; # remove comments
36 /^$/ && next; # skip empty lines
44 $$spec_files{$allowed_dir}{$spec_file}++;
46 if(!-d "$wine_dir/$allowed_dir") {
47 $$output->write("$module_file: $spec_file: directory ($allowed_dir) doesn't exist or is no directory\n");
55 sub spec_file_module {
58 my $modules = \%{$self->{MODULES}};
60 my $spec_file = shift;
61 $spec_file =~ s/^\.\///;
65 $$modules{$spec_file}{$module}++;
68 sub is_allowed_module_in_file {
71 my $spec_files = \%{$self->{SPEC_FILES}};
72 my $modules = \%{$self->{MODULES}};
79 $dir =~ s/\/[^\/]*$//;
81 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
82 if($$modules{$spec_file}{$module}) {
90 sub allowed_modules_in_file {
93 my $spec_files = \%{$self->{SPEC_FILES}};
94 my $modules = \%{$self->{MODULES}};
100 $dir =~ s/\/[^\/]*$//;
102 my %allowed_modules = ();
103 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
104 foreach my $module (sort(keys(%{$$modules{$spec_file}}))) {
105 $allowed_modules{$module}++;
109 return join(" & ", sort(keys(%allowed_modules)));
112 sub allowed_spec_files {
115 my $options = \${$self->{OPTIONS}};
116 my $output = \${$self->{OUTPUT}};
117 my $spec_files = \%{$self->{SPEC_FILES}};
119 my $wine_dir = shift;
120 my $current_dir = shift;
127 if($current_dir ne ".") {
133 } split(/\n/, `find . -type d ! -name CVS`);
135 my %allowed_spec_files = ();
136 foreach my $dir (sort(@dirs)) {
137 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
138 $allowed_spec_files{$spec_file}++;
142 return sort(keys(%allowed_spec_files));