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
56 if(!-f "$wine_dir/$spec_file") {
57 $$output->write("$module_file: $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("$module_file: $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("$module_file: $spec_file: exists but is not specified\n");
87 sub spec_file_module {
90 my $modules = \%{$self->{MODULES}};
92 my $spec_file = shift;
93 $spec_file =~ s/^\.\///;
97 $$modules{$spec_file}{$module}++;
100 sub is_allowed_module_in_file {
103 my $spec_files = \%{$self->{SPEC_FILES}};
104 my $modules = \%{$self->{MODULES}};
111 $dir =~ s/\/[^\/]*$//;
113 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
114 if($$modules{$spec_file}{$module}) {
122 sub allowed_modules_in_file {
125 my $spec_files = \%{$self->{SPEC_FILES}};
126 my $modules = \%{$self->{MODULES}};
132 $dir =~ s/\/[^\/]*$//;
134 my %allowed_modules = ();
135 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
136 foreach my $module (sort(keys(%{$$modules{$spec_file}}))) {
137 $allowed_modules{$module}++;
141 return join(" & ", sort(keys(%allowed_modules)));
144 sub allowed_spec_files {
147 my $options = \${$self->{OPTIONS}};
148 my $output = \${$self->{OUTPUT}};
149 my $spec_files = \%{$self->{SPEC_FILES}};
151 my $wine_dir = shift;
152 my $current_dir = shift;
159 if($current_dir ne ".") {
165 } split(/\n/, `find . -type d ! -name CVS`);
167 my %allowed_spec_files = ();
168 foreach my $dir (sort(@dirs)) {
169 foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
170 $allowed_spec_files{$spec_file}++;
174 return sort(keys(%allowed_spec_files));