How to build a specific library version with dub?

martinm martinmannes23312 at gmail.com
Thu Apr 15 12:32:54 UTC 2021


On Sunday, 11 April 2021 at 15:01:04 UTC, Mike Parker wrote:
> On Sunday, 11 April 2021 at 13:43:47 UTC, martinm wrote:
>> I'm trying to use wayland-d which depends on 
>> derelict-util-2.0.6.
>> DUB can't download the zip and fails.
>> I download the zip to ~/.dub/packages/derelict-util folder, 
>> unzip and build.
>> DUB builds **DerelictUtil.a ~master**.
>
> That's not how to go about this. You should never need to 
> manually install a library for dub to use it.

I think so, too but when it's not working what can I do.
I wrote 2. sentence DUB fails can't download, timeout and fails.

> Assuming you mean this library:
>
> https://github.com/rtbo/wayland-d

Yes that one.

> It's the DerelictUtil dependency is configured as ~>2.0.3. This 
> syntax means >= 2.0.3 and < 2.1.0. So when you build the 
> wayland package for the first time, dub should pick up the 
> latest version in the 2.0.x series without any special help 
> from you.

Like said before. DUB download does not work.

>>
>> Trying to rebuild wayland-d, DUB can't find 
>> **derelict-util-2.0.6** dependency.
>> *dub list | grep -i derelict* shows:
>> *derelict-util ~master 
>> ~/.dub/packages/derelict-util-2.0.6/derelict-util/*
>> is there.
>
>
> Dub is picking up `~master` in this case because you 
> **manually** copied DerelictUtil into the .dub directory from 
> the zip file. Dub has absolutely no way to know what version of 
> the library that is un less you tell  it (see below).

Yes, I download DerelictUtil v. 2.0.6 release from github, unzip 
in .dub/packages and build myself.

>>
>> How can DUB build 2.0.6 version ?
>> *dub build library at 2.0.6* fails
>> *(1) : Error: Got JSON of type null_, expected object.*
>
> Have you modified DerelictUtil's dub.json in any way? I just 
> ran `dub build` on the 2.0 branch of DerelictUtil and built 
> 2.0.6 without error.

Yes, I added "version": "2.0.6" to dub.json and 2.0.6 is now 
correctly in registry.

>>
>> How can I change registry and manually change **~master** to 
>> **2.0.6** ?
>>
>
> IMO, the best thing to do is to delete the DerelictUtil folder 
> you unzipped and let dub pull down DerelictUtil automatically, 
> then it will know it has 2.0.6.

DUB still fails to download file itself. Maybe DUB should try 
GITHUB like I did.

> However, whenever you want to manually install a package, you 
> don't have to put the source files in the .dub directory. You 
> can put them anywhere on your system, then use the dub command 
> line to add that folder to your local registry and specify the 
> version. Something like: `dub add-local . --version=2.0.6`.
> You could also just run `dub fetch derelict-util 
> --version=2.0.6`.

This is good advice. Thank you.

I know my way is bad but it works for me and I prefer Makefile 
than DUB. Makefile can be complex but if problem I search in 
internet and 5 or 10 minutes later problem is solved. DUB is good 
when works but when not I see ??? I search in internet and find 
nothing and need come to forum and after 1h, problem can be fixed 
or not.

But thank you for explanation.


More information about the Digitalmars-d-learn mailing list