Rob Shearman : msvcmaker: Generate .h files from . idl files specified in IDL_H_SRCS makefile rules.

Alexandre Julliard julliard at winehq.org
Tue Sep 30 11:15:31 CDT 2008


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

Author: Rob Shearman <robertshearman at gmail.com>
Date:   Thu Sep 25 16:44:07 2008 +0100

msvcmaker: Generate .h files from .idl files specified in IDL_H_SRCS makefile rules.

---

 tools/winapi/msvcmaker |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/tools/winapi/msvcmaker b/tools/winapi/msvcmaker
index cc55837..120540f 100755
--- a/tools/winapi/msvcmaker
+++ b/tools/winapi/msvcmaker
@@ -238,6 +238,11 @@ MAKEFILE_IN: foreach my $makefile_in_file (@makefile_in_files) {
 	$resource_files = [sort(@{$vars{RC_SRCS}})];
     }
 
+    my $idl_h_files = [];
+    if(exists($vars{IDL_H_SRCS})) {
+	$idl_h_files = [sort(@{$vars{IDL_H_SRCS}})];
+    }
+
     my $project = $module;
     $project =~ s/\.(?:dll|exe|lib)$//;
     $project =~ y/./_/;
@@ -271,6 +276,7 @@ MAKEFILE_IN: foreach my $makefile_in_file (@makefile_in_files) {
 	    ($source_files, my $local_source_files) = filter_files($source_files, "$dir2/");
 	    ($header_files, my $local_header_files) = filter_files($header_files, "$dir2/");
 	    ($resource_files, my $local_resource_files) = filter_files($resource_files, "$dir2/");
+	    ($idl_h_files, my $local_idl_h_files) = filter_files($idl_h_files, "$dir2/");
 
 	    $modules{$module}{wine} = 1;
 	    $modules{$module}{winetest} = 0;
@@ -282,6 +288,7 @@ MAKEFILE_IN: foreach my $makefile_in_file (@makefile_in_files) {
 	    $modules{$module}{header_files} = $local_header_files;
 	    $modules{$module}{resource_files} = $local_resource_files;
 	    $modules{$module}{imports} = [];
+	    $modules{$module}{idl_h_files} = $local_idl_h_files;
 	}
     }
 
@@ -295,6 +302,7 @@ MAKEFILE_IN: foreach my $makefile_in_file (@makefile_in_files) {
     $modules{$module}{header_files} = $header_files;
     $modules{$module}{resource_files} = $resource_files;
     $modules{$module}{imports} = [@imports];
+    $modules{$module}{idl_h_files} = $idl_h_files;
 }
 
 $wine_test_dsp_files{"wineruntests.dsp"}{files} = ["runtests.c"];
@@ -322,6 +330,7 @@ foreach my $dsp_file (keys(%wine_test_dsp_files)) {
     my $source_files = [];
     my $header_files = [];
     my $resource_files = [];
+    my $idl_h_files = [];
 
     my @tests = ();
 
@@ -368,6 +377,7 @@ foreach my $dsp_file (keys(%wine_test_dsp_files)) {
     $modules{$module}{header_files} = $header_files;
     $modules{$module}{resource_files} = $resource_files;
     $modules{$module}{imports} = [@imports];
+    $modules{$module}{idl_h_files} = [];
 
     $modules{$module}{tests} = [@tests];
 }
@@ -433,6 +443,7 @@ sub _generate_dsp($$) {
     my @source_files = @{$modules{$module}{source_files}};
     my @header_files = @{$modules{$module}{header_files}};
     my @resource_files = @{$modules{$module}{resource_files}};
+    my @idl_h_files = @{$modules{$module}{idl_h_files}};
 
     if ($project !~ /^wine(?:build|runtests|test)?$/ &&
         $project !~ /^(?:gdi32)_.+?$/ &&
@@ -850,6 +861,35 @@ 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";
+    }
+
     print OUT "# End Group\r\n";
 
     print OUT "# Begin Group \"Header Files\"\r\n";




More information about the wine-cvs mailing list