- Updated API files.
- Improved misplaced function checking.
- Fixed minor bugs.
diff --git a/tools/winapi_check/modules.pm b/tools/winapi_check/modules.pm
index 0ac93bb..f2a4f33 100644
--- a/tools/winapi_check/modules.pm
+++ b/tools/winapi_check/modules.pm
@@ -10,10 +10,13 @@
my $options = \${$self->{OPTIONS}};
my $output = \${$self->{OUTPUT}};
+ my $spec_files = \%{$self->{SPEC_FILES}};
my $modules = \%{$self->{MODULES}};
$$options = shift;
$$output = shift;
+ my $wine_dir = shift;
+ my $current_dir = shift;
my $module_file = shift;
$module_file =~ s/^\.\///;
@@ -38,12 +41,107 @@
} else {
$allowed_dir = $1;
}
+ $$spec_files{$allowed_dir}{$spec_file}++;
- $$modules{$allowed_dir}{$spec_file}++;
+ if(!-d "$wine_dir/$allowed_dir") {
+ $$output->write("$module_file: $spec_file: directory ($allowed_dir) doesn't exist or is no directory\n");
+ }
}
close(IN);
return $self;
}
+sub spec_file_module {
+ my $self = shift;
+
+ my $modules = \%{$self->{MODULES}};
+
+ my $spec_file = shift;
+ $spec_file =~ s/^\.\///;
+
+ my $module = shift;
+
+ $$modules{$spec_file}{$module}++;
+}
+
+sub is_allowed_module_in_file {
+ my $self = shift;
+
+ my $spec_files = \%{$self->{SPEC_FILES}};
+ my $modules = \%{$self->{MODULES}};
+
+ my $module = shift;
+ my $file = shift;
+ $file =~ s/^\.\///;
+
+ my $dir = $file;
+ $dir =~ s/\/[^\/]*$//;
+
+ foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
+ if($$modules{$spec_file}{$module}) {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+sub allowed_modules_in_file {
+ my $self = shift;
+
+ my $spec_files = \%{$self->{SPEC_FILES}};
+ my $modules = \%{$self->{MODULES}};
+
+ my $file = shift;
+ $file =~ s/^\.\///;
+
+ my $dir = $file;
+ $dir =~ s/\/[^\/]*$//;
+
+ my %allowed_modules = ();
+ foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
+ foreach my $module (sort(keys(%{$$modules{$spec_file}}))) {
+ $allowed_modules{$module}++;
+ }
+ }
+
+ return join(" & ", sort(keys(%allowed_modules)));
+}
+
+sub allowed_spec_files {
+ my $self = shift;
+
+ my $options = \${$self->{OPTIONS}};
+ my $output = \${$self->{OUTPUT}};
+ my $spec_files = \%{$self->{SPEC_FILES}};
+
+ my $wine_dir = shift;
+ my $current_dir = shift;
+
+ my @dirs = map {
+ s/^\.\/(.*)$/$1/;
+ if(/^\.$/) {
+ $current_dir;
+ } else {
+ if($current_dir ne ".") {
+ "$current_dir/$_";
+ } else {
+ $_;
+ }
+ }
+ } split(/\n/, `find . -type d ! -name CVS`);
+
+ my %allowed_spec_files = ();
+ foreach my $dir (sort(@dirs)) {
+ foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
+ $allowed_spec_files{$spec_file}++;
+ }
+ }
+
+ return sort(keys(%allowed_spec_files));
+}
+
1;
+
+