Shared IDL Imports

Robert Shearman rob at
Sat Jan 19 13:26:45 CST 2008

Hi all,

I've got a patch pending in my tree that adds another IDL file in 
include/wine/ but it has a dependency on another new IDL file in the 
same directory. The trouble is that the patch in the import statement 
gets lost in the generated IDL file. The attached diff shows an example 
of this, which gives the following error:

~/Documents/wine/dlls/ole32 rob$ make
../../tools/widl/widl -I. -I. -I../../include -I../../include  
-D__WINESRC__ -D_OLE32_ -DCOM_NO_WINDOWS_H  -h -H irot.h irot.idl
gcc -c -I. -I. -I../../include -I../../include  -D__WINESRC__ -D_OLE32_ 
-DCOM_NO_WINDOWS_H -D_REENTRANT -fPIC -Wall -pipe -fno-strict-aliasing 
-Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith  -g -O2  
-o moniker.o moniker.c
In file included from moniker.c:48:
irot.h:11:18: error: test.h: No such file or directory

I see an number of options for fixing this, but they all have problems:

Solution 1: Fix the generation of include statements in header files 
generated from the IDL to include the path. This has the issue that it 
is not compatible with MIDL, so testing our IDL files with it becomes 
difficult (MIDL appears to only search in the current directory when it 
encounters an import statement with a path).
Solution 2: Include the dependent IDL file instead of importing it. This 
has the issue that the include needs to be guarded so that the 
definitions don't get declared if the dependent IDL file's header is 
imported before or after the first IDL file's header. This also has the 
trouble that it isn't compatible with MIDL as the guards are different 
between MIDL and widl.
Solution 3: Put the IDL files in another directory (e.g. include/idl) 
and add that to the -I statement in CFLAGS and not using a path in the 
import statment in the first IDL file. This has the issue of having to 
change the name of the IDL file in the DLL or program directory to avoid 
an infinite recursion of includes.

Which of these is the best solution or is there another solution?


Rob Shearman

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: import.diff

More information about the wine-devel mailing list