More automated interfacing of D with C codebases

Brad Lanam brad.lanam.comp at -NOSPAM-gmail.com
Tue Oct 23 12:43:41 PDT 2012


On Tuesday, 23 October 2012 at 19:10:29 UTC, Jacob Carlborg wrote:
> On 2012-10-23 19:42, Brad Lanam wrote:
> All of these don't use the same shell. Requiring to install 
> bash would mean you do need to install special tools. Not 
> really special but additional tools. But I would count Cygwin 
> as a special tool for Windows.

Oh, maybe were you thinking that bash is the bourne shell?  It's 
the
bourne-again shell, a rewrite of the bourne shell.  Solaris sh is 
probably the closest to the original bourne shell.

My tool runs with any bourne shell compatible shell.  It works
with bash2, bash3, bash4, ksh, ksh88, ksh93, Solaris sh, Tru64 sh,
ash, dash, mksh, pdksh. HP-UX sh.

>>>> If you need to write code that runs on multiple systems and 
>>>> works with
>>>> low level system calls (rpc, et.al.), my tool might be a 
>>>> better choice.
>>>
>>> Why would that make a difference.
>>
>> Not all systems are alike.
>>
>>       static if (_c_args_setmntent == 1)
>>       {
>>         f = setmntent (toStringz(DI_MOUNT_FILE));
>>       } else static if (_c_args_setmntent == 2) {
>>         f = setmntent (toStringz(DI_MOUNT_FILE), 
>> toStringz("r"));
>>       }
>>
>> If I understand your tool correctly, you might convert the 
>> mount.h or
>> mntent.h file [but how does your program decide which one and 
>> even if
>> they exist?].  But then how are you going to change your code 
>> to handle
>> the above?  You've got a *lot* of work to do if you want a 
>> cross
>> platform tool.
>>
>> I recommend SWIG+CMAKE.  Or my 'mkconfig' tool.
>
> Well then, how does your tool work?

You put directives in the "interface file" (to use the SWIG term) 
to test which capabilities the system has.  It creates an output 
file (.sh, .c, .d). Depending on those capabilities, the code can 
use #if or static if statements to provide code that works for 
the system you are building on.

In the case of the C/D language interface, the directives will 
extract typedefs, structures, C function declarations, macros, 
#defines.


More information about the Digitalmars-d-learn mailing list