winemaker: Also detect static libraries when scanning directories.

oldstable
André Hentschel 2011-11-23 21:36:14 +01:00 committed by Alexandre Julliard
parent 376ffdf3d5
commit 798a91a3da
1 changed files with 28 additions and 6 deletions

View File

@ -20,7 +20,7 @@ use strict;
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#
my $version="0.8.0";
my $version="0.8.1";
use Cwd;
use File::Basename;
@ -1288,10 +1288,18 @@ sub source_scan_directory($$$$)
if ($dentry =~ /^(Release|Debug)/i) {
# These directories are often used to store the object files and the
# resulting executable/library. They should not contain anything else.
my @candidates=grep /\.(exe|dll)$/i, @{get_directory_contents("$fullentry")};
foreach my $candidate (@candidates) {
$targets{$candidate}=1;
}
my @candidates=grep /\.(exe|dll|lib)$/i, @{get_directory_contents("$fullentry")};
foreach my $candidate (sort @candidates) {
my $dlldup = $candidate;
$dlldup =~ s/\.lib$/.dll/;
if ($candidate =~ /\.lib$/ and $targets{$dlldup})
{
# Often lib files are created together with dll files, even if the dll file is the
# real target.
next;
}
$targets{$candidate}=1;
}
} elsif ($dentry =~ /^include/i) {
# This directory must contain headers we're going to need
push @{@$project_settings[$T_INCLUDE_PATH]},"-I$dentry";
@ -1303,7 +1311,7 @@ sub source_scan_directory($$$$)
source_scan_directory($project,"$fullentry/","$dentry/",$no_target);
}
} elsif (-f "$fullentry") {
if ($dentry =~ /\.(exe|dll)$/i) {
if ($dentry =~ /\.(exe|dll|lib)$/i) {
$targets{$dentry}=1;
} elsif ($dentry =~ /\.c$/i and $dentry !~ /\.(dbg|spec)\.c$/) {
push @sources_c,"$dentry";
@ -1517,6 +1525,7 @@ sub source_scan_directory($$$$)
# - Match each target with source files (sort in reverse
# alphabetical order to get the longest matches first)
my @local_dlls=();
my @local_libs=();
my @local_depends=();
my @exe_list=();
foreach my $target_name (map (lc, (sort { $b cmp $a } keys %targets))) {
@ -1535,6 +1544,13 @@ sub source_scan_directory($$$$)
} else {
push @{@$target[$T_LDFLAGS]},("-shared","\$(${canon}_MODULE:.dll=.spec)");
}
} elsif ($target_name =~ /\.lib$/) {
$target_name =~ s/(.*)\.lib/lib$1.a/;
@$target[$T_NAME]=$target_name;
@$target[$T_TYPE]=$TT_LIB;
push @local_depends,"$target_name";
push @local_libs,$target_name;
push @{@$target[$T_ARFLAGS]},("rc");
} else {
@$target[$T_TYPE]=$opt_target_type;
push @exe_list,$target;
@ -1694,6 +1710,12 @@ sub source_scan_directory($$$$)
push @{@$target[$T_DLLS]},@local_dlls;
}
}
if (@local_libs > 0 and @exe_list > 0) {
foreach my $target (@exe_list) {
push @{@$target[$T_LIBRARY_PATH]},"-L.";
push @{@$target[$T_LIBRARIES]},@local_libs;
}
}
}
##