Correct cases where arguments of ok() calls depend on the order in
[wine/gsoc_dplay.git] / tools / winapi / config.pm
bloba992a72333f775aa5dc0045d64411c6bef07f716
2 # Copyright 1999, 2000, 2001 Patrik Stridvall
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.
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.
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
19 package config;
21 use strict;
23 use setup qw($current_dir $wine_dir $winapi_dir $winapi_check_dir);
25 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
26 require Exporter;
28 @ISA = qw(Exporter);
29 @EXPORT = qw(
30 file_absolutize file_normalize
31 file_directory
32 file_type files_filter
33 file_skip files_skip
34 get_c_files
35 get_h_files
36 get_makefile_in_files
37 get_spec_files
39 @EXPORT_OK = qw(
40 $current_dir $wine_dir $winapi_dir $winapi_check_dir
43 use vars qw($current_dir $wine_dir $winapi_dir $winapi_check_dir);
45 use output qw($output);
47 use File::Find;
49 sub file_normalize($) {
50 local $_ = shift;
52 foreach my $dir (split(m%/%, $current_dir)) {
53 if(s%^(\.\./)*\.\./$dir/%%) {
54 if(defined($1)) {
55 $_ = "$1$_";
60 while(m%^(.*?)([^/\.]+)/\.\./(.*?)$%) {
61 if($2 ne "." && $2 ne "..") {
62 $_ = "$1$3";
66 return $_;
69 sub file_absolutize($) {
70 local $_ = shift;
72 $_ = file_normalize($_);
73 if(!s%^$wine_dir/%%) {
74 $_ = "$current_dir/$_";
76 s%^\./%%;
78 return $_;
81 sub file_type($) {
82 local $_ = shift;
84 $_ = file_absolutize($_);
86 m%^(?:libtest|rc|server|tests|tools)/% && return "";
87 m%^(?:programs|debugger|miscemu)/% && return "wineapp";
88 m%^(?:libs)/% && return "library";
89 m%^windows/x11drv/wineclipsrv\.c$% && return "application";
91 return "winelib";
94 sub files_filter($@) {
95 my $type = shift;
97 my @files;
98 foreach my $file (@_) {
99 if(file_type($file) eq $type) {
100 push @files, $file;
104 return @files;
107 sub file_skip($) {
108 local $_ = shift;
110 $_ = file_absolutize($_);
112 m%^(?:libtest|programs|rc|server|tests|tools)/% && return 1;
113 m%^(?:debugger|miscemu|libs|server)/% && return 1;
114 m%^dlls/wineps/data/% && return 1;
115 m%^windows/x11drv/wineclipsrv\.c$% && return 1;
116 m%^dlls/winmm/wineoss/midipatch\.c$% && return 1;
117 m%(?:glue|spec)\.c$% && return 1;
119 return 0;
122 sub files_skip(@) {
123 my @files;
124 foreach my $file (@_) {
125 if(!file_skip($file)) {
126 push @files, $file;
130 return @files;
133 sub file_directory($) {
134 local $_ = shift;
136 s%/?[^/]*$%%;
137 if(!$_) {
138 $_ = ".";
141 s%^(?:\./)?(.*?)(?:/\.)?%$1%;
143 return $_;
146 sub _get_files($$;$) {
147 my $pattern = shift;
148 my $type = shift;
149 my $dir = shift;
151 $output->progress("$wine_dir: searching for /$pattern/");
153 if(!defined($dir)) {
154 $dir = $wine_dir;
157 my @files;
159 my @dirs = ($dir);
160 while(defined(my $dir = shift @dirs)) {
161 opendir(DIR, $dir);
162 my @entries= readdir(DIR);
163 closedir(DIR);
164 foreach (@entries) {
165 my $basefile = $_;
166 $_ = "$dir/$_";
167 if(/\.\.?$/) {
168 # Nothing
169 } elsif(-d $_) {
170 push @dirs, $_;
171 } elsif($basefile =~ /$pattern/ && (!defined($type) || file_type($_) eq $type)) {
172 s%^$wine_dir/%%;
173 push @files, $_;
178 return @files;
181 sub get_c_files($;$) { return _get_files('\.c$', $_[0], $_[1]); }
182 sub get_h_files($;$) { return _get_files('\.h$', $_[0], $_[1]); }
183 sub get_spec_files($;$) { return _get_files('\.spec$', $_[0], $_[1]); }
184 sub get_makefile_in_files($;$) { return _get_files('^Makefile.in$', $_[0], $_[1]); }