Boost C++ Libraries: Ticket #12033: Boostdep misses some dependent components https://svn.boost.org/trac10/ticket/12033 <p> In creating a modular boost build for a client I found that boostdep was missing a few smaller libraries when tracing the dependencies. The library msm depends on fusion, which depends on utility, but boostdep does not list "utility" as among the depdencies of msm. </p> <p> For a test case, try building libs/msm/doc/HTML/examples/SimpleTutorial.cpp using a version of Boost with only the submodules listed as dependencies of msm. It should complain about not finding boost/utility/result_of.hpp </p> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/12033 Trac 1.4.3 edaskel@… Tue, 01 Mar 2016 02:45:50 GMT <link>https://svn.boost.org/trac10/ticket/12033#comment:1 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:1</guid> <description> <p> I noticed afterwards that boostdep lists only the first level dependencies of the given module. Perhaps this is by design? </p> </description> <category>Ticket</category> </item> <item> <dc:creator>Peter Dimov</dc:creator> <pubDate>Tue, 01 Mar 2016 11:28:38 GMT</pubDate> <title>status changed; owner set https://svn.boost.org/trac10/ticket/12033#comment:2 https://svn.boost.org/trac10/ticket/12033#comment:2 <ul> <li><strong>owner</strong> set to <span class="trac-author">Peter Dimov</span> </li> <li><strong>status</strong> <span class="trac-field-old">new</span> → <span class="trac-field-new">assigned</span> </li> </ul> Ticket Peter Dimov Tue, 01 Mar 2016 11:56:07 GMT <link>https://svn.boost.org/trac10/ticket/12033#comment:3 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:3</guid> <description> <p> <code>boostdep msm</code> or <code>boostdep --primary msm</code> lists the primary (direct) dependencies only. <code>boostdep --secondary msm</code> lists the secondary (indirect) dependencies. You can combine these into one as <code>boostdep --primary msm --secondary msm</code>. </p> <p> There's presently no easy way to just retrieve a list with all dependencies for the purposes of preparing a modular release. <code>boostdep --list-dependencies</code>, which I use for preparing the dependency list that <code>bpm</code> uses, only lists the primary dependencies as well, because <code>bpm install</code> automatically follows the dependency graph. </p> </description> <category>Ticket</category> </item> <item> <author>edaskel@…</author> <pubDate>Tue, 01 Mar 2016 16:49:37 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:4 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:4</guid> <description> <p> Thanks for the information. It seems that "secondary" lists some dependencies that are not necessary for me - for example, container, iterator, range and python. Perhaps one of the primary dependencies requires them for a header I don't use. For example, msm requires a library, and that library has some features that use Spirit or Python. However, msm does not use those features... Nevertheless spirit and python are listed as secondary dependencies. </p> <p> Will "bpm" check out just the primary and (mandatory) secondary dependencies for a given module? I am experiencing a compile failure so I cannot check it out myself... If not, I think this would be a worthwhile feature that would make modular Boost more attractive. </p> </description> <category>Ticket</category> </item> <item> <dc:creator>Peter Dimov</dc:creator> <pubDate>Tue, 01 Mar 2016 17:03:45 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:5 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:5</guid> <description> <blockquote class="citation"> <p> Thanks for the information. It seems that "secondary" lists some dependencies that are not necessary for me - for example, container, iterator, range and python. Perhaps one of the primary dependencies requires them for a header I don't use. </p> </blockquote> <p> That's how <code>boostdep</code> works, yes. It tracks dependencies on a coarse module level, and not on a header file level. If you want to just extract the minimal subset required for <code>msm</code>, you can use <code>bcp</code>, which does work on a header level. </p> <p> When you tell <code>bpm</code> to install <code>msm</code>, and it installs a dependent module <code>M</code> which uses, say, <code>iterator</code>, it also installs <code>iterator</code> because otherwise you'd have a working <code>msm</code> but won't have a working <code>M</code>, and <code>bpm</code> doesn't do such partial installs. </p> <p> We've done some work to reduce unnecessary dependencies and make subsets leaner, but there remains a lot to be done, and many maintainers don't consider it a priority as Boost is still oriented towards monolithic releases. Sorry. :-) </p> </description> <category>Ticket</category> </item> <item> <author>edaskel@…</author> <pubDate>Tue, 01 Mar 2016 17:35:38 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:6 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:6</guid> <description> <p> I understand. Thanks for considering my request. </p> <p> In order to sell clients on having Boost as a dependency it's helpful to 1) isolate just the libraries they actually need, and 2) treat them as git submodules so they can be versioned independently of the primary codebase. With an approach based on bcp the code itself is incorporated into the client's project, and they must take charge of maintenance and cannot easily incorporate upstream fixes. Therefore I have chosen to semi-manually generate the dependency list, by starting with the "boostdep" output and adding additional libraries identified by compiler errors. </p> <p> Would it help for me to make a feature request out of this ticket? Is there a more suitable venue? Thanks! </p> </description> <category>Ticket</category> </item> <item> <dc:creator>Peter Dimov</dc:creator> <pubDate>Tue, 01 Mar 2016 17:44:47 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:7 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:7</guid> <description> <p> I could probably extend <code>boostdep</code> with another report that would show a full dependency list formed by following the header graph instead of the module graph, but I'm currently a bit short of time, so I'm not sure when I'd be able to do that. </p> </description> <category>Ticket</category> </item> <item> <author>edaskel@…</author> <pubDate>Tue, 01 Mar 2016 18:08:39 GMT</pubDate> <title>type changed https://svn.boost.org/trac10/ticket/12033#comment:8 https://svn.boost.org/trac10/ticket/12033#comment:8 <ul> <li><strong>type</strong> <span class="trac-field-old">Bugs</span> → <span class="trac-field-new">Feature Requests</span> </li> </ul> Ticket Peter Dimov Tue, 01 Mar 2016 22:47:56 GMT <link>https://svn.boost.org/trac10/ticket/12033#comment:9 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:9</guid> <description> <p> OK, please try <code>boostdep --subset msm</code> on the develop branch. </p> </description> <category>Ticket</category> </item> <item> <author>edaskel@…</author> <pubDate>Wed, 02 Mar 2016 01:06:29 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:10 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:10</guid> <description> <p> Thanks! I find that compared with my list it is missing the following libraries: </p> <p> detail integer move </p> <p> and this library is excess: </p> <p> predef </p> </description> <category>Ticket</category> </item> <item> <dc:creator>Peter Dimov</dc:creator> <pubDate>Wed, 02 Mar 2016 09:41:58 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:11 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:11</guid> <description> <p> Could you please give me the inclusion chains that cause <code>detail</code>, <code>integer</code> and <code>move</code> to be needed, so that I can try to track that down? (That would of course depend on which Boost it's run, I'm testing it on the develop branch.) </p> <p> <code>Predef</code>, in <code>boostdep</code>'s opinion, is needed because </p> <p> <code>boost/msm/front/euml/common.hpp -&gt; boost/mpl/string.hpp -&gt; boost/predef/other/endian.h</code> </p> <p> which looks correct to me. </p> </description> <category>Ticket</category> </item> <item> <author>edaskel@…</author> <pubDate>Wed, 02 Mar 2016 22:52:35 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:12 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:12</guid> <description> <p> predef sounds right to me too. I'm probably not using a header that would expose the dependency. </p> <p> boost/msm/back/state_machine.hpp =&gt; boost/function.hpp =&gt; boost/function/detail/prologue.hpp =&gt; boost/function/function_base.hpp =&gt; boost/integer.hpp </p> <p> boost/msm/back/state_machine.hpp =&gt; boost/function.hpp =&gt; boost/preprocessor/iteration/detail/iter/forward1.hpp =&gt; boost/function/detail/function_iterate.hpp =&gt; boost/function/detail/maybe_include.hpp =&gt; boost/function/function_template.hpp =&gt; boost/move/utility_core.hpp </p> <p> boost/msm/back/state_machine.hpp =&gt; boost/parameter.hpp =&gt; boost/parameter/parameters.hpp =&gt; boost/detail/is_xxx.hpp </p> </description> <category>Ticket</category> </item> <item> <dc:creator>Peter Dimov</dc:creator> <pubDate>Thu, 03 Mar 2016 09:09:08 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:13 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:13</guid> <description> <p> Fixed, I think. </p> </description> <category>Ticket</category> </item> <item> <author>edaskel@…</author> <pubDate>Thu, 03 Mar 2016 17:42:16 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:14 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:14</guid> <description> <p> I agree! It identifies six more libraries than I am using, but still, it is correct :) </p> <p> This will be a great tool to help library maintainers prune dependencies. Thanks for implementing this. </p> </description> <category>Ticket</category> </item> <item> <dc:creator>anonymous</dc:creator> <pubDate>Thu, 03 Mar 2016 17:46:12 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/12033#comment:15 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/12033#comment:15</guid> <description> <p> Oh, there's just one issue: "msm" is listed as a dependency of "msm" </p> </description> <category>Ticket</category> </item> </channel> </rss>