Using a betterC dub package in ordinary D

Ferhat Kurtulmuş aferust at gmail.com
Fri Jan 8 18:46:51 UTC 2021


On Friday, 8 January 2021 at 18:28:36 UTC, Ferhat Kurtulmuş wrote:
> On Friday, 8 January 2021 at 15:40:12 UTC, Bastiaan Veelo wrote:
>> Hi,
>>
>> When I use earcutd [1] in an ordinary D project, I get a link 
>> error for the __D7earcutd12__ModuleInfoZ symbol. This is 
>> because the earcutd dub.json has `"dflags": ["-betterC"]`. I 
>> think this is in error, my understanding of betterC code is 
>> that it can be compiled with "-betterC", but does not need to 
>> (and must not when used in D context).
>>
>> Am I right? What are the best practices for betterC dub 
>> packages?
>>
>> Thanks,
>> Bastiaan.
>>
>>
>> [1] https://code.dlang.org/packages/earcutd
>
> Dear Bastiaaan,
>
> I am not an expert in dub system, but I have just pushed a 
> modification in dub.json. I am not sure if it solves your 
> problem. My modification is
>
>     "configurations": [
>         {
>             "name": "default",
>             "targetType": "library"
>         },
>         {
>             "name": "betterC",
>             "targetType": "library",
>             "dflags": ["-betterC"]
>         }
>     ]
>
> now client projects must explicitly pass the subConfiguration 
> parameter to compile it with betterC.

I also added this:

version(LDC){
     version(D_BetterC){
         pragma(LDC_no_moduleinfo);
     }
}

Docs say

LDC_no_moduleinfo
This pragma disables the generation of the ModuleInfo metadata to 
register the current module with druntime. Note that this, among 
other things, leads to any static constructors not being run, and 
should only be used in very specific circumstances.

I used that pragma against an error, but I cannot remember what 
was that.


More information about the Digitalmars-d-learn mailing list