No sooner did I send out this question I have found the D feature I've been looking for. This is what I have:

module log;

version(alternate_logger) {
mixin("public import " ~ import("alternate_logger.txt") ~ ";");
} else {

// Default implementation goes here

}

Can't say I'm thrilled with this, but it does get the job done. Suggestions more than welcome.

Shachar

On 03/08/17 13:46, 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

Reply via email to