I am currently maintaining a port of a c++ library that uses conditional compilation to integrate into the users program. e.g.:
config.h (edited by the user of the library)
#define USE_MY_ASSERT
void MY_ASSERT(bool expr) {...}
library.c
include "config.h"
#ifndef USE_MY_ASSERT
void MY_ASSERT(bool expr) {...} // default implementation
#end
Given that static if at top-level has been broken for some time (https://issues.dlang.org/show_bug.cgi?id=17883, https://issues.dlang.org/show_bug.cgi?id=20905, https://issues.dlang.org/show_bug.cgi?id=21171), I tried to use version identifiers for this in D:
config.d
version = USE_MY_ASSERT;
void MY_ASSERT(bool expr) {...}
library.d
import config;
version (USE_MY_ASSERT) {} else {
void MY_ASSERT(bool expr) {...}
}
Sadly this results in an identifier conflict, as the version set in config.d does not seem to affect library.d. Is there any way to import version specifiers from a separate file? I don't want to pollute the users build files (dub.json etc.) with dozens of versions they need to pass to the compiler.