As we also previously discussed, the easy way out of that is to enforce all header, all static or all shared.
But this is not possible in general as not all libraries support header-only.
The preference for header-only, if supported, is orthogonal to the preference for static or shared. In sl/dl terms, it's not sl/dl/hl, it's sl/dl/slh/dlh, so that when you propagate downstream through a header-only library, the s/d isn't lost.
I think you're overcomplicating things. If a header only library has a dependency on a non-header only library capable of either static or shared usage, then the header only library simply advertises itself as having static or shared usage only. Not header only. In other words, header only targets means "nothing to link if you use this". Does this make sense now? Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/