Bjørn Roald wrote:
I like the intentions here. I think having a platform agnostic tool for source level packet management is a good way to go. I would be more skeptical if you intended make the next generic packet manager from scratch for binary distribution.
Supporting binary distributions is actually a very interesting idea. It turns out that the only thing that prevents the current bpm to be able to install a binary distribution is that it requires that a module is completely contained into a single directory (libs/$module), so it will not permit the downloaded archive to extract stage/lib/libboost_$module_whatever. I could however package the pre-built binaries in libs/$module/stage if I had the inclination, and then make bpm symlink stage/lib/libboost_$module_whatever to libs/$module/stage/lib/libboost_$module_whatever in the exact same manner as headers are handled. Food for future thought.
A source packet manager, like bpm, should copy headers from the installed modules' into the $BOOST/include/boost directory. The bpm tool should not depend on headers in $BOOST/boost, nor depend on ./b2 for staging headers in $BOOST/boost or $BOOST/include/boost.
That is what it does, yes.
Further bpm should avoid any symbolic link, junction, or hard link trickery like "b2 headers" attempts, it is just too tricky to do right for everyone, in particular automated symbolic link creation on Windows is hard and just not worth it. We are talking about an installation, so keep it simple.
Well... I already wrote the code to symlink/junction/hardlink things, so unless it turns out to create more problems than it solves, I'd rather keep it. :-)
For the b2 build I would suggest changing jam files so b2 is specifying a -I for each module the build depend on, rather than a single -I $BOOST/include to where bpm staged the headers.
The problem here, as I already mentioned in the other thread, is that the library Jamfiles will need to be maintained with the correct dependency information so that the usage-requirements correctly add the required include directories. I am not saying that this will not be a good thing to do, at some unspecified future point. But I wanted to get things working with minimal changes to the status quo.
I would also like to suggest having bpm install all modules, including build in a "modules" folder together with a custom bootsstrap and set of Boost.Build project root files, and stage libraries in a "lib" folder rather than stage/lib.
It would've been nice for the current structure to have all modules in modules/ or components/, rather than some in libs/ and some in tools/. As it is, I have a special case for the 'build' module to be in tools/build. But as I said, I wanted bpm to work on the current structure. (Well, I did move the header links to include/, but this was a very easy change because (a) they are created by bpm and (b) the changes to Jamroot were trivial.)