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 $spec_file2module = \%{$self->{SPEC_FILE2MODULE}};
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("modules.dat");
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
56 if(!-f "$wine_dir/$spec_file") {
57 $$output->write("modules.dat: $spec_file: file ($spec_file) doesn't exist or is no file\n");
60 if($wine_dir eq ".") {
61 $all_spec_files{$spec_file}--;
63 $all_spec_files{"$wine_dir/$spec_file"}--;
65 $$spec_files{""}{$spec_file}++; # FIXME: Kludge
70 $$spec_files{$allowed_dir}{$spec_file}++;
72 if(!-d "$wine_dir/$allowed_dir") {
73 $$output->write("modules.dat: $spec_file: directory ($allowed_dir) doesn't exist or is no directory\n");
78 foreach my $spec_file (sort(keys(%all_spec_files))) {
79 if($all_spec_files{$spec_file} > 0) {
80 $$output->write("modules.dat: $spec_file: exists but is not specified\n");
87 sub spec_file_module {
90 my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}};
91 my $module2spec_file = \%{$self->{MODULE2SPEC_FILE}};
93 my $spec_file = shift;
94 $spec_file =~ s/^\.\///;
98 $$spec_file2module{$spec_file}{$module}++;
99 $$module2spec_file{$module}{$spec_file}++;
102 sub is_allowed_module_in_file {
105 my $spec_files = \%{$self->{SPEC_FILES}};
106 my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}};
113 $dir =~ s/\/[^\/]*$//;
115 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
116 if($$spec_file2module{$spec_file}{$module}) {
124 sub allowed_modules_in_file {
127 my $spec_files = \%{$self->{SPEC_FILES}};
128 my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}};
134 $dir =~ s/\/[^\/]*$//;
136 my %allowed_modules = ();
137 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
138 foreach my $module (sort(keys(%{$$spec_file2module{$spec_file}}))) {
139 $allowed_modules{$module}++;
143 return join(" & ", sort(keys(%allowed_modules)));
146 sub allowed_spec_files {
149 my $options = \${$self->{OPTIONS}};
150 my $output = \${$self->{OUTPUT}};
151 my $spec_files = \%{$self->{SPEC_FILES}};
153 my $wine_dir = shift;
154 my $current_dir = shift;
161 if($current_dir ne ".") {
167 } split(/\n/, `find . -type d ! -name CVS`);
169 my %allowed_spec_files = ();
170 foreach my $dir (sort(@dirs)) {
171 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
172 $allowed_spec_files{$spec_file}++;
176 return sort(keys(%allowed_spec_files));
179 sub found_module_in_dir {
185 my $used_module_dirs = \%{$self->{USED_MODULE_DIRS}};
187 $$used_module_dirs{$module}{$dir}++;
193 my $output = \${$self->{OUTPUT}};
194 my $spec_files = \%{$self->{SPEC_FILES}};
195 my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}};
196 my $used_module_dirs = \%{$self->{USED_MODULE_DIRS}};
199 foreach my $dir (sort(keys(%$spec_files))) {
200 if($dir eq "") { next; }
201 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
202 foreach my $module (sort(keys(%{$$spec_file2module{$spec_file}}))) {
203 if(!$$used_module_dirs{$module}{$dir}) {
204 push @messages, "modules.dat: $spec_file: directory ($dir) is not used\n";
210 foreach my $message (sort(@messages)) {
211 $$output->write($message);