winemaker: Add workspace-parse function.

This commit is contained in:
André Hentschel 2009-04-02 18:53:24 +02:00 committed by Alexandre Julliard
parent dc21b4f613
commit df5c4178a8
1 changed files with 72 additions and 1 deletions

View File

@ -1088,6 +1088,75 @@ sub source_scan_project_file($$$)
@$project_settings[$T_SOURCES_MISC]=[sort @{@$project_settings[$T_SOURCES_MISC]}];
}
##
# Scans the specified workspace file to find the project files
sub source_scan_workspace_file($);
sub source_scan_workspace_file($)
{
my $filename=$_[0];
my $path=dirname($filename);
my @components;
if (! -e $filename) {
return;
}
if (!open(FILEIWS,$filename)) {
print STDERR "error: unable to open $filename for reading:\n";
print STDERR " $!\n";
return;
}
my $prj_name;
my $prj_path;
if ($filename =~ /.dsw$/i) {
while (<FILEIWS>) {
# Remove any trailing CrLf
s/\r\n$/\n/;
# catch a project definition
if (/^Project:\s\"(.*)\"=(.*)\s-/) {
$prj_name=$1;
$prj_path=$2;
@components=split /[\/\\]+/, $2;
$prj_path=search_from($path, \@components);
print "Name: $prj_name\nPath: $prj_path\n";
source_scan_project_file(\@main_project,1,$prj_path);
next;
} elsif (/^#/) {
# ignore Comments
} elsif (/\w:/) {
print STDERR "unknown section $_\n";
} elsif (/^Microsoft(.*)Studio(.*)File,\sFormat Version\s(.*)/) {
print "\nFileversion: $3\n";
}
}
close(FILEIWS);
} elsif ($filename =~ /.sln$/i) {
while (<FILEIWS>) {
# Remove any trailing CrLf
s/\r\n$/\n/;
# catch a project definition
if (/^Project(.*)=\s*"(.*)",\s*"(.*)",\s*"(.*)"/) {
$prj_name=$2;
$prj_path=$3;
@components=split /[\/\\]+/, $3;
$prj_path=search_from($path, \@components);
print "Name: $prj_name\nPath: $prj_path\n";
source_scan_project_file(\@main_project,1,$prj_path);
next;
} elsif (/^Microsoft(.*)Studio(.*)File,\sFormat Version\s(.*)/) {
print "\nFileversion: $3\n";
}
}
close(FILEIWS);
}
@projects=sort { @$a[$P_PATH] cmp @$b[$P_PATH] } @projects;
}
##
# Scans the specified directory to:
# - see if we should create a Makefile in this directory. We normally do
@ -1572,6 +1641,8 @@ sub source_scan()
} elsif (defined $opt_work_file) {
if ($opt_work_file =~ /.dsp$/i or $opt_work_file =~ /.vcproj$/i) {
source_scan_project_file(\@main_project,0,$opt_work_file);
} elsif ($opt_work_file =~ /.dsw$/i or $opt_work_file =~ /.sln$/i) {
source_scan_workspace_file($opt_work_file);
}
}
}
@ -2425,7 +2496,7 @@ sub usage()
print STDERR " [-Dmacro[=defn]] [-Idir] [-Pdir] [-idll] [-Ldir] [-llibrary]\n";
print STDERR " [--nodlls] [--nomsvcrt] [--interactive] [--single-target name]\n";
print STDERR " [--generated-files|--nogenerated-files]\n";
print STDERR " work_directory|project_file\n";
print STDERR " work_directory|project_file|workspace_file\n";
print STDERR "\nWinemaker is designed to recursively convert all the Windows sources found in\n";
print STDERR "the specified directory so that they can be compiled with Winelib. During this\n";
print STDERR "process it will modify and rename some of the files in that directory.\n";