[omniORB] namespace handling when a compiler doesn't support it

David Byron dbyron@coactive.com
Mon, 04 Jan 1999 18:11:14 -0800


>>> I am porting OmniORB2 to a compiler that doesn't support namespaces (Diab, 
>>for
>>> those interested).  The macros for dealing with namespaces when the compiler
>>> doesn't put code for a particular namespace in a class.
>>
>>Orbix (pre-namespace circa ver. 2.2) handled this using concatenation of the 
>>module name with the interface name, separated by '_'. This generates:
>>
>>class foo_yourclass : ...
>>{
>>  ...
>>};
>>
>>This is similar to the COM mapping in the CORBA interoperability spec, chapter 
>>13. However, I don't think that omniORB can support this without changes (don't 
>>know how much would be required, but pretty sure you'd have to change omniORB 
>>sources in omni2idl).
>>
>>Look in src/tool/omniidl2/omniORB2_be/o2be_interface.cc (and o2be_constant.cc, 
>>etc). This is where the .hh and .cc generators are located.
>>
>>For instance:
>>
>>void o2be_interface::produce_hdr(std::fstream &s)
>>{
>>  ...
>>  IND(s); s << "class " << uqname() << "_Helper {\n";
>>  ...
>>}
>>
>>See also o2be_name in src/tool/omniidl2/omniORB2_be/o2be.h.
>>
>>The method fqname() seems to return the fully qualified name (ie. scope name + 
>>unqualified name).
>>
>>If you can change uqname() to test a flag (that indicates whether to use 
>>concatenation), and return either the original value of uqname() or return 
>>fqname(), it may be pretty simple.
>>
>>Hope this is helpful.
>
>Thanks for the pointer.  This gets me very close to what I
>need.  I think the actual place I'll make the change is in
>o2be_module.cc in o2be_module::produce_hdr().  It generates
>a _CORBA_MODULE followed by the name of the module.
>CORBA_sysdep.h does the 'right thing' depending on whether
>namespaces are supported or not.  It would be nice if I
>could make the macro in CORAB_sysdep.h really smart by using
>__FILE__, but it's inside quotes, and doesn't seem easily
>messed with, besides including the full path, etc.  To do
>this properly, I suppose I'd add a command line parameter to
>omniidl2 to tell it how to behave.  Unfortunately, it makes
>the generated code platform specific, instead of platform
>independent.  Or maybe, I'll add a script to my makefile
>that greps for _CORBA_MODULE and makes the change for me.

Hate to reply to myself, but....

The script to hack the module name is not enough.  Or at least
my simple one wasn't.  Changes to omniidl seem to be required to
make this work....

I'll post the changes to the IDL compiler if I can get the
time to make them.  For now, the namespaces have to go :(

-DB
---
David Byron                     dbyron@coactive.com
Coactive Networks, Inc.         http://www.coactive.com
4000 Bridgeway, Suite 303       voice:(415)289-1722
Sausalito, CA  94965            fax:(415)289-1320