Rob Shearman : msvcmaker: Generate rules for IDL_C_SRCS, IDL_S_SRCS, IDL_P_SRCS and IDL_TLB_SRCS.

Alexandre Julliard julliard at winehq.org
Fri Oct 17 07:26:16 CDT 2008


Module: wine
Branch: master
Commit: 9898d437ef289543d3786fb17ea28b742ab719ee
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9898d437ef289543d3786fb17ea28b742ab719ee

Author: Rob Shearman <robertshearman at gmail.com>
Date:   Fri Oct 17 13:17:15 2008 +0100

msvcmaker: Generate rules for IDL_C_SRCS, IDL_S_SRCS, IDL_P_SRCS and IDL_TLB_SRCS.

---

 tools/winapi/msvcmaker |  115 +++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 89 insertions(+), 26 deletions(-)

diff --git a/tools/winapi/msvcmaker b/tools/winapi/msvcmaker
index c84b703..957e232 100755
--- a/tools/winapi/msvcmaker
+++ b/tools/winapi/msvcmaker
@@ -271,6 +271,26 @@ MAKEFILE_IN: foreach my $makefile_in_file (@makefile_in_files) {
 	$idl_h_files = [sort(@{$vars{IDL_H_SRCS}})];
     }
 
+    my $idl_c_files = [];
+    if(exists($vars{IDL_C_SRCS})) {
+	$idl_c_files = [sort(@{$vars{IDL_C_SRCS}})];
+    }
+
+    my $idl_s_files = [];
+    if(exists($vars{IDL_S_SRCS})) {
+	$idl_s_files = [sort(@{$vars{IDL_S_SRCS}})];
+    }
+
+    my $idl_p_files = [];
+    if(exists($vars{IDL_P_SRCS})) {
+	$idl_p_files = [sort(@{$vars{IDL_P_SRCS}})];
+    }
+
+    my $idl_tlb_files = [];
+    if(exists($vars{IDL_TLB_SRCS})) {
+	$idl_tlb_files = [sort(@{$vars{IDL_TLB_SRCS}})];
+    }
+
     my $extradefs;
     if(exists($vars{EXTRADEFS})) {
 	$extradefs = $vars{EXTRADEFS};
@@ -321,6 +341,10 @@ MAKEFILE_IN: foreach my $makefile_in_file (@makefile_in_files) {
 	    $modules{$module}{resource_files} = $local_resource_files;
 	    $modules{$module}{imports} = [];
 	    $modules{$module}{idl_h_files} = $local_idl_h_files;
+	    $modules{$module}{idl_c_files} = [];
+	    $modules{$module}{idl_s_files} = [];
+	    $modules{$module}{idl_p_files} = [];
+	    $modules{$module}{idl_tlb_files} = [];
 	    $modules{$module}{extradefs} = $extradefs if $extradefs;
 	}
     }
@@ -336,6 +360,10 @@ MAKEFILE_IN: foreach my $makefile_in_file (@makefile_in_files) {
     $modules{$module}{resource_files} = $resource_files;
     $modules{$module}{imports} = [@imports];
     $modules{$module}{idl_h_files} = $idl_h_files;
+    $modules{$module}{idl_c_files} = $idl_c_files;
+    $modules{$module}{idl_s_files} = $idl_s_files;
+    $modules{$module}{idl_p_files} = $idl_p_files;
+    $modules{$module}{idl_tlb_files} = $idl_tlb_files;
     $modules{$module}{extradefs} = $extradefs if $extradefs;
 }
 
@@ -412,6 +440,10 @@ foreach my $dsp_file (keys(%wine_test_dsp_files)) {
     $modules{$module}{resource_files} = $resource_files;
     $modules{$module}{imports} = [@imports];
     $modules{$module}{idl_h_files} = [];
+    $modules{$module}{idl_c_files} = [];
+    $modules{$module}{idl_s_files} = [];
+    $modules{$module}{idl_p_files} = [];
+    $modules{$module}{idl_tlb_files} = [];
 
     $modules{$module}{tests} = [@tests];
 }
@@ -440,6 +472,52 @@ foreach my $module (@modules) {
     replace_file("$wine_dir/$dsp_file", \&_generate_dsp, $module);
 }
 
+sub output_dsp_idl_rules($$$) {
+    my $wine_include_dir = shift;
+    my $ext = shift;
+    my @idl_src_files = @{(shift)};
+
+    foreach my $idl_src_file (@idl_src_files) {
+	$idl_src_file =~ s%/%\\%g;
+	if($idl_src_file !~ /^\./) {
+	    $idl_src_file = ".\\$idl_src_file";
+	}
+
+	print OUT "# Begin Source File\r\n";
+	print OUT "\r\n";
+
+	print OUT "SOURCE=$idl_src_file\r\n";
+
+	my $basename = $idl_src_file;
+	$basename =~ s/\.idl$//;
+
+	print OUT "# PROP Ignore_Default_Tool 1\r\n";
+	print OUT "# Begin Custom Build\r\n";
+	print OUT "InputPath=$idl_src_file\r\n";
+	print OUT "\r\n";
+	print OUT "BuildCmds= \\\r\n";
+	print OUT "\tmidl /nologo /I $wine_include_dir $idl_src_file ";
+	if ($ext eq ".h") {
+	    print OUT "/client none /server none /notlb /h ";
+	} elsif ($ext eq "_c.c") {
+	    print OUT "/server none /notlb /cstub ";
+	} elsif ($ext eq "_s.c") {
+	    print OUT "/client none /notlb /sstub ";
+	} elsif ($ext eq "_p.c") {
+	    print OUT "/client none /server none /notlb /proxy ";
+	} elsif ($ext eq ".tlb") {
+	    print OUT "/client none /server none /tlb ";
+	}
+        print OUT "$basename$ext\r\n";
+	print OUT "\r\n";
+	print OUT "\"$basename$ext\" : \$(SOURCE) \"\$(INTDIR)\" \"\$(OUTDIR)\"\r\n";
+	print OUT "   \$(BuildCmds)\r\n";
+	print OUT "# End Custom Build\r\n";
+
+	print OUT "# End Source File\r\n";
+    }
+}
+
 sub _generate_dsp($$) {
     local *OUT = shift;
 
@@ -478,6 +556,10 @@ sub _generate_dsp($$) {
     my @header_files = @{$modules{$module}{header_files}};
     my @resource_files = @{$modules{$module}{resource_files}};
     my @idl_h_files = @{$modules{$module}{idl_h_files}};
+    my @idl_c_files = @{$modules{$module}{idl_c_files}};
+    my @idl_s_files = @{$modules{$module}{idl_s_files}};
+    my @idl_p_files = @{$modules{$module}{idl_p_files}};
+    my @idl_tlb_files = @{$modules{$module}{idl_tlb_files}};
 
     if ($project !~ /^wine(?:build|runtests|test)?$/ &&
         $project !~ /^(?:gdi32)_.+?$/ &&
@@ -908,32 +990,13 @@ sub _generate_dsp($$) {
 	print OUT "# End Source File\r\n";
     }
 
-    foreach my $idl_h_file (@idl_h_files) {
-	$idl_h_file =~ s%/%\\%g;
-	if($idl_h_file !~ /^\./) {
-	    $idl_h_file = ".\\$idl_h_file";
-	}
-
-	print OUT "# Begin Source File\r\n";
-	print OUT "\r\n";
-
-	print OUT "SOURCE=$idl_h_file\r\n";
-
-	my $basename = $idl_h_file;
-	$basename =~ s/\.idl$//;
-
-	print OUT "# PROP Ignore_Default_Tool 1\r\n";
-	print OUT "# Begin Custom Build\r\n";
-	print OUT "InputPath=$idl_h_file\r\n";
-	print OUT "\r\n";
-	print OUT "BuildCmds= \\\r\n";
-	print OUT "\tmidl /nologo /I $wine_include_dir /client none /server none /notlb $idl_h_file /h $basename.h\r\n";
-	print OUT "\r\n";
-	print OUT "\"$basename.h\" : \$(SOURCE) \"\$(INTDIR)\" \"\$(OUTDIR)\"\r\n";
-	print OUT "   \$(BuildCmds)\r\n";
-	print OUT "# End Custom Build\r\n";
-
-	print OUT "# End Source File\r\n";
+    output_dsp_idl_rules $wine_include_dir, ".h", \@idl_h_files;
+    output_dsp_idl_rules $wine_include_dir, "_c.c", \@idl_c_files;
+    output_dsp_idl_rules $wine_include_dir, "_s.c", \@idl_s_files;
+    output_dsp_idl_rules $wine_include_dir, "_p.c", \@idl_p_files;
+    # Hack - stdole2.idl cannot be compiled with midl
+    if($project ne "include") {
+	output_dsp_idl_rules $wine_include_dir, ".tlb", \@idl_tlb_files;
     }
 
     print OUT "# End Group\r\n";




More information about the wine-cvs mailing list