Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 1 | # |
| 2 | # Copyright 1999, 2000, 2001 Patrik Stridvall |
| 3 | # |
| 4 | # This library is free software; you can redistribute it and/or |
| 5 | # modify it under the terms of the GNU Lesser General Public |
| 6 | # License as published by the Free Software Foundation; either |
| 7 | # version 2.1 of the License, or (at your option) any later version. |
| 8 | # |
| 9 | # This library is distributed in the hope that it will be useful, |
| 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 12 | # Lesser General Public License for more details. |
| 13 | # |
| 14 | # You should have received a copy of the GNU Lesser General Public |
| 15 | # License along with this library; if not, write to the Free Software |
| 16 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 17 | # |
| 18 | |
Patrik Stridvall | 1932d40 | 2000-04-15 20:39:55 +0000 | [diff] [blame] | 19 | package modules; |
| 20 | |
| 21 | use strict; |
| 22 | |
Patrik Stridvall | b59a9c7 | 2001-07-12 22:22:05 +0000 | [diff] [blame] | 23 | use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); |
| 24 | require Exporter; |
| 25 | |
| 26 | @ISA = qw(Exporter); |
| 27 | @EXPORT = qw(); |
| 28 | @EXPORT_OK = qw($modules); |
| 29 | |
| 30 | use vars qw($modules); |
| 31 | |
Patrik Stridvall | 67f0a70 | 2001-07-26 21:42:12 +0000 | [diff] [blame] | 32 | use config qw( |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 33 | file_type files_skip |
| 34 | file_directory |
| 35 | get_c_files get_spec_files |
Patrik Stridvall | 67f0a70 | 2001-07-26 21:42:12 +0000 | [diff] [blame] | 36 | $current_dir $wine_dir |
Patrik Stridvall | 67f0a70 | 2001-07-26 21:42:12 +0000 | [diff] [blame] | 37 | ); |
| 38 | use options qw($options); |
| 39 | use output qw($output); |
| 40 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 41 | sub import(@) { |
Patrik Stridvall | a40a4f7 | 2002-10-01 18:10:54 +0000 | [diff] [blame] | 42 | $Exporter::ExportLevel++; |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 43 | Exporter::import(@_); |
Patrik Stridvall | a40a4f7 | 2002-10-01 18:10:54 +0000 | [diff] [blame] | 44 | $Exporter::ExportLevel--; |
| 45 | |
Patrik Stridvall | f2c2eaf | 2002-11-27 20:11:10 +0000 | [diff] [blame] | 46 | if (defined($modules)) { |
| 47 | return; |
| 48 | } |
| 49 | |
Patrik Stridvall | a40a4f7 | 2002-10-01 18:10:54 +0000 | [diff] [blame] | 50 | $modules = 'modules'->new; |
| 51 | } |
Patrik Stridvall | 67f0a70 | 2001-07-26 21:42:12 +0000 | [diff] [blame] | 52 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 53 | sub get_spec_file_type($) { |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 54 | my $file = shift; |
| 55 | |
| 56 | my $module; |
| 57 | my $type; |
| 58 | |
Patrik Stridvall | 5379c79 | 2002-07-23 01:59:09 +0000 | [diff] [blame] | 59 | $module = $file; |
| 60 | $module =~ s%^.*?([^/]+)\.spec$%$1%; |
| 61 | |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 62 | open(IN, "< $file") || die "$file: $!\n"; |
| 63 | local $/ = "\n"; |
Patrik Stridvall | 0704650f | 2002-07-19 00:31:05 +0000 | [diff] [blame] | 64 | my $header = 1; |
| 65 | my $lookahead = 0; |
| 66 | while($lookahead || defined($_ = <IN>)) { |
| 67 | $lookahead = 0; |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 68 | s/^\s*(.*?)\s*$/$1/; |
| 69 | s/^(.*?)\s*#.*$/$1/; |
| 70 | /^$/ && next; |
| 71 | |
Patrik Stridvall | 0704650f | 2002-07-19 00:31:05 +0000 | [diff] [blame] | 72 | if($header) { |
Francois Gouget | b4df241 | 2004-10-22 19:55:42 +0000 | [diff] [blame] | 73 | if(/^(?:\d+|@)/) { $header = 0; $lookahead = 1; } |
Patrik Stridvall | 0704650f | 2002-07-19 00:31:05 +0000 | [diff] [blame] | 74 | next; |
| 75 | } |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 76 | |
Patrik Stridvall | 0704650f | 2002-07-19 00:31:05 +0000 | [diff] [blame] | 77 | if(/^(\d+|@)\s+pascal(?:16)?/) { |
| 78 | $type = "win16"; |
| 79 | last; |
| 80 | } |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 81 | } |
| 82 | close(IN); |
| 83 | |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 84 | if(!defined($type)) { |
Patrik Stridvall | 0704650f | 2002-07-19 00:31:05 +0000 | [diff] [blame] | 85 | $type = "win32"; |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 86 | } |
| 87 | |
| 88 | return ($type, $module); |
| 89 | } |
| 90 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 91 | sub find_spec_files($) { |
Patrik Stridvall | a40a4f7 | 2002-10-01 18:10:54 +0000 | [diff] [blame] | 92 | my $self = shift; |
| 93 | |
Patrik Stridvall | bda5074 | 2001-07-14 00:48:41 +0000 | [diff] [blame] | 94 | my $dir2spec_file = \%{$self->{DIR2SPEC_FILE}}; |
| 95 | my $spec_file2dir = \%{$self->{SPEC_FILE2DIR}}; |
Patrik Stridvall | 1932d40 | 2000-04-15 20:39:55 +0000 | [diff] [blame] | 96 | |
Hans Leidekker | b2fa420 | 2004-01-18 22:09:39 +0000 | [diff] [blame] | 97 | $output->progress("modules"); |
Patrik Stridvall | 1932d40 | 2000-04-15 20:39:55 +0000 | [diff] [blame] | 98 | |
Patrik Stridvall | a40a4f7 | 2002-10-01 18:10:54 +0000 | [diff] [blame] | 99 | my $spec_file_found = {}; |
Patrik Stridvall | 1932d40 | 2000-04-15 20:39:55 +0000 | [diff] [blame] | 100 | my $allowed_dir; |
| 101 | my $spec_file; |
| 102 | |
Hans Leidekker | b2fa420 | 2004-01-18 22:09:39 +0000 | [diff] [blame] | 103 | my @spec_files = <{dlls/*/*.spec,dlls/*/*/*.spec}>; |
Patrik Stridvall | 1932d40 | 2000-04-15 20:39:55 +0000 | [diff] [blame] | 104 | |
Hans Leidekker | b2fa420 | 2004-01-18 22:09:39 +0000 | [diff] [blame] | 105 | foreach $spec_file (@spec_files) { |
| 106 | $spec_file =~ /(.*)\/.*\.spec/; |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 107 | |
Hans Leidekker | b2fa420 | 2004-01-18 22:09:39 +0000 | [diff] [blame] | 108 | $allowed_dir = $1; |
Patrik Stridvall | 0d97481 | 2000-05-23 23:37:51 +0000 | [diff] [blame] | 109 | |
Hans Leidekker | b2fa420 | 2004-01-18 22:09:39 +0000 | [diff] [blame] | 110 | $$spec_file_found{$spec_file}++; |
| 111 | $$spec_file2dir{$spec_file}{$allowed_dir}++; |
| 112 | $$dir2spec_file{$allowed_dir}{$spec_file}++; |
Patrik Stridvall | 1932d40 | 2000-04-15 20:39:55 +0000 | [diff] [blame] | 113 | } |
Patrik Stridvall | 1932d40 | 2000-04-15 20:39:55 +0000 | [diff] [blame] | 114 | |
Patrik Stridvall | a40a4f7 | 2002-10-01 18:10:54 +0000 | [diff] [blame] | 115 | return $spec_file_found; |
| 116 | } |
| 117 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 118 | sub read_spec_files($$) { |
Patrik Stridvall | a40a4f7 | 2002-10-01 18:10:54 +0000 | [diff] [blame] | 119 | my $self = shift; |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 120 | |
Patrik Stridvall | a40a4f7 | 2002-10-01 18:10:54 +0000 | [diff] [blame] | 121 | my $spec_file_found = shift; |
| 122 | |
| 123 | my $dir2spec_file = \%{$self->{DIR2SPEC_FILE}}; |
| 124 | my $spec_files16 = \@{$self->{SPEC_FILES16}}; |
| 125 | my $spec_files32 = \@{$self->{SPEC_FILES32}}; |
| 126 | my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}}; |
| 127 | my $module2spec_file = \%{$self->{MODULE2SPEC_FILE}}; |
| 128 | |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 129 | my @spec_files; |
| 130 | if($wine_dir eq ".") { |
| 131 | @spec_files = get_spec_files("winelib"); |
| 132 | } else { |
| 133 | my %spec_files = (); |
| 134 | foreach my $dir ($options->directories) { |
| 135 | $dir = "$current_dir/$dir"; |
| 136 | $dir =~ s%/\.$%%; |
| 137 | foreach my $spec_file (sort(keys(%{$$dir2spec_file{$dir}}))) { |
| 138 | $spec_files{$spec_file}++; |
| 139 | } |
| 140 | } |
| 141 | @spec_files = sort(keys(%spec_files)); |
| 142 | } |
| 143 | |
| 144 | @$spec_files16 = (); |
| 145 | @$spec_files32 = (); |
| 146 | foreach my $spec_file (@spec_files) { |
| 147 | (my $type, my $module) = get_spec_file_type("$wine_dir/$spec_file"); |
| 148 | |
| 149 | $$spec_file2module{$spec_file} = $module; |
| 150 | $$module2spec_file{$module} = $spec_file; |
| 151 | |
| 152 | if($type eq "win16") { |
| 153 | push @$spec_files16, $spec_file; |
| 154 | } elsif($type eq "win32") { |
| 155 | push @$spec_files32, $spec_file; |
| 156 | } else { |
| 157 | $output->write("$spec_file: unknown type '$type'\n"); |
| 158 | } |
| 159 | } |
| 160 | |
| 161 | foreach my $spec_file (@spec_files) { |
Patrik Stridvall | a40a4f7 | 2002-10-01 18:10:54 +0000 | [diff] [blame] | 162 | if(!$$spec_file_found{$spec_file} && $spec_file !~ m%tests/[^/]+$%) { |
Hans Leidekker | b2fa420 | 2004-01-18 22:09:39 +0000 | [diff] [blame] | 163 | $output->write("modules: $spec_file: exists but is not specified\n"); |
Patrik Stridvall | aceeaa9 | 2000-05-07 18:28:18 +0000 | [diff] [blame] | 164 | } |
| 165 | } |
Patrik Stridvall | 1932d40 | 2000-04-15 20:39:55 +0000 | [diff] [blame] | 166 | } |
| 167 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 168 | sub new($) { |
| 169 | my $proto = shift; |
| 170 | my $class = ref($proto) || $proto; |
| 171 | my $self = {}; |
| 172 | bless ($self, $class); |
| 173 | |
| 174 | my $spec_file_found = $self->find_spec_files(); |
| 175 | $self->read_spec_files($spec_file_found); |
| 176 | |
| 177 | return $self; |
| 178 | } |
| 179 | |
| 180 | sub all_modules($) { |
Patrik Stridvall | bda5074 | 2001-07-14 00:48:41 +0000 | [diff] [blame] | 181 | my $self = shift; |
| 182 | |
| 183 | my $module2spec_file = \%{$self->{MODULE2SPEC_FILE}}; |
| 184 | |
| 185 | return sort(keys(%$module2spec_file)); |
| 186 | } |
| 187 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 188 | sub is_allowed_module($$) { |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 189 | my $self = shift; |
| 190 | |
Patrik Stridvall | c1d5dc4 | 2000-08-04 21:08:47 +0000 | [diff] [blame] | 191 | my $module2spec_file = \%{$self->{MODULE2SPEC_FILE}}; |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 192 | |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 193 | my $module = shift; |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 194 | |
| 195 | return defined($$module2spec_file{$module}); |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 196 | } |
| 197 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 198 | sub is_allowed_module_in_file($$$) { |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 199 | my $self = shift; |
| 200 | |
Patrik Stridvall | bda5074 | 2001-07-14 00:48:41 +0000 | [diff] [blame] | 201 | my $dir2spec_file = \%{$self->{DIR2SPEC_FILE}}; |
Patrik Stridvall | c1d5dc4 | 2000-08-04 21:08:47 +0000 | [diff] [blame] | 202 | my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}}; |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 203 | |
| 204 | my $module = shift; |
| 205 | my $file = shift; |
| 206 | $file =~ s/^\.\///; |
| 207 | |
| 208 | my $dir = $file; |
| 209 | $dir =~ s/\/[^\/]*$//; |
| 210 | |
Patrik Stridvall | d07a646 | 2001-07-18 20:09:12 +0000 | [diff] [blame] | 211 | if($dir =~ m%^include%) { |
| 212 | return 1; |
| 213 | } |
| 214 | |
Patrik Stridvall | bda5074 | 2001-07-14 00:48:41 +0000 | [diff] [blame] | 215 | foreach my $spec_file (sort(keys(%{$$dir2spec_file{$dir}}))) { |
| 216 | if($$spec_file2module{$spec_file} eq $module) { |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 217 | return 1; |
| 218 | } |
| 219 | } |
| 220 | |
| 221 | return 0; |
| 222 | } |
| 223 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 224 | sub allowed_modules_in_file($$) { |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 225 | my $self = shift; |
| 226 | |
Patrik Stridvall | bda5074 | 2001-07-14 00:48:41 +0000 | [diff] [blame] | 227 | my $dir2spec_file = \%{$self->{DIR2SPEC_FILE}}; |
Patrik Stridvall | c1d5dc4 | 2000-08-04 21:08:47 +0000 | [diff] [blame] | 228 | my $spec_file2module = \%{$self->{SPEC_FILE2MODULE}}; |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 229 | |
| 230 | my $file = shift; |
| 231 | $file =~ s/^\.\///; |
| 232 | |
| 233 | my $dir = $file; |
| 234 | $dir =~ s/\/[^\/]*$//; |
| 235 | |
| 236 | my %allowed_modules = (); |
Patrik Stridvall | bda5074 | 2001-07-14 00:48:41 +0000 | [diff] [blame] | 237 | foreach my $spec_file (sort(keys(%{$$dir2spec_file{$dir}}))) { |
| 238 | my $module = $$spec_file2module{$spec_file}; |
| 239 | $allowed_modules{$module}++; |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 240 | } |
| 241 | |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 242 | my $module = join(" & ", sort(keys(%allowed_modules))); |
| 243 | |
| 244 | return $module; |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 245 | } |
| 246 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 247 | sub allowed_dirs_for_module($$) { |
Patrik Stridvall | bda5074 | 2001-07-14 00:48:41 +0000 | [diff] [blame] | 248 | my $self = shift; |
| 249 | |
| 250 | my $module2spec_file = \%{$self->{MODULE2SPEC_FILE}}; |
Alexandre Julliard | 7cae558 | 2002-06-01 02:55:48 +0000 | [diff] [blame] | 251 | my $spec_file2dir = \%{$self->{SPEC_FILE2DIR}}; |
Patrik Stridvall | bda5074 | 2001-07-14 00:48:41 +0000 | [diff] [blame] | 252 | |
| 253 | my $module = shift; |
| 254 | |
| 255 | my $spec_file = $$module2spec_file{$module}; |
| 256 | |
| 257 | return sort(keys(%{$$spec_file2dir{$spec_file}})); |
| 258 | } |
| 259 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 260 | sub allowed_spec_files16($) { |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 261 | my $self = shift; |
| 262 | |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 263 | my $spec_files16 = \@{$self->{SPEC_FILES16}}; |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 264 | |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 265 | return @$spec_files16; |
| 266 | } |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 267 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 268 | sub allowed_spec_files32($) { |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 269 | my $self = shift; |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 270 | |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 271 | my $spec_files32 = \@{$self->{SPEC_FILES32}}; |
| 272 | |
| 273 | return @$spec_files32; |
Patrik Stridvall | 14bb7f1 | 2000-04-24 18:02:32 +0000 | [diff] [blame] | 274 | } |
| 275 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 276 | sub found_module_in_dir($$$) { |
Patrik Stridvall | c1d5dc4 | 2000-08-04 21:08:47 +0000 | [diff] [blame] | 277 | my $self = shift; |
| 278 | |
| 279 | my $module = shift; |
| 280 | my $dir = shift; |
| 281 | |
| 282 | my $used_module_dirs = \%{$self->{USED_MODULE_DIRS}}; |
| 283 | |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 284 | $dir = "$current_dir/$dir"; |
| 285 | $dir =~ s%/\.$%%; |
| 286 | |
Patrik Stridvall | c1d5dc4 | 2000-08-04 21:08:47 +0000 | [diff] [blame] | 287 | $$used_module_dirs{$module}{$dir}++; |
| 288 | } |
| 289 | |
Francois Gouget | bebac0a | 2004-10-30 02:11:19 +0000 | [diff] [blame] | 290 | sub complete_modules($$) { |
| 291 | my $self = shift; |
| 292 | |
| 293 | my $c_files = shift; |
| 294 | |
| 295 | my %dirs; |
| 296 | |
| 297 | foreach my $file (@$c_files) { |
| 298 | my $dir = file_directory("$current_dir/$file"); |
| 299 | $dirs{$dir}++; |
| 300 | } |
| 301 | |
| 302 | my @c_files = get_c_files("winelib"); |
| 303 | @c_files = files_skip(@c_files); |
| 304 | foreach my $file (@c_files) { |
| 305 | my $dir = file_directory($file); |
| 306 | if(exists($dirs{$dir})) { |
| 307 | $dirs{$dir}--; |
| 308 | } |
| 309 | } |
| 310 | |
| 311 | my @complete_modules = (); |
| 312 | foreach my $module ($self->all_modules) { |
| 313 | my $index = -1; |
| 314 | my @dirs = $self->allowed_dirs_for_module($module); |
| 315 | foreach my $dir (@dirs) { |
| 316 | if(exists($dirs{$dir}) && $dirs{$dir} == 0) { |
| 317 | $index++; |
| 318 | } |
| 319 | } |
| 320 | if($index == $#dirs) { |
| 321 | push @complete_modules, $module; |
| 322 | } |
| 323 | } |
| 324 | |
| 325 | return @complete_modules; |
| 326 | } |
| 327 | |
Francois Gouget | 493d60f | 2004-10-07 18:53:56 +0000 | [diff] [blame] | 328 | sub global_report($) { |
Patrik Stridvall | c1d5dc4 | 2000-08-04 21:08:47 +0000 | [diff] [blame] | 329 | my $self = shift; |
| 330 | |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 331 | my $module2spec_file = \%{$self->{MODULE2SPEC_FILE}}; |
Patrik Stridvall | c1d5dc4 | 2000-08-04 21:08:47 +0000 | [diff] [blame] | 332 | my $used_module_dirs = \%{$self->{USED_MODULE_DIRS}}; |
| 333 | |
| 334 | my @messages; |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 335 | foreach my $dir ($options->directories) { |
| 336 | $dir = "$current_dir/$dir"; |
| 337 | $dir =~ s%/\.$%%; |
| 338 | foreach my $module ($self->all_modules) { |
Patrik Stridvall | bda5074 | 2001-07-14 00:48:41 +0000 | [diff] [blame] | 339 | if(!$$used_module_dirs{$module}{$dir}) { |
Patrik Stridvall | cec294e | 2001-07-30 18:49:10 +0000 | [diff] [blame] | 340 | my $spec_file = $$module2spec_file{$module}; |
Hans Leidekker | b2fa420 | 2004-01-18 22:09:39 +0000 | [diff] [blame] | 341 | push @messages, "modules: $spec_file: directory ($dir) is not used\n"; |
Patrik Stridvall | c1d5dc4 | 2000-08-04 21:08:47 +0000 | [diff] [blame] | 342 | } |
| 343 | } |
| 344 | } |
| 345 | |
| 346 | foreach my $message (sort(@messages)) { |
Patrik Stridvall | 67f0a70 | 2001-07-26 21:42:12 +0000 | [diff] [blame] | 347 | $output->write($message); |
Patrik Stridvall | c1d5dc4 | 2000-08-04 21:08:47 +0000 | [diff] [blame] | 348 | } |
| 349 | } |
| 350 | |
Patrik Stridvall | 1932d40 | 2000-04-15 20:39:55 +0000 | [diff] [blame] | 351 | 1; |