Several additions and bug fixes.
diff --git a/tools/winapi_check/modules.pm b/tools/winapi_check/modules.pm
index 25f109e..1252422 100644
--- a/tools/winapi_check/modules.pm
+++ b/tools/winapi_check/modules.pm
@@ -19,7 +19,8 @@
my $options = \${$self->{OPTIONS}};
my $output = \${$self->{OUTPUT}};
- my $spec_files = \%{$self->{SPEC_FILES}};
+ my $dir2spec_file = \%{$self->{DIR2SPEC_FILE}};
+ my $spec_file2dir = \%{$self->{SPEC_FILE2DIR}};
my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}};
$$options = shift;
@@ -71,12 +72,13 @@
} else {
$all_spec_files{"$wine_dir/$spec_file"}--;
}
- $$spec_files{""}{$spec_file}++; # FIXME: Kludge
+ $$dir2spec_file{""}{$spec_file}++; # FIXME: Kludge
next;
} else {
$allowed_dir = $1;
+ $$spec_file2dir{$spec_file}{$allowed_dir}++;
}
- $$spec_files{$allowed_dir}{$spec_file}++;
+ $$dir2spec_file{$allowed_dir}{$spec_file}++;
if(!-d "$wine_dir/$allowed_dir") {
$$output->write("modules.dat: $spec_file: directory ($allowed_dir) doesn't exist or is no directory\n");
@@ -95,6 +97,14 @@
return $self;
}
+sub all_modules {
+ my $self = shift;
+
+ my $module2spec_file = \%{$self->{MODULE2SPEC_FILE}};
+
+ return sort(keys(%$module2spec_file));
+}
+
sub spec_file_module {
my $self = shift;
@@ -106,14 +116,14 @@
my $module = shift;
- $$spec_file2module{$spec_file}{$module}++;
- $$module2spec_file{$module}{$spec_file}++;
+ $$spec_file2module{$spec_file} = $module;
+ $$module2spec_file{$module} = $spec_file;
}
sub is_allowed_module_in_file {
my $self = shift;
- my $spec_files = \%{$self->{SPEC_FILES}};
+ my $dir2spec_file = \%{$self->{DIR2SPEC_FILE}};
my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}};
my $module = shift;
@@ -123,8 +133,8 @@
my $dir = $file;
$dir =~ s/\/[^\/]*$//;
- foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
- if($$spec_file2module{$spec_file}{$module}) {
+ foreach my $spec_file (sort(keys(%{$$dir2spec_file{$dir}}))) {
+ if($$spec_file2module{$spec_file} eq $module) {
return 1;
}
}
@@ -135,7 +145,7 @@
sub allowed_modules_in_file {
my $self = shift;
- my $spec_files = \%{$self->{SPEC_FILES}};
+ my $dir2spec_file = \%{$self->{DIR2SPEC_FILE}};
my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}};
my $file = shift;
@@ -145,21 +155,33 @@
$dir =~ s/\/[^\/]*$//;
my %allowed_modules = ();
- foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
- foreach my $module (sort(keys(%{$$spec_file2module{$spec_file}}))) {
- $allowed_modules{$module}++;
- }
+ foreach my $spec_file (sort(keys(%{$$dir2spec_file{$dir}}))) {
+ my $module = $$spec_file2module{$spec_file};
+ $allowed_modules{$module}++;
}
return join(" & ", sort(keys(%allowed_modules)));
}
+sub allowed_dirs_for_module {
+ my $self = shift;
+
+ my $module2spec_file = \%{$self->{MODULE2SPEC_FILE}};
+ my $spec_file2dir = \%{$self->{SPEC_FILE2DIR}};
+
+ my $module = shift;
+
+ my $spec_file = $$module2spec_file{$module};
+
+ return sort(keys(%{$$spec_file2dir{$spec_file}}));
+}
+
sub allowed_spec_files {
my $self = shift;
my $options = \${$self->{OPTIONS}};
my $output = \${$self->{OUTPUT}};
- my $spec_files = \%{$self->{SPEC_FILES}};
+ my $dir2spec_file = \%{$self->{DIR2SPEC_FILE}};
my $wine_dir = shift;
my $current_dir = shift;
@@ -179,7 +201,7 @@
my %allowed_spec_files = ();
foreach my $dir (sort(@dirs)) {
- foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
+ foreach my $spec_file (sort(keys(%{$$dir2spec_file{$dir}}))) {
$allowed_spec_files{$spec_file}++;
}
}
@@ -202,18 +224,17 @@
my $self = shift;
my $output = \${$self->{OUTPUT}};
- my $spec_files = \%{$self->{SPEC_FILES}};
+ my $dir2spec_file = \%{$self->{DIR2SPEC_FILE}};
my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}};
my $used_module_dirs = \%{$self->{USED_MODULE_DIRS}};
my @messages;
- foreach my $dir (sort(keys(%$spec_files))) {
+ foreach my $dir (sort(keys(%$dir2spec_file))) {
if($dir eq "") { next; }
- foreach my $spec_file (sort(keys(%{$$spec_files{$dir}}))) {
- foreach my $module (sort(keys(%{$$spec_file2module{$spec_file}}))) {
- if(!$$used_module_dirs{$module}{$dir}) {
- push @messages, "modules.dat: $spec_file: directory ($dir) is not used\n";
- }
+ foreach my $spec_file (sort(keys(%{$$dir2spec_file{$dir}}))) {
+ my $module = $$spec_file2module{$spec_file};
+ if(!$$used_module_dirs{$module}{$dir}) {
+ push @messages, "modules.dat: $spec_file: directory ($dir) is not used\n";
}
}
}