Request for a "Policy Review" regarding 'CMakeLists.txt'
A question has been brought up regarding whether or not a Boost library author is permitted to include a 'CMakeLists.txt' file in the root of the directory. This stemmed from a discussion at C++Now 2016 which included several members of the Boost Steering Committee and a sampling of the Boost community. We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory. * Several libraries, such as Boost.Hana and Boost.Spirit, have two distribution mechanisms: one as distributed with Boost and the other as an independent package. The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution. * Several companies have revealed that they are building Boost with their own custom CMake scripts. The suggested policy change would enable authors to relieve the infrastructure cost of their CMake users and unify how their library is built. * CMake is, by far, the most popular build system for C++. Allowing authors to support CMake users in addition to BJam will help the Boost ecosystem to grow and thrive by lowering the barriers to access. -- David Sankel
On May 15, 2016 11:32:07 PM EDT, David Sankel
A question has been brought up regarding whether or not a Boost library author is permitted to include a 'CMakeLists.txt' file in the root of the directory. This stemmed from a discussion at C++Now 2016 which included several members of the Boost Steering Committee and a sampling of the Boost community.
We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
I have no problem with the proposed change provided the normal Boost build and release processes are not affected or are changed easily enough and those maintaining those processes are willing to make the changes needed or accept changes from someone else interested in seeing this proposal succeed. ___ Rob (Sent from my portable computation engine)
"David Sankel" wrote in message news:CAFYdOOJWe=8XgsiQZf-uv+=5+3tukVq52rzQtTGbO5=ffb9nfA@mail.gmail.com...
[...] We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
+1
[...] * CMake is, by far, the most popular build system for C++. Allowing authors to support CMake users in addition to BJam will help the Boost ecosystem to grow and thrive by lowering the barriers to access.
It's really time. Boris
On 5/15/16 8:32 PM, David Sankel wrote:
We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Hmmm - as far as I understand it, any policy has been a requirement that libraries include build, src, doc and test directories and that that these include boost build scripts. I don't think that "policy" has ever prohibited including anything else at the author's discretion. The serialization library has a number of "extra" top level directories: test_util, performance, cmake. A number of libraries have stuff in the doc directory which is special. It doesn't have a top level cmake file because I chose not to do this, not because I thought it violated some "policy". I've been doing this for many years. So I don't there's a lot to discuss. Though it's off topic - CMake isn't all that much better than boost build - actually it's not even comparable as it doesn't do the the same thing. Robert Ramey
On May 16, 2016, at 8:31 AM, Robert Ramey
wrote: On 5/15/16 8:32 PM, David Sankel wrote:
We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Hmmm - as far as I understand it, any policy has been a requirement that libraries include build, src, doc and test directories and that that these include boost build scripts. I don't think that "policy" has ever prohibited including anything else at the author's discretion. The serialization library has a number of "extra" top level directories: test_util, performance, cmake. A number of libraries have stuff in the doc directory which is special. It doesn't have a top level cmake file because I chose not to do this, not because I thought it violated some "policy". I've been doing this for many years.
Yes, but there have been a few who have mentioned that it does break the guidelines. So lets fix the guidelines to avoid future confusion about this.
So I don't there's a lot to discuss.
Though it's off topic - CMake isn't all that much better than boost build - actually it's not even comparable as it doesn't do the the same thing.
Robert Ramey
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
On Mon, May 16, 2016 at 8:31 AM, Robert Ramey
On 5/15/16 8:32 PM, David Sankel wrote:
We recommend and propose that the Boost Guidelines are modified to
allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Hmmm - as far as I understand it, any policy has been a requirement that libraries include build, src, doc and test directories and that that these include boost build scripts. I don't think that "policy" has ever prohibited including anything else at the author's discretion. The serialization library has a number of "extra" top level directories: test_util, performance, cmake. A number of libraries have stuff in the doc directory which is special. It doesn't have a top level cmake file because I chose not to do this, not because I thought it violated some "policy". I've been doing this for many years.
So I don't there's a lot to discuss.
I see your point, but some disagree what the current policies imply and are asking others to remove 'CMakeLists.txt' files from their root directories. Clear guidance is what is needed here. -- David Sankel
* Several libraries, such as Boost.Hana and Boost.Spirit, have two distribution mechanisms: one as distributed with Boost and the other as an independent package.
What if header-only library A is using Hana from Boost 1.61 and header-only library B is using independent Hana released in 2017? Will this violate ODR (if compile at all) if both A and B are used in the same application?
The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution.
Hana does already include CMakeLists.txt in 1.61, why is that? Why header-only library such as Hana needs a build script that is 5 pages long (plus walls of text in cmake directory)? Bjam does support header-only libraries and does not require much from library author. If you have 1.61 extracted, navigate to boost/libs/hana/CMakeLists.txt line 105 and please tell me why library included in Boost 1.61 is trying to search for Boost 1.59? Do you want every Boost library to search their own version of Boost? It requires CMake 3.0 released in 2014 and searches for Boost 1.59 released in 2015 - this is not going to work. Best FindBoost.cmake has to offer is 1.56. What BOOST_HANA_HAS_WEXTRA does? What is boost/libs/hana/LICENSE.md doing? Is this legal? * Several companies have revealed that they are building Boost with
their own custom CMake scripts. The suggested policy change would enable authors to relieve the infrastructure cost of their CMake users and unify how their library is built.
I have opposite experience by replacing dozens of CMake scripts with one tiny Jamfile.
* CMake is, by far, the most popular build system for C++. Allowing authors to support CMake users in addition to BJam will help the Boost ecosystem to grow and thrive by lowering the barriers to access.
IMHO, CMakeLists.txt looks ugly as everything in camel starting with C. There are lots of Boost libraries having only "index.html" in their top-level directory, look, there is a pattern here and I'm not sure this should be uglified. I don't care too much about popularity, but Bjam/BB does support C++ much better than CMake. It has, for example, "usage-requirements".
Hi, The thing is, despite whether you believe bjam is better than CMake or not (please tell me how I can easily build Boost.MPI with Bjam without an additional config file that allows me to *just* do that?), there's another very important aspect of the problem, and it's whether Boost will survive in the current C++ world, where everyone uses CMake. People writing code to build independent parts of Boost for static linking in their libraries or tools that are supposed to be portable, regardless of the target or build OS, are already building it with CMake... probably because everything else in the world is built with CMake (or with autofo-- autotools, but that's easy enough to wrap with ExternalProject - for the record, I'm not saying that it's good). An example from the top of my head: YCM. This isn't really a discussion that needs to go deeply technical, but if you want to do that, by all means, please do point out what bjam does better than CMake - as in, please make a list of stuff that is so great in bjam, so that we can actually discuss this technically (just mentioning usage-requirements doesn't do this for me, because if I understand the docs correctly, it's trivial to do this in CMake). For the record: I work with CMake on a daily basis at work, and I feel deep hatred for some of its idiosyncrasies, but I like it far better than working with bjam (and trust me, I've build my fair share of different Boost configurations over the past few years). Now; we could make a poll to see whether the distribution of people for CMake among all Boost members is the same as it was at the panel at C++Now (where the vast majority of people raised their hands after the SC asked who wants Boost to be converted to CMake - or thinks it *needs* to be converted), but I don't know if going there is productive; what Dave and David said about the future and the deep need to actually make a move there and not get eaten by everybody who does that is probably the primary argument for actually doing the switch here. I realize I am kinda derailing this thread, and there's a chance this should be made into a separate one; that might actually be a good idea. Just let me say one more thing. I spoke with a few (as in: not so many of them; I wish I thought about this earlier than Saturday) at C++Now, including Dave, and asked them whether they think that the glue between different Boost libraries, that is: the build system used for the entire thing - should be considered a part of each individual library, or as something that is outside of the scope for each individual library, and rather a part of Boost itself, which would 1) make the authors of each library not actually own their build systems, just the code (which I believe is a good thing) and 2) make the Steering Committee the de facto owner of the build system *across Boost*, which, in turn, would allow them to make a decision saying "we are going to switch to CMake over the next X years/releases/whatever, and here's how we are doing it". I believe that (2) should be done; if we just *encourage* library authors to also support CMake in their libraries, it will result with a lot of build systems that are separate entities, when I believe that they should be standardized across Boost - and this is the part when I don't believe that without the SC's definitive and authoritative voice saying "this is how it's done", it won't be done in a way that could potentially be made official, because of the differences different people have about build systems. In the end, this is about moving forward, instead of staying in the same place forever, because as in many different industries, in this one not moving actually means moving backwards, and moving backwards is the kind of a thing that can murder Boost. I expect people to raise opinions of "this is too radical" and "why should we listen to somebody posting on these mailing lists for the first time with a message like this one?"; that is fine. But the primary goal I have here is to remind you again (or tell you, if you weren't there) what Dave said on Saturday: the Steering Committee's role is to protect Boost. I believe that not moving forwards with an actual, active (as opposed to passive "yeah, you can do this; whatever") switch to CMake (*even despite any actual technical argument proving Bjam's superiority!*) is actively harmful in the era where almost all relevant (this includes proprietary!), big C++ projects that are not GNU are using CMake to build themselves. A final note, again kind of repeating what Dave said (because I think it's extremely important and we tend to forget it these days): Boost is supposed to serve *the entire C++ community; it isn't Boost's goal to serve Boost's community*. Thanks in advance for no open hostility in replies to this, hopefully we can make some progress thanks to Saturday's discussion that basically sparked this email. On Mon, May 16, 2016 at 5:48 PM Mikhail Strelnikov < mikhail.strelnikov@gmail.com> wrote:
* Several libraries, such as Boost.Hana and Boost.Spirit, have two distribution mechanisms: one as distributed with Boost and the other as
an
independent package.
What if header-only library A is using Hana from Boost 1.61 and header-only library B is using independent Hana released in 2017? Will this violate ODR (if compile at all) if both A and B are used in the same application?
The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution.
Hana does already include CMakeLists.txt in 1.61, why is that?
Why header-only library such as Hana needs a build script that is 5 pages long (plus walls of text in cmake directory)? Bjam does support header-only libraries and does not require much from library author.
If you have 1.61 extracted, navigate to boost/libs/hana/CMakeLists.txt line 105 and please tell me why library included in Boost 1.61 is trying to search for Boost 1.59? Do you want every Boost library to search their own version of Boost?
It requires CMake 3.0 released in 2014 and searches for Boost 1.59 released in 2015 - this is not going to work. Best FindBoost.cmake has to offer is 1.56.
What BOOST_HANA_HAS_WEXTRA does?
What is boost/libs/hana/LICENSE.md doing? Is this legal?
* Several companies have revealed that they are building Boost with
their own custom CMake scripts. The suggested policy change would enable authors to relieve the infrastructure cost of their CMake users and unify how their library is built.
I have opposite experience by replacing dozens of CMake scripts with one tiny Jamfile.
* CMake is, by far, the most popular build system for C++. Allowing authors to support CMake users in addition to BJam will help the Boost ecosystem to grow and thrive by lowering the barriers to access.
IMHO, CMakeLists.txt looks ugly as everything in camel starting with C. There are lots of Boost libraries having only "index.html" in their top-level directory, look, there is a pattern here and I'm not sure this should be uglified.
I don't care too much about popularity, but Bjam/BB does support C++ much better than CMake. It has, for example, "usage-requirements".
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
As a complete neutral here, I think that Michal is very much on-point.
I've been a C++ programmer for 20+ years, and have used boost on-and-off
for much of that time.
For much of my professional career I have been working with build systems
and configuration management, and I know much more about C++ build systems
than a person who wishes to remain sane should know :-)
I've used make, autotools, MSBuild, CMake, jam, scons, Premake, and more.
CMake has "won". It isn't perfect, but it's the utterly dominant defacto
standard. Unless there is an amazingly compelling reason not to migrate,
putting together a CMake migration plan makes good sense.
And the same kind of thinking should be applied to issue tracking, version
control, automation, etc, IMHO.
It is only through my involvement with Ethereum that I am now more closely
looking at Boost as a DEVELOPER rather than as a USER, and it looks awfully
old-fashioned and stick-in-mud to me, I have to say, sadly.
Anyway - enough from me ... best wishes to you all. You have a gem with
your codebase. Please don't let it wither on the vine ...
On Mon, May 16, 2016 at 9:32 AM, Michał Dominiak
Hi,
The thing is, despite whether you believe bjam is better than CMake or not (please tell me how I can easily build Boost.MPI with Bjam without an additional config file that allows me to *just* do that?), there's another very important aspect of the problem, and it's whether Boost will survive in the current C++ world, where everyone uses CMake. People writing code to build independent parts of Boost for static linking in their libraries or tools that are supposed to be portable, regardless of the target or build OS, are already building it with CMake... probably because everything else in the world is built with CMake (or with autofo-- autotools, but that's easy enough to wrap with ExternalProject - for the record, I'm not saying that it's good). An example from the top of my head: YCM.
This isn't really a discussion that needs to go deeply technical, but if you want to do that, by all means, please do point out what bjam does better than CMake - as in, please make a list of stuff that is so great in bjam, so that we can actually discuss this technically (just mentioning usage-requirements doesn't do this for me, because if I understand the docs correctly, it's trivial to do this in CMake). For the record: I work with CMake on a daily basis at work, and I feel deep hatred for some of its idiosyncrasies, but I like it far better than working with bjam (and trust me, I've build my fair share of different Boost configurations over the past few years).
Now; we could make a poll to see whether the distribution of people for CMake among all Boost members is the same as it was at the panel at C++Now (where the vast majority of people raised their hands after the SC asked who wants Boost to be converted to CMake - or thinks it *needs* to be converted), but I don't know if going there is productive; what Dave and David said about the future and the deep need to actually make a move there and not get eaten by everybody who does that is probably the primary argument for actually doing the switch here.
I realize I am kinda derailing this thread, and there's a chance this should be made into a separate one; that might actually be a good idea. Just let me say one more thing.
I spoke with a few (as in: not so many of them; I wish I thought about this earlier than Saturday) at C++Now, including Dave, and asked them whether they think that the glue between different Boost libraries, that is: the build system used for the entire thing - should be considered a part of each individual library, or as something that is outside of the scope for each individual library, and rather a part of Boost itself, which would 1) make the authors of each library not actually own their build systems, just the code (which I believe is a good thing) and 2) make the Steering Committee the de facto owner of the build system *across Boost*, which, in turn, would allow them to make a decision saying "we are going to switch to CMake over the next X years/releases/whatever, and here's how we are doing it".
I believe that (2) should be done; if we just *encourage* library authors to also support CMake in their libraries, it will result with a lot of build systems that are separate entities, when I believe that they should be standardized across Boost - and this is the part when I don't believe that without the SC's definitive and authoritative voice saying "this is how it's done", it won't be done in a way that could potentially be made official, because of the differences different people have about build systems.
In the end, this is about moving forward, instead of staying in the same place forever, because as in many different industries, in this one not moving actually means moving backwards, and moving backwards is the kind of a thing that can murder Boost.
I expect people to raise opinions of "this is too radical" and "why should we listen to somebody posting on these mailing lists for the first time with a message like this one?"; that is fine. But the primary goal I have here is to remind you again (or tell you, if you weren't there) what Dave said on Saturday: the Steering Committee's role is to protect Boost. I believe that not moving forwards with an actual, active (as opposed to passive "yeah, you can do this; whatever") switch to CMake (*even despite any actual technical argument proving Bjam's superiority!*) is actively harmful in the era where almost all relevant (this includes proprietary!), big C++ projects that are not GNU are using CMake to build themselves.
A final note, again kind of repeating what Dave said (because I think it's extremely important and we tend to forget it these days): Boost is supposed to serve *the entire C++ community; it isn't Boost's goal to serve Boost's community*.
Thanks in advance for no open hostility in replies to this, hopefully we can make some progress thanks to Saturday's discussion that basically sparked this email.
On Mon, May 16, 2016 at 5:48 PM Mikhail Strelnikov < mikhail.strelnikov@gmail.com> wrote:
* Several libraries, such as Boost.Hana and Boost.Spirit, have two distribution mechanisms: one as distributed with Boost and the other as
an
independent package.
What if header-only library A is using Hana from Boost 1.61 and header-only library B is using independent Hana released in 2017? Will this violate ODR (if compile at all) if both A and B are used in the same application?
The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution.
Hana does already include CMakeLists.txt in 1.61, why is that?
Why header-only library such as Hana needs a build script that is 5 pages long (plus walls of text in cmake directory)? Bjam does support header-only libraries and does not require much from library author.
If you have 1.61 extracted, navigate to boost/libs/hana/CMakeLists.txt line 105 and please tell me why library included in Boost 1.61 is trying to search for Boost 1.59? Do you want every Boost library to search their own version of Boost?
It requires CMake 3.0 released in 2014 and searches for Boost 1.59 released in 2015 - this is not going to work. Best FindBoost.cmake has to offer is 1.56.
What BOOST_HANA_HAS_WEXTRA does?
What is boost/libs/hana/LICENSE.md doing? Is this legal?
* Several companies have revealed that they are building Boost with
their own custom CMake scripts. The suggested policy change would enable authors to relieve the infrastructure cost of their CMake users and unify how their library is built.
I have opposite experience by replacing dozens of CMake scripts with one tiny Jamfile.
* CMake is, by far, the most popular build system for C++. Allowing authors to support CMake users in addition to BJam will help the Boost ecosystem to grow and thrive by lowering the barriers to access.
IMHO, CMakeLists.txt looks ugly as everything in camel starting with C. There are lots of Boost libraries having only "index.html" in their top-level directory, look, there is a pattern here and I'm not sure this should be uglified.
I don't care too much about popularity, but Bjam/BB does support C++ much better than CMake. It has, for example, "usage-requirements".
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
-- bob@summerwill.net
People, If you're new, or relatively new, to this list, do *not* hit Reply again until you read our policies[1]. Pay particular attention to [2] and [3], before your next post. [1] http://www.boost.org/community/policy.html [2] http://www.boost.org/community/policy.html#subject-line [3] http://www.boost.org/community/policy.html#quoting ___ Rob (Sent from my portable computation engine)
I think Bob has captured my feelings on this very well. In particular:
On Mon, May 16, 2016 at 10:38 AM, Bob Summerwill
CMake has "won". It isn't perfect, but it's the utterly dominant defacto standard. Unless there is an amazingly compelling reason not to migrate, putting together a CMake migration plan makes good sense.
I don't know Boost Build very well (I'm trying to learn more), but it seems like a perfectly fine build system. I wouldn't be surprised to discover that it's superior to CMake, since I'm very aware of that tool's many flaws. However, CMake is *good enough*, and far, far more popular than bjam. In fact, I believe Boost itself is the only bjam project I've ever used. To someone who comes from other open source projects, it creates a barrier to adoption and also bolsters the image of Boost as arcane and hard to understand. And the same kind of thinking should be applied to issue tracking, version
control, automation, etc, IMHO.
Ditto. In the web development world, the popularity of some default choices for each infrastructure element makes it fast to get new developers up to speed and makes a project look "friendly". If we want to attract more users and developers, we should do the same. Jeff
Hi,
The thing is, despite whether you believe bjam is better than CMake or not (please tell me how I can easily build Boost.MPI with Bjam without an additional config file that allows me to *just* do that?), I have no Idea, could not find the bjam doc, could not find a useful description of how the function that add MPI tests works (it does not, really, bjam hangs on MPI tests on some of my platform, but it wasn't considered a problem...), could not find the bjam... whatever the thing
On 16/05/2016 18:32, Michał Dominiak wrote: that extract the MPI options etc. I dropped trying to contribute, I cannot waste days trying to understand how bjam tries to work *just for a single project*. Same thing goes for the doc BTW.
there's another very important aspect of the problem, and it's whether Boost will survive in the current C++ world, where everyone uses CMake. People writing code to build independent parts of Boost for static linking in their libraries or tools that are supposed to be portable, regardless of the target or
This isn't really a discussion that needs to go deeply technical, but if you want to do that, by all means, please do point out what bjam does better than CMake - as in, please make a list of stuff that is so great in bjam, Actually I don't really care. Whatever it is, it clearly wasn't enough to win the war outside of Boost despite its many years of existence. And don't get now wrong, I *hate* CMake (just slightly less than I hate autotools). But I know time spent understanding CMake won't be completely wasted. And I can find documentation regarding how to use CMake, when bjam barely exists in the outside world.
Alain
Hi Alain,
On May 16, 2016, at 1:16 PM, alainm
wrote: I dropped trying to contribute, I cannot waste days trying to understand how bjam tries to work *just for a single project*. Same thing goes for the doc BTW.
That’s too bad, we could use your help. As far as why Intel MPI isn’t natively supported by Boost tools without explicit configuration, it’s complicated. For starters, iMPI doesn’t seem to report the compiler return code back through their mpicxx wrapper script so, for example, if we pass an invalid option to the Intel Mpi wrapper, we get back a zero return code (which we assume means the option is supported by the wrapper / compiler). -bash-4.1$ mpicxx -showme:compile icpc: command line warning #10006: ignoring unknown option '-showme:compile' /usr/lib/../lib64/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' -bash-4.1$ echo $? 0 While if we pass this same option directly to the compiler, we get a failure rc. -bash-4.1$ icpc -showme:compile icpc: command line warning #10006: ignoring unknown option '-showme:compile' icpc: command line error: no files specified; for help type "icpc -help" -bash-4.1$ echo $? 1 This makes it nearly impossible for us to automatically detect the Intel MPI wrapper in bb if we can’t interrogate the wrapper to find out what’s supported. If you have an Intel MPI contact, perhaps you could raise this issue with them or have them contact me and we’ll work this out together. Noel
A final note, again kind of repeating what Dave said (because I
On 16 May 2016 at 16:32, Michał Dominiak wrote: think
it's extremely important and we tend to forget it these days): Boost is supposed to serve *the entire C++ community; it isn't Boost's goal to serve Boost's community*.
I wanted to repost tagging the Subject field to emphasise this exact sentiment which might have been missed (by Dave I assume you mean Dave Abrahams, it sounds like him anyway). I'd personally consider this paragraph the most important thing in your post and it sums up my personal position *exactly*. The usual response is anyone proposing disruptive change to Boost is "somebody has to lead this out" or "Boost is community led" i.e. build consensus first. Both those responses do not allow for the highly disruptive clean fork of Boost necessary to return Boost to serving C++ at large, rather than the never ending Boost navel gazing it has become. Such a move can only be generated by non-passive leadership, and Boost doesn't have active leadership. But I'll freely admit I have given up on trying to make any substantial changes to Boost. I prototyped as I said I would a Boost-lite transition layer suitable for a clean Boost fork which I'm using in all my own code. Nobody was interested. The community *likes* things just the way they are: serving the Boost community, and to hell with the entire C++ community. A shame, and a waste, and I suspect in the long term self defeating. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
On 5/17/2016 10:24 AM, Niall Douglas wrote:
On 16 May 2016 at 16:32, Michał Dominiak wrote:
A final note, again kind of repeating what Dave said (because I think it's extremely important and we tend to forget it these days): Boost is supposed to serve *the entire C++ community; it isn't Boost's goal to serve Boost's community*.
I wanted to repost tagging the Subject field to emphasise this exact sentiment which might have been missed (by Dave I assume you mean Dave Abrahams, it sounds like him anyway). I'd personally consider this paragraph the most important thing in your post and it sums up my personal position *exactly*.
The usual response is anyone proposing disruptive change to Boost is "somebody has to lead this out" or "Boost is community led" i.e. build consensus first. Both those responses do not allow for the highly disruptive clean fork of Boost necessary to return Boost to serving C++ at large, rather than the never ending Boost navel gazing it has become. Such a move can only be generated by non-passive leadership, and Boost doesn't have active leadership.
But I'll freely admit I have given up on trying to make any substantial changes to Boost. I prototyped as I said I would a Boost-lite transition layer suitable for a clean Boost fork which I'm using in all my own code. Nobody was interested.
Maybe no one was interested because no one knows what you are talking about.
The community *likes* things just the way they are: serving the Boost community, and to hell with the entire C++ community. A shame, and a waste, and I suspect in the long term self defeating.
Boost consists of about 130 different libraries. I venture to guess that there is not a single library author of those 130 different libraries that wouldn't like to see his library used more by the C++ community. But why you think that Boost library authors write only for other Boost library authors rather than for any C++ programmer is something you need to explain in specific terms. Just making that claim does not explain anything.
On 17 May 2016 at 19:39, Edward Diener wrote:
But I'll freely admit I have given up on trying to make any substantial changes to Boost. I prototyped as I said I would a Boost-lite transition layer suitable for a clean Boost fork which I'm using in all my own code. Nobody was interested.
Maybe no one was interested because no one knows what you are talking about.
This I think is inaccurate except maybe for your good self personally. I presented a plan for how to technically transition to a C++ 14 only Boost 2.0 at my C++ Now 2015 presentation: https://goo.gl/VFFXUl The talk was well attended, and by much of the more senior Boost community members. I got the impression everyone understood well what was being proposed. Understanding was not the issue. Agreement with forking Boost into a C++ 14 only edition was the issue.
The community *likes* things just the way they are: serving the Boost community, and to hell with the entire C++ community. A shame, and a waste, and I suspect in the long term self defeating.
Boost consists of about 130 different libraries. I venture to guess that there is not a single library author of those 130 different libraries that wouldn't like to see his library used more by the C++ community. But why you think that Boost library authors write only for other Boost library authors rather than for any C++ programmer is something you need to explain in specific terms. Just making that claim does not explain anything.
The C++ 14 only libraries contributed to date are clearly written first for C++ not Boost. They are the future we should be proactively encouraging into a new clean ground up redesigned fork of Boost, a Boost 2.0, instead of corralling them into legacy and outdated packaging, build, design, documentation and idioms out of some misguided desire for serving the legacy Boost usership before that of the wider C++ community. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
On 5/19/2016 5:17 AM, Niall Douglas wrote:
On 17 May 2016 at 19:39, Edward Diener wrote:
But I'll freely admit I have given up on trying to make any substantial changes to Boost. I prototyped as I said I would a Boost-lite transition layer suitable for a clean Boost fork which I'm using in all my own code. Nobody was interested.
Maybe no one was interested because no one knows what you are talking about.
This I think is inaccurate except maybe for your good self personally.
I presented a plan for how to technically transition to a C++ 14 only Boost 2.0 at my C++ Now 2015 presentation:
The talk was well attended, and by much of the more senior Boost community members.
I got the impression everyone understood well what was being proposed. Understanding was not the issue. Agreement with forking Boost into a C++ 14 only edition was the issue.
OK, I wasn't at C++ Now 2015.
The community *likes* things just the way they are: serving the Boost community, and to hell with the entire C++ community. A shame, and a waste, and I suspect in the long term self defeating.
Boost consists of about 130 different libraries. I venture to guess that there is not a single library author of those 130 different libraries that wouldn't like to see his library used more by the C++ community. But why you think that Boost library authors write only for other Boost library authors rather than for any C++ programmer is something you need to explain in specific terms. Just making that claim does not explain anything.
The C++ 14 only libraries contributed to date are clearly written first for C++ not Boost.
What do you mean that a library is "written first for Boost" ?
They are the future we should be proactively encouraging into a new clean ground up redesigned fork of Boost, a Boost 2.0, instead of corralling them into legacy and outdated packaging, build, design, documentation and idioms
What is outdated about the "packaging, build, design, documentation, and idioms of current Boost" ?
out of some misguided desire for serving the legacy Boost usership before that of the wider C++ community.
This is just more rhetoric without any basis in fact. People who write libraries for Boost inevitably write them to be useful for C++ programmers. In a wide variety of libraries some will be more or less useful for varying levels of C++ programming. You are on some sort of crusade sir in order to push forward your opinion that only libraries which use the latest C++ standard are useful for C++ programmers. I find very little technical basis for such an opinion. I do agree that libraries written using the latest C++ standard can offer some language facilities for easier use than otherwise. But believing that libraries not using the latest C++ standard are not worthwhile is just silly.
On 5/19/16 2:17 AM, Niall Douglas wrote:
On 17 May 2016 at 19:39, Edward Diener wrote:
But I'll freely admit I have given up on trying to make any substantial changes to Boost. I prototyped as I said I would a Boost-lite transition layer suitable for a clean Boost fork which I'm using in all my own code. Nobody was interested.
Maybe no one was interested because no one knows what you are talking about.
This I think is inaccurate except maybe for your good self personally.
I presented a plan for how to technically transition to a C++ 14 only Boost 2.0 at my C++ Now 2015 presentation:
The talk was well attended, and by much of the more senior Boost community members.
I happened to attend that talk. I'm not sure if I understood it all. But I can definitely say that I found the proposition unconvincing.
I got the impression everyone understood well what was being proposed. Understanding was not the issue. Agreement with forking Boost into a C++ 14 only edition was the issue.
I saw nothing to be gained by this. I still don't. Boost as from day one had the policy that any library submitted should be compatible with the latest C++ standard. Any library author is free to build his library with C++14 only. Given the above, I never understood what you're proposal was (actually is, because I still don't understand it). Was in some sense to deprecate libraries which supported older compilers as well as later ones? How would you enforce this? Was it to remove libraries which support older compilers from the official distribution? What would be the point of that if they still support the most recent version of C++? Was it to fork boost and make C++14 only versions of the current library? Why would making a libraries applicability narrower make anything better? And who would that considerable amount of work? The library author/maintainer? How would for him to do this? As I said the proposal was either not well conceived, not well explained or most likely both. Now if you had proposed something like: I'd like to make and distribute my own boost distribution which includes only those libraries which are C++14 compatible but not compatible with older compilers - you don't need anyone's permission. Just have at at it. It's not a huge task - at least compared to the other tasks we do. Basically it's just means making specialized version of some python script and start advertising. Actually I alluded to some of this during my Boost 2.0 proposals in 2015. My concern was accommodating was addressing the expected future growth of boost. Here are the relevant proposals a) Resolve issues related to modularization and dependency management. Work on this has been on going and making progress but it's slow going as it's a much more difficult proplem than meets the eye. b) Support development of the ability to generate, test and support subsets of the Boost distribution. c) NOW you could easily propose a subset distribution. Here are some ideas i) a distribution which would not include any components which are now supported by the standard library. This would work for those shops which want to pick a canonical implementation and not have multiple versions of the same thing. ii) The Naill distribution - this would include only those libraries which meet the Naill standard for C++14+ purity. It sounds to me that this is what you're proposing. As more and more library authors became convinced of the utility and popularity of restriction their library set to those certified as "Naill pure" and made changes accordingly, this distribution would naturally grow over time. It wouldn't take a lot of work to maintained. iii) Boost recommended distributation - the concensus of what we think most programmers should be using and excluding those things that wouldn't be recommended for new projects. iv) The whole enchilada - what we are generating and testing now - which would not change.
The community *likes* things just the way they are: serving the Boost community, and to hell with the entire C++ community.
I don't think that is anyway accurate characterization of the community - particularly those who have written, maintained libraries and/or infrastructure. I also don't think there is any evidence to support such a characterization. You seem to believe that the lack of support for your proposal supports this characterization. Well, it's also possible that the large majority of those exposed to the proposal just considered it a bad idea.
Boost consists of about 130 different libraries. I venture to guess that there is not a single library author of those 130 different libraries that wouldn't like to see his library used more by the C++ community.
Right - obviously.
But why you think that Boost library authors write only for other Boost library authors rather than for any C++ programmer is something you need to explain in specific terms. Just making that claim does not explain anything.
Agreed.
The C++ 14 only libraries contributed to date are clearly written first for C++ not Boost.
No problem with that - actually, all the libraries have been written for C++.
They are the future we should be proactively encouraging into a new clean ground up redesigned fork of Boost, a
This doesn't follow from any premise so far stated. Such a fork is a very, very, very bad idea as I stated above. It's also unnecessary to achieve what I think you're goals are. (I doubt I share you're goals either - but it doesn't matter. I challange you to implement as I've described above and prove me wrong).
Boost 2.0, instead of corralling them into legacy and outdated packaging, build, design, documentation and idioms out of some misguided desire for serving the legacy Boost usership before that of the wider C++ community.
I don't see this as a coherent view. But it doesn't matter. I believe that the path we're on can lead to the ability to create custom distributions with different focuses. I don't see any conflict. The problem is that creating this "modular boost distribution system" is much much harder than most people realize. The number of people who are willing to suggest how to change something far, far exceeds the number of people willing and able to actually make this happen. Robert Ramey
On 19 May 2016, at 17:36, Robert Ramey
wrote: Boost as from day one had the policy that any library submitted should be compatible with the latest C++ standard. Any library author is free to build his library with C++14 only.
This is why I think the monolithic release is no longer a good format, most is not a coherent set of libraries that are all usable from a single users perspective and most users only need a couple libraries. Various attempts have been proposed to reduce dependencies inside boost with the aim to make libraries separately downloadable/releasable. Moving to git was a big change, but in general it’s very difficult to get consensus on *any* change for the better (for some at least). Why is it so difficult to introduce any change? Can’t we give library maintainers some parallel optionalities and see what will evolve out of it -or not-: allow to formally support aditional build systems, other documentation systems, allow different types of release schedules: standalone and separately downloadable headers only libraries that have zero dependencies.
On Thu, May 19, 2016 at 11:01 AM, M.A. van den Berg
allow to formally support aditional build systems,
We already allow that.
other documentation systems,
We already allow that.
allow different types of release schedules:
We already allow that.
standalone and separately downloadable headers only libraries that have zero dependencies.
We already allow that. And not only that.. We already have libraries that do one to all of the above. -- -- Rene Rivera -- Grafik - Don't Assume Anything -- Robot Dreams - http://robot-dreams.net -- rrivera/acm.org (msn) - grafikrobot/aim,yahoo,skype,efnet,gmail
On 19 May 2016, at 18:07, Rene Rivera
wrote: On Thu, May 19, 2016 at 11:01 AM, M.A. van den Berg
wrote: allow to formally support aditional build systems,
We already allow that.
other documentation systems,
We already allow that.
allow different types of release schedules:
We already allow that.
standalone and separately downloadable headers only libraries that have zero dependencies.
We already allow that.
And not only that.. We already have libraries that do one to all of the above.
As you might expect I’m very interested. Can you give more info about this? I think these are major elements that drive the interest to contribute and it’s not clear. E.g. I can’t find any statements about this in e.g. the “Boost Library Submission Process” to name something. More visibility to this would IMO add value.
On Thu, May 19, 2016 at 12:01 PM, M.A. van den Berg
This is why I think the monolithic release is no longer a good format, most is not a coherent set of libraries that are all usable from a single users perspective and most users only need a couple libraries. Various attempts have been proposed to reduce dependencies inside boost with the aim to make libraries separately downloadable/releasable.
I like the monolithic format. Its easy to get boost onto a system ("sudo apt-get boost" or whatever). And once its there, you have confidence that you get the whole toolbox should you need it. Its very convenient when building an application or a library to be able to grab any part of boost you need and just use it. Once you accept boost as a dependency then you know anyone using your application or library will have it available and it broadens the parts you can use. Even if you only need one part of boost (e.g., asio) what's the big deal about installing the whole thing? Its just as easy to install all of boost as it is to install a single library. Some might object that this is not a sustainable development model and if there were a thousand other libraries similar to Boost in that they each aggregated a hundred or more individual libraries into one package then I might agree. But the reality is that there is only one boost. Nothing else even comes in second place. Having a boost dependency as a single monolithic package with more libraries than you might need at the moment is a reasonable solution, and one that does not waste 180+ project managers time with trying to make their library compile without the rest of boost.
On 19 May 2016, at 18:15, Vinnie Falco
wrote: On Thu, May 19, 2016 at 12:01 PM, M.A. van den Berg
wrote: This is why I think the monolithic release is no longer a good format, most is not a coherent set of libraries that are all usable from a single users perspective and most users only need a couple libraries. Various attempts have been proposed to reduce dependencies inside boost with the aim to make libraries separately downloadable/releasable.
I like the monolithic format. Its easy to get boost onto a system ("sudo apt-get boost" or whatever). And once its there, you have confidence that you get the whole toolbox should you need it. Its very convenient when building an application or a library to be able to grab any part of boost you need and just use it. Once you accept boost as a dependency then you know anyone using your application or library will have it available and it broadens the parts you can use.
Even if you only need one part of boost (e.g., asio) what's the big deal about installing the whole thing? Its just as easy to install all of boost as it is to install a single library. Some might object that this is not a sustainable development model and if there were a thousand other libraries similar to Boost in that they each aggregated a hundred or more individual libraries into one package then I might agree.
But the reality is that there is only one boost. Nothing else even comes in second place. Having a boost dependency as a single monolithic package with more libraries than you might need at the moment is a reasonable solution, and one that does not waste 180+ project managers time with trying to make their library compile without the rest of boost.
I also like “sudo apt-get”, and I also like the it pulls in all the things you need and not having to worry about things, that’s exactly what I would love to see. The Debian package manager however does not download the whole repository of all debian packages, instead it models package dependencies and download the dependency tree. For boost this would mean that I could run “sudo apt-get boost-math” that it would download boost-math, boost core and maybe a couple more dependencies. I would also be able to pin version "sudo apt-get boost-math-1.31"
On 19 May 2016 at 17:25, M.A. van den Berg
I also like “sudo apt-get”, and I also like the it pulls in all the things you need and not having to worry about things, that’s exactly what I would love to see.
The Debian package manager however does not download the whole repository of all debian packages, instead it models package dependencies and download the dependency tree.
Debian's great. As far as I know, it's the only modularization of boost in use, and it's been working well for years, so I think it'd be a good model for us to base our efforts on. I suspect having a smaller number of modules helps usability as well.
On 19.05.2016 18:13, Daniel James wrote:
On 19 May 2016 at 17:25, M.A. van den Berg
wrote: I also like “sudo apt-get”, and I also like the it pulls in all the things you need and not having to worry about things, that’s exactly what I would love to see.
The Debian package manager however does not download the whole repository of all debian packages, instead it models package dependencies and download the dependency tree. Debian's great. As far as I know, it's the only modularization of boost in use, and it's been working well for years, so I think it'd be a good model for us to base our efforts on. I suspect having a smaller number of modules helps usability as well.
Fedora has been doing the same for many years. In fact, I'm not aware of any Linux distro that doesn't ship individual Boost libraries, which is why I have been promoting to do this modularization "inhouse", to avoid to put that burden on package maintainers, and different distros to vary slightly in their way to implement this, causing headaches for users on those platforms. Stefan -- ...ich hab' noch einen Koffer in Berlin...
On 20/05/2016 01:35, Stefan Seefeld wrote:
On 19.05.2016 18:13, Daniel James wrote:
On 19 May 2016 at 17:25, M.A. van den Berg
wrote: I also like “sudo apt-get”, and I also like the it pulls in all the things you need and not having to worry about things, that’s exactly what I would love to see.
The Debian package manager however does not download the whole repository of all debian packages, instead it models package dependencies and download the dependency tree. Debian's great. As far as I know, it's the only modularization of boost in use, and it's been working well for years, so I think it'd be a good model for us to base our efforts on. I suspect having a smaller number of modules helps usability as well.
Fedora has been doing the same for many years. In fact, I'm not aware of any Linux distro that doesn't ship individual Boost libraries, which is why I have been promoting to do this modularization "inhouse", to avoid to put that burden on package maintainers, and different distros to vary slightly in their way to implement this, causing headaches for users on those platforms.
I think the reference to modularization in Debian is slightly misleading. Each component with separately compiled libraries become a separate package. The header-only libraries are all inside a single package, libboost-dev or something like that. It's not like you can separately install boost.any -- Vladimir Prus http://vladimirprus.com
On 20 May 2016 at 07:35, Vladimir Prus
I think the reference to modularization in Debian is slightly misleading. Each component with separately compiled libraries become a separate package. The header-only libraries are all inside a single package, libboost-dev or something like that. It's not like you can separately install boost.any
It really doesn't matter if you can separately install boost.any or not. Most of the pain comes from binaries - especially for people who don't really care or want to know about boost. Downloading some headers and adding to the include path is easy enough for a developer, and unnecessary for a user, who only needs the binaries.
On 20.05.2016 02:35, Vladimir Prus wrote:
On 20/05/2016 01:35, Stefan Seefeld wrote:
On 19.05.2016 18:13, Daniel James wrote:
On 19 May 2016 at 17:25, M.A. van den Berg
wrote: I also like “sudo apt-get”, and I also like the it pulls in all the things you need and not having to worry about things, that’s exactly what I would love to see.
The Debian package manager however does not download the whole repository of all debian packages, instead it models package dependencies and download the dependency tree. Debian's great. As far as I know, it's the only modularization of boost in use, and it's been working well for years, so I think it'd be a good model for us to base our efforts on. I suspect having a smaller number of modules helps usability as well.
Fedora has been doing the same for many years. In fact, I'm not aware of any Linux distro that doesn't ship individual Boost libraries, which is why I have been promoting to do this modularization "inhouse", to avoid to put that burden on package maintainers, and different distros to vary slightly in their way to implement this, causing headaches for users on those platforms.
I think the reference to modularization in Debian is slightly misleading. Each component with separately compiled libraries become a separate package. The header-only libraries are all inside a single package, libboost-dev or something like that. It's not like you can separately install boost.any
Certainly. Modularising the Boost source code is hard, as we all have learned the hard way. All I'm trying to point out is downstream package maintainers had to deal with it, so it would be great to finally do it right upstream so they all don't have to redo it again. Stefan -- ...ich hab' noch einen Koffer in Berlin...
On 19 May 2016 at 23:35, Stefan Seefeld
Fedora has been doing the same for many years. In fact, I'm not aware of any Linux distro that doesn't ship individual Boost libraries, which is why I have been promoting to do this modularization "inhouse", to avoid to put that burden on package maintainers, and different distros to vary slightly in their way to implement this, causing headaches for users on those platforms.
OK, so any ideas how to do that? I assume they don't need separate tarballs, so maybe just some description of how to build libraries, which binaries require other binaries, and which files go into which package?
On Friday, 20 May 2016 11:44:30 MSK Daniel James wrote:
On 19 May 2016 at 23:35, Stefan Seefeld
wrote: Fedora has been doing the same for many years. In fact, I'm not aware of any Linux distro that doesn't ship individual Boost libraries, which is why I have been promoting to do this modularization "inhouse", to avoid to put that burden on package maintainers, and different distros to vary slightly in their way to implement this, causing headaches for users on those platforms.
OK, so any ideas how to do that? I assume they don't need separate tarballs, so maybe just some description of how to build libraries, which binaries require other binaries, and which files go into which package?
With regard to binaries, most of the information they already have. E.g. the dependencies are encoded into binaries themselves (Debian helper is able to translate that information into package dependencies; not sure about rpm or other build scripts). In Debian, they just know which libraries produce binaries and package these into separate packages. There are also special cases like Boost.Python, which has to be built multiple times - for each supported python version. I don't think we can provide any additional information to cover those special cases. It's the headers that pose the major difficulty, since there is no easy way to discover what library (package) a header belongs to or dependencies between them. Remember that we distribute Boost as an archive with monolithic include structure.
I rarely contribute anything to boost, unfortunately, but maybe you might find my input on this topic worth considering. RE: Monolithic boost... This has worked okay for me. For a new boost release, I download the monolith, compile according to our standards, and make that release available to others on my team for integration with the rest of the product. I try to keep it up to date, to resolve any possible bugs, get new features, etc. RE: C++14 adherence... We have a peculiar problem here. We need to be able to compile our code on compilers that are about 10 years old. I want to use the spiffy-great features of the latest compiler specifications, but can't due to this constraint. Insisting that we can use a newer compiler won't work; our customers specifically use old operating systems because they have security flaws about which they wish to teach, hence why our software must work on older OSes, and why we have to support older compilers (the ones that were available on these OSes). I've already tried compiling newer versions of g++ on some of these with varying degrees of success. So, at least to our use case, we hold as valuable the idea that at least some parts of boost not progress to exclude old compilers. We need that support. If one makes a separate distribution that only provides C++14 support, that's fine, but any idea that involves dropping support for older compilers altogether would require we stick to older versions of the boost distribution. That may limit the degree to which we will benefit from the collection, or any improvements made to it. RE: Dependencies... I once thought it might be valuable to ascertain which libraries I use, pull those bits out, and set up a reduced subset of the boost collection to just what we actually use in our product to help reduce how much of the collection we compile, etc. It's fantastically difficult to achieve, and in the end, I don't think it is worthwhile. By doing so, I would discourage the exploration of other parts of the library my team might find useful. Consequently, I don't bother. I just make the whole thing available to the team, and let them choose what they wish to use, absent the bits that we simply cannot use due to our requirement that we have to compile on ridiculously old compilers. I hope this information on how one small team of developers use this tool is useful to you. I'd be happy to answer any questions, if you'd like, on our use of boost if it would help guide your collective efforts. - Trey
On 5/20/16 2:32 AM, Joseph Van Riper wrote:
I hope this information on how one small team of developers use this tool is useful to you. I'd be happy to answer any questions, if you'd like, on our use of boost if it would help guide your collective efforts.
I liked your post. It's easy for us to spend too much time arguing about what "real users" have to do and what our real constraints are. Since your company needs to make the effort to keep things up to date and certify the latest version for your environment anyway, consider becoming a boost tester. It's a mostly automatic process which does most or all of what you're doing and it would be very helpful for the rest of us. Robert Ramey
On Fri, May 20, 2016 at 10:52 AM Robert Ramey
On 5/20/16 2:32 AM, Joseph Van Riper wrote:
I hope this information on how one small team of developers use this tool is useful to you. I'd be happy to answer any questions, if you'd like, on our use of boost if it would help guide your collective efforts.
I liked your post. It's easy for us to spend too much time arguing about what "real users" have to do and what our real constraints are.
Heh, I've lurked for a while now, to get a feel for the community. I know we use boost in ways that are a little different than, say, a games developer, but I suppose if nobody says anything, you won't know how anyone uses boost, which leaves you with nothing but theoretical arguments of imaginary stakeholders.
Since your company needs to make the effort to keep things up to date and certify the latest version for your environment anyway, consider becoming a boost tester. It's a mostly automatic process which does most or all of what you're doing and it would be very helpful for the rest of us.
Hmm... that is not a bad idea, and would at least be one small thing we could do to help. Our build of boost is slightly unique, in that we must build on Linux with -fPIC, static libraries binding to static runtime libraries (I can almost see some people rolling eyes and shaking heads, but this decision came after quite a lot of thought and consideration for our peculiar needs), so if that kind of information is useful, all the better. I've already automated boost updates on the Linux machines we support (Debian build machines dating back to Squeeze, although I probably need to make older machines). I don't think anyone would complain if I set up an automated way to pull down release candidates or the like for automated testing, provided this didn't get in the way for our own efforts (e.g. constant, 24-hour-a-day endless testing). I will look into that. - Trey
On 5/21/16 9:46 AM, Joseph Van Riper wrote:
Our build of boost is slightly unique, in that we must build on Linux with -fPIC, static libraries binding to static runtime libraries (I can almost see some people rolling eyes and shaking heads, but this decision came after quite a lot of thought and consideration for our peculiar needs), so if that kind of information is useful, all the better.
Boost libraries are generally expected to support all legal C++ environments static/shared, debug/release, etc... That your environment is supported but used less widely makes it even more valuable to test. A weakness of our test matrix display is that it doesn't seem to be able to display which configuration is actually being tested. It could be I've got this wrong and the information is in there. If this is the case I'd appreciate it if someone let me know where it is. Otherwise I'd like to see the test matrix generation program or testing customs updated so that this information is available. Sometimes I have a failure on a specific configuration - visibiity,instantiation, etc. But the test matrix doesn't seem to reveal that important piece of information.
I've already automated boost updates on the Linux machines we support (Debian build machines dating back to Squeeze, although I probably need to make older machines). I don't think anyone would complain if I set up an automated way to pull down release candidates or the like for automated testing,
develop and master branches
provided this didn't get in the way for our own efforts (e.g. constant, 24-hour-a-day endless testing).
sounds like you're already doing what the work - it's just that we're not getting the benefit.
I will look into that.
Thank you.
- Trey
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Am 20.05.2016 um 11:32 schrieb Joseph Van Riper:
RE: Monolithic boost...
This has worked okay for me. For a new boost release, I download the monolith, compile according to our standards, and make that release available to others on my team for integration with the rest of the product. I try to keep it up to date, to resolve any possible bugs, get new features, etc.
This is exactly my modus operandi and matches my experiences: get the whole thing, clean it up, compile it, distribute it, and use it. It's as easy as that. One exception: I build it from branches forked off from the official git tags.
RE: Dependencies...
In our build system (using MSBuild) taking a dependency on a particular version of Boost takes no more than telling the version number of choice. Want 1.5.7? Bam, here you get it. Want another one? Wait a second - pleased to serve you. My colleagues want it as easy as possible, fiddling with individual versions of every single library in Boost that they might consume is no option. Simplicity and tested interoperability wins hands down. Exploring another Boost.xyz library is much easier if it is just there, tested and ready for consumption. Just another sampling point of real life usage in our company in the past seven years. Ciao Dani
On 20 May 2016, at 00:35, Stefan Seefeld
wrote: Fedora has been doing the same for many years. In fact, I'm not aware of any Linux distro that doesn't ship individual Boost libraries, which is why I have been promoting to do this modularization "inhouse", to avoid to put that burden on package maintainers, and different distros to vary slightly in their way to implement this, causing headaches for users on those platforms.
On the other hand MacPorts, Homebrew and Cygwin have (mostly) single packages for Boost. Thomas
On 19 May 2016 at 8:36, Robert Ramey wrote:
Given the above, I never understood what you're proposal was (actually is, because I still don't understand it).
Simplified: 1. New Boost 2.0 distribution with rebooted internals incompatible with Boost 1.x. C++ 14 STL used by default. 2. Rebooted internals designed by a committee of the willing and with a yay/nay vote of the usership of the final design. No arguments with the plan from outside the committee, just yay/nay. Niall's personal top ten ideas for rebooted internals (committee decides after investigation of everyone's proposed options): 1. cmake build system throughout. 2. ctest test system throughout. 3. cdash reporting system throughout. 4. Niall's Boost 1.x compatibility shim layer (which he presented at C++ Now 2015) allowing a single source code base to be part of Boost 1.x and 2.x simultaneously. Library maintainers decide to opt into the shim, or not. (4a. Even if not using compatibility shim, all Boost 2.0 libraries version their ABI and API. Some libraries may optionally enforce ABI compliance using that tool) 5. New documentation system based on doxygen comments somehow. 6. New online single header generation facility so you tick the Boost 2.0 libraries you want and it spits out a single drop in header file. 7. Built in edge execution coverage testing and fuzz testing using Niall's fancy new LLVM based automated kernel test infrastructure he's currently working on for presentation in 2017 (it's not written yet, but looking seriously cool). 8. clang AST based enforcement of Boost coding guidelines. 9. All Boost 2.x libraries to be C++ Modules 10. There is no longer any Boost 2.x distribution as a ZIP archive. Instead all contributors to Boost 2.x libraries are required to use cryptographically signed git commits and tags. We push distribution onto the online distro generator and onto github and dispense with official releases entirely in favour of cryptographically signed tags meaning "this is known to work well" as defined by Travis + Appveyor running a deep suite of unit, integration and functional tests. I have more items if I were to trawl my notes. Those just came to the top of my head. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
On 5/20/16 5:25 AM, Niall Douglas wrote: Thanks for a good summary. I <sniped> the whole thing in the interest of brevity. I don't intend to address the specifics of the proposal here. It would be too long and way too off topic. But I do have a couple of observations. a) It's breathtaking in it's scope. You can't be accused of being timid. Feel free to take that as a compliment. b) There is no way Boost could get to this place starting from where we are now by means of evolution. The gap is just too broad. You'll have to think in terms of intelligent design rather than evolution. This has been done before - after all boost itself was founded by a small group of people who decided to strike out on a whole new path. c) It would make just about every line of code in boost obsolete. d) This would require resources on a scale way beyond what we've seen in boost. Specifically, I'm thinking of library developers. e) So I don't think that boost offers you anything for such a project other than perhaps appropriating the name - which many of us would object to. The story I got from the mouth of David Abrahams was that original name "Boost" was morphed from "Booze" which was meant to leverage on "Java". Pretty lame I know - but perhaps you could do better for a name for your new project. I doubt even forking boost would be of any help. f) You're promoting a whole new vision - which I don't think will fly with current developers, You'll have to convince a whole now cadre of volunteers. Given all this, I think you're efforts in this endeavor will be wasted in boost and you'd likely get more reward starting something from scratch. There is recent example of this as well. see Bartosz Milewski's efforts to promote the next great thing. https://bartoszmilewski.com Good luck with this. Robert Ramey
On 20.05.2016 11:12, Robert Ramey wrote:
On 5/20/16 5:25 AM, Niall Douglas wrote:
Thanks for a good summary.
I <sniped> the whole thing in the interest of brevity. I don't intend to address the specifics of the proposal here. It would be too long and way too off topic. But I do have a couple of observations.
a) It's breathtaking in it's scope. You can't be accused of being timid. Feel free to take that as a compliment.
b) There is no way Boost could get to this place starting from where we are now by means of evolution. The gap is just too broad. You'll have to think in terms of intelligent design rather than evolution. This has been done before - after all boost itself was founded by a small group of people who decided to strike out on a whole new path.
This topic is coming up every couple of years, and sadly enough the discussion eventually ends in exactly the same way, simply by running out of steam. I agree that the proposal as it is put forward is quite unrealistic. I also think it's ill-conceived, precisely because it requires top-down design rather than allowing for evolution. And at the scale of the current Boost organization I think there just is no way to do top-down design. So my counter-proposal (which I have repeatedly voiced over past years) would be to let Boost evolve into an *umbrella organization* with a relatively high degree of autonomy for *member projects* to decide for their own on things like what infrastructure tools to use (to build, test, document, to track issues and feature requests, etc.), so long as certain quality standards are maintained. It is absurd how much ink is wasted on completely meaningless questions such as where build system artifacts should be placed, as those have absolutely no impact on end-users (and in fact don't even benefit boost developers, as most of the time these discussions just fade away without any conclusions, or even actions). So the only way to become more efficient is to scale down the scope of such discussions to individual projects and their communities. At least I don't have any time to meaningfully participate in such discussions, and so I put my focus on maintaining Boost.Python as independently as possible, simply as a matter of efficiency. Stefan -- ...ich hab' noch einen Koffer in Berlin...
Stefan Seefeld wrote:
So my counter-proposal (which I have repeatedly voiced over past years) would be to let Boost evolve into an *umbrella organization* with a relatively high degree of autonomy for *member projects* to decide for their own on things like what infrastructure tools to use (to build, test, document, to track issues and feature requests, etc.), so long as certain quality standards are maintained.
And what will this umbrella organization actually *do*?
On 20.05.2016 11:55, Peter Dimov wrote:
Stefan Seefeld wrote:
So my counter-proposal (which I have repeatedly voiced over past years) would be to let Boost evolve into an *umbrella organization* with a relatively high degree of autonomy for *member projects* to decide for their own on things like what infrastructure tools to use (to build, test, document, to track issues and feature requests, etc.), so long as certain quality standards are maintained.
And what will this umbrella organization actually *do*?
* provide general guidelines (just as now, but relaxed) * provide infrastructure * provide administrative, financial, and perhaps legal support * do reviews to accept new member projects Please note that there is one important condition that such independence would build upon: A discipline of ABI- and API-compatibility between releases, that allows downstream project B to depend on upstream project A while keeping its own release cycle. Note that, while likely being the most difficult aspect of this proposal, it's something that we have been discussing for a long time, and which would be good engineering practice anyhow, and would benefit every single user, and thus is worth striving for. That little detail aside (yes, I'm kidding), I'm not proposing any *radical* changes, and certainly not any additional tasks. Just an evolutionary way forward that I think would benefit everyone, in particular member projects (which would be allowed to evolve and flourish, undisturbed from any pointless discussions), and end-users, who would benefit from both more stability as well as more energy put into the components they want, without being bothered by the components they do not care about. Stefan -- ...ich hab' noch einen Koffer in Berlin...
On 20 May 2016 at 12:14, Stefan Seefeld wrote:
And what will this umbrella organization actually *do*?
* provide general guidelines (just as now, but relaxed) * provide infrastructure * provide administrative, financial, and perhaps legal support * do reviews to accept new member projects
Sounds very much like "more of the same" to me. I also think any increased "business as usual" Boost 2.0 idea has already proven itself to not be viable. People aren't willing to do day job work stuff for free. People don't contribute for free to Boost because it's like working at your day job. They do it because it's fun and interesting. What you propose is not fun and interesting. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
On 20 May 2016 at 17:14, Stefan Seefeld
On 20.05.2016 11:55, Peter Dimov wrote:
Stefan Seefeld wrote:
So my counter-proposal (which I have repeatedly voiced over past years) would be to let Boost evolve into an *umbrella organization* with a relatively high degree of autonomy for *member projects* to decide for their own on things like what infrastructure tools to use (to build, test, document, to track issues and feature requests, etc.), so long as certain quality standards are maintained.
And what will this umbrella organization actually *do*?
* provide general guidelines (just as now, but relaxed) * provide infrastructure * provide administrative, financial, and perhaps legal support * do reviews to accept new member projects
Sounds fine to me.
Please note that there is one important condition that such independence would build upon: A discipline of ABI- and API-compatibility between releases, that allows downstream project B to depend on upstream project A while keeping its own release cycle. Note that, while likely being the most difficult aspect of this proposal, it's something that we have been discussing for a long time, and which would be good engineering practice anyhow, and would benefit every single user, and thus is worth striving for.
I think that's worthwhile, and not too onerous for established libraries. Could be a little more flexible for new libraries.
On 5/20/16 8:45 AM, Stefan Seefeld wrote:
So my counter-proposal (which I have repeatedly voiced over past years) would be to let Boost evolve into an *umbrella organization* with a relatively high degree of autonomy for *member projects* to decide for their own on things like what infrastructure tools to use (to build, test, document, to track issues and feature requests, etc.), so long as certain quality standards are maintained.
I think you're on the write track here. But the devil is in the details. It's always hard to reach a consensus as to what the right balance between central control and autonomy is. I think that boost has been very successful in striking more or less the right balance here. Unfortunately, that leaves a majority of participants dissatisfied. And of course it gets harder as boost gets bigger.
At least I don't have any time to meaningfully participate in such discussions, and so I put my focus on maintaining Boost.Python as independently as possible, simply as a matter of efficiency.
Bravo - it's a common attitude and the most helpful one. I'm sure the users of he Python appreciate it. By focusing on something specific and widely useful, you're probably influencing the future of Boost to a much larger degree then any thread posting would. Robert Ramey
On 20 May 2016 at 8:12, Robert Ramey wrote:
Thanks for a good summary.
I <sniped> the whole thing in the interest of brevity. I don't intend to address the specifics of the proposal here. It would be too long and way too off topic. But I do have a couple of observations.
a) It's breathtaking in it's scope. You can't be accused of being timid. Feel free to take that as a compliment.
LOL they're just ideas Robert. Some more fully baked than others. A committee of the willing would ponder each proposed idea, maybe do a bit of prototyping, and see what's unaminously agreed by everyone there. If it's not unaminous, I don't think it should enter the 2.0 plan. You might note the strong resemblence to ISO WG21 procedures incidentally.
b) There is no way Boost could get to this place starting from where we are now by means of evolution. The gap is just too broad. You'll have to think in terms of intelligent design rather than evolution. This has been done before - after all boost itself was founded by a small group of people who decided to strike out on a whole new path.
It's a breaking change yes. As is necessary in any real reboot.
c) It would make just about every line of code in boost obsolete.
If a library maintainer wishes to port their code to something like my shim layer, their library can be compatible with both Boost 1.x and 2.x. AFIO v1 was implementing that last year, and very few of the peer reviewers even noticed (except to complain about "needless build configuration complexity"). AFIO v2, Outcome and my other Boost-ish libraries are exclusively built on that Boost-lite emulation layer, and it's sufficiently good I haven't actually used real Boost since last October.
d) This would require resources on a scale way beyond what we've seen in boost. Specifically, I'm thinking of library developers.
Once the 2.0 plan has been finalised by the committee - which I'd expect to take a minimum of a year - then begins implementation. I would assume it would happen piecemeal, as individual library maintainers get round to adapting their library to fit the new design. Parts of the plan would never be implemented because no maintainer bothered. That's absolutely fine - it means they weren't really needed after all.
Given all this, I think you're efforts in this endeavor will be wasted in boost and you'd likely get more reward starting something from scratch.
I disagree. What I propose is very like how Boost was in the early days back when earnest and passion drove evolution instead of the cynical heckling and sniping jadedness you get here now. A reboot in every sense of the word. Moreover, I'm still hoping that at some point a critical mass forms to make this happen. Until then, I wait and get on with my own libraries. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
I presented a plan for how to technically transition to a C++ 14 only Boost 2.0 at my C++ Now 2015 presentation:
The talk was well attended, and by much of the more senior Boost community members.
What does it mean 'a library is C++14 only'? Does that mean I'm allowed to use only features which have been added by C++14? Or does that mean a library is allowed to use all features defined in the C++14 standard? If the former, then am I still allowed to use 'int' and 'for'? If the latter, Boost is already C++14 only (afaict, no library uses C++17 features yet). Go figure. So let's drop this nonsense of declaring something C++14 only. Regards Hartmut --------------- http://boost-spirit.com http://stellar.cct.lsu.edu
I presented a plan for how to technically transition to a C++ 14 only Boost 2.0 at my C++ Now 2015 presentation:
The talk was well attended, and by much of the more senior Boost community members. What does it mean 'a library is C++14 only'? I suspect it means to support >=C++14 compilers only. Does that mean I'm allowed to use only features which have been added by C++14? Not for me. For me it means it uses ar least one C++14 feature and needs a C++14 compiler. The library doesn't supports C++11 compiler nor C++14 compilers that don't support the used feature. Or does that mean a library is allowed to use all features defined in the C++14 standard? This one. This doesn't mean that it uses all of them, just that the author wants the freedom of using them.
If the former, then am I still allowed to use 'int' and 'for'?
Le 21/05/2016 à 15:23, Hartmut Kaiser a écrit : -
If the latter, Boost is already C++14 only (afaict, no library uses C++17 features yet). No in my view. Go figure. So let's drop this nonsense of declaring something C++14 only.
Tell me if my alternative view of what "C++14 only" could mean change your view. Wether we want a "C++14 only" Boost version is another thing. Vicente
On 5/21/2016 11:52 AM, Vicente J. Botet Escriba wrote:
I presented a plan for how to technically transition to a C++ 14 only Boost 2.0 at my C++ Now 2015 presentation:
The talk was well attended, and by much of the more senior Boost community members. What does it mean 'a library is C++14 only'? I suspect it means to support >=C++14 compilers only. Does that mean I'm allowed to use only features which have been added by C++14? Not for me. For me it means it uses ar least one C++14 feature and needs a C++14 compiler. The library doesn't supports C++11 compiler nor C++14 compilers that don't support the used feature. Or does that mean a library is allowed to use all features defined in the C++14 standard? This one. This doesn't mean that it uses all of them, just that the author wants the freedom of using them.
If the former, then am I still allowed to use 'int' and 'for'?
Le 21/05/2016 à 15:23, Hartmut Kaiser a écrit : -
If the latter, Boost is already C++14 only (afaict, no library uses C++17 features yet). No in my view. Go figure. So let's drop this nonsense of declaring something C++14 only.
Tell me if my alternative view of what "C++14 only" could mean change your view.
Wether we want a "C++14 only" Boost version is another thing.
What could it possibly achieve to have a Boost with only C++11 or above libraries or a Boost with only C++14 or above libraries, as opposed to having Boost as we have it now in which each library can choose what level of C++ support it requires ? I would really like to get a technical answer, as opposed to an emotional response about "moving forward" and "looking to the future" and "serving the entire C++ community", to that question by those who propose such ideas.
Le 21/05/2016 à 18:09, Edward Diener a écrit :
On 5/21/2016 11:52 AM, Vicente J. Botet Escriba wrote:
Wether we want a "C++14 only" Boost version is another thing.
What could it possibly achieve to have a Boost with only C++11 or above libraries or a Boost with only C++14 or above libraries, as opposed to having Boost as we have it now in which each library can choose what level of C++ support it requires ? I would really like to get a technical answer, as opposed to an emotional response about "moving forward" and "looking to the future" and "serving the entire C++ community", to that question by those who propose such ideas.
I'm not saying that Boost 1.x must be stopped. Not all the members of the Boost community have the same needs. In particular, I could need a C++98 Boost version at work, but I would appreciate a C++14 at home. I have moved recently to a project using C++11 and Boost. I will comeback to you with my experience. Starting a new Boost version supporting only new compilers has two sides: starting a new version and on new compilers. What I would expect from a new Boost 2.x version? * That avoids the issues we are facing with the current Boost 1.x version. Modularity * That it is modular * That libraries manage their own version (Major.minor.patch) * That libraries manage the dependencies to other libraries without cycles. * That the included libraries ensure ABI compatibility between minor versions (I don't know how to check this) * That we manage library and point/patch versions. Delivery * That the whole Boost manages their own version also (Major.minor.patch) * That we are able to deliver independently Major, minor and patch versions. * A patch version could consists in upgrading all the libraries to its last patch version respecting the Major and Minor versions and respecting the dependencies. * A minor version would upgrade only the libraries with minor versions and respecting the Major version and the dependencies. * A Major version would upgrade all the libraries respecting the dependencies. * This means that we will need to test 3 new release branches. * Build * That we can build all with CMAKE (as it is a standard de-facto). * Other build systems could be used as well (as far as they can be installed independently) * Install * That we are able to install the libraries independently or as a whole. * Quality * That we ensure some quality KPIs. We would make use of anything available to us as static checkers, sanitizers, rules checkers, code coverage, profiling, .... * Ownership and evolution * That we work as a whole, a library shouldn't be owned only by its initial author. We need to avoid unmaintained libraries. * That any additional features are reviewed to ensure the quality we require. ... What I would expect from a new Boost 2.x version requiring C++11, C++14 or C++1z compiler support? * don't reinvent the wheel. * that it is adapted to the new compiler and library version, e.g. move semantics, initializer_list, constexpr, noexcept, .... * that it would help to identify possible issues on the standard, the compilers and standard library implementations. * that there is a C++ standard proposal that follows the acceptance of a library into Boost, either by the author or someone else ... The feedback from the Boost reviews is not the same than the feedback from the committee. * I would appreciate to have the C++14 library additions that don't depend on any additional C++14 language feature to be available for C++11 compilers in the form of an extension library (we couldn't be able to modify classes existing in C++11, but we could add new ones). The same applies for C++1z and C++11/C++14 compilers. This should help as a bridge between language versions. You may have other expectations. What the authors of such libraries could gain? * I guess that supporting less compilers would allow to have a library code that has less portability issues and that it is easier to maintain. * C++11/14 offers a lot of things that helps to simplify the code "less code more software". * ... And last, what the user of such a library could gain? * a library that works better with the new standard library * able to install the libraries independently * less bugs ( remove all the ones related to portability ) * ... Maybe it is worth having a new Boost 2.x version for C++98 that respects the Boost 2.x expectations (I have no time to work on this). I repeat myself : whether we want to do it is another question. Is it worth doing it? I don't know. It needs a lot of resources and energy. What we as a Boost community could lost having additionally these new Boost versions? Best, Vicente
On 5/22/2016 2:28 PM, Vicente J. Botet Escriba wrote:
Le 21/05/2016 à 18:09, Edward Diener a écrit :
On 5/21/2016 11:52 AM, Vicente J. Botet Escriba wrote:
Wether we want a "C++14 only" Boost version is another thing.
What could it possibly achieve to have a Boost with only C++11 or above libraries or a Boost with only C++14 or above libraries, as opposed to having Boost as we have it now in which each library can choose what level of C++ support it requires ? I would really like to get a technical answer, as opposed to an emotional response about "moving forward" and "looking to the future" and "serving the entire C++ community", to that question by those who propose such ideas.
I'm not saying that Boost 1.x must be stopped. Not all the members of the Boost community have the same needs. In particular, I could need a C++98 Boost version at work, but I would appreciate a C++14 at home. I have moved recently to a project using C++11 and Boost. I will comeback to you with my experience.
Starting a new Boost version supporting only new compilers has two sides: starting a new version and on new compilers.
What I would expect from a new Boost 2.x version?
* That avoids the issues we are facing with the current Boost 1.x version.
Modularity
* That it is modular * That libraries manage their own version (Major.minor.patch) * That libraries manage the dependencies to other libraries without cycles. * That the included libraries ensure ABI compatibility between minor versions (I don't know how to check this) * That we manage library and point/patch versions.
Delivery
* That the whole Boost manages their own version also (Major.minor.patch) * That we are able to deliver independently Major, minor and patch versions. * A patch version could consists in upgrading all the libraries to its last patch version respecting the Major and Minor versions and respecting the dependencies. * A minor version would upgrade only the libraries with minor versions and respecting the Major version and the dependencies. * A Major version would upgrade all the libraries respecting the dependencies. * This means that we will need to test 3 new release branches.
* Build
* That we can build all with CMAKE (as it is a standard de-facto). * Other build systems could be used as well (as far as they can be installed independently)
* Install
* That we are able to install the libraries independently or as a whole.
* Quality
* That we ensure some quality KPIs. We would make use of anything available to us as static checkers, sanitizers, rules checkers, code coverage, profiling, ....
* Ownership and evolution
* That we work as a whole, a library shouldn't be owned only by its initial author. We need to avoid unmaintained libraries. * That any additional features are reviewed to ensure the quality we require.
...
What I would expect from a new Boost 2.x version requiring C++11, C++14 or C++1z compiler support?
* don't reinvent the wheel. * that it is adapted to the new compiler and library version, e.g. move semantics, initializer_list, constexpr, noexcept, .... * that it would help to identify possible issues on the standard, the compilers and standard library implementations. * that there is a C++ standard proposal that follows the acceptance of a library into Boost, either by the author or someone else ... The feedback from the Boost reviews is not the same than the feedback from the committee. * I would appreciate to have the C++14 library additions that don't depend on any additional C++14 language feature to be available for C++11 compilers in the form of an extension library (we couldn't be able to modify classes existing in C++11, but we could add new ones). The same applies for C++1z and C++11/C++14 compilers. This should help as a bridge between language versions.
You may have other expectations.
What the authors of such libraries could gain? * I guess that supporting less compilers would allow to have a library code that has less portability issues and that it is easier to maintain. * C++11/14 offers a lot of things that helps to simplify the code "less code more software". * ...
And last, what the user of such a library could gain? * a library that works better with the new standard library * able to install the libraries independently * less bugs ( remove all the ones related to portability ) * ...
Maybe it is worth having a new Boost 2.x version for C++98 that respects the Boost 2.x expectations (I have no time to work on this).
I repeat myself : whether we want to do it is another question. Is it worth doing it? I don't know. It needs a lot of resources and energy. What we as a Boost community could lost having additionally these new Boost versions?
Many of these are reasonable wishes. But I do not see what having a Boost version which supports only C++14 on up compilation has to do with any of them. Care to explain what facilities in C++14 on up is going to make any of your wishes happen ?
Le 22/05/2016 à 21:19, Edward Diener a écrit :
On 5/22/2016 2:28 PM, Vicente J. Botet Escriba wrote:
Le 21/05/2016 à 18:09, Edward Diener a écrit :
On 5/21/2016 11:52 AM, Vicente J. Botet Escriba wrote:
Wether we want a "C++14 only" Boost version is another thing.
What could it possibly achieve to have a Boost with only C++11 or above libraries or a Boost with only C++14 or above libraries, as opposed to having Boost as we have it now in which each library can choose what level of C++ support it requires ? I would really like to get a technical answer, as opposed to an emotional response about "moving forward" and "looking to the future" and "serving the entire C++ community", to that question by those who propose such ideas.
<snip>
I repeat myself : whether we want to do it is another question. Is it worth doing it? I don't know. It needs a lot of resources and energy. What we as a Boost community could lost having additionally these new Boost versions?
Many of these are reasonable wishes. But I do not see what having a Boost version which supports only C++14 on up compilation has to do with any of them. Care to explain what facilities in C++14 on up is going to make any of your wishes happen ?
All of them. Are you requesting me you enumerate the C++11/C++14 new features? Vicente
On 5/22/2016 4:16 PM, Vicente J. Botet Escriba wrote:
Le 22/05/2016 à 21:19, Edward Diener a écrit :
On 5/22/2016 2:28 PM, Vicente J. Botet Escriba wrote:
Le 21/05/2016 à 18:09, Edward Diener a écrit :
On 5/21/2016 11:52 AM, Vicente J. Botet Escriba wrote:
Wether we want a "C++14 only" Boost version is another thing.
What could it possibly achieve to have a Boost with only C++11 or above libraries or a Boost with only C++14 or above libraries, as opposed to having Boost as we have it now in which each library can choose what level of C++ support it requires ? I would really like to get a technical answer, as opposed to an emotional response about "moving forward" and "looking to the future" and "serving the entire C++ community", to that question by those who propose such ideas.
<snip>
I repeat myself : whether we want to do it is another question. Is it worth doing it? I don't know. It needs a lot of resources and energy. What we as a Boost community could lost having additionally these new Boost versions?
Many of these are reasonable wishes. But I do not see what having a Boost version which supports only C++14 on up compilation has to do with any of them. Care to explain what facilities in C++14 on up is going to make any of your wishes happen ?
All of them.
All the things you desire are made possible by C++14 features ? A modularized set of libraries is made possible by C++14 features ? A CMake implementation for a set of libraries is made possible by C++14 features ? A continuous testing implementation is made possible by C++14 features ? A system of analysis and analyzers for code integrity are made possible ny C++14 features ? Or is it that you just feel that if you are part of a team working on a new set of libraries dedicated to only the latest C++ standard you will have more power to implement what you want to do ? I just don't follow that having just C++14 libraries, or even just C++11/C++14 libraries, has anything to do with the wishes that you have enumerated.
Are you requesting me you enumerate the C++11/C++14 new features?
Le 22/05/2016 à 22:51, Edward Diener a écrit :
On 5/22/2016 4:16 PM, Vicente J. Botet Escriba wrote:
Le 22/05/2016 à 21:19, Edward Diener a écrit :
On 5/22/2016 2:28 PM, Vicente J. Botet Escriba wrote:
Le 21/05/2016 à 18:09, Edward Diener a écrit :
On 5/21/2016 11:52 AM, Vicente J. Botet Escriba wrote:
Wether we want a "C++14 only" Boost version is another thing.
What could it possibly achieve to have a Boost with only C++11 or above libraries or a Boost with only C++14 or above libraries, as opposed to having Boost as we have it now in which each library can choose what level of C++ support it requires ? I would really like to get a technical answer, as opposed to an emotional response about "moving forward" and "looking to the future" and "serving the entire C++ community", to that question by those who propose such ideas.
<snip>
I repeat myself : whether we want to do it is another question. Is it worth doing it? I don't know. It needs a lot of resources and energy. What we as a Boost community could lost having additionally these new Boost versions?
Many of these are reasonable wishes. But I do not see what having a Boost version which supports only C++14 on up compilation has to do with any of them. Care to explain what facilities in C++14 on up is going to make any of your wishes happen ?
All of them.
All the things you desire are made possible by C++14 features ? A modularized set of libraries is made possible by C++14 features ? A CMake implementation for a set of libraries is made possible by C++14 features ? A continuous testing implementation is made possible by C++14 features ? A system of analysis and analyzers for code integrity are made possible ny C++14 features ?
I suspect that you have not read my message. I said
Starting a new Boost version supporting only new compilers has two sides: starting a new version and on new compilers.
All the questions above are unrelated to C++. They are associated to starting a new Boost version and state new constraints fro this new Boost.
Or is it that you just feel that if you are part of a team working on a new set of libraries dedicated to only the latest C++ standard you will have more power to implement what you want to do ?
If you read my message you will see that we can do a lot of things by resetting the basis, even for C++98.
I just don't follow that having just C++14 libraries, or even just C++11/C++14 libraries, has anything to do with the wishes that you have enumerated.
It has to be with a new Boost version with different constraints. I haven't the energy to start a new Boost version for C++98 compilers. But I will be for doing it dor C++11/C++14/C++1z. Vicente
I presented a plan for how to technically transition to a C++ 14 only Boost 2.0 at my C++ Now 2015 presentation:
The talk was well attended, and by much of the more senior Boost community members. What does it mean 'a library is C++14 only'? I suspect it means to support >=C++14 compilers only. Does that mean I'm allowed to use only features which have been added by C++14? Not for me. For me it means it uses ar least one C++14 feature and needs a C++14 compiler. The library doesn't supports C++11 compiler nor C++14 compilers that don't support the used feature. Or does that mean a library is allowed to use all features defined in
C++14 standard? This one. This doesn't mean that it uses all of them, just that the author wants the freedom of using them.
If the former, then am I still allowed to use 'int' and 'for'?
Le 21/05/2016 à 15:23, Hartmut Kaiser a écrit : the -
If the latter, Boost is already C++14 only (afaict, no library uses C++17 features yet). No in my view.
Why not? If a library is allowed to use all features as defined by C++14 it is - by extension - allowed to use C++98 features as well. But this does not mean that it is _required_ to use C++14. Thus, Boost as it is today, is C++14 only (it does not use anything outside of it).
Go figure. So let's drop this nonsense of declaring something C++14 only.
Tell me if my alternative view of what "C++14 only" could mean change your view.
As said, I find the classification of a library as being 'C++14 only' to be completely useless.
Wether we want a "C++14 only" Boost version is another thing.
So in your view 'C++14 only Boost' means that it will not compile with compilers which don't support C++14. Wouldn't it be better to talk about minimal _compiler_ requirements instead of maximal _library_ allowances? In my view talking about this as 'library requires C++14 compiler support' would make much more sense. Regards Hartmut --------------- http://boost-spirit.com http://stellar.cct.lsu.edu
Le 21/05/2016 à 18:53, Hartmut Kaiser a écrit :
I presented a plan for how to technically transition to a C++ 14 only Boost 2.0 at my C++ Now 2015 presentation:
The talk was well attended, and by much of the more senior Boost community members. What does it mean 'a library is C++14 only'? I suspect it means to support >=C++14 compilers only. Does that mean I'm allowed to use only features which have been added by C++14? Not for me. For me it means it uses ar least one C++14 feature and needs a C++14 compiler. The library doesn't supports C++11 compiler nor C++14 compilers that don't support the used feature. Or does that mean a library is allowed to use all features defined in
C++14 standard? This one. This doesn't mean that it uses all of them, just that the author wants the freedom of using them. If the former, then am I still allowed to use 'int' and 'for'?
Le 21/05/2016 à 15:23, Hartmut Kaiser a écrit : the -
If the latter, Boost is already C++14 only (afaict, no library uses C++17 features yet). No in my view. Why not? If a library is allowed to use all features as defined by C++14 it is - by extension - allowed to use C++98 features as well. But this does not mean that it is _required_ to use C++14. Thus, Boost as it is today, is C++14 only (it does not use anything outside of it).
Go figure. So let's drop this nonsense of declaring something C++14 only. Tell me if my alternative view of what "C++14 only" could mean change your view. As said, I find the classification of a library as being 'C++14 only' to be completely useless.
Wether we want a "C++14 only" Boost version is another thing. So in your view 'C++14 only Boost' means that it will not compile with compilers which don't support C++14. Wouldn't it be better to talk about minimal _compiler_ requirements instead of maximal _library_ allowances?
In my view talking about this as 'library requires C++14 compiler support' would make much more sense.
Sure, Vicente
Hartmut Kaiser wrote:
As said, I find the classification of a library as being 'C++14 only' to be completely useless.
In the context of the hypothetical C++14 only Boost 2.0, this means that the libraries have access to std::shared_ptr, std::thread and so on, which in turn means that they don't need to depend on boost::shared_ptr, boost::thread and so on. This makes it possible for a "Boost 2.0" library to be completely independent of the rest of "Boost 2.0", at least in theory. And if it's independent of the rest of the "Boost 2.0" libraries, why should it depend on, say, a common build system or a common test infrastructure? So outdated. It's $current_year!
On 5/21/16 10:26 AM, Peter Dimov wrote:
Hartmut Kaiser wrote:
As said, I find the classification of a library as being 'C++14 only' to be completely useless.
Agreed - but maybe there is something interesting to consider. Let's call it "Boost-Lite" Boost-Lite would be subset of boost with minimal dependencies outside the standard library. So it would not include those parts of boost already incorporated inside the standard library: std::shared_ptr, etc. It would also not include boost component which which are superceeded by newer standard library features and components - no need for boost::type_of, etc. Basically, this is the way that new code is being written today. New code doesn't have to be backwards compatible becauses it's new. So Boost-Lite would be a subset of Boost. It would be all of boost with that part which is generally not necessary excluded. I realize that this is not what Naill has been proposing so it's effectively off topic. But bear with me a little. I see the appeal of Boost-Lite to those making new code (libraries and Applications) who want to keep dependencies and maintainence burden minimized. This Boost-Lite would be just a subset of Boost. A different distribution. Anyone could make it. If this is what is desired the way to go about it is to: a) Announce one's new project - Boost-Lite b) Announce a list of requirements for a library to be included in the Boost-Lite distribution. This would include the library subset I mentioned above. If the promoter wants, he could add his own favorite extra requirements - e.g. CMake (in a certain way) required. or whatever. c) Announce a list of libraries which full fill the requirements Boost-Lite specifies. Some of the newer libraries would like already qualify, Many of the older ones wouldn't and many of the older one's would be considered redundant so they wouldn't matter. d) Sit back and watch library authors to make changes or versions of their libraries which qualify to be added to Boost-Lite. If you're correct in your assessment, you'll be flood with new / updated libraries. This is serious practical proposal, you don't need to write any code, you could have started it years ago. Instead you're after us like it's our problem. Just get going and then see if how many people you can get on board. Actually, I see more application for this idea. I could easily envision someone conjuring up a special boost distribution called Boost-Embedded. This would have all he old stuff - because many embedded systems only have older compilers and can't compile C++11+ code. So maybe someone want's to distribute this. I see the ability to do things like this as potentially useful. Though I don't know if anyone things it's so important/useful to actually do some work on it. If not, of course it doesn't matter. But I would like to see us continue our slow progress on modularization. It's quite possible that C++ modules in a couple of years could have a big impact on this. Parties interested in this should participate on the relevant committees. Sorry for the long post - I'm just trying to salvage something constructive. Robert Ramey
In the context of the hypothetical C++14 only Boost 2.0, this means that the libraries have access to std::shared_ptr, std::thread and so on, which in turn means that they don't need to depend on boost::shared_ptr, boost::thread and so on. This makes it possible for a "Boost 2.0" library to be completely independent of the rest of "Boost 2.0", at least in theory. And if it's independent of the rest of the "Boost 2.0" libraries, why should it depend on, say, a common build system or a common test infrastructure? So outdated. It's $current_year!
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
On 21 May 2016, at 20:27, Robert Ramey
wrote: On 5/21/16 10:26 AM, Peter Dimov wrote:
Hartmut Kaiser wrote:
As said, I find the classification of a library as being 'C++14 only' to be completely useless.
Agreed - but maybe there is something interesting to consider.
Let's call it "Boost-Lite"
Boost-Lite would be subset of boost with minimal dependencies outside the standard library. So it would not include those parts of boost already incorporated inside the standard library: std::shared_ptr, etc. It would also not include boost component which which are superceeded by newer standard library features and components - no need for boost::type_of, etc.
If we want to break boost into smaller subsets then I would focus on modelling dependencies and versions and have an installer. This has been tried before -there are scripts that analyse boost inter-dependencies, there has been efforts to reduce these dependencies-. Dependencies could be made conditional (conditioned on assumed compiler capabilities), but I’ve never seen that (apt-get, npm, brew). It’ll probably easier to maintain various versions of libraries: one that requires C++14, another one that works with C++98 but with more boost dependencies that help fill the 98-14 gap. Personally I think allowing boost branded libraries (approved by boost, conforms to boost guidelines.. something like that) that are separately downloadable -just like any lib on Github really- can have many benefits: It allows for growth in the number of libraries, it decouples releases, abandoned libraries won’t hurt the quality of a release because there is no longer a monolithic releases. Boost is a band with a reputation, it imposes requirement on libraries that help build that reputation. A monolithic release is not an essential aspect for that. With a monolithic release we get an “all these libraries works together" quality guarantee. If we model versioned dependencies like all those other packet managers, then we still test if library X does indeed work correctly while having a dependency on library Y with version >=3.14
On 5/21/16 12:06 PM, M.A. van den Berg wrote:
If we want to break boost into smaller subsets then I would focus on modelling dependencies and versions and have an installer. This has been tried before -there are scripts that analyse boost inter-dependencies, there has been efforts to reduce these dependencies-. Dependencies could be made conditional (conditioned on assumed compiler capabilities), but I’ve never seen that (apt-get, npm, brew). It’ll probably easier to maintain various versions of libraries: one that requires C++14, another one that works with C++98 but with more boost dependencies that help fill the 98-14 gap.
Just to be clear, I wasn't suggesting breaking boost into smaller subsets. I was suggesting that anyone who wants to create a smaller subset can freely create his own. Of course the result is the same. But the latter doesn't require any concessions or changes from Boost.
Personally I think allowing ...
Boost is a band with a reputation, it imposes requirement on libraries that help build that reputation.
A monolithic release is not an essential aspect for that ... I think that library deployment is question more or less orthogonal to other questions boost addresses. I think you're agreeing with me here. Actually, I'd prefer to see us just take a release on the master branch and let anyone who want's to "package" the release or any subset thereof. I'd like to see us get out of the distribution business entirely. Robert Ramey
M.A. van den Berg wrote:
Personally I think allowing boost branded libraries (approved by boost, conforms to boost guidelines.. something like that) that are separately downloadable -just like any lib on Github really- can have many benefits: It allows for growth in the number of libraries, it decouples releases, abandoned libraries won’t hurt the quality of a release because there is no longer a monolithic releases.
Boost is a brand with a reputation, it imposes requirement on libraries that help build that reputation. A monolithic release is not an essential aspect for that.
That's the underlying assumption of those who press for change. What if it's wrong? Boost releases are the signature product of Boost. What if the value of the Boost brand is substantially contained in Boost releasing quality code as a single unit that can be adopted wholesale in a single step? What if turning Boost into a committee that merely rubber-stamps libraries would destroy the value of the Boost brand? Incidentally, the growth in number of libraries is currently impeded not by the monolithic release, but by the review process. That is, it's the rubber stamping part that's the problem, not hypothetical entrenched evil groups of old people who hypothetically delete people's CMakeLists.txt files under the cover of the night.
On 21 May 2016, at 22:01, Peter Dimov
wrote: M.A. van den Berg wrote:
Personally I think allowing boost branded libraries (approved by boost, conforms to boost guidelines.. something like that) that are separately downloadable -just like any lib on Github really- can have many benefits: It allows for growth in the number of libraries, it decouples releases, abandoned libraries won’t hurt the quality of a release because there is no longer a monolithic releases.
Boost is a brand with a reputation, it imposes requirement on libraries that help build that reputation. A monolithic release is not an essential aspect for that.
That's the underlying assumption of those who press for change. What if it's wrong?
Boost releases are the signature product of Boost. What if the value of the Boost brand is substantially contained in Boost releasing quality code as a single unit that can be adopted wholesale in a single step?
What if turning Boost into a committee that merely rubber-stamps libraries would destroy the value of the Boost brand?
Incidentally, the growth in number of libraries is currently impeded not by the monolithic release, but by the review process. That is, it's the rubber stamping part that's the problem, not hypothetical entrenched evil groups of old people who hypothetically delete people's CMakeLists.txt files under the cover of the night.
Good points. How can we speed of the review process, make it more efficient? To take an extreme: Apple reviews millions of apps, the reject very quickly and have a likely a semi-automated and rational checklist that developers can self asses their submissions against. Boost submissions are much more technical so you can’t really apply such a binary checklist (even though reviews already have structure). Perhaps it’s an idea to invite (new) people to participate in the review process? Or is the level of required seniority too hard to find?
On 5/21/16 1:20 PM, M.A. van den Berg wrote:
How can we speed of the review process, make it more efficient?
Actually, there is facility to speed up the review process right now. It's the Boost Library Incubator. One can go there download or checkout the submission, try it on his machine. And fill out a form which corresponds to the Boost Review process. The library author - or anyone else is informed of this and can respond. All this can be done before there is any formal review announced. The Review is kept available indefinitely for other users and is considered by the Review Manage when the formal review is underway. In theory, there should be no bottle neck in the formal review process. there's even an automated 1-5 star rating for each library. In practice this doesn't happen as I had hoped. People don't evaluate the library and write a review. They wait until the review is announced then make their review. This is OK but not what I hoped. The true scarce resources and limit to the growth of boost are: a) The submission of libraries which fail to meet boost requirements. Note I said "requirements" not quality standards. By requirements, I mean having a boost file layout, tests, and documentation. Currently there are 32 submissions in the incubator. There are thousands of source code packages out there but only 32 in submitted for review. One reason is that even the low bar of the incubator is too high for most of the code that people think of as a library. And in spite of clearly spelled out requirements such the above, I still get submissions which say things like: See "headers for documentation". b) the number of reviews and reviewers. Typically there are only around 6 reviewers who participate in a formal review. This has been OK but I would like to see more. To take an extreme: Apple reviews millions of apps, the reject very quickly and have a likely a semi-automated and rational checklist that developers can self asses their submissions against. actually that's similar to the the incubator. We verify that it meets the stated objective requirements. This is a simple process which takes only a few minutes. the other part of the apple process is user reviews. The incubator doesn't perform this function - that is left to the formal review process and the reviewers. So if you want to speed up the process without breaking boost, volunteer as reviewer or review manager. Robert Ramey
On Sat, May 21, 2016 at 5:25 PM, Robert Ramey
On 5/21/16 1:20 PM, M.A. van den Berg wrote:
How can we speed of the review process, make it more efficient?
One can go there download or checkout the submission, try it on his machine. And fill out a form which corresponds to the Boost Review process. The library author - or anyone else is informed of this and can respond. All this can be done before there is any formal review announced.
Just to expand on this, here's a library that is sitting in the incubator (disclaimer: I am the author): https://github.com/vinniefalco/Beast It offers implementations of HTTP/1 and WebSocket using Boost.Asio. If someone were to download and try out this library and offer some feedback, I'm sure the author would be thrilled since acting on feedback can only increase the likelihood of boost acceptance.
On 21 May 2016, at 23:38, Vinnie Falco
wrote: On Sat, May 21, 2016 at 5:25 PM, Robert Ramey
wrote: On 5/21/16 1:20 PM, M.A. van den Berg wrote:
How can we speed of the review process, make it more efficient?
One can go there download or checkout the submission, try it on his machine. And fill out a form which corresponds to the Boost Review process. The library author - or anyone else is informed of this and can respond. All this can be done before there is any formal review announced.
Just to expand on this, here's a library that is sitting in the incubator (disclaimer: I am the author): https://github.com/vinniefalco/Beast
It offers implementations of HTTP/1 and WebSocket using Boost.Asio.
If someone were to download and try out this library and offer some feedback, I'm sure the author would be thrilled since acting on feedback can only increase the likelihood of boost acceptance.
That would be a good idea indeed. I’ve looked at the repository and I like the good number of examples, it would allow me to get started quickly. It also looks matures, the examples show a wide variety of use cases. Finding actual users -a chicken and egg problem- would be a better review than me. I think I’m unfit to review this for three reasons: * I can’t think of a *real-world* use case that makes me have to go beyond simply checking if one of the example compiles (which I’m sure it will, but which won’t reveal the usability). * I haven’t used ASIO since 1.36. I end up switching to different languages for network programming, mainly Python, node.js. I do quite a bit of backend web development but I doesn’t require me to switch to C++ * without having to dig in deep I would probably fail to spot little issues like const correctness, forwarding, copying, references, thread safety. Those things will come to light when something is not working as expecting in a complicated use case. Maybe authors can find real-world users by going through git, look for potential library users? Find C++11 apps that embed a http server or client, fork it and build a boost dependent variant, talk to authors?
On 21 May 2016 at 22:20, M.A. van den Berg wrote:
How can we speed of the review process, make it more efficient? To take an extreme: Apple reviews millions of apps, the reject very quickly and have a likely a semi-automated and rational checklist that developers can self asses their submissions against.
Good idea, but not a new one. I began putting together an initial checklist of potential automatable C++ style and design checkers via a clang AST parser at https://svn.boost.org/trac/boost/wiki/BestPracticeHandbook. The idea was that people could submit their library, and get it scored and ranked on a dashboard. All automated. Even better, non-Boost library authors could use the same system as tuneups for their own code - a solution truly serving the C++ community at large, not just yet more Boost parochialism. It was not warmly received by the community. I got publicly accused of all sorts of malevolent behaviours, so I abandoned the effort and moved onto more productive uses of my time. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
Niall Douglas wrote:
I began putting together an initial checklist of potential automatable C++ style and design checkers via a clang AST parser at https://svn.boost.org/trac/boost/wiki/BestPracticeHandbook. The idea was that people could submit their library, and get it scored and ranked on a dashboard. All automated.
You can't automate out human judgment. And even if you could, human judgment is the basis of reputation. "A collection of libraries that have passed certain scripted checks" doesn't have the same value, because a script has no face.
... truly serving the C++ community at large, not just yet more Boost parochialism.
Oh come on.
On Sat, May 21, 2016 at 3:03 PM, Peter Dimov
Niall Douglas wrote:
I began putting together an initial checklist of potential automatable C++ style and design checkers via a clang AST parser at https://svn.boost.org/trac/boost/wiki/BestPracticeHandbook. The idea was that people could submit their library, and get it scored and ranked on a dashboard. All automated.
You can't automate out human judgment. And even if you could, human judgment is the basis of reputation. "A collection of libraries that have passed certain scripted checks" doesn't have the same value, because a script has no face.
+1 I would even say that it is dangerous to use some form of automated score to rate the quality of a library. The net effect will be that it'll make bad libraries look good "on paper". Library design, like any other design, can only be properly evaluated by people intimately familiar with the problem domain. Emil
On Sunday, 22 May 2016 02:03:17 MSK Niall Douglas wrote:
I began putting together an initial checklist of potential automatable C++ style and design checkers via a clang AST parser at https://svn.boost.org/trac/boost/wiki/BestPracticeHandbook. The idea was that people could submit their library, and get it scored and ranked on a dashboard. All automated. Even better, non-Boost library authors could use the same system as tuneups for their own code - a solution truly serving the C++ community at large, not just yet more Boost parochialism.
It was not warmly received by the community. I got publicly accused of all sorts of malevolent behaviours, so I abandoned the effort and moved onto more productive uses of my time.
Wow. Boost community is so harsh, unfair and narrow. I must say I'm amazed with your persistence in communicating with it - it sounds like it's a pure waste of your time.
On 5/21/16 4:09 PM, Andrey Semashev wrote:
Wow. Boost community is so harsh, unfair and narrow. I must say I'm amazed with your persistence in communicating with it - it sounds like it's a pure waste of your time.
The boost community open about considering ideas. It's just that not all ideas are recognized as good ones. Just the fact that some idea doesn't convince a consensus, doesn't mean that Boost is harsh, parochial, close minded, old, or whatever. It likely means that that ... the not many people consider it a good idea. This is the simplest explanation and I'm sure the correct one. What would boost look like if we accepted every idea proposed? OK too ridiculous. What would boost look like if half the ideas proposed were accepted? Still too ridiculous. Is there any idea you think should be accepted? Do you really believe that replacing the current review system with some automatic scoring system would be an improvement? Then go ahead and make your case. But don't accuse those who have made a better case of having some sort of personal failures. I know you don't mean to do this, but that's what your doing. Robert Ramey
On Sunday, 22 May 2016 02:34:48 MSK Robert Ramey wrote:
On 5/21/16 4:09 PM, Andrey Semashev wrote:
Wow. Boost community is so harsh, unfair and narrow. I must say I'm amazed with your persistence in communicating with it - it sounds like it's a pure waste of your time.
The boost community open about considering ideas. It's just that not all ideas are recognized as good ones. Just the fact that some idea doesn't convince a consensus, doesn't mean that Boost is harsh, parochial, close minded, old, or whatever. It likely means that that ... the not many people consider it a good idea. This is the simplest explanation and I'm sure the correct one.
What would boost look like if we accepted every idea proposed? OK too ridiculous. What would boost look like if half the ideas proposed were accepted? Still too ridiculous. Is there any idea you think should be accepted? Do you really believe that replacing the current review system with some automatic scoring system would be an improvement? Then go ahead and make your case. But don't accuse those who have made a better case of having some sort of personal failures. I know you don't mean to do this, but that's what your doing.
To be clear, there was a fair bit of sarcasm in my message, sorry if it got lost along the way. I allowed myself this kind of message only because Niall has repeatedly expressed disappointment with Boost community in the form verging on disdain. I don't like seeing comments along the line who accused whom and how underappreciated someone is in what is supposed to be a technical discussion. Maybe my comment didn't help it either, but I'm tired of this nonsense about Boost being dead and community serving its own over-represented groups and so on. What could have started as a constructive discussion with a positive outcome turned into this political bs. So I guess my point is talk less, code more. If you think Boost is dead then don't bother with it. Sorry if I'm being too harsh, unfair or narrow.
On 5/21/16 5:13 PM, Andrey Semashev wrote:
To be clear, there was a fair bit of sarcasm in my message,
I'm embarrassed to say I totally missed the sarcasm. Guess I've been on the thread too long. Robert Ramey
On Sat, May 21, 2016 at 4:09 PM, Andrey Semashev
On Sunday, 22 May 2016 02:03:17 MSK Niall Douglas wrote:
I began putting together an initial checklist of potential automatable C++ style and design checkers via a clang AST parser at https://svn.boost.org/trac/boost/wiki/BestPracticeHandbook. The idea was that people could submit their library, and get it scored and ranked on a dashboard. All automated. Even better, non-Boost library authors could use the same system as tuneups for their own code - a solution truly serving the C++ community at large, not just yet more Boost parochialism.
It was not warmly received by the community. I got publicly accused of all sorts of malevolent behaviours, so I abandoned the effort and moved onto more productive uses of my time.
Wow. Boost community is so harsh, unfair and narrow. I must say I'm amazed with your persistence in communicating with it - it sounds like it's a pure waste of your time.
If I might add, nobody would object to automatically rating Boost libraries according to any metric whatsoever and publishing the results for anyone so inclined to read and consider. As well, the Boost license generously authorizes anyone to fork libraries for any reason, including to release versions that get perfect score according to any metric whatsoever. Emil
On Sunday, 22 May 2016 03:28:04 MSK Emil Dotchevski wrote:
If I might add, nobody would object to automatically rating Boost libraries according to any metric whatsoever and publishing the results for anyone so inclined to read and consider.
I wouldn't agree with 'rating' libraries, but a set of automated checks would be great. Both as part of the testing process and a precondition for a library proposed for review. In addition to the normal human review, of course. We do have inspect reports run on libraries in Boost, although they don't check much beyond the basic things like copyrights and tabs. Unfortunately, I suspect not many people pay attention to them either. It might help if the inspect reports were directly visible in the test results as a test pass/failure.
On Sat, May 21, 2016 at 7:09 PM, Andrey Semashev wrote:
On Sunday, 22 May 2016 02:03:17 MSK Niall Douglas wrote:
It was not warmly received by the community. I got publicly accused of all sorts of malevolent behaviours, so I abandoned the effort and moved onto more productive uses of my time.
Wow. Boost community is so harsh, unfair and narrow. I must say I'm amazed with your persistence in communicating with it - it sounds like it's a pure waste of your time.
Or, for that matter, planning to resubmit a library for review in 2018 to a project that he's probably predicted will be dead long before then. Glen
On 22/05/2016 00:47, Niall Douglas wrote:
I began putting together an initial checklist of potential automatable C++ style and design checkers via a clang AST parser at https://svn.boost.org/trac/boost/wiki/BestPracticeHandbook. The idea was that people could submit their library, and get it scored and ranked on a dashboard. All automated. Even better, non-Boost library authors could use the same system as tuneups for their own code - a solution truly serving the C++ community at large, not just yet more Boost parochialism.
It was not warmly received by the community. I got publicly accused of all sorts of malevolent behaviours, so I abandoned the effort and moved onto more productive uses of my time.
Would you mind providing links the messages that accuse you of malevolent behaviours? It is my recollection that the idea of automatic checking and ranking of libraries received basically the same objection as now - that automatic tests can easily check coding guidelines, or simple numeric metrics, but they hardly can be used to evaluate design quality, documentation, or usefulness of a library. Therefore, using automatic metrics for ranking might easily down-rank good libraries that don't meet some specific criteria of yours, and alternatively up-rank libraries that are good on technical metrics but are not good for real users. For some reason, instead of assuming that this argument is made by well-meaning, remotely-intelligent and somewhat-experienced people, and therefore must be at least partially sensible, you decided to ignore it, and assume malice. In fact, could you explain what are you goals? You've laid out pretty ambiguous plan, one that would likely require a dozen of people with plenty of spare time to make even the first step. In order to promote it, you've made antagonizing remarks towards Steering Committee, followed by remarks against older people (may I know your age, for the record?), followed by further wide-ranging complaints? Would it be sensible, at this point, to either: - Create a new project, called "Niall C++ Libraries", having nothing to with Boost (you can of course use existing libraries, since the license allow that) - Decide that majority of people here have no personal agenda against you, and try to push your ideas the way Robert suggested - by preaching them carefully and not expecting immediate from-top approval? Thanks, -- Vladimir Prus http://vladimirprus.com
On 19.05.2016 11:17, Niall Douglas wrote:
The C++ 14 only libraries contributed to date are clearly written first for C++ not Boost. They are the future we should be proactively encouraging into a new clean ground up redesigned fork of Boost, a Boost 2.0, instead of corralling them into legacy and outdated packaging, build, design, documentation and idioms out of some misguided desire for serving the legacy Boost usership before that of the wider C++ community.
What percentage of "the entire C++ community" do you think has access to a C++ 14 compiler anyway? I like to think I'm more up to date than the average C++ user. I'm running the latest version of Linux Mint, based on the next-to-latest version of Ubuntu. The gcc that comes with my operating system is version 4.8, which predates C++ 14. To use C++ 14, I would have to recompile gcc, which I have not yet managed to do for all of my target platforms. I'd love to switch to C++ 14, but right now it's just technically viable for me. -- Rainer Deyke (rainerd@eldwood.com)
On 22 May 2016 at 10:53, Rainer Deyke
I like to think I'm more up to date than the average C++ user. ... The gcc that comes with my operating system is version 4.8, which predates C++ 14.
LOL - That was really really funny...
Am 22.05.2016 10:16 vorm. schrieb "degski"
On 22 May 2016 at 10:53, Rainer Deyke
wrote: I like to think I'm more up to date than the average C++ user. ... The gcc that comes with my operating system is version 4.8, which predates
C++
14.
LOL - That was really really funny...
What's so funny? Did I miss anything?
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
On 2016-05-22 18:15, degski wrote:
On 22 May 2016 at 10:53, Rainer Deyke
wrote: I like to think I'm more up to date than the average C++ user. ... The gcc that comes with my operating system is version 4.8, which predates C++ 14.
LOL - That was really really funny...
What's so funny?.. That he is a s/w professional running LTS Ubuntu (which does have gcc-4.8) and developing real applications for real companies?
On Sun, May 22, 2016 at 06:53:36PM +1000, Vladimir Batov wrote:
On 2016-05-22 18:15, degski wrote:
On 22 May 2016 at 10:53, Rainer Deyke
wrote: I like to think I'm more up to date than the average C++ user. ... The gcc that comes with my operating system is version 4.8, which predates C++ 14.
LOL - That was really really funny...
What's so funny?.. That he is a s/w professional running LTS Ubuntu (which does have gcc-4.8) and developing real applications for real companies?
Hello Vladimir, Just to put this into perspective: Ubuntu 16.4 is an LTS release that uses g++-5.3.x. You can also install clang/llvm with apt-get to have access to two c++14 compilers, with no customization effort required. enjoy, Karen -- Karen Shaeffer Be aware: If you see an obstacle in your path, Neuralscape Services that obstacle is your path. Zen proverb
Karen Shaeffer wrote:
Just to put this into perspective:
Ubuntu 16.4 is an LTS release that uses g++-5.3.x.
If you're in a position in which you can afford to always install the latest LTS, you wouldn't need an LTS.
On 22/05/2016 17:05, Peter Dimov wrote:
Karen Shaeffer wrote:
Just to put this into perspective:
Ubuntu 16.4 is an LTS release that uses g++-5.3.x.
If you're in a position in which you can afford to always install the latest LTS, you wouldn't need an LTS.
Great! From an HPC perspective: most facilities seems to run CentOS 6.x with gcc 4.4. The ones moving to CentOS 7.x will get gcc 4.8. Even if those platforms ends up using some version of Intel Compiler, it will rely on the installed gcc library/headers. Alain
On 22.05.2016 10:15, degski wrote:
On 22 May 2016 at 10:53, Rainer Deyke
wrote: I like to think I'm more up to date than the average C++ user. ... The gcc that comes with my operating system is version 4.8, which predates C++ 14.
LOL - That was really really funny...
I'm running an up-to-date operating system, and I switched to C++ 11 as soon as it became viable. I can do that because I'm an individual. Organizations move more slowly, and the bigger they are, the slower they move. It wouldn't surprise at all to see Visual C++ 6.0 still being used. Wikipedia even says, "Visual C++ 6.0 is still quite popular". -- Rainer Deyke (rainerd@eldwood.com)
I'm running an up-to-date operating system, and I switched to C++ 11 as soon as it became viable. I can do that because I'm an individual. Organizations move more slowly, and the bigger they are, the slower they move.
Not necessarilly, e.g. every Windows OS is built with the (their) latest compiler... that's why they make it in the first place (at least in the past)...
It wouldn't surprise at all to see Visual C++ 6.0 still being used
The fact that this happens doesn't make it anything less than a crime, for which any CTO should be summarilly executed...
Wikipedia even says, "Visual C++ 6.0 is still quite popular".
Don't believe everything they say on WP. The release schedule of gcc is here https://gcc.gnu.org/releases.html. Now have a look and try to figure out why I thought was pretty funny... (hint: the combination of the words "up-to-date" and "gcc 4.8")...
On 22.05.2016 11:12, degski wrote:
I'm running an up-to-date operating system, and I switched to C++ 11 as soon as it became viable. I can do that because I'm an individual. Organizations move more slowly, and the bigger they are, the slower they move.
Not necessarilly, e.g. every Windows OS is built with the (their) latest compiler... that's why they make it in the first place (at least in the past)...
I'm sure they do. I'm also sure that they have legacy code dating back a long time, so I don't know how modern their codebase actually is and how many C++ 14 features they actually use. Presumably they use at most the subset of C++ 14 that is actually supported by their compiler, which is a good deal less than full C++ 14.
Wikipedia even says, "Visual C++ 6.0 is still quite popular".
Don't believe everything they say on WP.
The release schedule of gcc is here https://gcc.gnu.org/releases.html. Now have a look and try to figure out why I thought was pretty funny... (hint: the combination of the words "up-to-date" and "gcc 4.8")...
I'm using the latest version of gcc provided by the latest version of my OS. Using a later version of gcc would require either compiling from source or switching to another operating system. Yes, it's a shame that Ubuntu isn't more proactive about making more up-to-date compiler packages available, but there's nothing I can do about it. -- Rainer Deyke (rainerd@eldwood.com)
Am 22.05.2016 um 13:49 schrieb Rainer Deyke:
On 22.05.2016 11:12, degski wrote:
I'm running an up-to-date operating system, and I switched to C++ 11 as soon as it became viable. I can do that because I'm an individual. Organizations move more slowly, and the bigger they are, the slower they move.
Not necessarilly, e.g. every Windows OS is built with the (their) latest compiler... that's why they make it in the first place (at least in the past)...
I'm sure they do. I'm also sure that they have legacy code dating back a long time, so I don't know how modern their codebase actually is and how many C++ 14 features they actually use. Presumably they use at most the subset of C++ 14 that is actually supported by their compiler, which is a good deal less than full C++ 14.
Unless you have a deprecated feature, you won't get problems switching to C++14. If you use a deprecated feature, you should redo you code regardless, they were dropped for a reason. I don't think we should force people to use new features, but not using them in new modules because of an ancient code base just seems bad practice to me.
Wikipedia even says, "Visual C++ 6.0 is still quite popular".
Don't believe everything they say on WP.
The release schedule of gcc is here https://gcc.gnu.org/releases.html. Now have a look and try to figure out why I thought was pretty funny... (hint: the combination of the words "up-to-date" and "gcc 4.8")...
I'm using the latest version of gcc provided by the latest version of my OS. Using a later version of gcc would require either compiling from source or switching to another operating system. Yes, it's a shame that Ubuntu isn't more proactive about making more up-to-date compiler packages available, but there's nothing I can do about it.
Do you also use the boost package provided by ubuntu? Would be 1.54 then, right? There is something you can do: compile a new version and create a dpk for your coworkers. I get the thing about the codebase, but the argument "my ubuntu doesn't ship" is just nonsensical. By that logic you could not develop on windows at all, because it does not ship a compiler as part of the OS at all. You're a C++ developers so compiling from source should not be a problem. Also you can get a newer version from an experimental distribution so you don't need to compile: http://packages.ubuntu.com/de/xenial/gcc-6-base Or get clang. Saying "there's nothing I can do about it" is just plainly wrong.
On 22.05.2016 13:57, Klemens Morgenstern wrote:
There is something you can do: compile a new version and create a dpk for your coworkers. I get the thing about the codebase, but the argument "my ubuntu doesn't ship" is just nonsensical. By that logic you could not develop on windows at all, because it does not ship a compiler as part of the OS at all.
I am actually moving in that direction. I just haven't gotten all of the cross-compilers I need to compile, because: - Compiling gcc is complicated. - Compiling gcc cross compilers is more complicated. - Various third-party scripts to compile gcc cross compilers haven't worked for me, and are complicated enough that it's not obvious to me where the problem is. - I have other priorities. Of course, this only works if I distribute my work in binary form (doable in my case, but not an option for open source developers), redistribute gcc in binary form (not a serious option in my case), or require that all of my users recompile gcc (*really* not an option). I like clang. I also like to test my code on multiple compilers, which is why I'm using clang in addition to gcc, not as a replacement. -- Rainer Deyke (rainerd@eldwood.com)
Am 22.05.2016 um 15:57 schrieb Rainer Deyke:
On 22.05.2016 13:57, Klemens Morgenstern wrote:
There is something you can do: compile a new version and create a dpk for your coworkers. I get the thing about the codebase, but the argument "my ubuntu doesn't ship" is just nonsensical. By that logic you could not develop on windows at all, because it does not ship a compiler as part of the OS at all.
I am actually moving in that direction. I just haven't gotten all of the cross-compilers I need to compile, because: - Compiling gcc is complicated. - Compiling gcc cross compilers is more complicated. - Various third-party scripts to compile gcc cross compilers haven't worked for me, and are complicated enough that it's not obvious to me where the problem is. - I have other priorities. Of course, this only works if I distribute my work in binary form (doable in my case, but not an option for open source developers), redistribute gcc in binary form (not a serious option in my case), or require that all of my users recompile gcc (*really* not an option).
I like clang. I also like to test my code on multiple compilers, which is why I'm using clang in addition to gcc, not as a replacement.
Just out of curiosity - what platform are cross-compiling for? To be clear: I don't think it makes sense to require C++14 or something like that. I would think is is much more sensible, to keep the development version on the current standard, even with incomplete implementations and provided forked subsets for older standards. I.e. you have a guarantee for some libraries to remain C++98 compliant. But keeping new libraries on C++11 or C++98 is not very useful; that will end like the current (none-eabi) embedded world, where the majority still uses C. I just dislike the "I cannot do anything" attitude - and if my company would require me to write C++98, I'd quit. Also: some features like move-semantics are game changing, causing me to write my libraries differently; not using it would cause bad design.
Am 22.05.2016 5:15 nachm. schrieb "Klemens Morgenstern" < klemens.morgenstern@gmx.net>:
Am 22.05.2016 um 15:57 schrieb Rainer Deyke:
On 22.05.2016 13:57, Klemens Morgenstern wrote:
There is something you can do: compile a new version and create a dpk for your coworkers. I get the thing about the codebase, but the argument "my ubuntu doesn't ship" is just nonsensical. By that logic you could not develop on windows at all, because it does not ship a compiler as part of the OS at all.
I am actually moving in that direction. I just haven't gotten all of the cross-compilers I need to compile, because: - Compiling gcc is complicated. - Compiling gcc cross compilers is more complicated. - Various third-party scripts to compile gcc cross compilers haven't worked for me, and are complicated enough that it's not obvious to me where the problem is. - I have other priorities. Of course, this only works if I distribute my work in binary form (doable in my case, but not an option for open source developers), redistribute gcc in binary form (not a serious option in my case), or require that all of my users recompile gcc (*really* not an option).
I like clang. I also like to test my code on multiple compilers, which is why I'm using clang in addition to gcc, not as a replacement.
Just out of curiosity - what platform are cross-compiling for?
To be clear: I don't think it makes sense to require C++14 or something
like that. I would think is is much more sensible, to keep the development version on the current standard, even with incomplete implementations and provided forked subsets for older standards. I.e. you have a guarantee for some libraries to remain C++98 compliant. But keeping new libraries on C++11 or C++98 is not very useful; that will end like the current (none-eabi) embedded world, where the majority still uses C.
I just dislike the "I cannot do anything" attitude - and if my company
would require me to write C++98, I'd quit. It's sometimes more complicated than this. It is true however that the landscape improves. In our case, our users are mostly not programmers by profession. They use the software as a means to an end, mainly to do science. Compiling any dependencies themselves is a major burden (independent of the used build system, btw). So they use whatever is installed on the system. Due to the lifetime of those systems we need to support compilers and boost versions that date back around 5 years (we require minimal C++11 support and keep increasing the requirements step by step). I guess my point is, the C++ community does not solely consist of hard core programmers who know their way around eventually, but also people who just want to get a job done without too much hassle.
Also: some features like move-semantics are game changing, causing me to
write my libraries differently; not using it would cause bad design.
_______________________________________________ Unsubscribe & other changes:
On 22.05.2016 17:14, Klemens Morgenstern wrote:
Am 22.05.2016 um 15:57 schrieb Rainer Deyke: Just out of curiosity - what platform are cross-compiling for?
As a matter of policy, I try to cross-compile for as many platforms as possible. But Windows (through mingw/w64) is the big one. And Android, but the Android ndk already comes with a compiled up-to-date clang. -- Rainer Deyke (rainerd@eldwood.com)
On Sunday, 22 May 2016 23:05:00 MSK Rainer Deyke wrote:
Yes, it's a shame that Ubuntu isn't more proactive about making more up-to-date
compiler
packages available, but there's nothing I can do about it.
Actually, Ubuntu is quite proactive. The latest release is 16.04 (which is also an LTS release) provides gcc 5.3.1 out of the box. Also, there is PPA[1] which provides more recent compiler versions. [1]: https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/ test
On 05/23/2016 06:09 AM, Andrey Semashev wrote:
Actually, Ubuntu is quite proactive. The latest release is 16.04 (which is also an LTS release) provides gcc 5.3.1 out of the box. Also, there is PPA[1] which provides more recent compiler versions.
Actually, it's the customers who are not in a hurry to install and "play" with "latest and greatest" for obvious reasons. Unlike children who are eager to play with a new "toy" and throwing tantrums when the rest of the world is not catching up, businesses always (from my experience) a version behind... be that MS Windows or Ubuntu LTS or Solaris. My understanding is that rushing forward well ahead of the installed customer base causes a lot of headache as I'll then have to ship libraries not present on the customer machine. Then I'll have to make sure those correct libraries are in fact used... and fix when the customer screws something up (like LD_LIBRARY_PATH). So, simple "ship-and-forget" turns into maintenance and support on site. A nightmare. Anything I am missing? Is there a way to play with the kids and be excited about C++14-only and other "cool stuff" without disrupting and interfering with the customer installations? After all, those customers "help" me to pay my bills. :-)
On Monday, 23 May 2016 12:52:17 MSK Vladimir Batov wrote:
On 05/23/2016 06:09 AM, Andrey Semashev wrote:
Actually, Ubuntu is quite proactive. The latest release is 16.04 (which is also an LTS release) provides gcc 5.3.1 out of the box. Also, there is PPA[1] which provides more recent compiler versions.
Actually, it's the customers who are not in a hurry to install and "play" with "latest and greatest" for obvious reasons. Unlike children who are eager to play with a new "toy" and throwing tantrums when the rest of the world is not catching up, businesses always (from my experience) a version behind... be that MS Windows or Ubuntu LTS or Solaris.
I was addressing the remark with regard to Ubuntu, which is obviously not to blame for your customers' preferences. Then, there are different kinds of customers. In some cases it doesn't really matter what OS your software is developed for - because you ship both the software and the OS. Sometimes hardware, too. But I know what you're talking about. Corporate clients don't care how the software is written as long as it gets the job done. Developers do. So it's up to the developers to push for the new language features, libraries and so on. In my practice language or library updates never came from top down in a company, always from bottom up from the initiative developers who care.
My understanding is that rushing forward well ahead of the installed customer base causes a lot of headache as I'll then have to ship libraries not present on the customer machine. Then I'll have to make sure those correct libraries are in fact used... and fix when the customer screws something up (like LD_LIBRARY_PATH). So, simple "ship-and-forget" turns into maintenance and support on site. A nightmare.
Don't forget that using the older tools becomes more expensive over time - sometimes more expensive than maintaining your own up to date environment in the older OS. And with regard to maintenance, the support contract is another (often significant, often main) source of income.
On 2016-05-23 20:12, Andrey Semashev wrote:
On Monday, 23 May 2016 12:52:17 MSK Vladimir Batov wrote:
On 05/23/2016 06:09 AM, Andrey Semashev wrote:
Actually, Ubuntu is quite proactive. The latest release is 16.04 (which is also an LTS release) provides gcc 5.3.1 out of the box. Also, there is PPA[1] which provides more recent compiler versions.
Actually, it's the customers who are not in a hurry to install and "play" with "latest and greatest" for obvious reasons. Unlike children who are eager to play with a new "toy" and throwing tantrums when the rest of the world is not catching up, businesses always (from my experience) a version behind... be that MS Windows or Ubuntu LTS or Solaris.
I was addressing the remark with regard to Ubuntu, which is obviously not to blame for your customers' preferences.
Please do not get me wrong. I was not arguing, disputing, correcting your point. IMO Ubuntu is doing quite an acceptable job. I merely tried to highlight that Ubuntu (or any other OS developer) are not the root cause why many developers are still on older compilers.
Then, there are different kinds of customers. In some cases it doesn't really matter what OS your software is developed for - because you ship both the software and the OS. Sometimes hardware, too.
True. I personally have been overwhelmingly working for large companies delivering only s/w for their established IT infrastructure. In that setting what I can use for development and ultimately deliver are driven by that corporate IT infrastructure.
But I know what you're talking about. Corporate clients don't care how the software is written as long as it gets the job done. Developers do. So it's up to the developers to push for the new language features, libraries and so on.
:-) It's not my experience. Large corporations expect your software to just fit in to their IT infrastructure. Pushing or advocating for those corporations to change/modify their framework is most likely a wasted effort. An example. Up until fairly recently our customer (a big airline) was using Interix! That was their choice, already-made investment, etc. No amount of our effort was able to have them to allocate funds and move off it... So, our s/w had to compile with gcc-3.3 (hello C++14-only). Only when Microsoft dropped Interix and stopped support, they moved off Interix. Hooray!
In my practice language or library updates never came from top down in a company, always from bottom up from the initiative developers who care.
Well, I guess, you are luckier. :-) For us, the customer IT infrastructure is essentially carved in stone. We are free to do whatever we want... as long as it installs and works on their platform. So, the closer my development framework to their framework, the less hassle I have maintenance and support-wise.
My understanding is that rushing forward well ahead of the installed customer base causes a lot of headache as I'll then have to ship libraries not present on the customer machine. Then I'll have to make sure those correct libraries are in fact used... and fix when the customer screws something up (like LD_LIBRARY_PATH). So, simple "ship-and-forget" turns into maintenance and support on site. A nightmare.
Don't forget that using the older tools becomes more expensive over time - sometimes more expensive than maintaining your own up to date environment in the older OS.
Understood. But I am not talking old-old-old. It's just that big customers are always a version behind. So, right now, in my view, talking C++14-only and stuff is sheer nonsense.
And with regard to maintenance, the support contract is another (often significant, often main) source of income.
Indeed. The difference is mnt/support of your s/w as opposed as opposed to mnt/support of their platform and their environment. The more components I deliver (say, due to using libs missing in their standard installation) the more vulnerable I am to their tinkering with the system. Nothing new... I am sure you are well aware of all that. It's just that that aggravated persistent noise about C++14-only... loudly claiming to represent "wider C++ community" when in fact, it could not be further from the truth. Irritating.
On Monday, 23 May 2016 14:40:47 MSK Vladimir Batov wrote:
On 2016-05-23 20:12, Andrey Semashev wrote:
In my practice language or library updates never came from top down in a company, always from bottom up from the initiative developers who care.
Well, I guess, you are luckier. :-) For us, the customer IT infrastructure is essentially carved in stone. We are free to do whatever we want... as long as it installs and works on their platform. So, the closer my development framework to their framework, the less hassle I have maintenance and support-wise.
My main point above was that unless developers start nagging the management, they will never upgrade their tools. An the management tend to understand the language of numbers. If implementing a feature suddenly takes a month instead of a week because the feature is implemented with a C++11 library, I'm sure it'll be a point in favor of maintaining a C++11 environment.
And with regard to maintenance, the support contract is another (often significant, often main) source of income.
Indeed. The difference is mnt/support of your s/w as opposed as opposed to mnt/support of their platform and their environment. The more components I deliver (say, due to using libs missing in their standard installation) the more vulnerable I am to their tinkering with the system. Nothing new... I am sure you are well aware of all that. It's just that that aggravated persistent noise about C++14-only... loudly claiming to represent "wider C++ community" when in fact, it could not be further from the truth. Irritating.
I won't claim that C++14 or even C++11 community is wider than C++03-only or the other way around; I don't have data to back up either theory. But I can guess that larger- scaled companies are much more conservative. OTOH smaller companies are easier in this regard, and they are more numerous. For reference, in our company we switched to C++11 in 2011 or so, slightly before the final standard paper has been announced. We were using gcc 4.4 back then - an even earlier implementation of the unfinished standard. Even then, the few core C++11 features that we had, like rvalue references (yes, even the preliminary version thereof), proved to be extremely useful in our software design. Though it may not have that much of an impact if you already have a huge C++03 code base. Anyway, what I'm trying to say is that (a) unless you, the developer, act, you will not have C++11 and (b) adoption of the newer C++ version happens faster in some environments than other (that includes commercial environments). Sorry for being Captain Obvious :)
-----Original Message----- From: Boost [mailto:boost-bounces@lists.boost.org] On Behalf Of Andrey Semashev Sent: 22 May 2016 21:10 To: boost@lists.boost.org Subject: Re: [boost] Boost is supposed to serve *the entire C++ community; it isn't Boost's goal to serve Boost's community*
On Sunday, 22 May 2016 23:05:00 MSK Rainer Deyke wrote:
Yes, it's a shame that Ubuntu isn't more proactive about making more up-to-date
compiler
packages available, but there's nothing I can do about it.
Actually, Ubuntu is quite proactive. The latest release is 16.04 (which is also an LTS release) provides gcc 5.3.1 out of the box. Also, there is PPA[1] which provides more recent compiler versions.
[1]:
https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test excellent! however, a quick search of Launchpad only finds Boost 1.55 https://launchpad.net/~boost-latest/+archive/ubuntu/ppa How can we get the most recent Boost release (and/or master) available to Ubuntu users as easily? Paul
"Paul A. Bristow"
hat am 23. Mai 2016 um 15:30 geschrieben: -----Original Message----- From: Boost [mailto:boost-bounces@lists.boost.org] On Behalf Of Andrey Semashev Sent: 22 May 2016 21:10 To: boost@lists.boost.org Subject: Re: [boost] Boost is supposed to serve *the entire C++ community; it isn't Boost's goal to serve Boost's community*
On Sunday, 22 May 2016 23:05:00 MSK Rainer Deyke wrote:
Yes, it's a shame that Ubuntu isn't more proactive about making more up-to-date
compiler
packages available, but there's nothing I can do about it.
Actually, Ubuntu is quite proactive. The latest release is 16.04 (which is also an LTS release) provides gcc 5.3.1 out of the box. Also, there is PPA[1] which provides more recent compiler versions.
[1]:
https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test
excellent!
however, a quick search of Launchpad only finds Boost 1.55
https://launchpad.net/~boost-latest/+archive/ubuntu/ppa
How can we get the most recent Boost release (and/or master) available to Ubuntu users as easily?
I did that, years ago. My Boost PPA (https://launchpad.net/~purplekarrot/+archive/ubuntu/boost) no longer contains any packages, because the Ubuntu versions that I built them for are no longer supported. I don't remember the exact procedure, but I might find the script that I used in my archive. We could create an official Boost PPA and provide up to date packages with each release. It is no big effort. I just don't really have a use-case myself. But I can show how to set this up if there is enough interest. Cheers, Daniel
On Monday, 23 May 2016 17:21:42 MSK Paul A. Bristow wrote:
however, a quick search of Launchpad only finds Boost 1.55
https://launchpad.net/~boost-latest/+archive/ubuntu/ppa
How can we get the most recent Boost release (and/or master) available to Ubuntu users as easily?
I guess, someone would have to take over that PPA or create a new one. There's this note: IMPORTANT: Due to this PPA main contributor (f4l3) disagreement with Canonical decisions and strategies, no active user is working on this PPA any more. If you are interest in helping this PPA packaging more recent versions of the BOOST library, please send an email to f4l3. https://launchpad.net/~boost-latest
From the links in the PPA description it looks like this should have been a kind of official (?) repository, although I never heard of it before.
I would love to see a more actively maintained PPA for Boost on Ubuntu too,
but am afraid that I don't have capacity to offer to help with that myself.
On cpp-ethereum we have to maintain multiple PPAs with many more
re-packagings of external dependencies than I would like. We've also got
Homebrew packaging, Windows installers, DMGs for OS X, and have a "fake
package repository" for our Windows binaries. I'm hoping we can start to
leverage NuGet C++ on Windows, but I'm not sure if it is possible. There
is Chocolatey too.
The fragmented packaging story for C++ is a huge problem for maintainers
and for distribution of libraries.
On Mon, May 23, 2016 at 7:25 AM, Andrey Semashev
On Monday, 23 May 2016 17:21:42 MSK Paul A. Bristow wrote:
however, a quick search of Launchpad only finds Boost 1.55
https://launchpad.net/~boost-latest/+archive/ubuntu/ppa
How can we get the most recent Boost release (and/or master) available to Ubuntu users as easily?
I guess, someone would have to take over that PPA or create a new one. There's this note:
IMPORTANT: Due to this PPA main contributor (f4l3) disagreement with Canonical decisions and strategies, no active user is working on this PPA any more. If you are interest in helping this PPA packaging more recent versions of the BOOST library, please send an email to f4l3.
https://launchpad.net/~boost-latest
From the links in the PPA description it looks like this should have been a kind of official (?) repository, although I never heard of it before.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
-- bob@summerwill.net
On 05/23/2016 11:30 PM, Paul A. Bristow wrote:
https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test excellent! however, a quick search of Launchpad only finds Boost 1.55 https://launchpad.net/~boost-latest/+archive/ubuntu/ppa How can we get the most recent Boost release (and/or master) available to Ubuntu users as easily?
Indeed. However, I am not sure there is much value in that effort. Boost is for developers and as a developer I simply download the version I need (not necessarily the latest), build and package binaries up to be deployed across the rest of the project. Using PPA will likely update the installation automatically as soon as an update is available. I personally do not want that... Well, I want those updates controlled. Namely, built with, tested, etc. before deploying. So, as a user I am personally quite happy with the existing arrangement... and for those same reasons I like Boost as one "monolithic" distribution too.
On 05/22/2016 09:53 AM, Rainer Deyke wrote:
On 19.05.2016 11:17, Niall Douglas wrote:
The C++ 14 only libraries contributed to date are clearly written first for C++ not Boost. They are the future we should be proactively encouraging into a new clean ground up redesigned fork of Boost, a Boost 2.0, instead of corralling them into legacy and outdated packaging, build, design, documentation and idioms out of some misguided desire for serving the legacy Boost usership before that of the wider C++ community.
What percentage of "the entire C++ community" do you think has access to a C++ 14 compiler anyway?
[...] I'd love to switch to C++ 14, but right now it's just technically viable for me.
I have to agree with that. The company I work for builds devices that run C++ code and Desktop applications to control these devices. While I'm relatively free to use whatever compiler I want on the desktop side (as long as I provide an installable package to the customer, that runs on Windows Vista+) I cannot control what is available on the device. So I have to adapt to whatever compiler version the firmware team decided to provide. The most recent compiler they provide on one of our devices is GCC 4.8. I will have to support this compiler (even when writing new code that will be running on both, desktop machines and on the devices) for years to come. As a side note, we have to support code written in Visual C++ 6.0, but these versions do not require any new Boost version, so this is not an issue. But of course we have VMs with such ancient compilers around and in use. But any new library that requires C++14 is of no use to our company, as long as we cannot make sure the code will be running in our desktop applications only (which is the majority of newly written software in our company). And this will not change quickly. A new version of Boost that required C++14 for all their libraries would not be used, even though it might be faster, better tested and have a ton of other advantages. It would be easier to write/port some new code ourselves than to force a change of infrastructure to the entire company.
On 22 May 2016, at 14:57, Norbert Wenzel
wrote: On 05/22/2016 09:53 AM, Rainer Deyke wrote:
On 19.05.2016 11:17, Niall Douglas wrote: The C++ 14 only libraries contributed to date are clearly written first for C++ not Boost. They are the future we should be proactively encouraging into a new clean ground up redesigned fork of Boost, a Boost 2.0, instead of corralling them into legacy and outdated packaging, build, design, documentation and idioms out of some misguided desire for serving the legacy Boost usership before that of the wider C++ community.
What percentage of "the entire C++ community" do you think has access to a C++ 14 compiler anyway?
[...] I'd love to switch to C++ 14, but right now it's just technically viable for me.
I have to agree with that. The company I work for builds devices that run C++ code and Desktop applications to control these devices. While I'm relatively free to use whatever compiler I want on the desktop side (as long as I provide an installable package to the customer, that runs on Windows Vista+) I cannot control what is available on the device. So I have to adapt to whatever compiler version the firmware team decided to provide. The most recent compiler they provide on one of our devices is GCC 4.8. I will have to support this compiler (even when writing new code that will be running on both, desktop machines and on the devices) for years to come.
As a side note, we have to support code written in Visual C++ 6.0, but these versions do not require any new Boost version, so this is not an issue. But of course we have VMs with such ancient compilers around and in use.
But any new library that requires C++14 is of no use to our company, as long as we cannot make sure the code will be running in our desktop applications only (which is the majority of newly written software in our company). And this will not change quickly. A new version of Boost that required C++14 for all their libraries would not be used, even though it might be faster, better tested and have a ton of other advantages. It would be easier to write/port some new code ourselves than to force a change of infrastructure to the entire company.
If the devices are network attached then this sounds like a great usecase for testing the beast http boost library? You could embed a little http server in the device that provided a REST API, ..control it with a browser on the desktop.
On Sun, May 22, 2016 at 8:57 AM, Norbert Wenzel
But any new library that requires C++14 is of no use to our company
What about C++11? The difference between C++14 and C++11 is not that
large. As a sole programmer maintaining a library offering, it wasn't
too much trouble for me to restrict myself to C++11. Simply rewriting
lambdas taking auto parameters into hand rolled classes, and not using
library conveniences like std::enable_if_t was sufficient. But
supporting anything before C++11 would require a rather large increase
in the amount of change and maintenance, and more resources than I
have available to devote to the project.
On Sun, May 22, 2016 at 9:08 AM, Thijs (M.A.) van den Berg
If the devices are network attached then this sounds like a great usecase for testing the beast http boost library?
Note that Beast requires C++11 (see http://vinniefalco.github.io/beast/beast/intro/requirements.html)
On 05/22/2016 03:27 PM, Vinnie Falco wrote:
On Sun, May 22, 2016 at 8:57 AM, Norbert Wenzel
wrote: But any new library that requires C++14 is of no use to our company
What about C++11?
Yes, C++11 is used extensively in new code and is supported by GCC 4.8. Older devices are less likely to get any new features, thus support for older compilers with new versions of Boost is probably not needed. In my reply I was specifically referring to the idea of making a C++14 Boost 2.0 subset/fork for the reason to support *the entire* C++ community, which seemed a bit contradictory from my point of view.
On Sun, May 22, 2016 at 9:08 AM, Thijs (M.A.) van den Berg
wrote: If the devices are network attached then this sounds like a great usecase for testing the beast http boost library?
Note that Beast requires C++11 (see http://vinniefalco.github.io/beast/beast/intro/requirements.html)
Thanks for that suggestion, but permanent network connection and HTTP are not available at the moment.
If I may chime in briefly on the whole debate- if you watch any of the cppcon talks, or in fact talk to game devs, you'll find that many companies are heavily invested in older platforms, in fact as far back as MSVC 2008 in some cases. This is not arbitrary behaviour, it is grounded decisions either based on investiture in infrastructure or in some cases, maintaining codebases which have been in existence for long periods of time. Those companies may not be the target userbase of boost, but they might be. Do you wish to exclude them? Given that basically no compilers supported C++11 in it's entirety until very recently, I think the jump to ditch old standards support is in poor taste, even on a forward-going basis, and will exclude many potential users. Cheers, M On 23/05/2016 1:55 a.m., Norbert Wenzel wrote:
On 05/22/2016 03:27 PM, Vinnie Falco wrote:
On Sun, May 22, 2016 at 8:57 AM, Norbert Wenzel
wrote: But any new library that requires C++14 is of no use to our company
What about C++11?
Yes, C++11 is used extensively in new code and is supported by GCC 4.8. Older devices are less likely to get any new features, thus support for older compilers with new versions of Boost is probably not needed. In my reply I was specifically referring to the idea of making a C++14 Boost 2.0 subset/fork for the reason to support *the entire* C++ community, which seemed a bit contradictory from my point of view.
On Sun, May 22, 2016 at 9:08 AM, Thijs (M.A.) van den Berg
wrote: If the devices are network attached then this sounds like a great usecase for testing the beast http boost library?
Note that Beast requires C++11 (see http://vinniefalco.github.io/beast/beast/intro/requirements.html)
Thanks for that suggestion, but permanent network connection and HTTP are not available at the moment.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
On 5/16/16 09:47, Mikhail Strelnikov wrote:
* Several companies have revealed that they are building Boost with
their own custom CMake scripts. The suggested policy change would enable authors to relieve the infrastructure cost of their CMake users and unify how their library is built.
I have opposite experience by replacing dozens of CMake scripts with one tiny Jamfile.
* CMake is, by far, the most popular build system for C++. Allowing authors to support CMake users in addition to BJam will help the Boost ecosystem to grow and thrive by lowering the barriers to access.
IMHO, CMakeLists.txt looks ugly as everything in camel starting with C. There are lots of Boost libraries having only "index.html" in their top-level directory, look, there is a pattern here and I'm not sure this should be uglified.
I don't care too much about popularity, but Bjam/BB does support C++ much better than CMake. It has, for example, "usage-requirements".
Hi Mikhail (and others who might reply to this thread) - This isn't a beauty pageant nor is it a popularity contest. David is simply asking for community input concerning a change to the Boost Guidelines. Despite beliefs on the technical merit of CMake versus Boost.Build, CMake has been a leader in the open source community and within many companies for a number of years. CMake now has a variety of features, including 'usage-requirements', that were inspired by Boost.Build and the work that the Boost community has done with Kitware. Lets try and keep this thread on topic. Thanks! michael -- Michael Caisse Ciere Consulting ciere.com
On 5/16/16 13:15, Michael Caisse wrote:
CMake now has a variety of features, including 'usage-requirements', that were inspired by Boost.Build and the work that the Boost community has done with Kitware.
I misattributed this work. It was Stephen Kelly who implemented this feature. -- Michael Caisse Ciere Consulting ciere.com
Mikhail Strelnikov
* Several libraries, such as Boost.Hana and Boost.Spirit, have two distribution mechanisms: one as distributed with Boost and the other as an independent package.
What if header-only library A is using Hana from Boost 1.61 and header-only library B is using independent Hana released in 2017? Will this violate ODR (if compile at all) if both A and B are used in the same application?
Don't do that, just as you probably shouldn't use any library alongside a copy of itself at a different version. Also, FWIW, I'll use an inline namespace including the version of the library so that code using a different version won't link. I thought this was already the case, but it appears that Hana 1.0.0 ships without an inline namespace, which is an oversight.
The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution.
Hana does already include CMakeLists.txt in 1.61, why is that?
Because we had not had the discussion we're having right now at the time of freezing Hana for the 1.61.0 release, and the presence of the CMakeLists.txt file effectively does not hinder the release process, so it just stayed there.
Why header-only library such as Hana needs a build script that is 5 pages long (plus walls of text in cmake directory)? Bjam does support header-only libraries and does not require much from library author.
Technically, it doesn't need all of that. But Hana has - unit tests that are only enabled on some compilers - optional unit tests when built with the rest of Boost - header inclusion tests for every single header - support for running the tests under Valgrind - a complete suite of compile-time benchmarks and many more things that do require more than the minimal CMake setup for header-only libraries. But even that being said, the potential verbosity of CMake is completely beside the point, and the quality of Hana's CMake setup (which you imply to be poor) is even more so.
If you have 1.61 extracted, navigate to boost/libs/hana/CMakeLists.txt line 105 and please tell me why library included in Boost 1.61 is trying to search for Boost 1.59? Do you want every Boost library to search their own version of Boost?
No, not at all. Hana searches for Boost 1.59 _or above_, because it supports these versions. Obviously, the CMakeLists.txt file included with Hana is not the CMakeLists.txt file that would be included with Hana if the Boost community decided to make a move to CMake, which is not the case right now. In the current context, Hana has to search for all its dependencies manually.
It requires CMake 3.0 released in 2014 and searches for Boost 1.59 released in 2015 - this is not going to work. Best FindBoost.cmake has to offer is 1.56.
Well, that's a bug. It hadn't come up because we download the latest CMake in the CI anyway, but I'll fix it [1]. Thanks for the heads up.
What BOOST_HANA_HAS_WEXTRA does?
It determines whether the compiler supports the -Wextra flag. If supported, this flag is then added when building the tests and examples.
What is boost/libs/hana/LICENSE.md doing? Is this legal?
It documents Hana's license, which is the usual Boost license. I don't see why that wouldn't be legal, since it's the same license as the rest of Boost. It's not like I'm sneaking GPL code into the Boost tree without telling anyone.
[...] I have opposite experience by replacing dozens of CMake scripts with one tiny Jamfile.
This is beside the point.
[...] IMHO, CMakeLists.txt looks ugly as everything in camel starting with C. There are lots of Boost libraries having only "index.html" in their top-level directory, look, there is a pattern here and I'm not sure this should be uglified.
This is beside the point.
I don't care too much about popularity, but Bjam/BB does support C++ much better than CMake. It has, for example, "usage-requirements".
This is beside the point. If you have any other comments that are specific to Hana's CMake setup, please feel free to raise them by opening issues on Hana's GitHub page [2], which is the proper place for most comments you've made here. I'm glad to receive constructive feedback, as long as it's done in the right place. Regards, Louis Dionne [1]: https://github.com/boostorg/hana/issues/272 [2]: https://github.com/boostorg/hana/issues
No, not at all. Hana searches for Boost 1.59 _or above_, because it supports these versions. Obviously, the CMakeLists.txt file included with Hana is not the CMakeLists.txt file that would be included with Hana if the Boost community decided to make a move to CMake, which is not the case right now.
I want to remind you that this started with "The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution." But now it is obvious Hana will need two CMakeLists.txt and somehow this is not "a maintenance burden".
On Wednesday, May 18, 2016 at 11:29:07 AM UTC-5, Mikhail Strelnikov wrote:
No, not at all. Hana searches for Boost 1.59 _or above_, because it supports these versions. Obviously, the CMakeLists.txt file included with Hana is not the CMakeLists.txt file that would be included with Hana if the Boost community decided to make a move to CMake, which is not the case right
now.
I want to remind you that this started with "The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution."
But now it is obvious Hana will need two CMakeLists.txt and somehow this is not "a maintenance burden".
I dont think that Louis is suggesting two cmake files. Rather, if boost were to move to cmake then the `find_package` could be used to find the actual boost targets rather then relying on cmake to reverse engineer the dependencies. And, like I said in a previous email, a special `boost_find_package` function could be added(or we could override `find_package`) to search for internal dependencies, which will allow the same cmake file for both standalone and superproject builds.
On 5/18/16 10:02 AM, Paul Fultz II wrote:
On Wednesday, May 18, 2016 at 11:29:07 AM UTC-5, Mikhail Strelnikov wrote:
No, not at all. Hana searches for Boost 1.59 _or above_, because it supports these versions. Obviously, the CMakeLists.txt file included with Hana is not the CMakeLists.txt file that would be included with Hana if the Boost community decided to make a move to CMake, which is not the case right
now.
I want to remind you that this started with "The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution."
But now it is obvious Hana will need two CMakeLists.txt and somehow this is not "a maintenance burden".
I dont think that Louis is suggesting two cmake files. Rather, if boost were to move to cmake then the `find_package` could be used to find the actual boost targets rather then relying on cmake to reverse engineer the dependencies.
And, like I said in a previous email, a special `boost_find_package` function could be added(or we could override `find_package`) to search for internal dependencies, which will allow the same cmake file for both standalone and superproject builds.
I have to confess I'm not this. The original post on the thread stated: "We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory." Leave aside the fact this as far as I know this has never been prohibited. It seems that the request is that the stated policy incorporate the above text and that no one has actually argued against this. It seems to me that you're getting exactly what been asked for. So what's the problem? Robert Ramey
On Wednesday, May 18, 2016 at 12:12:01 PM UTC-5, Robert Ramey wrote:
On 5/18/16 10:02 AM, Paul Fultz II wrote:
On Wednesday, May 18, 2016 at 11:29:07 AM UTC-5, Mikhail Strelnikov
No, not at all. Hana searches for Boost 1.59 _or above_, because it supports these versions. Obviously, the CMakeLists.txt file included with Hana
is
not the CMakeLists.txt file that would be included with Hana if the Boost community decided to make a move to CMake, which is not the case right now.
I want to remind you that this started with "The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution."
But now it is obvious Hana will need two CMakeLists.txt and somehow
wrote: this
is not "a maintenance burden".
I dont think that Louis is suggesting two cmake files. Rather, if boost were to move to cmake then the `find_package` could be used to find the actual boost targets rather then relying on cmake to reverse engineer the dependencies.
And, like I said in a previous email, a special `boost_find_package` function could be added(or we could override `find_package`) to search for internal dependencies, which will allow the same cmake file for both standalone and superproject builds.
I have to confess I'm not this.
Yes, of course, we are not proposing that boost convert to cmake. I am just mentioning this, because adding a cmake to the top-level will not cause a maintenance burden if boost decided to move to cmake.
The original post on the thread stated:
"We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory."
Leave aside the fact this as far as I know this has never been prohibited. It seems that the request is that the stated policy incorporate the above text and that no one has actually argued against this. It seems to me that you're getting exactly what been asked for.
Rene has made it clear that it was prohibited by the guidelines, and Vladimir is opposed to it. Everyone else either supports it or is neutral on the issue.
On Wed, May 18, 2016 at 12:20 PM, Paul Fultz II
Rene has made it clear that it was prohibited by the guidelines,
I have? The requirements are written in an affirmative aspect. They don't prohibit anything. And this is why I wanted *actual* wording changes. As people seem to be reading them differently. At worse the current requirements would mandate that you have two cmake files. One in the build directory, and if you wanted, one in the root. -- -- Rene Rivera -- Grafik - Don't Assume Anything -- Robot Dreams - http://robot-dreams.net -- rrivera/acm.org (msn) - grafikrobot/aim,yahoo,skype,efnet,gmail
On 18/05/2016 20:20, Paul Fultz II wrote:
The original post on the thread stated:
"We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory."
Leave aside the fact this as far as I know this has never been prohibited. It seems that the request is that the stated policy incorporate the above text and that no one has actually argued against this. It seems to me that you're getting exactly what been asked for.
Rene has made it clear that it was prohibited by the guidelines, and Vladimir is opposed to it.
I am specifically opposed to permitting cmake stuff at root level of a library while requiring that Boost.Build files are in the 'build' directory. This objection can be addressed by either allowing all of that at the root (not really facetious suggestion), or by requiring that all build files be under 'build' directory - which has the advantage of actually scaling, and apparently is possible with all possible build systems. In the latter case the guidelines might be amended to say that library author can add additional build systems support, though in practice we already have makefiles and VS solutions and what not. -- Vladimir Prus http://vladimirprus.com
On May 18, 2016, at 12:52 PM, Vladimir Prus
wrote: On 18/05/2016 20:20, Paul Fultz II wrote:
The original post on the thread stated:
"We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory."
Leave aside the fact this as far as I know this has never been prohibited. It seems that the request is that the stated policy incorporate the above text and that no one has actually argued against this. It seems to me that you're getting exactly what been asked for.
Rene has made it clear that it was prohibited by the guidelines, and Vladimir is opposed to it.
I am specifically opposed to permitting cmake stuff at root level of a library while requiring that Boost.Build files are in the 'build' directory. This objection can be addressed by either allowing all of that at the root (not really facetious suggestion), or by requiring that all build files be under 'build' directory - which has the advantage of actually scaling, and apparently is possible with all possible build systems. In the latter case the guidelines might be amended to say that library author can add additional build systems support, though in practice we already have makefiles and VS solutions and what not.
I’d like to see the CMake files in the same locations as the Jamfiles so we have a consistent layout for build and test across Boost.
-----Original Message----- From: Boost [mailto:boost-bounces@lists.boost.org] On Behalf Of Belcourt, Kenneth Sent: 19 May 2016 17:18 To: boost@lists.boost.org Subject: Re: [boost] [EXTERNAL] Request for a "Policy Review" regarding 'CMakeLists.txt'
I’d like to see the CMake files in the same locations as the Jamfiles so we have a consistent layout for build and test across Boost.
+1 (of course, keeping the existing bjam/b2 build system and the tireless team supporting it and the massive testing system, one of Boost's really impressive features). Paul PS We seem to be making incredibly heavy weather on this fairly minor matter! Making something 'standard' is generally good but if the location of Cmake stuff really proves inconvenient, we could change later without major upset? Please can we move on... --- Paul A. Bristow Prizet Farmhouse Kendal UK LA8 8AB +44 (0) 1539 561830
On Thursday, May 19, 2016 at 11:46:28 AM UTC-5, Paul A. Bristow wrote:
-----Original Message----- From: Boost [mailto:boost-...@lists.boost.org javascript:] On Behalf Of Belcourt, Kenneth Sent: 19 May 2016 17:18 To: bo...@lists.boost.org javascript: Subject: Re: [boost] [EXTERNAL] Request for a "Policy Review" regarding 'CMakeLists.txt'
I’d like to see the CMake files in the same locations as the Jamfiles so we have a consistent layout for build and test across Boost.
+1
(of course, keeping the existing bjam/b2 build system and the tireless team supporting it and the massive testing system, one of Boost's really impressive features).
Paul
PS We seem to be making incredibly heavy weather on this fairly minor matter!
Making something 'standard' is generally good but if the location of Cmake stuff really proves inconvenient, we could change later without major upset?
We are saying its inconvenient and we want it changed.
Le 19/05/16 à 19:57, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 11:46:28 AM UTC-5, Paul A. Bristow wrote:
-----Original Message----- From: Boost [mailto:boost-...@lists.boost.org javascript:] On Behalf Of Belcourt, Kenneth Sent: 19 May 2016 17:18 To: bo...@lists.boost.org javascript: Subject: Re: [boost] [EXTERNAL] Request for a "Policy Review" regarding 'CMakeLists.txt'
I’d like to see the CMake files in the same locations as the Jamfiles so we have a consistent layout for build and test across Boost.
+1
(of course, keeping the existing bjam/b2 build system and the tireless team supporting it and the massive testing system, one of Boost's really impressive features).
Paul
PS We seem to be making incredibly heavy weather on this fairly minor matter!
Making something 'standard' is generally good but if the location of Cmake stuff really proves inconvenient, we could change later without major upset?
We are saying its inconvenient and we want it changed.
But... are you asking for a change, or are you trying to enforcing it? Because so far I can see A- some people opposed to this proposal (me included), B- some people waiting for a clear statement in the policies (and then maybe turning to one of the other options) C- some people not caring at all D- some people that approve this change If you want that A/ disappears at all costs, then this is apparently not going to happen. Would getting B/ done change the play? If C+D >> A, would that deny A/ ? I have the feeling we are in a dead end (I do not feel alone here). Maybe having B/ done will gives us some feeling of progress. I also hope that not having one single CMake file in the place you think is right will not harm your interest in boost for the rest of your life, and will not question the value of boost, its future, etc etc. Best, Raffi
On Thursday, May 19, 2016 at 3:43:01 PM UTC-5, Raffi Enficiaud wrote:
Le 19/05/16 à 19:57, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 11:46:28 AM UTC-5, Paul A. Bristow wrote:
-----Original Message----- From: Boost [mailto:boost-...@lists.boost.org javascript:] On Behalf Of Belcourt, Kenneth Sent: 19 May 2016 17:18 To: bo...@lists.boost.org javascript: Subject: Re: [boost] [EXTERNAL] Request for a "Policy Review" regarding 'CMakeLists.txt'
I’d like to see the CMake files in the same locations as the Jamfiles
so
we have a consistent layout for build and test across
Boost.
+1
(of course, keeping the existing bjam/b2 build system and the tireless team supporting it and the massive testing system, one of Boost's really impressive features).
Paul
PS We seem to be making incredibly heavy weather on this fairly minor matter!
Making something 'standard' is generally good but if the location of Cmake stuff really proves inconvenient, we could change later without major upset?
We are saying its inconvenient and we want it changed.
But... are you asking for a change, or are you trying to enforcing it?
We are asking for a change to allow CMakeLists.txt at the top-level directory of the individual library repo at the library author's discretion. We are not trying to force library authors to put a cmake there, that is up to the library author.
Le 20/05/16 à 00:01, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 3:43:01 PM UTC-5, Raffi Enficiaud wrote:
Le 19/05/16 à 19:57, Paul Fultz II a écrit :
[snip]
We are saying its inconvenient and we want it changed.
But... are you asking for a change, or are you trying to enforcing it?
We are asking for a change to allow CMakeLists.txt at the top-level directory of the individual library repo at the library author's discretion. We are not trying to force library authors to put a cmake there, that is up to the library author.
Let me rephrase: are you trying to enforce the possibility for having the CMakeLists.txt at the top-level directory of individual libraries? Or are you asking if it would be possible, and accept any other conclusion than the one you want?
On Thursday, May 19, 2016 at 5:21:21 PM UTC-5, Raffi Enficiaud wrote:
Le 20/05/16 à 00:01, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 3:43:01 PM UTC-5, Raffi Enficiaud wrote:
Le 19/05/16 à 19:57, Paul Fultz II a écrit :
[snip]
We are saying its inconvenient and we want it changed.
But... are you asking for a change, or are you trying to enforcing it?
We are asking for a change to allow CMakeLists.txt at the top-level directory of the individual library repo at the library author's discretion. We are not trying to force library authors to put a cmake there, that is up to the library author.
Let me rephrase: are you trying to enforce the possibility for having the CMakeLists.txt at the top-level directory of individual libraries?
I don't quite understand what you are asking. How do we enforce a possibility?
Or are you asking if it would be possible, and accept any other conclusion than the one you want?
I think not being able to have a cmake at the top-level is unacceptable.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Le 20/05/16 à 00:46, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 5:21:21 PM UTC-5, Raffi Enficiaud wrote:
Le 20/05/16 à 00:01, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 3:43:01 PM UTC-5, Raffi Enficiaud wrote:
Le 19/05/16 à 19:57, Paul Fultz II a écrit :
[snip]
We are saying its inconvenient and we want it changed.
But... are you asking for a change, or are you trying to enforcing it?
We are asking for a change to allow CMakeLists.txt at the top-level directory of the individual library repo at the library author's discretion. We are not trying to force library authors to put a cmake there, that is up to the library author.
Let me rephrase: are you trying to enforce the possibility for having the CMakeLists.txt at the top-level directory of individual libraries?
I don't quite understand what you are asking. How do we enforce a possibility?
The "possibility" in mention here is the change you are asking in the policies (possibility of having the library top-level CMakeLists.txt). "enforce the possibility for having the CMakeLists.txt at the top-level directory of individual libraries" means enforcing the change in the policies. People have expressed their preferences that are or are not in contraction with your proposal. It is hence questionable that those change would happen in the policy, so I am asking if you consider not having those change is an option you have considered so far.
Or are you asking if it would be possible, and accept any other conclusion than the one you want?
I think not being able to have a cmake at the top-level is unacceptable.
This last sentence is part of what I consider enforcing (pushy). Raffi
On Thursday, May 19, 2016 at 6:27:33 PM UTC-5, Raffi Enficiaud wrote:
Le 20/05/16 à 00:46, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 5:21:21 PM UTC-5, Raffi Enficiaud wrote:
Le 20/05/16 à 00:01, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 3:43:01 PM UTC-5, Raffi Enficiaud wrote:
Le 19/05/16 à 19:57, Paul Fultz II a écrit :
[snip]
We are saying its inconvenient and we want it changed.
But... are you asking for a change, or are you trying to enforcing it?
We are asking for a change to allow CMakeLists.txt at the top-level directory of the individual library repo at the library author's discretion. We
are
not trying to force library authors to put a cmake there, that is up to the library author.
Let me rephrase: are you trying to enforce the possibility for having the CMakeLists.txt at the top-level directory of individual libraries?
I don't quite understand what you are asking. How do we enforce a possibility?
The "possibility" in mention here is the change you are asking in the policies (possibility of having the library top-level CMakeLists.txt). "enforce the possibility for having the CMakeLists.txt at the top-level directory of individual libraries" means enforcing the change in the policies.
People have expressed their preferences that are or are not in contraction with your proposal. It is hence questionable that those change would happen in the policy, so I am asking if you consider not having those change is an option you have considered so far.
Well if boost cannot even make this small change towards improving support for cmake, then it obviously would be best to fork boost. However, a final decision hasn't been made on the matter yet, so lets not get carried away.
Or are you asking if it would be possible, and accept any other conclusion than the one you want?
I think not being able to have a cmake at the top-level is unacceptable.
This last sentence is part of what I consider enforcing (pushy).
enforcing != pushy
On Thursday, May 19, 2016 at 11:18:44 AM UTC-5, Belcourt, Kenneth wrote:
On May 18, 2016, at 12:52 PM, Vladimir Prus
javascript:> wrote: On 18/05/2016 20:20, Paul Fultz II wrote:
The original post on the thread stated:
"We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory."
Leave aside the fact this as far as I know this has never been prohibited. It seems that the request is that the stated policy incorporate the above text and that no one has actually argued against this. It seems to me that you're getting exactly what been asked for.
Rene has made it clear that it was prohibited by the guidelines, and Vladimir is opposed to it.
I am specifically opposed to permitting cmake stuff at root level of a library while requiring that Boost.Build files are in the 'build' directory. This objection can be addressed by either allowing all of that at the root (not really facetious suggestion), or by requiring that all build files be under 'build' directory - which has the advantage of actually scaling, and apparently is possible with all possible build systems. In the latter case the guidelines might be amended to say that library author can add additional build systems support, though in practice we already have makefiles and VS solutions and what not.
I’d like to see the CMake files in the same locations as the Jamfiles so we have a consistent layout for build and test across Boost.
I am opposed to this, and what we are proposing is allowing Cmake at the top-level. I have yet to see a technical issue with this. It is true that the cmake is more prominent then the bjam, but it is also better supported for those libraries that put CMakeLists.txt at the top-level. Boost.Hana, for example, has a more extensive test-suite when using cmake.
Le 19/05/16 à 18:18, Belcourt, Kenneth a écrit :
On May 18, 2016, at 12:52 PM, Vladimir Prus
wrote: On 18/05/2016 20:20, Paul Fultz II wrote:
The original post on the thread stated:
"We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory."
Leave aside the fact this as far as I know this has never been prohibited. It seems that the request is that the stated policy incorporate the above text and that no one has actually argued against this. It seems to me that you're getting exactly what been asked for.
Rene has made it clear that it was prohibited by the guidelines, and Vladimir is opposed to it.
I am specifically opposed to permitting cmake stuff at root level of a library while requiring that Boost.Build files are in the 'build' directory. This objection can be addressed by either allowing all of that at the root (not really facetious suggestion), or by requiring that all build files be under 'build' directory - which has the advantage of actually scaling, and apparently is possible with all possible build systems. In the latter case the guidelines might be amended to say that library author can add additional build systems support, though in practice we already have makefiles and VS solutions and what not.
I’d like to see the CMake files in the same locations as the Jamfiles so we have a consistent layout for build and test across Boost.
If this is a poll, I also say +1
One more vote for "allow CMakeLists.txt in the places we allow Jamfiles". Let the bigger questions be addressed separately.
On 5/19/16 2:39 PM, Jeff Trull wrote:
One more vote for "allow CMakeLists.txt in the places we allow Jamfiles". Let the bigger questions be addressed separately.
If anyone's interested, There are currently three libraries with CMake files in them: compute, hana, and serialization and test compute and hana have a CMakeLists.txt file in the library root as well as other CMakeLists.txt files in subdirectories. test is a compiled library that has CMakeLists.txt files in it's build and test subdirectories serialization is a compiled library that has one CMakelists.txt file in a subdirectory named CMake There's quite a bit of variety among all these implementations. Looking at them, it would be alot of work to reconcile them. Given my esperience with CMake scripting this is not a surprise. I found in my case that it required lots and lots of trial and error and I never felt I really had it "right". I just stopped when it created my XCode project. No one's ever complained about it, so I'm really doubtful that anyone has ever tried aside from my self. My Xcode project builds and tests about 1000 tests - it takes a while to start up since it seems that XCode likes to pre-compile everything it can in order to make intellisense work. Building is pretty fast and text execution is very fast. I've been using it for about two (or three?) years without much problem (once it gets setup !!!) so that speaks well for it. From my perspective, the main attraction is that it sets up my XCode project correctly - for 1000 tests this is a big deal. With my old msvc setup setting up such a project by hand was an ongoing pain. When I want to run my "official" boost tests I use boost build with all the compilers I have on this machine in debug/release static/shared 32/64. This takes a while. Then I check in the changes and watch fail on environments I don't have. I don't really have a point there, just a little factual experience to keep things in perspective.
On Thursday, May 19, 2016 at 4:39:33 PM UTC-5, Jeff Trull wrote:
One more vote for "allow CMakeLists.txt in the places we allow Jamfiles".
To be clear, this is a vote to maintain status quo, as the guideline do allow cmake files to be where bjam files are(like in the build/ directory). What we are proposing is in addition to this, allow a cmake file to exists in the top- level of a library's repo. There is already library's that do this(such as hana and compute), so there hasn't been a technical problem with the tooling. However, we would like the wording in the guidelines to state in a more explicit manner that this is acceptable in order to avoid possible future problems.
Let the bigger questions be addressed separately.
What bigger question?
Le 20/05/16 à 00:09, Paul Fultz II a écrit :
There is already library's that do this(such as hana and compute),
This is not an argument.
so there hasn't been a technical problem with the tooling.
Nobody said there is one, people rather said there is no technical issue in having your CMakeLists.txt in ./build or ./cmake or ./anyothersubdir (something that you seems to omit quite often).
However, we would like the wording in the guidelines to state in a more explicit manner that this is acceptable in order to avoid possible future problems.
There is an *IF* missing there.
On Thursday, May 19, 2016 at 5:29:14 PM UTC-5, Raffi Enficiaud wrote:
Le 20/05/16 à 00:09, Paul Fultz II a écrit :
There is already library's that do this(such as hana and compute),
This is not an argument.
so there hasn't been a technical problem with the tooling.
Nobody said there is one, people rather said there is no technical issue in having your CMakeLists.txt in ./build or ./cmake or ./anyothersubdir (something that you seems to omit quite often).
Yes there is a technical as well as a usability issue with hiding the cmake file in some directory. This causes problems with other tools. You will no longer be able to install a boost library with `cget install boostorg/hana`. Instead the user will have to manually download the repo, unpack the archive, and then do `cget install hana/build`. I find that unacceptable. Library authors who support cmake do not want their support treated as a second-class citizen.
However, we would like the wording in the guidelines to state in a more explicit manner that this is acceptable in order to avoid possible future problems.
There is an *IF* missing there.
Where?
Le 20/05/16 à 00:55, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 5:29:14 PM UTC-5, Raffi Enficiaud wrote:
Le 20/05/16 à 00:09, Paul Fultz II a écrit :
There is already library's that do this(such as hana and compute),
This is not an argument.
so there hasn't been a technical problem with the tooling.
Nobody said there is one, people rather said there is no technical issue in having your CMakeLists.txt in ./build or ./cmake or ./anyothersubdir (something that you seems to omit quite often).
Yes there is a technical as well as a usability issue with hiding the cmake file in some directory. This causes problems with other tools. You will no longer be able to install a boost library with `cget install boostorg/hana`. Instead the user will have to manually download the repo, unpack the archive, and then do `cget install hana/build`. I find that unacceptable.
To be honest, I do not care at all about cget. I would like rather to see cget support another way of working. In terms of hiding, whether it is at the top-level directory or any subdirectory does not change much: it is buried deep down in a big tree in both cases. If someone wants to distribute his library outside of boost, what about having the same patch system as for eg. Debian packages wrt. upstream?
Library authors who support cmake do not want their support treated as a second-class citizen.
Yet, the primary focus of a boost library is not its good cmake support.
However, we would like the wording in the guidelines to state in a more explicit manner that this is acceptable in order to avoid possible future problems.
There is an *IF* missing there.
Where?
At the very beginning: *IF* there is some agreement (I am not in a position to say what is an agreement) and the policies are changed according to what you want. Your sentence [1] suggest that having a library top-level CMakeLists.txt is already granted. Raffi [1] Sentence: "However, we would like the wording in the guidelines to state in a more explicit manner that this is acceptable in order to avoid possible future problems."
On Thursday, May 19, 2016 at 6:12:07 PM UTC-5, Raffi Enficiaud wrote:
Le 20/05/16 à 00:55, Paul Fultz II a écrit :
On Thursday, May 19, 2016 at 5:29:14 PM UTC-5, Raffi Enficiaud wrote:
Le 20/05/16 à 00:09, Paul Fultz II a écrit :
There is already library's that do this(such as hana and compute),
This is not an argument.
so there hasn't been a technical problem with the tooling.
Nobody said there is one, people rather said there is no technical issue in having your CMakeLists.txt in ./build or ./cmake or ./anyothersubdir (something that you seems to omit quite often).
Yes there is a technical as well as a usability issue with hiding the
cmake
file in some directory. This causes problems with other tools. You will no longer be able to install a boost library with `cget install boostorg/hana`. Instead the user will have to manually download the repo, unpack the archive, and then do `cget install hana/build`. I find that unacceptable.
To be honest, I do not care at all about cget. I would like rather to see cget support another way of working.
Why? Why can't a boost library support the standard cmake workflow?
In terms of hiding, whether it is at the top-level directory or any subdirectory does not change much: it is buried deep down in a big tree in both cases.
What? If its at the top-level its not buried at all.
If someone wants to distribute his library outside of boost, what about having the same patch system as for eg. Debian packages wrt. upstream?
They want to distribute their library through boost, but not through the monolithic release. For example, I can download Boost.Hana here: https://github.com/boostorg/hana/archive/v1.0.0.tar.gz This is directly from Boost.Hana's page. I don't know exactly what you are talking about, and I don't think users of hana would know where to go to download this patched release.
Library authors who support cmake do not want their support treated as a second-class citizen.
Yet, the primary focus of a boost library is not its good cmake support.
It is for hana.
However, we would like the wording in the guidelines to state in a more explicit manner that this is acceptable in order to avoid possible future problems.
There is an *IF* missing there.
Where?
At the very beginning: *IF* there is some agreement (I am not in a position to say what is an agreement) and the policies are changed according to what you want.
Yes, of course, that is what we are asking for.
Your sentence [1] suggest that having a library top-level CMakeLists.txt is already granted.
No it doesn't.
Raffi
[1] Sentence: "However, we would like the wording in the guidelines to state in a more explicit manner that this is acceptable in order to avoid possible future problems."
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
On 5/19/16 4:43 PM, Paul Fultz II wrote:
On Thursday, May 19, 2016 at 6:12:07 PM UTC-5, Raffi Enficiaud wrote:
Yet, the primary focus of a boost library is not its good cmake support.
It is for hana.
I looked through he CMakefiles for hana. It came to almost 800 lines. Obviously I just skimmed them. I don't see very many developers spending the extra effort to support this. Then I decided to test it out on my system. I fired up my CMake program, pointed the source directory to hana and pointed to new build directory and let'er rip. I got three error messages - Couldn't find Boost, couldn't find Ruby and couldn't find doxygen. This is pretty normal. I don't have ruby nor doxygen on my system so I'll just ignore stuff. I always have to find the boost directory manually - probably because I don't use a command line switch. I fixed that and the complaint about using boost went away. If found the CMake generated the xcode project in the expected place and opened it up. It takes forever (an hour!) for XCode to index the whole thing. This has nothing to do with hana or cmake of course. There are just a huge amount of tests and examples there. It does it all. With boost build, I can just point to one of subdirectories and build that. I don't know if this is possible with CMake. I'm doubtful as it seems that there's a lot of code in the library root CMakeLists which wouldn't be seen if I pointed to a sub directory. One odd thing is that I have an ALL BUILD target but I don't have a RUN_TEST target. On my own CMake project I get both. ALL_BUILD just builds the executables and RUN_TEST executes them. I can't explain this. After this discussion about the importance in the location of the CMake file. I was surprise to find that - aside from what was mentioned above, there is no distinguishable difference between the process and result between the hana build/test and the serialization one. The serialization one doesn't have a top level CMakeLists.txt. In fact it doesn't even have CMakeLists.txt in any directory other than cmake. So I can't see why this has any importance at all. I certainly doesn't in my case. There has been mention of the necessity to have a top level CMakeLists.txt in order to respect convention so other tools work. I searched for other tools which might depend upon this and didn't find any. I understand that there is a convention of sprinkling these files around including the top level, but I could find anything that might depend on a particular structure.... except cget. I had never heard of this tool. All I found was a git hub project authored by you. It has only 1 contributor, and has been forked exactly once. Unfortunately, github doesn't record the number of times it's been cloned. I read the Readme page which describes it's function. It refers to something called pip which I have no idea about what it is. And a fairly elaborate procedure. I can't imagine the function of such a tool would be given that all one has to do with CMake is download, unzip and invoke CMake. It can't be easier than that process. This is the only reference I've found to cget via a google search. I have to conclude that it's a niche product and not really relevant here. So there you have it. I just can see any real need to have CMakeLists.txt in the library root. I understand it's a convention, but no one seems to depend upon it. So I would just suggest that you do what the we library authors have done. Just include CMakeLists in your subdirectories next to Jam files and make it work. If this is intolerable for your library, just include it in the root of your library and wait for someone to complain. I doubt anyone ever will. Also, a little friendly advice. You might want to refrain from suggestions that you're going to clone boost - especially over such a ridiculously trivial issue. It makes you look silly and hard to take seriously. Robert Ramey.
On May 20, 2016, at 12:21 AM, Robert Ramey
wrote: On 5/19/16 4:43 PM, Paul Fultz II wrote:
On Thursday, May 19, 2016 at 6:12:07 PM UTC-5, Raffi Enficiaud wrote:
Yet, the primary focus of a boost library is not its good cmake support.
It is for hana.
I looked through he CMakefiles for hana. It came to almost 800 lines. Obviously I just skimmed them. I don't see very many developers spending the extra effort to support this.
Then I decided to test it out on my system. I fired up my CMake program, pointed the source directory to hana and pointed to new build directory and let'er rip. I got three error messages - Couldn't find Boost, couldn't find Ruby and couldn't find doxygen. This is pretty normal. I don't have ruby nor doxygen on my system so I'll just ignore stuff. I always have to find the boost directory manually - probably because I don't use a command line switch. I fixed that and the complaint about using boost went away.
If found the CMake generated the xcode project in the expected place and opened it up. It takes forever (an hour!) for XCode to index the whole thing. This has nothing to do with hana or cmake of course. There are just a huge amount of tests and examples there. It does it all. With boost build, I can just point to one of subdirectories and build that. I don't know if this is possible with CMake. I'm doubtful as it seems that there's a lot of code in the library root CMakeLists which wouldn't be seen if I pointed to a sub directory.
One odd thing is that I have an ALL BUILD target but I don't have a RUN_TEST target. On my own CMake project I get both. ALL_BUILD just builds the executables and RUN_TEST executes them. I can't explain this.
After this discussion about the importance in the location of the CMake file. I was surprise to find that - aside from what was mentioned above, there is no distinguishable difference between the process and result between the hana build/test and the serialization one. The serialization one doesn't have a top level CMakeLists.txt. In fact it doesn't even have CMakeLists.txt in any directory other than cmake. So I can't see why this has any importance at all. I certainly doesn't in my case.
There has been mention of the necessity to have a top level CMakeLists.txt in order to respect convention so other tools work. I searched for other tools which might depend upon this and didn't find any. I understand that there is a convention of sprinkling these files around including the top level, but I could find anything that might depend on a particular structure....
except cget. I had never heard of this tool. All I found was a git hub project authored by you. It has only 1 contributor, and has been forked exactly once. Unfortunately, github doesn't record the number of times it's been cloned. I read the Readme page which describes it's function. It refers to something called pip which I have no idea about what it is.
You don’t know what pip is?
And a fairly elaborate procedure. I can't imagine the function of such a tool would be given that all one has to do with CMake is download, unzip and invoke CMake. It can't be easier than that process.
Thats a lot more steps than just `pip install cget`.
This is the only reference I've found to cget via a google search. I have to conclude that it's a niche product and not really relevant here.
cget doesn’t do any magic. As it says in the readme, it just runs the equivalent of these commands on a package: mkdir build cd build cmake .. cmake --build . cmake --build . --target install This is what people already do to build and install something from cmake.
So there you have it. I just can see any real need to have CMakeLists.txt in the library root. I understand it's a convention, but no one seems to depend upon it.
So I would just suggest that you do what the we library authors have done.
The library authors of hana and compute include a top-level cmake. You are the only author that doesn’t, and your cmake is not useful for installing the library, either. The cmake in serialization is only useful for you as a developer.
Just include CMakeLists in your subdirectories next to Jam files and make it work. If this is intolerable for your library, just include it in the root of your library and wait for someone to complain. I doubt anyone ever will.
I believe library authors such as Louis do not want to hide the cmake file. Having it at the top-level makes it clear and obvious that the library supports cmake. The user doesn’t have to search through documentation to find the “special” instructions for building with cmake, instead they can build and install the library using the same steps that is used for every other library that supports cmake.
Also, a little friendly advice. You might want to refrain from suggestions that you're going to clone boost - especially over such a ridiculously trivial issue. It makes you look silly and hard to take seriously.
But if boost can’t make this trivial change to better support cmake, then it would be hopeless for future changes in boost for better cmake support.
But if boost can’t make this trivial change to better support cmake, then it would be hopeless for future changes in boost for better cmake support.
I don't really have a stake in this, but I think this is the reason why this discussion is so awkward. It seems that 'CMakeLists.txt' is seen by both opponents and proponents as a foot in the door for future changes in Boost for better cmake support. I can understand existing library maintainers being worried about having to support cmake in the future (or risk looking arcane). And likewise I can understand new library developers keen on using the widespread cmake (and reaching more users). Sorry for butting in, but it seems you are being foot-fetishists and only indirectly discussing the real issue.
alex wrote:
But if boost can’t make this trivial change to better support cmake, then it would be hopeless for future changes in boost for better cmake support.
I don't really have a stake in this, but I think this is the reason why this discussion is so awkward. It seems that 'CMakeLists.txt' is seen by both opponents and proponents as a foot in the door for future changes in Boost for better cmake support.
Yes. Incidentally, and ironically, a CMake-ified Boost that duplicates our current Boost.Build setup would probably have its CMakeLists.txt files in build/, so that the top level can glob for build/CMakeLists.txt. Globbing for CMakeLists.txt finds too many subdirectories you don't really want to find. (And status/CMakeLists.txt will glob for test/CMakeLists.txt, perhaps.)
I can understand existing library maintainers being worried about having to support cmake in the future (or risk looking arcane).
Speaking for myself, I have no problem at all with supporting cmake at some point in the future, if necessary.
On May 20, 2016, at 8:25 AM, Peter Dimov
wrote: alex wrote:
But if boost can’t make this trivial change to better support cmake, > then it would be hopeless for future changes in boost for better cmake > support.
I don't really have a stake in this, but I think this is the reason why this discussion is so awkward. It seems that 'CMakeLists.txt' is seen by both opponents and proponents as a foot in the door for future changes in Boost for better cmake support.
Yes.
Incidentally, and ironically, a CMake-ified Boost that duplicates our current Boost.Build setup would probably have its CMakeLists.txt files in build/, so that the top level can glob for build/CMakeLists.txt. Globbing for CMakeLists.txt finds too many subdirectories you don't really want to find. (And status/CMakeLists.txt will glob for test/CMakeLists.txt, perhaps.)
Globbing for ‘libs/*/CMakeLists.txt` will only find the top-level cmake files. Also, globbing in cmake(just like unix) is not recursive(although cmake has an option to make it recursive).
Paul Fultz II wrote:
Globbing for ‘libs/*/CMakeLists.txt` will only find the top-level cmake files.
Yes, at it will miss those that are more than one level deep. Although it doesn't really matter. One sensible arrangement will be $BOOST_ROOT CMakeLists.txt status/ CMakeLists.txt libs/ bind/ test/ CMakeLists.txt filesystem/ build/ CMakeLists.txt test/ CMakeLists.txt hana/ CMakeLists.txt test/ CMakeLists.txt hypot/ CMakeLists.txt build/ CMakeLists.txt test/ CMakeLists.txt Here, libs/bind/test/CMakeLists.txt defines the target bind.test, libs/filesystem/build/CMakeLists.txt defines the target filesystem.build, and so on. The top level CMakeLists.txt globs recursively for build/CMakeLists.txt and declares a default target that builds everything. status/CMakeLists.txt globls recursively for test/CMakeLists.txt and declares a 'test' or 'check' target that tests everything. libs/hypot/CMakeLists.txt, which is used when standalone, includes build/CMakeLists.txt and test/CMakeLists.txt and declares a default target that depends on hypot.build and a check target that depends on hypot.test. So, only the libraries that support standalone deployment have a top-level CMakeLists.txt. There are probably other ways to do it, but this one seems fairly straightforward.
$BOOST_ROOT CMakeLists.txt status/ CMakeLists.txt
These two can be folded into the top-level one, of course, if we want to follow established CMake practice. I'm just replicating the current arrangement as an illustration.
On May 20, 2016, at 10:34 AM, Peter Dimov
wrote: Paul Fultz II wrote:
Globbing for ‘libs/*/CMakeLists.txt` will only find the top-level cmake files.
Yes, at it will miss those that are more than one level deep. Although it doesn't really matter.
One sensible arrangement will be
$BOOST_ROOT CMakeLists.txt status/ CMakeLists.txt libs/ bind/ test/ CMakeLists.txt filesystem/ build/ CMakeLists.txt test/ CMakeLists.txt hana/ CMakeLists.txt test/ CMakeLists.txt hypot/ CMakeLists.txt build/ CMakeLists.txt test/ CMakeLists.txt
Here, libs/bind/test/CMakeLists.txt defines the target bind.test, libs/filesystem/build/CMakeLists.txt defines the target filesystem.build, and so on.
Whats the target filesystem.build for? And where would the targets for filesystem and bind be defined in this scheme?
The top level CMakeLists.txt globs recursively for build/CMakeLists.txt and declares a default target that builds everything.
All targets are added to the default target unless `EXCLUDE_FROM_ALL`, which is needed for tests.
status/CMakeLists.txt globls recursively for test/CMakeLists.txt and declares a 'test' or 'check' target that tests everything.
Who declares a ‘test’ or ‘check’ target? If you want a check target to include all the tests then a function such as `add_boost_test` can add the dependency when the target is defined.
libs/hypot/CMakeLists.txt, which is used when standalone, includes build/CMakeLists.txt and test/CMakeLists.txt and declares a default target that depends on hypot.build and a check target that depends on hypot.test.
So, only the libraries that support standalone deployment have a top-level CMakeLists.txt.
There are probably other ways to do it, but this one seems fairly straightforward.
I think a better approach is to first defined a cmake module with common functionality for boost libraries(such as creating tests and packages). For the superproject, just set a flag for handling internal dependencies, and then include the cmake module and all the subdirectories in libs/*/CMakeLists.txt. If a library wants to be built standalone it can check for the superproject and the include the cmake module if its not being built in the superproject. This way a library wouldn’t need to support separate cmake files for standalone and superproject builds. They would be the same. I find this approach much simpler, and it doesn’t require any special layout requirements other than a cmake at the top-level.
Paul Fultz II wrote:
I think a better approach is to first defined a cmake module with common functionality for boost libraries(such as creating tests and packages).
Where? In standalone deployments of e.g. Hana, the superproject isn't present, so this module would need to be somewhere in libs/hana. Which means that it can't be common.
On May 20, 2016, at 11:15 AM, Peter Dimov
wrote: Paul Fultz II wrote:
I think a better approach is to first defined a cmake module with common functionality for boost libraries(such as creating tests and packages).
Where?
Ideally, we would have a separate repo perhaps boostorg/cmake where this would reside(and can be installed using cmake).
In standalone deployments of e.g. Hana, the superproject isn't present, so this module would need to be somewhere in libs/hana. Which means that it can't be common.
The standalone build would require the cmake module to be installed first. The superproject would include it using git submodules.
On 5/20/16 6:25 AM, Peter Dimov wrote:
alex wrote:
But if boost can’t make this trivial change to better support cmake, then it would be hopeless for future changes in boost for better cmake > support.
I don't really have a stake in this, but I think this is the reason why this discussion is so awkward. It seems that 'CMakeLists.txt' is seen by both opponents and proponents as a foot in the door for future changes in Boost for better cmake support.
Yes. Yes again.
Incidentally, and ironically, a CMake-ified Boost that duplicates our current Boost.Build setup would probably have its CMakeLists.txt files in build/, so that the top level can glob for build/CMakeLists.txt. Globbing for CMakeLists.txt finds too many subdirectories you don't really want to find. (And status/CMakeLists.txt will glob for test/CMakeLists.txt, perhaps.)
At least the way I use CMake this isn't a problem. I just point the GUI to the top CMakeLists.txt file whereever it happens to be. Simple as pie.
I can understand existing library maintainers being worried about having to support cmake in the future (or risk looking arcane).
Speaking for myself, I have no problem at all with supporting cmake at some point in the future, if necessary.
Right. If more new library authors support it, and more users expect it, And standard customs evolve and perhaps a CMake Template for making scripts gets written and perhaps someone writes a document on CMake customs and best practices with regards to Boost, it will become a defacto requirement. QuickBook has a similar history. Having or not having a CMakeLists.txt file at the library root won't matter either way. Robert Ramey
On 5/20/16 3:51 AM, Paul Fultz II wrote:
You don’t know what pip is?
Absolutely no idea. I even tried googling it.
And a fairly elaborate procedure. I can't imagine the function of such a tool would be given that all one has to do with CMake is download, unzip and invoke CMake. It can't be easier than that process.
Thats a lot more steps than just `pip install cget`.
LOL - maybe if I knew what pip was and had it installed on my machine. The procedure I used was only a couple of easy steps and already familiar to me. I'm doubtful I'm alone in this.
This is the only reference I've found to cget via a google search. I have to conclude that it's a niche product and not really relevant here.
cget doesn’t do any magic. As it says in the readme, it just runs the equivalent of these commands on a package:
mkdir build cd build cmake .. cmake --build . cmake --build . --target install
If this is all it does, then I don't see the point of this. All this effort to replace 5 lines of text with one? Why not just make a macro? You'd have to make a better case that this is a saving of some sort.
This is what people already do to build and install something from cmake.
LOL - not me - I've never used the command line version of CMake. I'm sure I'm not alone in this either.
So there you have it. I just can see any real need to have CMakeLists.txt in the library root. I understand it's a convention, but no one seems to depend upon it.
So I would just suggest that you do what the we library authors have done.
The library authors of hana and compute include a top-level cmake. Y
ou are the only author that doesn’t, and your cmake is not useful for installing the library, either. The cmake in serialization is only useful for you as a developer. Maybe. Certainly that was my only interest in making it. That's why i surprised when I could discern no difference in the functionality between the one I made and the one included with hana when I tried it. I'm also not getting what it means to install a header only library. It looks like it's just moving an include directory. Is that it? I have been unable to discern any difference in the operation of the CMake process which derives from the location of entry file.
Just include CMakeLists in your subdirectories next to Jam files and make it work. If this is intolerable for your library, just include it in the root of your library and wait for someone to complain. I doubt anyone ever will.
I believe library authors such as Louis do not want to hide the cmake file. Having it at the top-level makes it clear and obvious that the library
supports cmake. The user doesn’t have to search through documentation to find the “special” instructions for building with cmake, instead they can build and install the library using the same steps that is used for every other library that supports cmake. Really, the presence of CMake support is absolutely obvious to anyone who knows anything about CMake. It's not hidden.
Also, a little friendly advice. You might want to refrain from suggestions that you're going to clone boost - especially over such a ridiculously trivial issue. It makes you look silly and hard to take seriously.
But if boost can’t make this trivial change to better support cmake, then it would be hopeless for future changes in boost for better cmake support.
My experiments convince me that this change is not only trivial, it's absolutely unnecessary and will not effect the future of CMake as it relates to Boost one way or the other. It's totally pointless. Look at the upside, now if CMake fails to take hold on the more than the two libraries which now support it (3 if you include mine), out of the 130 that are there, you can always say - it's all because the Boost Oliarchy wouldn't endorse putting CMakeLists.txt in the library root directory!!! Good Luck with this. Robert Ramey
On May 20, 2016, at 10:30 AM, Robert Ramey
wrote: On 5/20/16 3:51 AM, Paul Fultz II wrote:
You don’t know what pip is?
Absolutely no idea. I even tried googling it.
And a fairly elaborate procedure. I can't imagine the function of such a tool would be given that all one has to do with CMake is download, unzip and invoke CMake. It can't be easier than that process.
Thats a lot more steps than just `pip install cget`.
LOL - maybe if I knew what pip was and had it installed on my machine.
pip comes installed on most operating systems except windows.
The procedure I used was only a couple of easy steps and already familiar to me. I'm doubtful I'm alone in this.
This is the only reference I've found to cget via a google search. I have to conclude that it's a niche product and not really relevant here.
cget doesn’t do any magic. As it says in the readme, it just runs the equivalent of these commands on a package:
mkdir build cd build cmake .. cmake --build . cmake --build . --target install
If this is all it does, then I don't see the point of this. All this effort to replace 5 lines of text with one?
Well it does more than those lines above. It downloads the package and unpacks it. It also sets the prefix path so cmake will find the dependencies that have been installed and it will setup the install prefix. It also handles removing packages that have been installed(including packages that depend on it), and it will automatically download and install dependencies as well. That saves a lot more than 5 lines of text.
Why not just make a macro?
A macro? What are you talking about?
You'd have to make a better case that this is a saving of some sort.
This is what people already do to build and install something from cmake.
LOL - not me - I've never used the command line version of CMake. I'm sure I'm not alone in this either.
So there you have it. I just can see any real need to have CMakeLists.txt in the library root. I understand it's a convention, but no one seems to depend upon it.
So I would just suggest that you do what the we library authors have done.
The library authors of hana and compute include a top-level cmake. Y
ou are the only author that doesn’t, and your cmake is not useful for installing the library, either.
The cmake in serialization is only useful for you as a developer.
Maybe. Certainly that was my only interest in making it. That's why i surprised when I could discern no difference in the functionality between the one I made and the one included with hana when I tried it.
I'm also not getting what it means to install a header only library. It looks like it's just moving an include directory. Is that it?
Well it copies the header files. A library might also install cmake packaging or pkgconfig to handle dependencies.
I have been unable to discern any difference in the operation of the CMake process which derives from the location of entry file.
Just include CMakeLists in your subdirectories next to Jam files and make it work. If this is intolerable for your library, just include it in the root of your library and wait for someone to complain. I doubt anyone ever will.
I believe library authors such as Louis do not want to hide the cmake file. Having it at the top-level makes it clear and obvious that the library
supports cmake. The user doesn’t have to search through documentation to find the “special” instructions for building with cmake, instead they can build and install the library using the same steps that is used for every other library that supports cmake.
Really, the presence of CMake support is absolutely obvious to anyone who knows anything about CMake. It's not hidden.
Hiding the cmake in another directory is not obvious. I don’t see a cmake file, I assume the library doesn’t build with cmake. You could do all this manually, but the point of a tool is you don’t have to. Let the computer do the work for you, instead of the computer making you work.
Also, a little friendly advice. You might want to refrain from suggestions that you're going to clone boost - especially over such a ridiculously trivial issue. It makes you look silly and hard to take seriously.
But if boost can’t make this trivial change to better support cmake, then it would be hopeless for future changes in boost for better cmake support.
My experiments convince me that this change is not only trivial, it's absolutely unnecessary and will not effect the future of CMake as it relates to Boost one way or the other. It's totally pointless.
Look at the upside, now if CMake fails to take hold on the more than the two libraries which now support it (3 if you include mine), out of the 130 that are there, you can always say - it's all because the Boost Oliarchy wouldn't endorse putting CMakeLists.txt in the library root directory!!!
Most newer libraries coming into boost are supporting cmake, and its growing. My libraries support cmake as well. So this list will get larger.
On Fri, May 20, 2016 at 11:35 AM, Paul Fultz II
Most newer libraries coming into boost are supporting cmake, and its growing.
Two of the seven new libraries released in Boost support cmake. And one supports plain make. -- -- Rene Rivera -- Grafik - Don't Assume Anything -- Robot Dreams - http://robot-dreams.net -- rrivera/acm.org (msn) - grafikrobot/aim,yahoo,skype,efnet,gmail
On 5/20/16 9:35 AM, Paul Fultz II wrote:
pip comes installed on most operating systems except windows.
Not on my Mac OSX machine. $pip -bash: pip: command not found $
Most newer libraries coming into boost are supporting cmake, and its growing. My libraries support cmake as well. So this list will get larger.
FWIW - I looked at the libraries in the incubator. There are currently 32 libraries there. The following 15 have CMakeLists.txt in the top level: Tick, Segemented Tree, Safe Numerics, MetaParse, Metal, Json, http, hana, Fit, Dependency Injection, cpp.netlib, Compute, Callable Traits, Beast, Actor. This is about 1/2 which is more than I thought. Robert Ramey
On 20/05/2016 22:51, Paul Fultz II wrote:
cget doesn’t do any magic. As it says in the readme, it just runs the equivalent of these commands on a package:
mkdir build cd build cmake .. cmake --build . cmake --build . --target install
This is what people already do to build and install something from cmake.
That's not going to work very well for a Boost library anyway, since they already contain a build subdirectory that is not intended to be an output directory. So the usual cmake trick of deleting the build directory to clean things will break the library. On the other hand, if you found the "root" CMakeLists.txt in build/ or in cmake/ first, and then run the above commands from that directory, then they would work as expected. This suggests that putting the CMakeLists.txt in the root of the Boost library is not a good idea. Or that using "build" as the output directory name is not a good idea. Or both.
On May 23, 2016, at 2:26 AM, Gavin Lambert
wrote: On 20/05/2016 22:51, Paul Fultz II wrote:
cget doesn’t do any magic. As it says in the readme, it just runs the equivalent of these commands on a package:
mkdir build cd build cmake .. cmake --build . cmake --build . --target install
This is what people already do to build and install something from cmake.
That's not going to work very well for a Boost library anyway, since they already contain a build subdirectory that is not intended to be an output directory. So the usual cmake trick of deleting the build directory to clean things will break the library.
cget doesn’t actually create the build directory in source to avoid these problem. Although it is quite common for users to build with cmake this way.
On the other hand, if you found the "root" CMakeLists.txt in build/ or in cmake/ first, and then run the above commands from that directory, then they would work as expected.
Except there is no way to know it is the ‘root’, except that it is at the ‘root’. Instead the user tells cget or cmake what the ‘root’ is instead of trying to guess.
On 24/05/2016 00:56, Paul Fultz II wrote:
On the other hand, if you found the "root" CMakeLists.txt in build/ or in cmake/ first, and then run the above commands from that directory, then they would work as expected.
Except there is no way to know it is the ‘root’, except that it is atthe ‘root’. Instead the user tells cget or cmake what the ‘root’ is instead of trying to guess.
As you said, though, that complicates things if you're automatically building dependencies rather than the main project they requested. (Which I think I recall you saying was a feature of cget.) It seems to me that a reasonable heuristic is to use a CMakeLists.txt at the root if one is there; failing that, look in cmake/ and build/ subdirs (in that order). Having said all that, I'm dubious about using cmake to automatically build Boost library dependencies in the first place. The way I typically use Boost (and I'm sure I'm not alone in this) is to either use the pre-built packages (for Windows or Linux) or if I need something newer, to use B2 to build the complete set of libraries myself and then point other projects at those pre-built versions, rather than to build individual sub-libraries for each project parent.
On Monday, May 23, 2016 at 6:23:06 PM UTC-5, Gavin Lambert wrote:
On 24/05/2016 00:56, Paul Fultz II wrote:
On the other hand, if you found the "root" CMakeLists.txt in build/ or in cmake/ first, and then run the above commands from that directory, then they would work as expected.
Except there is no way to know it is the ‘root’, except that it is atthe ‘root’. Instead the user tells cget or cmake what the ‘root’ is instead of trying to guess.
As you said, though, that complicates things if you're automatically building dependencies rather than the main project they requested. (Which I think I recall you saying was a feature of cget.)
It seems to me that a reasonable heuristic is to use a CMakeLists.txt at the root if one is there; failing that, look in cmake/ and build/ subdirs (in that order).
Perhaps, but I don't see a need to do that because libraries don't hide there cmake in another directory(not even boost libraries). Also, it is somewhat bad practice to put the root in a subdirectory(especially when there could be cmake files in other directories) as it makes directory scope confusing to understand. Furthermore, with bjam you cannot have a root jamfile hidden in a subdirectory, either. So there really isn't a precedent for this even with boost.
Having said all that, I'm dubious about using cmake to automatically build Boost library dependencies in the first place.
Well of course, there isn't really a cmake build for boost, right now.
The way I typically use Boost (and I'm sure I'm not alone in this) is to either use the pre-built packages (for Windows or Linux) or if I need something newer, to use B2 to build the complete set of libraries myself and then point other projects at those pre-built versions, rather than to build individual sub-libraries for each project parent.
But then you have to handle the dependencies on your own, unless you use bjam all the way through.
On 24/05/2016 12:21, Paul Fultz II wrote:
The way I typically use Boost (and I'm sure I'm not alone in this) is to either use the pre-built packages (for Windows or Linux) or if I need something newer, to use B2 to build the complete set of libraries myself and then point other projects at those pre-built versions, rather than to build individual sub-libraries for each project parent.
But then you have to handle the dependencies on your own, unless you use bjam all the way through.
On Windows, auto-linking takes care of that -- just point the library directory at Boost in general and the application will link successfully. Then I just use a script to detect the linked libraries (via dumpbin) and copy the corresponding DLLs to somewhere the app will find them at runtime. On Linux, you have to explicitly list which libraries you want to link with in advance. Generally anything that wants to link with Boost will do that in its own build script though, whatever language that's written in; so again you just need to point it at the right directory. There's no header-layer dependencies since Boost is still distributed as monolithic.
On 20/05/2016 10:55, Paul Fultz II wrote:
Nobody said there is one, people rather said there is no technical issue in having your CMakeLists.txt in ./build or ./cmake or ./anyothersubdir (something that you seems to omit quite often).
Yes there is a technical as well as a usability issue with hiding the cmake file in some directory. This causes problems with other tools. You will no longer be able to install a boost library with `cget install boostorg/hana`. Instead the user will have to manually download the repo, unpack the archive, and then do `cget install hana/build`. I find that unacceptable.
This is a defect in cget, if it does not expect/allow CMakeLists to be in a subdirectory. They are never supposed to be in the output directory of cmake (which defaults to the current directory), after all, so you always have to tell cmake where to find them.
On Thursday, May 19, 2016 at 7:30:07 PM UTC-5, Gavin Lambert wrote:
On 20/05/2016 10:55, Paul Fultz II wrote:
Nobody said there is one, people rather said there is no technical issue in having your CMakeLists.txt in ./build or ./cmake or ./anyothersubdir (something that you seems to omit quite often).
Yes there is a technical as well as a usability issue with hiding the cmake file in some directory. This causes problems with other tools. You will no longer be able to install a boost library with `cget install boostorg/hana`. Instead the user will have to manually download the repo, unpack the archive, and then do `cget install hana/build`. I find that unacceptable.
This is a defect in cget, if it does not expect/allow CMakeLists to be in a subdirectory. They are never supposed to be in the output directory of cmake (which defaults to the current directory), after all, so you always have to tell cmake where to find them.
'hana/build' is not the output directory, it is the directory where the guidelines says to put the cmake file. It is confusing, I know. Also, there is no defect in cget. cget just calls cmake on whatever directory you give it. cget can also unpack a tar file and call cmake on that as well. It can also download a file, untar it, and call cmake on that as well. If a library decides to hide its cmake file, then the user will need to manually download and untar the file and call cget on whatever directory your cmake file is hidden in. This is not a defect of cget. If a library has chosen to hide its cmake files, then its very difficult for the tool to known what cmake is the entry point. Instead, it requires the user to find where the cmake is supposed to be at from either the readme or the documentation, and then explicitly call out to the tool with the directory where the cmake is hidden. Of course, the disadvantage of this approach is that the tool cannot automatically download dependencies, which is one reason among many why I am opposed to hiding cmake files in boost.
On May 19, 2016 8:56:55 PM EDT, Paul Fultz II
On Thursday, May 19, 2016 at 7:30:07 PM UTC-5, Gavin Lambert wrote:
Yes there is a technical as well as a usability issue with hiding
cmake
file in some directory. This causes problems with other tools. You will no longer be able to install a boost library with `cget install boostorg/hana`. Instead the user will have to manually download the repo, unpack
the the
archive, and then do `cget install hana/build`. I find that unacceptable.
This is a defect in cget, if it does not expect/allow CMakeLists to be in a subdirectory. They are never supposed to be in the output directory of cmake (which defaults to the current directory), after all, so you always have to tell cmake where to find them.
'hana/build' is not the output directory, it is the directory where the guidelines says to put the cmake file. It is confusing, I know.
Also, there is no defect in cget. cget just calls cmake on whatever directory you give it. cget can also unpack a tar file and call cmake on that as well. It can also download a file, untar it, and call cmake on that as well.
cget could take the subdirectory as an argument and use it after untarring, etc. The lack of that feature could be considered a defect. ___ Rob (Sent from my portable computation engine)
Rob Stewart wrote:
cget could take the subdirectory as an argument and use it after untarring, etc.
No, because of its automatic dependency retrieval. Packages need to follow an uniform convention. Although it could in principle look into $DIR/cmake/ if it doesn't find $DIR/CMakeLists.txt. build/ is, however, totally nonstandard for CMakeLists.txt, so it wouldn't make sense for a generic tool to look there. There are libraries that have their CMakeLists.txt in cmake/, but I don't think that any have it in build/, as this seems to be the build directory by CMake convention.
Le 20/05/16 à 05:33, Peter Dimov a écrit :
Rob Stewart wrote:
cget could take the subdirectory as an argument and use it after untarring, etc.
No, because of its automatic dependency retrieval. Packages need to follow an uniform convention.
Although it could in principle look into $DIR/cmake/ if it doesn't find $DIR/CMakeLists.txt.
build/ is, however, totally nonstandard for CMakeLists.txt, so it wouldn't make sense for a generic tool to look there. There are libraries that have their CMakeLists.txt in cmake/, but I don't think that any have it in build/, as this seems to be the build directory by CMake convention.
Yet, the discussion about cget is totally irrelevant here ... boost libraries can just be considered as "upstream" libraries. If they do not integrate well with some package management or any other tool, then the tool should provide a technical solution without polluting upstream, like the patching system of debian or homebrew to name only those. If the clear target of this post is to please cget, which is a tool and which is giving services to human developers, I believe this is even worse than the other branch of this thread that took the subject "Boost is supposed to serve *the entire C++ community; it isn't Boost's goal to serve Boost's community*". I hope boost will not serve the cget community. Raffi
On May 19, 2016 11:33:25 PM EDT, Peter Dimov
Rob Stewart wrote:
cget could take the subdirectory as an argument and use it after untarring, etc.
No, because of its automatic dependency retrieval. Packages need to follow an uniform convention.
Although it could in principle look into $DIR/cmake/ if it doesn't find
$DIR/CMakeLists.txt.
build/ is, however, totally nonstandard for CMakeLists.txt, so it wouldn't make sense for a generic tool to look there. There are libraries that have their CMakeLists.txt in cmake/, but I don't think that any have it in build/, as this seems to be the build directory by CMake convention.
Why can't the tool take an argument that says "also look in this other directory when looking for the 'top-level' CMakeLists.txt"? ___ Rob (Sent from my portable computation engine)
On May 19, 2016, at 10:33 PM, Peter Dimov
wrote: Rob Stewart wrote:
cget could take the subdirectory as an argument and use it after untarring, etc.
Yes, cget could add an argument like `--subdir` to invoke a subdirectory. Of course, an argument would apply to all packages on the command line, so the user would need to install boost libraries separate from other dependencies. I don’t know if this is best idea to even support it as it could cause confusion with users as well, and the need is quite uncommon.
No, because of its automatic dependency retrieval. Packages need to follow an uniform convention.
Well arguments can be added to the dependency list. The user will need to specify those arguments everytime they want to list a boost dependency.
On May 20, 2016 7:13:21 AM EDT, Paul Fultz II
Rob Stewart wrote:
cget could take the subdirectory as an argument and use it after untarring, etc.
Yes, cget could add an argument like `--subdir` to invoke a subdirectory. Of course, an argument would apply to all packages on the command line, so the user would need to install boost libraries separate from other dependencies. I don’t know if this is best idea to even support it as it could cause confusion with users as well, and the need is quite uncommon.
I meant that it can look in the root, in a cmake subdirectory, and in the user-supplied subdirectory for each package. ___ Rob (Sent from my portable computation engine)
On 05/20/2016 12:55 AM, Paul Fultz II wrote:
Yes there is a technical as well as a usability issue with hiding the cmake file in some directory. This causes problems with other tools. You will no longer be able to install a boost library with `cget install boostorg/hana`. Instead the user will have to manually download the repo, unpack the archive, and then do `cget install hana/build`. I find that unacceptable.
Library authors who support cmake do not want their support treated as a second-class citizen.
This thread is the first time I hear about cget. Is this some official CMake thingy? Looks like it is not. Having your root CMakeLists.txt in a seperate build directory does *not* make it a second class citizen. Since cget is your tool, couldn't you just add the functionality that boosts directory layout is supported? Sorry if I sound dense here, but this discussion seems to circle around the fact that *your* tool can not support this directory layout. CMake itself, and any other tool I know of is pretty agnostic to where the actual CMakeLists.txt of a project actually resides. I could even provide a completely out of tree CMakeLists.txt that will build you boost in a top level directory, create you solution files and whatnot that will display you all of boost's sources without even touching or forking any official boost repository. What's the big deal here?
Paul Fultz II wrote:
However, we would like the wording in the guidelines to state in a more explicit manner that this is acceptable in order to avoid possible future problems.
So in other words you're preemptively suing us because you're afraid that we'll sue you in the future. Corporate America is truly wonderful, and one cannot help but be delighted to see its best practices applied here.
On May 19, 2016, at 10:50 PM, Peter Dimov
wrote: Paul Fultz II wrote:
However, we would like the wording in the guidelines to state in a more explicit manner that this is acceptable in order to avoid possible future problems.
So in other words you're preemptively suing us because you're afraid that we'll sue you in the future.
Hmm, its not about suing. Library authors are offering cmake at the top-level, and do not want someone to come along and remove them because it violates the guidelines.
Corporate America is truly wonderful, and one cannot help but be delighted to see its best practices applied here.
I don’t know if that was meant to be sarcastic or not, but the point of all this is to move boost to better support cmake, with this being the first step.
Mikhail Strelnikov
[...] I want to remind you that this started with "The requirement that these libraries not include a 'CMakeLists.txt' as part of their Boost distribution creates a maintenance burden for authors or otherwise hurts usability of the independent distribution."
But now it is obvious Hana will need two CMakeLists.txt and somehow this is not "a maintenance burden".
^ What Paul said. What I meant was simply that if Boost was to make a move to CMake, Hana's CMakeLists.txt file would change to reflect the best practice that we would have agreed on. But Boost is not moving to CMake, and all that we're asking is for the guidelines not to prohibit having a CMakeLists.txt file at the root of a library. One step at a time. Regards, Louis
On 15 May 2016 at 21:32, David Sankel
A question has been brought up regarding whether or not a Boost library author is permitted to include a 'CMakeLists.txt' file in the root of the directory. This stemmed from a discussion at C++Now 2016 which included several members of the Boost Steering Committee and a sampling of the Boost community.
We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
I'm in favour, ignoring the discussion of which build system may be better allowing a CMakeLists.txt to be added to the top-level directory would be useful to a number of people, whilst inconveniencing none. There's precedence as well, boost::statechart has shipped a .sln in the top-level directory for years, this doesn't seem any different. [snip] -- David Sankel
Jeroen
On Sun, May 15, 2016 at 10:32 PM, David Sankel
We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Please indicate what specific wording changes you want to the requirements and guidelines you are proposing so that we can have a meaningful and concrete discussion. -- -- Rene Rivera -- Grafik - Don't Assume Anything -- Robot Dreams - http://robot-dreams.net -- rrivera/acm.org (msn) - grafikrobot/aim,yahoo,skype,efnet,gmail
On Mon, May 16, 2016 at 8:48 PM, Rene Rivera
On Sun, May 15, 2016 at 10:32 PM, David Sankel
wrote: We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Please indicate what specific wording changes you want to the requirements and guidelines you are proposing so that we can have a meaningful and concrete discussion.
What I stated above is clear enough. Lets not get distracted or delayed with minutiae. -- David Sankel
On Mon, May 16, 2016 at 9:52 PM, David Sankel
On Mon, May 16, 2016 at 8:48 PM, Rene Rivera
wrote: On Sun, May 15, 2016 at 10:32 PM, David Sankel
wrote: We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Please indicate what specific wording changes you want to the requirements and guidelines you are proposing so that we can have a meaningful and concrete discussion.
What I stated above is clear enough. Lets not get distracted or delayed with minutiae.
OK.. Can you do a PR in github then? -- -- Rene Rivera -- Grafik - Don't Assume Anything -- Robot Dreams - http://robot-dreams.net -- rrivera/acm.org (msn) - grafikrobot/aim,yahoo,skype,efnet,gmail
On Mon, May 16, 2016 at 8:56 PM, Rene Rivera
On Mon, May 16, 2016 at 9:52 PM, David Sankel
wrote: On Mon, May 16, 2016 at 8:48 PM, Rene Rivera
wrote: On Sun, May 15, 2016 at 10:32 PM, David Sankel
wrote: We recommend and propose that the Boost Guidelines are modified
to
allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Please indicate what specific wording changes you want to the requirements and guidelines you are proposing so that we can have a meaningful and concrete discussion.
What I stated above is clear enough. Lets not get distracted or delayed with minutiae.
OK.. Can you do a PR in github then?
Let me try to put this in another way. Everyone in this discussion understands what is being requested. This is not like a C++ standardization proposal which requires a legalese wording section. If and when this proposal is accepted, relevant documentation can be amended as needed. The important thing here is whether or not this is something that we want. The consensus so far seems to be in the affirmative. -- David Sankel
On Mon, May 16, 2016 at 10:51 PM, David Sankel
On Mon, May 16, 2016 at 8:56 PM, Rene Rivera
wrote: On Mon, May 16, 2016 at 9:52 PM, David Sankel
wrote: On Mon, May 16, 2016 at 8:48 PM, Rene Rivera
wrote: On Sun, May 15, 2016 at 10:32 PM, David Sankel
wrote: We recommend and propose that the Boost Guidelines are modified
to
allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Please indicate what specific wording changes you want to the requirements and guidelines you are proposing so that we can have a meaningful and concrete discussion.
What I stated above is clear enough. Lets not get distracted or delayed with minutiae.
OK.. Can you do a PR in github then?
Let me try to put this in another way. Everyone in this discussion understands what is being requested. This is not like a C++ standardization proposal which requires a legalese wording section. If and when this proposal is accepted, relevant documentation can be amended as needed. The important thing here is whether or not this is something that we want. The consensus so far seems to be in the affirmative.
Right.. But as a volunteer organization nothing happens without someone actually doing the work. And in this case the work is coming up with wording changes to the documentation. I.e. changes to the HTML of the web site. One suggestion though. It would be best to come up with wording that was inclusive when making guidelines. And to try and make it clear what is a guideline vs. a suggestion vs. a requirement. I've probably failed in doing that with the current documentation. So I welcome clarifications. -- -- Rene Rivera -- Grafik - Don't Assume Anything -- Robot Dreams - http://robot-dreams.net -- rrivera/acm.org (msn) - grafikrobot/aim,yahoo,skype,efnet,gmail
On Mon, May 16, 2016 at 9:59 PM, Rene Rivera
On Mon, May 16, 2016 at 10:51 PM, David Sankel
wrote: On Mon, May 16, 2016 at 8:56 PM, Rene Rivera
wrote: On Mon, May 16, 2016 at 9:52 PM, David Sankel
wrote: On Mon, May 16, 2016 at 8:48 PM, Rene Rivera
wrote: On Sun, May 15, 2016 at 10:32 PM, David Sankel
wrote: We recommend and propose that the Boost Guidelines are
modified to
allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Please indicate what specific wording changes you want to the requirements and guidelines you are proposing so that we can have a meaningful and concrete discussion.
What I stated above is clear enough. Lets not get distracted or delayed with minutiae.
OK.. Can you do a PR in github then?
Let me try to put this in another way. Everyone in this discussion understands what is being requested. This is not like a C++ standardization proposal which requires a legalese wording section. If and when this proposal is accepted, relevant documentation can be amended as needed. The important thing here is whether or not this is something that we want. The consensus so far seems to be in the affirmative.
Right.. But as a volunteer organization nothing happens without someone actually doing the work. And in this case the work is coming up with wording changes to the documentation. I.e. changes to the HTML of the web site.
Finding someone to add a sentence or two to a website shouldn't be a problem. I, and probably several others, would be more than happy to do it upon a positive outcome of this discussion. -- David Sankel
On Sun, May 15, 2016 at 8:32 PM, David Sankel
We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
+1 And let's please not let this effort die again! :) Jonathan
On 16/05/2016 06:32, David Sankel wrote:
A question has been brought up regarding whether or not a Boost library author is permitted to include a 'CMakeLists.txt' file in the root of the directory. This stemmed from a discussion at C++Now 2016 which included several members of the Boost Steering Committee and a sampling of the Boost community.
We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
Just to clarify, you are proposing that a library author may add CMakeLists.txt at the top level, while Jamfile is required to be in the 'build' subdirectory? I am strongly -1 about such an arrangement - it makes unofficial build system more prominently visible than the official one, and we already had the situation where Kitware folks were mentioning Boost as CMake user based on random unofficial branches. -- Vladimir Prus http://vladimirprus.com
AMDG On 05/17/2016 12:46 AM, Vladimir Prus wrote:
Just to clarify, you are proposing that a library author may add CMakeLists.txt at the top level, while Jamfile is required to be in the 'build' subdirectory?
I am strongly -1 about such an arrangement - it makes unofficial build system more prominently visible than the official one,
I don't think that's a a big problem for libraries, as the most visible part of the build system is still the superproject's Jamroot.
and we already had the situation where Kitware folks were mentioning Boost as CMake user based on random unofficial branches.
In Christ, Steven Watanabe
On 17/05/2016 15:41, Steven Watanabe wrote:
AMDG
On 05/17/2016 12:46 AM, Vladimir Prus wrote:
Just to clarify, you are proposing that a library author may add CMakeLists.txt at the top level, while Jamfile is required to be in the 'build' subdirectory?
I am strongly -1 about such an arrangement - it makes unofficial build system more prominently visible than the official one,
I don't think that's a a big problem for libraries, as the most visible part of the build system is still the superproject's Jamroot.
It is still a problem when somebody looks at sources of a particular library, say on GitHub. -- Vladimir Prus http://vladimirprus.com
On 17 May 2016 at 15:01, Vladimir Prus
On 17/05/2016 15:41, Steven Watanabe wrote:
AMDG
On 05/17/2016 12:46 AM, Vladimir Prus wrote:
Just to clarify, you are proposing that a library author may add CMakeLists.txt at the top level, while Jamfile is required to be in the 'build' subdirectory?
I am strongly -1 about such an arrangement - it makes unofficial build system more prominently visible than the official one,
I don't think that's a a big problem for libraries, as the most visible part of the build system is still the superproject's Jamroot.
It is still a problem when somebody looks at sources of a particular library, say on GitHub.
Forcing CMakeLists.txt at a different place would make Boost the odd one out if you look at CMake conventions. It's not what you would expect as a CMake user, it's an unattractive restriction, and it's not a restriction that's based on trying to solves something that's wouldn't work without that restriction (e.g. a technical limitation)
On 17/05/2016 16:16, Thijs van den Berg wrote:
It is still a problem when somebody looks at sources of a particular library, say on GitHub.
Forcing CMakeLists.txt at a different place would make Boost the odd one out if you look at CMake conventions. It's not what you would expect as a CMake user, it's an unattractive restriction, and it's not a restriction that's based on trying to solves something that's wouldn't work without that restriction (e.g. a technical limitation)
Everything above applies to Jamfiles. -- Vladimir Prus http://vladimirprus.com
On 17 May 2016 at 15:29, Vladimir Prus
On 17/05/2016 16:16, Thijs van den Berg wrote:
It is still a problem when somebody looks at sources of a particular
library, say on GitHub.
Forcing CMakeLists.txt at a different place would make Boost the odd one out if you look at CMake conventions. It's not what you would expect as a CMake user, it's an unattractive restriction, and it's not a restriction that's based on trying to solves something that's wouldn't work without that restriction (e.g. a technical limitation)
Everything above applies to Jamfiles.
I don't see any burden this is going to put on Jamfile users. Developers using Jamfiles are used to the way things are currently located on Boost and that's not going to change if you add CMakeList.txt to the root.
On 17/05/2016 16:36, Thijs van den Berg wrote:
On 17 May 2016 at 15:29, Vladimir Prus
wrote: On 17/05/2016 16:16, Thijs van den Berg wrote:
It is still a problem when somebody looks at sources of a particular
library, say on GitHub.
Forcing CMakeLists.txt at a different place would make Boost the odd one out if you look at CMake conventions. It's not what you would expect as a CMake user, it's an unattractive restriction, and it's not a restriction that's based on trying to solves something that's wouldn't work without that restriction (e.g. a technical limitation)
Everything above applies to Jamfiles.
I don't see any burden this is going to put on Jamfile users. Developers using Jamfiles are used to the way things are currently located on Boost and that's not going to change if you add CMakeList.txt to the root.
May I ask how often do you edit Jamfiles? It do it somewhat often, and I do find having them in subdirectory to be a burden. -- Vladimir Prus http://vladimirprus.com
On 17 May 2016 at 15:52, Vladimir Prus
On 17/05/2016 16:36, Thijs van den Berg wrote:
On 17 May 2016 at 15:29, Vladimir Prus
wrote: On 17/05/2016 16:16, Thijs van den Berg wrote:
It is still a problem when somebody looks at sources of a particular
say on GitHub.
Forcing CMakeLists.txt at a different place would make Boost the odd one out if you look at CMake conventions. It's not what you would expect as a CMake user, it's an unattractive restriction, and it's not a restriction
library, that's based on trying to solves something that's wouldn't work without that restriction (e.g. a technical limitation)
Everything above applies to Jamfiles.
I don't see any burden this is going to put on Jamfile users. Developers
using Jamfiles are used to the way things are currently located on Boost and that's not going to change if you add CMakeList.txt to the root.
May I ask how often do you edit Jamfiles? It do it somewhat often, and I do find having them in subdirectory to be a burden.
My point is that you can keep doing so.. your Jamefiles editing will not be affected if a CMakeLists.txt get's added to the root.
You would need to point out a technical or rational reason to *not* stick to the CMake conventions, and if there is one, then you might decide to not stimulate CMake support at all because it would result in a unconventional solution. Bjam is unconventional (it's not used outside of boost as said by others), and the wish by many to better support CMake support is to break from un-conventional burdens and offer more flexibility adn ease of use.
On 17/05/2016 17:11, Thijs van den Berg wrote:
May I ask how often do you edit Jamfiles? It do it somewhat often, and I do find having them in subdirectory to be a burden.
My point is that you can keep doing so.. your Jamefiles editing will not be affected if a CMakeLists.txt get's added to the root.
Looks like you did not answer this question directly, and accepted my statement that having build files under 'build' is a burden. Therefore, I assume you'll have no objections to moving all Jamfiles to root level of their corresponding components, should guidelines be modified to allow that? -- Vladimir Prus http://vladimirprus.com
On 17 May 2016 at 16:37, Vladimir Prus
On 17/05/2016 17:11, Thijs van den Berg wrote:
May I ask how often do you edit Jamfiles? It do it somewhat often, and I
do find having them in subdirectory to be a burden.
My point is that you can keep doing so.. your Jamefiles editing will not
be affected if a CMakeLists.txt get's added to the root.
Looks like you did not answer this question directly, and accepted my statement that having build files under 'build' is a burden. Therefore, I assume you'll have no objections to moving all Jamfiles to root level of their corresponding components, should guidelines be modified to allow that?
That would cause confusion with developers who are accustomed to the current setup, I don't know of any gain people get from that would outweights the inflicted confusion by such a change. Having the CMakeLists.txt at the root instead of somewhere else *does* have a gain: it's sticking to conventions that CMake users are accustomed to.
Any bjam conventions discussion, validation historical choices etc is a separate discussion. This discussion here is if we should pave the way to facilitate CMake users and do so correctly by sticking to accepted conventions, and add the CMakeLists.txt to the root or not.
On 17/05/2016 17:51, Thijs van den Berg wrote:
Any bjam conventions discussion, validation historical choices etc is a separate discussion. This discussion here is if we should pave the way to facilitate CMake users and do so correctly by sticking to accepted conventions, and add the CMakeLists.txt to the root or not.
No, it's not a separate discussion - that's why Rene has asked for a specific proposed change to the library requirements, in a form of diff or pull request. If that was done, this thread would have converged already. -- Vladimir Prus http://vladimirprus.com
On 17 May 2016 at 16:55, Vladimir Prus
On 17/05/2016 17:51, Thijs van den Berg wrote:
Any bjam conventions discussion, validation historical choices etc is a
separate discussion. This discussion here is if we should pave the way to facilitate CMake users and do so correctly by sticking to accepted conventions, and add the CMakeLists.txt to the root or not.
No, it's not a separate discussion - that's why Rene has asked for a specific proposed change to the library requirements, in a form of diff or pull request. If that was done, this thread would have converged already.
I expect that pull request to be nothing more than "I you want to add support for CMake to your library then place the CMakeLists.txt file at the root." I don't expect it will mention the word bjam in any way.
On Tuesday, 17 May 2016 17:56:04 MSK Thijs van den Berg wrote:
On 17 May 2016 at 16:37, Vladimir Prus
wrote: On 17/05/2016 17:11, Thijs van den Berg wrote:
May I ask how often do you edit Jamfiles? It do it somewhat often, and I
do find having them in subdirectory to be a burden.
My point is that you can keep doing so.. your Jamefiles editing will not
be affected if a CMakeLists.txt get's added to the root.
Looks like you did not answer this question directly, and accepted my statement that having build files under 'build' is a burden. Therefore, I assume you'll have no objections to moving all Jamfiles to root level of their corresponding components, should guidelines be modified to allow that?
That would cause confusion with developers who are accustomed to the
current setup, I don't know of any gain people get from that would outweights the inflicted confusion by such a change. Having the CMakeLists.txt at the root instead of somewhere else *does* have a gain: it's sticking to conventions that CMake users are accustomed to.
Any bjam conventions discussion, validation historical choices etc is a separate discussion. This discussion here is if we should pave the way to facilitate CMake users and do so correctly by sticking to accepted conventions, and add the CMakeLists.txt to the root or not.
I think whatever outcome of this discussion is, it should put all build systems in the same conditions. If the guideline is to put everything build-related into the build subdirectory then this should concern every build system a library happens to use, including Boost.Build, CMake, Makefiles, IDE projects and whatnot. If it's the library root then, again, all build system files should be there. Personally, I don't like having lots of files in the root directory, so I slightly favor the current convention. I understand that it is not the typical setup for CMake, but it really isn't such a big deal as some in this discussion are trying to put it. I should say that many opensource projects practice a separate directory for build-related stuff and it doesn't hurt anyone (quite the contrary, I'd say).
On 17 May 2016 at 16:05, Andrey Semashev
I think whatever outcome of this discussion is, it should put all build systems in the same conditions. If the guideline is to put everything build-related into the build subdirectory then this should concern every build system a library happens to use, including Boost.Build, CMake, Makefiles, IDE projects and whatnot. If it's the library root then, again, all build system files should be there.
Personally, I don't like having lots of files in the root directory, so I slightly favor the current convention. I understand that it is not the typical setup for CMake, but it really isn't such a big deal as some in this discussion are trying to put it. I should say that many opensource projects practice a separate directory for build-related stuff and it doesn't hurt anyone (quite the contrary, I'd say).
which ones?
On Tuesday, 17 May 2016 18:24:36 MSK Sam Kellett wrote:
On 17 May 2016 at 16:05, Andrey Semashev
wrote: I should say that many opensource projects practice a separate directory for build-related stuff and it doesn't hurt anyone (quite the contrary, I'd say).
which ones?
From the ones I have locally: TBB, openh264, webrtc, libvpx, libresiprocate. Well, ok, some of them have a configure script or a single Makefile at the root directory, but most of the build stuff is put in a subdirectory.
On 17 May 2016, at 17:35, Andrey Semashev
wrote: On Tuesday, 17 May 2016 18:24:36 MSK Sam Kellett wrote:
On 17 May 2016 at 16:05, Andrey Semashev
wrote: I should say that many opensource projects practice a separate directory for build-related stuff and it doesn't hurt anyone (quite the contrary, I'd say).
which ones?
From the ones I have locally: TBB, openh264, webrtc, libvpx, libresiprocate. Well, ok, some of them have a configure script or a single Makefile at the root directory, but most of the build stuff is put in a subdirectory.
The way I use CMake and see other use it is indeed to have a single CMakeFiles.txt config file in the root, and then do "out of source" building.
On 17 May 2016 at 17:57, Thijs (M.A.) van den Berg
On 17 May 2016, at 17:35, Andrey Semashev
wrote: On Tuesday, 17 May 2016 18:24:36 MSK Sam Kellett wrote:
On 17 May 2016 at 16:05, Andrey Semashev
wrote: I should say that many opensource projects practice a separate directory for build-related stuff and it doesn't hurt anyone (quite the contrary, I'd say).
which ones?
From the ones I have locally: TBB, openh264, webrtc, libvpx, libresiprocate. Well, ok, some of them have a configure script or a single Makefile at the root directory, but most of the build stuff is put in a subdirectory.
The way I use CMake and see other use it is indeed to have a single CMakeFiles.txt config file in the root, and then do "out of source" building.
One example of project that provide CMake support among other things without having CMake scripts in it's root directory is the recent versions of protobuf: https://github.com/google/protobuf I didn't see any problem so far with this setup. I don't understand why it's problematic to have cmake scripts outside the root dir. I think any build system that impose a particular layout is a problem. (my 2cents to this complicated discussion) Joël Lamotte
On Tuesday, May 17, 2016 at 11:04:34 AM UTC-5, Klaim - Joël Lamotte wrote:
On 17 May 2016 at 17:57, Thijs (M.A.) van den Berg
javascript:> wrote: On 17 May 2016, at 17:35, Andrey Semashev
wrote:
On Tuesday, 17 May 2016 18:24:36 MSK Sam Kellett wrote:
On 17 May 2016 at 16:05, Andrey Semashev
javascript:> wrote: I should say that many opensource projects practice a separate directory for build-related stuff and it doesn't hurt anyone (quite the contrary, I'd say).
which ones?
From the ones I have locally: TBB, openh264, webrtc, libvpx, libresiprocate. Well, ok, some of them have a configure script or a single Makefile at the root directory, but most of the build stuff is
put in
a subdirectory.
The way I use CMake and see other use it is indeed to have a single CMakeFiles.txt config file in the root, and then do "out of source" building.
One example of project that provide CMake support among other things without having CMake scripts in it's root directory is the recent versions of protobuf: https://github.com/google/protobuf
And this is a perfect example of why we want to put the cmake in the top- level, as it is entirely confusing to know how to build protobuf using cmake.
I didn't see any problem so far with this setup. I don't understand why it's problematic to have cmake scripts outside the root dir. I think any build system that impose a particular layout is a problem.
Cmake doesn't impose a layout, and that's the whole point. I clone hana and then call `cmake hana` to build it using cmake. Imposing a layout such as hiding it in some unknown directory just causes confusion.
On Tue, May 17, 2016 at 11:29 AM, Paul Fultz II
Cmake doesn't impose a layout, and that's the whole point. I clone hana and then call `cmake hana` to build it using cmake. Imposing a layout such as hiding it in some unknown directory just causes confusion.
As a not-cmake-user I don't know what you mean there. What commands do you invoke, precisely? -- -- Rene Rivera -- Grafik - Don't Assume Anything -- Robot Dreams - http://robot-dreams.net -- rrivera/acm.org (msn) - grafikrobot/aim,yahoo,skype,efnet,gmail
On 5/17/16 9:33 AM, Rene Rivera wrote:
On Tue, May 17, 2016 at 11:29 AM, Paul Fultz II
wrote: Cmake doesn't impose a layout, and that's the whole point. I clone hana and then call `cmake hana` to build it using cmake. Imposing a layout such as hiding it in some unknown directory just causes confusion.
As a not-cmake-user I don't know what you mean there. What commands do you invoke, precisely?
As one who spend a fair amount of time with different ways to use CMake I found that the best way to using in a setup like boost is a) Put CMakeLists.txt files in subdirectories like src, test, example, doc, example b) Put a minimal CMakeLists.txt file in parent directory which includes common things liket setup etc. The top level includes sub directories. So it can (and in my view) should be fairly small. Used in this way, it's quite like boost build in it's way of doing things. It does take special care to be permit the building of part of the project - something boost build handles very well. I think many users of CMake fall in the trap of making the top level as centralized system which in short order becomes too complex to understand - like putting behavior in base class which should have been placed in a derived class. But this has to be handled on a case by case basis as CMake itself is very haphazard system. Robert Ramey
On Tuesday, May 17, 2016 at 11:33:38 AM UTC-5, Rene Rivera wrote:
On Tue, May 17, 2016 at 11:29 AM, Paul Fultz II
javascript:> wrote: Cmake doesn't impose a layout, and that's the whole point. I clone hana
and
then call `cmake hana` to build it using cmake. Imposing a layout such as hiding it in some unknown directory just causes confusion.
As a not-cmake-user I don't know what you mean there. What commands do you invoke, precisely?
Something like this: git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/ cmake --build . cmake --build . --target check cmake --build . --target install This builds, tests, and installs hana. There are various ways to accomplish this, but the first step is to point cmake to the hana directory.
On Tuesday, 17 May 2016 21:08:01 MSK Paul Fultz II wrote:
On Tuesday, May 17, 2016 at 11:33:38 AM UTC-5, Rene Rivera wrote:
On Tue, May 17, 2016 at 11:29 AM, Paul Fultz II
javascript:> wrote:
Cmake doesn't impose a layout, and that's the whole point. I clone hana
and
then call `cmake hana` to build it using cmake. Imposing a layout such
as
hiding it in some unknown directory just causes confusion.
As a not-cmake-user I don't know what you mean there. What commands do you invoke, precisely?
Something like this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/
And why is it a problem to type this instead: cmake ../hana/build ?
cmake --build . cmake --build . --target check cmake --build . --target install
This builds, tests, and installs hana. There are various ways to accomplish this, but the first step is to point cmake to the hana directory.
Le 17/05/16 à 20:08, Andrey Semashev a écrit :
On Tuesday, 17 May 2016 21:08:01 MSK Paul Fultz II wrote:
On Tuesday, May 17, 2016 at 11:33:38 AM UTC-5, Rene Rivera wrote:
On Tue, May 17, 2016 at 11:29 AM, Paul Fultz II
javascript:> wrote:
Cmake doesn't impose a layout, and that's the whole point. I clone hana
and
then call `cmake hana` to build it using cmake. Imposing a layout such
as
hiding it in some unknown directory just causes confusion.
As a not-cmake-user I don't know what you mean there. What commands do you invoke, precisely?
Something like this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/
And why is it a problem to type this instead:
cmake ../hana/build
?
+1 The nice thing on eg. GitHub is that it interprets and shows the README.txt/README.md. Library users not having a single clue on how to build eg. Hana can quickly look at the GitHub page on the front, read the fist lines of documentation/intro, and compile eg. Hana. BTW, is there any policy about having a Markdown README.md instead of a "pure" text file at the root of the library? I transformed (amount of work close to 0) the README.txt to README.md for boost.test. Raffi
Raffi Enficiaud wrote:
Le 17/05/16 à 20:08, Andrey Semashev a écrit :
On Tuesday, 17 May 2016 21:08:01 MSK Paul Fultz II wrote: ...
Something like this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/
And why is it a problem to type this instead:
cmake ../hana/build
?
+1
The nice thing on eg. GitHub is that it interprets and shows the README.txt/README.md.
The reason Paul would rather have CMakeLists.txt at the root is because this is where his tool expects to find it, which expectation is correct by convention in the majority of the (non-Boost) cases. Tools obviously don't read README files. Of course, it's not hard at all for a tool to be made to look for CMakeLists.txt at various predetermined locations such as .;./cmake;./build. In fact, ./cmake would probably be a better place than ./build, because some libraries seem to already use it.
Le 17/05/16 à 23:31, Peter Dimov a écrit :
Raffi Enficiaud wrote: [snip]
The nice thing on eg. GitHub is that it interprets and shows the README.txt/README.md.
The reason Paul would rather have CMakeLists.txt at the root is because this is where his tool expects to find it, which expectation is correct by convention in the majority of the (non-Boost) cases. Tools obviously don't read README files.
I was more specifically referring this part of Paul's post (talking about google/protobuf not having a top level CMakeLists.txt):
And this is a perfect example of why we want to put the cmake in the top- level, as it is entirely confusing to know how to build protobuf using cmake.
I understand it such that "a human is confused" (indirectly means that "a tool cannot be confused"). If clarification for human is the main or sole purpose of this post, I am suggesting to put the missing bit of information in a README rather than in an implicit and non official nor supported cmake rule or convention.
Of course, it's not hard at all for a tool to be made to look for CMakeLists.txt at various predetermined locations such as .;./cmake;./build.. In fact, ./cmake would probably be a better place than ./build, because some libraries seem to already use it.
It is trivial indeed. I like ./cmake but gathering also all build related files in ./build looks more uniform to me for the specific case of Boost. Raffi
On Tuesday, May 17, 2016 at 4:31:58 PM UTC-5, Peter Dimov wrote:
Raffi Enficiaud wrote:
Le 17/05/16 à 20:08, Andrey Semashev a écrit :
On Tuesday, 17 May 2016 21:08:01 MSK Paul Fultz II wrote: ...
Something like this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/
And why is it a problem to type this instead:
cmake ../hana/build
?
+1
The nice thing on eg. GitHub is that it interprets and shows the README.txt/README.md.
The reason Paul would rather have CMakeLists.txt at the root is because this is where his tool expects to find it, which expectation is correct by convention in the majority of the (non-Boost) cases. Tools obviously don't read README files.
Of course, it's not hard at all for a tool to be made to look for CMakeLists.txt at various predetermined locations such as .;./cmake;./build. In fact, ./cmake would probably be a better place than ./build, because some libraries seem to already use it.
The tool doesn't look for CMakeLists.txt at all. It just calls cmake on the library. If you want it to search in another location, its best to update cmake to do that.
Paul Fultz II wrote:
The tool doesn't look for CMakeLists.txt at all. It just calls cmake on the library. If you want it to search in another location, its best to update cmake to do that.
cmake takes the directory as an argument, so it would make absolutely no sense for it to search. If you want cmake to look for CMakeLists.txt somewhere, you pass that somewhere to it.
On Tuesday, May 17, 2016 at 7:07:44 PM UTC-5, Peter Dimov wrote:
Paul Fultz II wrote:
The tool doesn't look for CMakeLists.txt at all. It just calls cmake on the library. If you want it to search in another location, its best to update cmake to do that.
cmake takes the directory as an argument, so it would make absolutely no sense for it to search. If you want cmake to look for CMakeLists.txt somewhere, you pass that somewhere to it.
That is true, but considering putting a cmake in another directory is first, quite rare, and also non-conventional. Therefore, it is difficult to decide what directory should be searched, and in what order the search to happen. Its much simpler to just put the cmake file where it is expected to be.
On 18/05/2016 12:31, Paul Fultz II wrote:
On Tuesday, May 17, 2016 at 7:07:44 PM UTC-5, Peter Dimov wrote:
Paul Fultz II wrote:
The tool doesn't look for CMakeLists.txt at all. It just calls cmake on the library. If you want it to search in another location, its best to update cmake to do that.
cmake takes the directory as an argument, so it would make absolutely no sense for it to search. If you want cmake to look for CMakeLists.txt somewhere, you pass that somewhere to it.
That is true, but considering putting a cmake in another directory is first, quite rare, and also non-conventional. Therefore, it is difficult to decide what directory should be searched, and in what order the search to happen. Its much simpler to just put the cmake file where it is expected to be.
My experience is admittedly limited (most projects I use build using VS or autotools; cmake is comparatively rare), but most that I have seen either put the CMakeLists.txt file in the root or in a cmake subdirectory. More importantly, however, is that you *never* run cmake in the same directory as the CMakeLists.txt file, so you never run it without parameters. Without exception (in my limited experience) the instructions are to create and switch to a build subdirectory and run cmake in that, pointing it at the other directory (typically .. or ../cmake) that actually contains the CMakeLists.txt. (This is important because CMake lacks the ability to clean up after itself, unlike autotools, so you need to keep it segregated from the original source.) So I don't see why it'd be weird for Boost to put the CMakeLists.txt in cmake/ or build/.
Paul Fultz II wrote:
Something like this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/ cmake --build . cmake --build . --target check cmake --build . --target install
This builds, tests, and installs hana.
I wonder how this workflow would look like if we assume Boost layout, f.ex. from an extracted release tarball.
On Tuesday, May 17, 2016 at 1:19:24 PM UTC-5, Peter Dimov wrote:
Paul Fultz II wrote:
Something like this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/ cmake --build . cmake --build . --target check cmake --build . --target install
This builds, tests, and installs hana.
I wonder how this workflow would look like if we assume Boost layout, f.ex. from an extracted release tarball.
It should be the same., if boost supports cmake. So, boost should provide a top-level cmake that calls add_subdirectory for each library that has a CMakeLists.txt file. However, this can be done later.
Paul Fultz II wrote:
On Tuesday, May 17, 2016 at 1:19:24 PM UTC-5, Peter Dimov wrote:
Paul Fultz II wrote:
Something like this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/ cmake --build . cmake --build . --target check cmake --build . --target install
This builds, tests, and installs hana.
I wonder how this workflow would look like if we assume Boost layout, f.ex. from an extracted release tarball.
It should be the same., if boost supports cmake. So, boost should provide a top-level cmake that calls add_subdirectory for each library that has a CMakeLists.txt file. However, this can be done later.
You're talking about building the whole Boost, and that's not what I meant. I asked about the equivalent of the above, building, testing and installing Hana, but from the directory structure of a Boost distribution.
On 17 May 2016, at 22:54, Peter Dimov
wrote: Paul Fultz II wrote:
On Tuesday, May 17, 2016 at 1:19:24 PM UTC-5, Peter Dimov wrote:
Paul Fultz II wrote:
Something like this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/ cmake --build . cmake --build . --target check cmake --build . --target install
This builds, tests, and installs hana.
I wonder how this workflow would look like if we assume Boost layout, > f.ex. from an extracted release tarball.
It should be the same., if boost supports cmake. So, boost should provide a top-level cmake that calls add_subdirectory for each library that has a CMakeLists.txt file. However, this can be done later.
You're talking about building the whole Boost, and that's not what I meant. I asked about the equivalent of the above, building, testing and installing Hana, but from the directory structure of a Boost distribution.
Boost is a monolithic release, it might indeed be good to think about how the outcome of the CMake discussion interacts with the other profound change that has been worked on not so long ago: to model and reduce dependencies between libraries and break the monolithic structure.
Thijs (M.A.) van den Berg wrote:
Boost is a monolithic release, it might indeed be good to think about how the outcome of the CMake discussion interacts with the other profound change that has been worked on not so long ago: to model and reduce dependencies between libraries and break the monolithic structure.
That is also a bit beside my point. It doesn't matter for this use case whether Boost is monolithic or not; it could be that only a few of the libraries have in fact been installed. What matters is that the directory structure is $BOOST_ROOT/ libs/ hana/ lib2/ lib3/ and that the user wishes to build, test and optionally install one (and then optionally another) of the libraries.
On Tuesday, May 17, 2016 at 3:54:50 PM UTC-5, Peter Dimov wrote:
On Tuesday, May 17, 2016 at 1:19:24 PM UTC-5, Peter Dimov wrote:
Paul Fultz II wrote:
Something like this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/ cmake --build . cmake --build . --target check cmake --build . --target install
This builds, tests, and installs hana.
I wonder how this workflow would look like if we assume Boost layout, f.ex. from an extracted release tarball.
It should be the same., if boost supports cmake. So, boost should
Paul Fultz II wrote: provide
a top-level cmake that calls add_subdirectory for each library that has a CMakeLists.txt file. However, this can be done later.
You're talking about building the whole Boost, and that's not what I meant. I asked about the equivalent of the above, building, testing and installing Hana, but from the directory structure of a Boost distribution.
Ok, you could just do `cmake libs/hana` for the cmake step. However, this won't build hana's dependencies. Another way would be for hana to provide a target just for its test, so using `hana-check` instead of `check`: git clone git@github.com:boostorg/boost.git mkdir build && cd build cmake ../boost cmake --build . --target hana cmake --build . --target hana-check cmake --build . --target install Another option would be to do something like bpm and place the libraries and dependencies for hana in their own directory and then create a top-level cmake that calls `add_subdirectory` for each library, but I believe you were referring to the tarball release, so this doesn't really apply.
Paul Fultz II wrote:
Ok, you could just do `cmake libs/hana` for the cmake step. However, this won't build hana's dependencies. Another way would be for hana to provide a target just for its test, so using `hana-check` instead of `check`:
git clone git@github.com:boostorg/boost.git mkdir build && cd build cmake ../boost cmake --build . --target hana cmake --build . --target hana-check cmake --build . --target install
This looks like an interesting option. Is it possible to write a top-level CMakeLists.txt which would add_subdirectory for each present library in libs/ ? (b2 does this - invoking it at top level automatically works on a subset and builds whatever is present.)
On Tuesday, May 17, 2016 at 7:11:31 PM UTC-5, Peter Dimov wrote:
Paul Fultz II wrote:
Ok, you could just do `cmake libs/hana` for the cmake step. However, this won't build hana's dependencies. Another way would be for hana to provide a target just for its test, so using `hana-check` instead of `check`:
git clone git@github.com:boostorg/boost.git mkdir build && cd build cmake ../boost cmake --build . --target hana cmake --build . --target hana-check cmake --build . --target install
This looks like an interesting option. Is it possible to write a top-level CMakeLists.txt which would add_subdirectory for each present library in libs/ ? (b2 does this - invoking it at top level automatically works on a subset and builds whatever is present.)
Yes
Can we, and what is the best way to, achieve functionality such that this:
git clone git@github.com:boostorg/hana.git mkdir build && cd build cmake ../hana/ cmake --build . cmake --build . --target check cmake --build . --target install
works for the people who want a standalone Hana, and yet this
git clone git@github.com:boostorg/boost.git mkdir build && cd build cmake ../boost cmake --build . --target hana cmake --build . --target hana-check cmake --build . --target install
also works? (And in that latter case, cmake --build . cmake --build . --target check to work as well, building and testing everything.)
On May 17, 2016, at 8:09 PM, Peter Dimov
wrote: Can we, and what is the best way to, achieve functionality such that this:
git clone git@github.com:boostorg/hana.git > > > mkdir build && cd build > > > cmake ../hana/ > > > cmake --build . > > > cmake --build . --target check > > > cmake --build . --target install
works for the people who want a standalone Hana, and yet this
git clone git@github.com:boostorg/boost.git > > mkdir build && cd build > > cmake ../boost > > cmake --build . --target hana > > cmake --build . --target hana-check > > cmake --build . --target install
also works? (And in that latter case,
cmake --build . cmake --build . --target check
to work as well, building and testing everything.)
Yes it can, but requires some coordination when searching for internal dependencies. Standalone builds would find dependencies using `find_package`, but in the superproject build, the search for internal dependencies would be a no-op, since the targets already exist, elsewhere.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
On May 17, 2016, at 6:11 PM, Peter Dimov
wrote: Paul Fultz II wrote:
Ok, you could just do `cmake libs/hana` for the cmake step. However, this won't build hana's dependencies. Another way would be for hana to provide a target just for its test, so using `hana-check` instead of `check`:
git clone git@github.com:boostorg/boost.git mkdir build && cd build cmake ../boost cmake --build . --target hana cmake --build . --target hana-check cmake --build . --target install
Is it possible to write a top-level CMakeLists.txt which would add_subdirectory for each present library in libs/ ? (b2 does this - invoking it at top level automatically works on a subset and builds whatever is present.)
Add code like this to the top-level CMakeLists.txt # Add Boost subdirectories SUBDIRS(libs/accumulators) SUBDIRS(libs/algorithm) SUBDIRS(libs/align) ... would look for a CMakeLists.txt file in each subdirectory listed.
On Tue, May 17, 2016 at 9:09 PM, Belcourt, Kenneth
On May 17, 2016, at 6:11 PM, Peter Dimov
wrote: Paul Fultz II wrote:
Ok, you could just do `cmake libs/hana` for the cmake step. However, this won't build hana's dependencies. Another way would be for hana to provide a target just for its test, so using `hana-check` instead of `check`:
git clone git@github.com:boostorg/boost.git mkdir build && cd build cmake ../boost cmake --build . --target hana cmake --build . --target hana-check cmake --build . --target install
Is it possible to write a top-level CMakeLists.txt which would add_subdirectory for each present library in libs/ ? (b2 does this - invoking it at top level automatically works on a subset and builds whatever is present.)
Add code like this to the top-level CMakeLists.txt
# Add Boost subdirectories SUBDIRS(libs/accumulators) SUBDIRS(libs/algorithm) SUBDIRS(libs/align) ...
would look for a CMakeLists.txt file in each subdirectory listed.
Peter meant programatically. As in, pseudo code: for each libs/*: add_subdirectory( X ) -- -- Rene Rivera -- Grafik - Don't Assume Anything -- Robot Dreams - http://robot-dreams.net -- rrivera/acm.org (msn) - grafikrobot/aim,yahoo,skype,efnet,gmail
On May 17, 2016, at 8:14 PM, Rene Rivera
wrote: On Tue, May 17, 2016 at 9:09 PM, Belcourt, Kenneth
wrote: On May 17, 2016, at 6:11 PM, Peter Dimov
wrote: Paul Fultz II wrote:
Ok, you could just do `cmake libs/hana` for the cmake step. However, this won't build hana's dependencies. Another way would be for hana to provide a target just for its test, so using `hana-check` instead of `check`:
git clone git@github.com:boostorg/boost.git mkdir build && cd build cmake ../boost cmake --build . --target hana cmake --build . --target hana-check cmake --build . --target install
Is it possible to write a top-level CMakeLists.txt which would add_subdirectory for each present library in libs/ ? (b2 does this - invoking it at top level automatically works on a subset and builds whatever is present.)
Add code like this to the top-level CMakeLists.txt
# Add Boost subdirectories SUBDIRS(libs/accumulators) SUBDIRS(libs/algorithm) SUBDIRS(libs/align) ...
would look for a CMakeLists.txt file in each subdirectory listed.
Peter meant programatically. As in, pseudo code:
for each libs/*: add_subdirectory( X )
# Recursive glob to find CMakeLists.tst FILE(GLOB_RECURSE build_libs ${CMAKE_CURRENT_SOURCE_DIR}/libs CMakeLists.txt) # Echo to stdout foreach(library ${build_libs}) message(0 ${library}) endforeach(library) Here’s the result: s988329:boost kbelco$ cmake -F CMakeLists.txt 0/Users/kbelco/Projects/boost/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/compute/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/compute/example/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/compute/perf/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/compute/test/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/compute/test/extra/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/hana/benchmark/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/hana/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/hana/doc/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/hana/example/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/hana/experimental/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/hana/test/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/serialization/CMake/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/test/build/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/test/doc/snippet/dataset_1/CMakeLists.txt 0/Users/kbelco/Projects/boost/libs/test/test/CMakeLists.txt -- Configuring done -- Generating done -- Build files have been written to: /Users/kbelco/Projects/boost
On May 17, 2016, at 8:43 PM, Belcourt, Kenneth
wrote: On May 17, 2016, at 8:14 PM, Rene Rivera
wrote: On Tue, May 17, 2016 at 9:09 PM, Belcourt, Kenneth
wrote: On May 17, 2016, at 6:11 PM, Peter Dimov
wrote: Paul Fultz II wrote:
Ok, you could just do `cmake libs/hana` for the cmake step. However, this won't build hana's dependencies. Another way would be for hana to provide a target just for its test, so using `hana-check` instead of `check`:
git clone git@github.com:boostorg/boost.git mkdir build && cd build cmake ../boost cmake --build . --target hana cmake --build . --target hana-check cmake --build . --target install
Is it possible to write a top-level CMakeLists.txt which would add_subdirectory for each present library in libs/ ? (b2 does this - invoking it at top level automatically works on a subset and builds whatever is present.)
Add code like this to the top-level CMakeLists.txt
# Add Boost subdirectories SUBDIRS(libs/accumulators) SUBDIRS(libs/algorithm) SUBDIRS(libs/align) ...
would look for a CMakeLists.txt file in each subdirectory listed.
Peter meant programatically. As in, pseudo code:
for each libs/*: add_subdirectory( X )
Updated results, seems like we might want to disable the use of FindBoost.cmake if we’re actually configuring Boost itself. s988329:boost kbelco$ cmake -F CMakeLists.txt Configuring Boost libraries: /Users/kbelco/Projects/boost/libs/compute/CMakeLists.txt /Users/kbelco/Projects/boost/libs/hana/CMakeLists.txt CMake Error at /Users/kbelco/Projects/local/cmake-3.2.2/share/cmake-3.2/Modules/FindBoost.cmake:1182 (message): Unable to find the requested Boost libraries. Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boost's headers. Call Stack (most recent call first): libs/compute/CMakeLists.txt:24 (find_package) -- Could NOT find Boost CMake Warning at libs/hana/CMakeLists.txt:109 (message): The Boost library headers were not found; targets depending on Boost won't be available. -- Could NOT find Ruby: Found unsuitable version "2.0.0", but required is at least "2.1" (found /usr/bin/ruby) CMake Warning at libs/hana/benchmark/CMakeLists.txt:10 (message): Ruby >= 2.1 was not found; the benchmarks will be unavailable. -- Configuring incomplete, errors occurred! See also "/Users/kbelco/Projects/boost/CMakeFiles/CMakeOutput.log". See also "/Users/kbelco/Projects/boost/CMakeFiles/CMakeError.log".
> I should say that many > opensource projects practice a separate directory for build-related stuff > and it doesn't > hurt anyone (quite the contrary, I'd say).
which ones?
From the ones I have locally: TBB, openh264, webrtc, libvpx, libresiprocate. Well, ok, some of them have a configure script or a single Makefile at the root directory, but most of the build stuff is put in a subdirectory.
The way I use CMake and see other use it is indeed to have a single CMakeFiles.txt config file in the root, and then do "out of source" building.
some IDEs (e.g. qtcreator) populate projects depending on the location of the root CMakeFiles.txt. so for users of these IDEs the UX will differ. hope that this won't end in a dogmatic discussion, but a pragmatic way can be found. afaict that killed the last effort to introduce a cmake-based buildsystem ...
On 17 May 2016 at 16:35, Andrey Semashev
On Tuesday, 17 May 2016 18:24:36 MSK Sam Kellett wrote:
On 17 May 2016 at 16:05, Andrey Semashev
wrote: I should say that many opensource projects practice a separate directory for build-related stuff and it doesn't hurt anyone (quite the contrary, I'd say).
which ones?
From the ones I have locally: TBB, openh264, webrtc, libvpx, libresiprocate. Well, ok, some of them have a configure script or a single Makefile at the root directory, but most of the build stuff is put in a subdirectory.
unless i'm looking at the wrong repositories but every single one of those examples has at least one build file in the root
On Tue, May 17, 2016 at 9:05 AM, Andrey Semashev
I think whatever outcome of this discussion is, it should put all build systems in the same conditions. If the guideline is to put everything build-related into the build subdirectory then this should concern every build system a library happens to use, including Boost.Build, CMake, Makefiles, IDE projects and whatnot. If it's the library root then, again, all build system files should be there.
Not all build systems are the same nor should they be treated as such. bjam is how boost is built. CMake is the build system that "won" C++. -- David Sankel
On Tuesday, 17 May 2016 20:56:50 MSK David Sankel wrote:
On Tue, May 17, 2016 at 9:05 AM, Andrey Semashev
wrote: I think whatever outcome of this discussion is, it should put all build systems in the same conditions. If the guideline is to put everything build-related into the build subdirectory then this should concern every build system a library happens to use, including Boost.Build, CMake, Makefiles, IDE projects and whatnot. If it's the library root then, again, all build system files should be there.
Not all build systems are the same nor should they be treated as such.
I disagree. CMake is yet another tool and if a tool doesn't work in my preferred environment, then I don't want it. Luckily, it does.
CMake is the build system that "won" C++.
Although CMake is no doubt very popular, I wouldn't say it won anything. In my practice I encounter autotools much more often, for example.
On Tue, May 17, 2016 at 7:01 AM, Vladimir Prus
On 17/05/2016 15:41, Steven Watanabe wrote:
AMDG
On 05/17/2016 12:46 AM, Vladimir Prus wrote:
Just to clarify, you are proposing that a library author may add CMakeLists.txt at the top level, while Jamfile is required to be in the 'build' subdirectory?
I am strongly -1 about such an arrangement - it makes unofficial build system more prominently visible than the official one,
I don't think that's a a big problem for libraries, as the most visible part of the build system is still the superproject's Jamroot.
It is still a problem when somebody looks at sources of a particular library, say on GitHub.
This is a feature, one that will likely mean a significant number of extra users. There is no confusion out there as to whether or not boost is built with CMake. -- David
AMDG My personal opinion on the subject is that CMake is not supported by Boost in any way, and any support for it is strictly at the discretion of individual library authors. Corollary 1: There is absolutely no guarantee of consistency across libraries and authors might put CMakeLists.txt in other places besides the root. Corollary 2: I am entirely within my rights in refusing to support CMake at all (even if patches are provided by someone else). If we're going to have any guidelines about where CMakeLists.txt should live, then I support the position that it should be in the same place as the corresponding Jamfiles. Regarding Vladimir's (facetious) suggestion that we should move Jamfiles to the root as well, I think that having a top-level Jamfile which would just call into the subdirectories would be completely reasonable, if we intend to distribute libraries independently of the superproject. The use of build/ was really designed with the idea that the main user entry point for building is the superproject's Jamroot. In Christ, Steven Watanabe
On 5/17/16 4:30 PM, Steven Watanabe wrote:
AMDG
My personal opinion on the subject is that CMake is not supported by Boost in any way, and any support for it is strictly at the discretion of individual library authors.
Correct. But it's not an opinion. Fact is that no one has been assigned and no one has accepted any obligation to support CMake in Boost.
Corollary 1: There is absolutely no guarantee of consistency across libraries and authors might put CMakeLists.txt in other places besides the root.
Correct - there is no one who could/would make such a guarentee
Corollary 2: I am entirely within my rights in refusing to support CMake at all (even if patches are provided by someone else).
I'm assuming you're speaking as a library author. This is also a fact since no such obligation has been stated or accepted. I would add that as far as I know, Boost only requires the support of boost build. It "does not prohibit any author from supporting any other build system if he wants to take on the task". Personally I've had a CMakeLists.txt file in the distribution for several years. No one has ever complained nor used it either for all I know. For me this has been sufficient but if someone wants more we can add take the quoted text above and add it somewhere. It won't change a a thing anyway. Now there is the entirely separate question of how the CMake system should be used for any given library. CMake permits a lot - some say too much flexibility in this area to expect that the usages are going to be in sync. If the advocates of CMake want to provide a page - "Guide for Boost Authors who want to support CMake" I think it would increase the likelyhood that there would be wider CMake support. Honestly I don't think there's a lot to dispute here. Robert Ramey
On 16/05/2016 15:32, David Sankel wrote:
We recommend and propose that the Boost Guidelines are modified to allow library authors, at their own discretion, to include a 'CMakeLists.txt' file in their library's top-level directory.
At the risk of reopening this debate (which I hope doesn't happen), here is my interpretation of the current guidelines [1]. 1. The "real" CMakeLists.txt file should be in the build subdirectory of the library (as this is where such files are specified to belong). But this can include other files elsewhere in the tree, such as in src, doc, or test, since it's common to refer to individual source files only from a build script in the same directory. 2. There is nothing preventing a library author from adding other files (they are neither required nor forbidden). So another CMakeLists.txt could be in the root, which simply includes the one in build. So I don't think that any changes are required to the guidelines if library authors do want to put cmake files in the root (though I've said elsewhere that this might not be the best idea, due to directory name clashes). I believe this was also what Rene Rivera was implying when asking for a PR containing specific wording changes (and more explicitly in the "Files in individual libraries" thread). [1] http://www.boost.org/development/requirements.html#Directory_structure
participants (51)
-
alainm
-
alex
-
Andrey Semashev
-
Belcourt, Kenneth
-
Bob Summerwill
-
Boris Schäling
-
Daniel James
-
Daniel Pfeifer
-
Daniela Engert
-
David Sankel
-
degski
-
Edward Diener
-
Emil Dotchevski
-
Gavin Lambert
-
Glen Fernandes
-
Hartmut Kaiser
-
Jeff Trull
-
Jeroen Habraken
-
Jonathan Franklin
-
Joseph Van Riper
-
Karen Shaeffer
-
Klaim - Joël Lamotte
-
Klemens Morgenstern
-
Louis Dionne
-
M.A. van den Berg
-
Michael Caisse
-
Michał Dominiak
-
Mikhail Strelnikov
-
Niall Douglas
-
Norbert Wenzel
-
Paul A. Bristow
-
Paul Fultz II
-
Peter Dimov
-
Raffi Enficiaud
-
Rainer Deyke
-
Rene Rivera
-
Rob Stewart
-
Robert Ramey
-
Sam Kellett
-
Soul Studios
-
Stefan Seefeld
-
Steven Watanabe
-
Thijs (M.A.) van den Berg
-
Thijs van den Berg
-
Thomas Heller
-
Thomas Trummer
-
Tim Blechmann
-
Vicente J. Botet Escriba
-
Vinnie Falco
-
Vladimir Batov
-
Vladimir Prus