Libraries, versions, API changes, and Dub
Mike Parker
aldacron at gmail.com
Thu Jan 10 10:28:55 UTC 2019
On Thursday, 10 January 2019 at 05:44:22 UTC, Russel Winder wrote:
> It appears that libdvbv5 has undergone an (unnoticed by me till
> just now) version change. This raises a general question for
> creators of D bindings.
>
> libdvbv5 has versions 1.12.x, 1.14.x, 1.16.x, etc, following
> the "odd is internal, even is released" minor version number
> strategy. It seems wrong somehow to follow that numbering for
> the D binding; the binding needs to have a separate evolution.
> However the binding has to allow the user to choose the
> major.minor number of the underlying library they have – though
> that should perhaps be done automatically using the pkg-config
> system.
>
> Has anyone had previous experience of this situation and can
> give advice/direction so I don't have to build a solution from
> first principles?
Use version conditions for the different library versions to set
up compile-time versions you can static if on:
```
enum DVBVSupport {
v112 = 112,
v114 = 114,
v116 = 116,
}
version(DVBV_114) {
enum dvbvSupport = DVBVSupport.v114;
}
else version(DVBV_116) {
enum dvbvSupport = DVBVSupport.v116;
}
else enum dvbvSupport = DVBVSupport.v114;
// Declarations supported in 1.12
...
static if(dvbvSupport >= DVBVSupport.v114) {
...
}
static if(dvbvSupport >= DVBVSupport.v116) {
...
}
```
This is how I handle it in the BindBC libraries, to which I'm
porting all the active bindings from the DerelictOrg group (where
I handled it with different git branches, which is a horribly
confusing and inefficient way to go about it):
https://github.com/BindBC
The only drawback to it right now is that static if isn't
supported inside enum declarations, so you'll wind up with
multiple declarations of the enum, as I did with SDL_EventType
here:
https://github.com/BindBC/bindbc-sdl/blob/master/source/bindbc/sdl/bind/sdlevents.d#L25
static if *is* supported in class & struct delcarations, though,
and you can see it used in that same file in some of the event
types, like SDL_MouseButtonEvent and SDL_MouseWheelEvent:
https://github.com/BindBC/bindbc-sdl/blob/master/source/bindbc/sdl/bind/sdlevents.d#L347
More information about the Digitalmars-d-learn
mailing list