On Thursday, 3 August 2017 at 10:46:06 UTC, Shachar Shemesh wrote:
The problem: I'm writing a library. This library has logging
facilities, but where it's going to be used there are better
logging facilities. Under C, that wouldn't be a big issue:
log.h:
#ifdef REAL_LOG_LIBRARY
#include REAL_LOG_LIBRARY
#else
// Declarations go here
#endif
I can now inject from my build system
-DREAL_LOG_LIBRARY=real/impl/log.h into the compilation command
line, and I'm done.
Under D, there is no facility to transfer a string from the
command line to the code, so I can't use that approach.
I seem to remember that D had an option of importing an
external file as something (string? code? anything would do for
my purposes). I cannot seem to find it, however. A search for
"string import" and "import mixin" brought back nothing useful.
Help?
Shachar
You can rely on the file passed to the compiler like this too:
```
enum canImport(string mod) = is(typeof((){mixin("import " ~ mod ~
";");}));
static assert(canImport!"std.traits");
static assert(!canImport!"std.craps");
```
Although, tbh, i'm not sure very it solves the issue