On Wed, 2017-10-04 at 22:20 +0300, Peter Dimov via Boost wrote:
Stefan Seefeld wrote:
Anyhow, I'm sorry this went off a tangent. My original point was to suggest that CMake (or any other future Boost build system) should support modular builds, rather than expect Boost.X and Boost.Y always have the same version, or be part of the same source tree.
I'm not sure that what I wanted to say got through, so I'll restate.
The problem is not that X and Y have to have the same version. They don't.. The problem is that Y has to have the same version.
Suppose you install Boost 1.64. You get the headers of the header-only library Y 1.64, the headers of the non-header-only library X 1.64 (that include the headers of Y), and the built library X 1.64 that incorporates in itself the headers of Y 1.64.
You then upgrade Y to 1.65. Now you have the headers of Y 1.65.
Your project uses X. It includes a X header. It includes a Y header (1.65). So your program contains Y 1.65.
Your project links to X. X has been built against Y 1.64. So your program contains Y 1.64.
This is what we (or rather, I) want to prevent with the version check. It's not that X 1.64 absolutely has to require Y 1.64. It could - in principle - require something else. But once built, it has to keep requiring the version of Y it has been built with.
But you are requiring that X 1.64 only to use Y 1.64. If we want it that once its built, it keeps using the same version, we can have `bcm_auto_export` to always generate the `find_dependency` with an `EXACT` argument using the version Y it is built with.