Comment 3 for bug 66560

Revision history for this message
Jules Colding (colding) wrote :

Yes, I still have this problem. The problem occurs if you are including an IDL file in another IDL file. Imagine this:

/* a.idl */
module BRUTUS {
   interface foobar {
      void method();
   };
};

/* b.idl */
#Include "a.idl"
module BRUTUS {
   interface foo {
      void bar(in foobar parm);
   };
};

/* c.idl */
#Include "a.idl"
module BRUTUS {
   interface footty {
      void barty(out foobar parm);
   };
};

"b.idl" and "c.idl" are both including "a.idl". Now compile these 3 idl files without the --onlytop option. You will observe that b.h and c.h does not merely contain #include "a.h" but the entire content of a.h. This will therefore make linking of the b.idl and c.idl compilation products impossible due to multible definitions of foobar.

You must compile with --onlytop to produce file that merely includes the appropiate headers instead of the entire file content. Only --onlytop will give you IDL compilation products that compile _and_ link as intended.

A good way to demonstrate this is simply to go get:

http://www.omesc.com/content/downloads/dist/SOURCES/evolution-brutus-1.1.22.tar.gz

and simply do:

./autogen.sh && make

evolution-brutus has a lot of IDL files that includes other IDL files.