chadjoan
chadjoan

Reputation: 527

In DUB, how do I conditionally compile code based on optional dependencies?

If I have a DUB-based project with an optional dependency, how to I make it so that some code (be it modules or a version(...){...} block) only gets compiled if the dependency is chosen? Is there a way I can make a version identifier defined based on whether the dependency is present or absent?

I have already read about the "optional" and "default" attributes of the "dependency" tag as documented here. This allows me to define a dependency as optional, but it lacks teeth if I can't version my code to reflect the dependencies chosen.

Upvotes: 1

Views: 193

Answers (2)

dhasenan
dhasenan

Reputation: 1228

Besides using a version(foo) block and asking people to use versions: "foo" in their dub.sdl, you have one other option. It's cruddy, but it would work.

If your code is a template, you can wrap the relevant stuff in:

template HasVibe() 
{
    enum HasVibe = 
        is(typeof(() { import vibe.d; } ));
}

template Foo(T) if (HasVibe!())
{
    // your code here
}

If it's not a template, you can turn it into a template:

template log() if (HasVibe!())
{
    import vibe.core.log : logDebug;
    alias log = logDebug;
}

Untested, but it might help in a pinch.

Upvotes: 0

Kozzi11
Kozzi11

Reputation: 2413

Maybe you can, I am not sure but it seems you can use something like this:

version(Have_name_of_dependency)

So if your optional dependency would be sdlang-d you could use

Have_sdlang_d

Same as here

This is based on this part of dub code

Upvotes: 2

Related Questions