Niall Douglas wrote:
As we already discussed, sl/dl/hl have the problem that when a non-header-only library links to a header-only one which in turn links to a non-header-only one, the sl/dl of the first one should propagate to the third, which is problematic if the second has to be -hl.
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. In Boost.Build terms, these would be two separate features, link=static|shared and prefer-header-only=on. Libraries that don't have a header-only mode would just ignore the latter.