
I have a source base that contains a number of source files that use APIs that vary by platform: every platform provides select, most provide poll, BSDs provide kqueue, and Linux provides epoll. I already have autoconf tests for these functions, and I'd like to use the results of those autoconf checks to determine which modules to compile, but I am unable to figure out how to do this in my .cabal or .buildinfo file. (I *could* have explicit os conditionals in there, but that's ugly.) Right now, I'm just building all of the modules, and conditionally giving them bodies as follows: module System.Event.EPoll where #if defined(HAVE_EPOLL) ... #endif The trouble with this is twofold. I have to export everything in the module (because its contents vary depending on where I compile it), and the CPP macros there are ugly. Is there a better solution?