I am now ready to announce Request for Proposals on boost developer's
list and concurrently on reddit/r/cpp. Before I do this I wanted to
clarify some issues and give you all one final opportunity to spit ball it.
a) I've "re-purposed" the boost review process to permit the
simultaneous review of multiple submissions. I just want to make sure
that there is a consensus that this is OK so no one will complain after
I take the leap to open the argument "This is not the traditional
review" or Ramey doesn't have the authority to change boost procedures.
or ...
b) I'm including ron garcia (review wizard) on this email to make sure
that he also OK with this and to ask him to place these proposals in the
queue for review 15 February 2019.
c) I've alluded to the award of a $5000 "prize" to the author of the
selected proposal upon integration into boost. David raised the
question as to trying to make this more flexible to make it more fair
and encourage collaboration. Do this would put the review manager (me -
unless you've got some one stupider than I am with a death wish to take
on the task) in a sort of impossible situation of trying to create
"fairness" where none is possible. One of the great virtues of the
boost review process is that the reviewer must actually make a thumbs
up/down decision. The avoids the situation where he gets sucked into
the library design by accident. It forces all the participants to get
their licks in during the review - knowing that it will be a definite
discussion ending decision. It may not be perfect, it many not be fair,
but it's better than the alternative. It's like plastic surgery,
perfect always ends up worse than better.
d) Right now the prize is unfunded. I've got 3 months to address this.
It's my plan to solicit sponsors for this award in the amount of $1000
each. I'll be pitching: Boost, C++ alliance, Kitware and previous
sponsors of C++Now. I envision this working in the following manner.
Payments are made to the Boost account at the software conservancy to
the amount of $6000. They take their cut off the top and cut a check
when requested for $5000. You'll have to decide on the mechanics.
Speak now, or forever hold your peace.
Below is the document I plan on publishing.
Call for Submissions - CMake for Boost
======================================
For some time, there has been interest on many users and developers of
Boost Libraries to make Boost easier to use with CMake. Discussions in
the past have not resulted in an implementation which has been widely
accepted. Never the less, hope springs eternal, and we intend to
attempt this once again. It seems that often there are difficulties
before such projects even start in that there are wide discrepancies as
to what should be the goals and expectations of Boost support of CMake.
The aim of this document is to try to build a consensus on this question
before encouraging CMake developers and experts to submit proposals for
Boost support of CMake.
Requirements and Scope
======================
Requirements
------------
Submissions will fulfill the applicable requirements of any boost
submission. This will include:
a) any necessary code.
b) specifications/requirements for things like directory structure
and contents.
b) A useful document. Document should provide information, examples
and templates so that a typical C++ and CMake user should be able to do
any of the following in a short time - say 10 minutes. Document at a
minimum should be viewable as html and/or PDF file. After reading this
document:
1) A library user should be able to incorporate a Boost Library
into the CMake script of an application which uses the Boost library in
question.
2) A library user should be able to determine which additional
Boost Libraries he needs.
3) A library developer should find it simple to create the
requisite CMake files for his library. Thus the documentation should
contain explanation and perhaps other means such as examples and/or
"templates" for required CMake files. So a library author with no
background in CMake should be able to add CMake support to his library
in a short time - on the order of an hour.
c) test of CMake facilities supported by the CMake implementation.
This will include code, test of any features, capabilities that the
submission provides. Users expect that if they follow the instructions
in the documentation, they will get the promised results. A manner of
proving/demonstrating that this expection is realized this must be
provided. A likely response to this requirement would be a "test
project" which can be used to demonstrate that the submission actually
works as expected. This will be useful in the future for maintenance of
the CMake Boost implementation. It will permit the maintainer of the
Boost.CMake facility to work on and test their fixes and improvements
without disrupting other developers and users. It will also provide a
template/example for Boost Library developers endeavoring facilitate the
usage of their libraries by users of CMake.
e) A commitment to support the submission, should it be accepted, for
a period of 5 years after integration into Boost. Such support would
include fixing bugs, updating documentation as necessary, and triaging
of pull requests.
d) a Boost License
Scope - Facilities and features
-------------------------------
CMake as it stands has lots of capabilities. But it has a fair amount
of complexity as well. Lots of things can be accomplished in multiple
different ways - each with subtly different results and effects. CMake
for Boost will likely consist of documentation, examples, CMake code,
and other stuff to use CMake to permit new features and facilities for
users and developers of Boost libraries.
What follows is a list of facilities that Boost users and developers
would like to acquire with CMake for Boost. Those marked with * should
be considered hard requirements. That is, submissions which don't
include this feature can't be considered. Other items are interesting
and would be considered if included in a submission.
*a) incorporating selected Boost Libraries into a user's application
*b) incorporating selected Boost Libraries into a user's library
c) building a boost library
d) building a boost tool such as Boost.bcp, Boost.boostdep, etc.
*e) In CMake, dependent libraries are specified as part of the library
CMakeLists.txt files. There several ways to do this and the subject is
pretty confusing to get right. Any submission documentation has to
explain to library developers how do this.
*f) support of library modularity. This would mean:
*1) independence of things outside the library directory structure.
To wit - no presumption about any "super project".
*2) Building a library should not alter the source tree.
*3) no need for installing libraries not used by the library
*4) there should be no conflicts with other files. In particular,
any implementation should not hinder the usage of the boost.build.
g) testing a boost library - if testing of Boost libraries is to be
supported, the following features should be considered. Those marked *
should be considered essential.
*1) execution tests - must pass / must fail
*2) compile only tests - must pass / must fail
*3) link only tests - must pass / must fail
4) testing should be available to both library users and library
developers
5) should not depend upon tools other than a C++ and of course
CMake itself.
6) test should have the option of posting the results to some
public "dashboard" which can be browsed by other users and library
developers.
7) option for recursive testing and/or building of libraries might
be nice. That is if library A uses library B and I test library A, this
would automatically test library B beforehand.
8) Any build/test facilities should take into account the compiler
features as revealed by the tests for the boost/config library. This is
required to support the portability/universality which is one of the
hallmarks of the Boost Libraries.
h) packaging - preparation of distributable, installable files for
various operating systems. That is, support for the CPack facility.
i) There has been a lot interest and work in automatically
determining dependencies It's a much deeper subject than most people
realize. Solving this problem is not a requirement of the submission.
However, submitters are free to address this if they desire.
j) Some have suggested a highly automated process including
downloading/updating, finding other components on other machines, etc.
Overly elaborate/opaque submissions will not be well received.
Submission Rules and Procedures
-------------------------------
a) This document constitutes a "Request for Submissions". It will be
announced on the boost announcements list, boost developer's list,
slack/boost, isocpp website and twitter account, reddit at r/cpp.
Submissions will be open to anyone.
b) Submissions will be accepted at an email address to be specified.
Received submissions will receive a "prescreening" to determine that
they meet the requirements specified for such submissions at the top of
this document. Submitters will be notified of acceptance or rejection
as soon as practicable.
b) When authors are believe that their submissions are ready for review,
they shall notify the reviewer at ramey at rrsd dot com. The
submissions will be verified to meet the requirements and minimum scope
as described above. Authors will be advised of any deficiencies and
given a chance to correct them. When the review period starts, all
information on submissions will be posted on the Boost Developer's
mailing list.
c) The boost review process is described at
www.boost.org . This
instance will deviate from that description in that we will review all
submissions simultaneously and select the one we would like to see
incorporated into boost. Other than it should be the same as the normal
boost review process.
c) The boost review process occurs on the boost developer's mailing
list. Authors of submissions should be subscribers to this list. Boost
custom is that subscribers use their real names. Its' been found that
leads to more productive discussion and effectively eliminates the
participation of trolls. Even so, discussions can get animated, but
generally things are carried out in a civilized level. However, if
submitters desire to use an anonymous handle on the mailing list they
are free to do so. We understand that one might want to do this for any
number of personal reasons which are no one else's business.
d) Submissions will be closed on or about 15 February 2019. Boost
formal review will commence shortly there after. Depending on the
number of submissions received, the process may last as long as month.
e) As per the boost formal review rules and customs, some time after the
review period terminates, the review manager will announce the review
results. This will likely contain some conditions regarding alterations
required in the submissions implementations. If the author find these
too onerous, and declines the opportunity to integrate his submission as
an official part of boost, the review manager may select an alternate
submission. It's also possible that the review manager may decide to
accept none of the submissions.
f) when the submission is integrated into boost and is shown to fulfill
the conditions stipulated by the review manager. The author will
receive a "prize" of $5000 and a large but cheap medal on a ribbon
hopefully to be awarded at the next C++Now (Boost Con). As this is
written, this prize is subject to finding a funding source. It's
understood that this stipend is in no way compensation for all the work,
aggravation of this task and commitment to future support. But we hope
that it will serve as a tangible token of our gratitude for solving one
of Boosts most pressing and difficult problems.
Useful Resources
===============
“Effective CMake" -
https://www.youtube.com/watch?v=bsXLMQ6WgIk
https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1
https://github.com/purpleKarrot/Boost.CMake
https://steveire.wordpress.com/2016/08/21/boost-dependencies-and-bcp/
All boost discussions regarding CMake
http://boost.2283326.n4.nabble.com/template/NamlServlet.jtp?macro=search_page&node=2600599&query=subject%3ACMake&days=0&sort=date
Robert Ramey