From: David Turner (david.turner_at_[hidden])
Date: 2001-06-29 07:01:22
I'd like to collect opinion from a large pool of Jam users
regarding potential and upcoming enhancements to Jam. I'm
sorry if the following is a bit long, but I've tried to
make it as clear and accurate as possible.
To summarize the following, I'd say that I propose the following:
- to rename "FT Jam" to something a bit more pleasant
- to create a SourceForge project for it, and use it for:
* distribution os source and binary packages
* providing a mailing list related to the
developments / improvements made to the
new "FT Jam" ( using the current list for
normal Jam / Jamfile usage questions )
* providing a CVS repository for the improved
sources. This seems necessary for a lot of
people who would like to contribute but do
not master Perforce, nor want to take the
time to install and learn it on their
- the project would contain two "modules":
* the first one being the enhanced Jam sources
* the second one being the "boost" build
system. it will depend on the first one.
It's important to understand that all improvements integrated
into "FT Jam" should be *completely* backwards compatible with
the official Jam sources, in order to avoid breaking existing
Jamfiles. As was said previously, some companies have made
a tremendous investment in Jam.
On the other hand, the boost build system will use some of
the C sources provided by the enhanced Jam module, but
also provide its own set of control files (i.e. the equivalent
of "Jambase") as well as other C source files of its own.
This should allow the creation of a single-executable
The goal of all of this is to be able to experiment nearly
freely with new "features" in the "boost" module, while
slowly moving the tested/validated ones into the "enhanced
jam" one. The Boost control files will never migrate to
this module though..
I welcome any comments. More importantly, I welcome any
suggestions for the new "enhanced jam" module. Please, please,
do not suggest cryptic acronyms :-)
- David Turner
I. Jam and FT Jam:
For those that do not know me, I have made some minor but
critical improvements to the base Jam sources that are
distributed under the name "FT Jam". You'll be able to
find more information about it at the following address:
I'd like to insist on the fact that the improvements
present in this version of Jam are *completely* backwards
compatible with the Jam 2.3.2 sources, and have been
submitted to the Jam maintainer. They can be classified
into two classes of improvements:
- modifications to the C Jam sources, in order to
run correctly on Win 9x systems, as well as implement
new built-in rules (namely HDRMACRO and SUBST), etc..
- modifications to the Jambase itself, in order to
support more toolsets on Windows and OS/2 systems.
In all cases, it's important to note that _existing_ Jamfiles
should work without a single change with "FT Jam", and I'm
commited to always meet this requirement in further improvements
that could be made in the future. If you find something in
FT Jam that seems to "break" one of your builds that otherwise
work perfectly with the official release of Jam, please
contact me to get this fixed !!
By the way, I do not like the name "FT Jam", but couldn't
find a better one for now. I welcome any suggestion to
something more appealing (possibly avoiding strange
acronyms, _please_, I like being able to spell my tools
names in my basic english :-)
Recently, David Abrahams announced on this list the release
of a new build system named 'Boost.Build', which I'll call
'boost' in the rest of this document.
Boost is a set of control files that over-ride the original
Jambase and provide a different set of rules to developers
when they write "Boostfiles" (instead of Jamfiles).
Boost manages advanced concepts that are completely alien
to the original Jam/Jambase, like build variants,
features/properties, requirements, etc.. and makes a
professional developer's life a lot easier.
The differences are so great that from a user point of
view, Boost and Jam can even be thought as radically
III. Jam limitations (wrt Boost):
Using Boost is currently a bit awkward for at least two
- to use it, you need to copy several boost control
files to your project's top directory. Since boost
is still in rather heavy development, you need to
update continously these files if you use them
- you need to invoke Jam (or FT Jam) with the "-f"
flag in order to not use the default Jambase
Meanwhile, Boost is currently limited by some drawbacks
of the original Jam design, and would benefit greatly from
a few improvements made to the Jam C sources themselves.
I have myself released a new version of FT-Jam recently
that addressed one of these issues (while still maintaining
compatibility, I insist !! :-)
Because of these inconveniences, a recent proposal was
made to fork the Jam sources in order to enhance Boost
capabilities, while being able to build a single "boost"
executable that would be, indeed, much easier to use than
the current scheme.
The problem with this approach is that improvements to
one branch (e.g. Jam/FT Jam) would not benefit to the
other one (respectively, the Boost version of the Jam
IV. Forking isn't necessary:
After some thought, it seems however that we do not
need to make a decision as drastic as forking the
Jam source tree entirely.
Since Boost is really a set of control "Jamfiles", the
original Jam (or FT Jam) sources can be used _directly_,
to build a single "boost.exe" that would incorporate
all "Boostfiles". To explain this, I'll detail the way
the Jam sources are currently organized:
- a first set of C source files is used to create
a library, called "libjam", that provides the
base Jam functionality (i.e. control file parsing
- a single control file, named "Jambase", contain default
rule definitions for Jam, including "Cc", "Link",
"Library", as well as various compiler-specific
variable definitions and actions
- the "mkjambase.c" program, used to convert a text
file into a embeddable C source. It is currently
used to convert "Jambase" into "jambase.c"
- a front-end program named "jam.c" which is statically
linked with "jambase.c" and "libjam", used to generate
the single executable know as "jam.exe" or "jam"
This scheme allows us to design Boost as the following:
- a set of control files, like "all-your-base.jam",
"features.jam", etc.. that can be processed through
"mkjambase" in order to convert them to C source files
- a front-end programmed, named "boost.c", which is
statically linked with "all-your-base.c", etc.. and
"libjam". It would be used to generate a single
executable named "boost.exe" or "boost".
- optionally, some other C source files used to augment
"libjam" with new features (e.g. new rules).
These two designs are not incompatible and allows boost to
benefit from all improvements made to the Jam sources.
V. Source Code Location :
The current Jam sources are currently available through the
public Perforce Depot, (see //guests/david_turner/jam/src).
Though I've submitted my changes more than one month ago,
the Perfoce Jam team didn't find the time to review them
to incorporate them into the official Jam sources (or simply
I do not blame them for this, since they most probably have
different priorities to deal with. However, as time passes,
two things are happening:
- I'm subject to add more and more enhancements
to FT Jam, which only widens the gap between it and the
official Jam sources (NB: while still preserving
backwards compatibility). This will make the review
and integration/rejection of FT Jam enhancements
simply harder for the Jam team when they start
- other people are starting to contribute changes, or
willing to do so. Many of them are only familiar with
CVS, and do not want to install or take the time to
learn a new tool. I admit that I'm not really confident
with Perforce myself, though I've tried rather hard :-(
I thus propose to create a new CVS repository on a SourceForge
project page to handle both the "FT Jam" and "Boost" sources.
Using SourceForge has several benefits:
- an easier management of access rights for different
writers on the CVS repository than what can be done
with the guests branch of the public Perforce depot
- the ability for _many_ developers to easily download
the latest sources or stable releases through CVS,
submit fixes, view revision history, etc..
- the ability to parse the CVS sources from the web
- a dedicated web page/address., plus download locations
and information through HTTP/FTP.
The current public depot sources will be kept as is, and
updated periodically in order to submit only widely tested
and stable enhancements, just in case the Jam team finds
the time to review them..
I know that Perforce is a lot better than CVS in a lot of
points, especially for complex projects with lots of
developers. However, I believe that using CVS for something
as simple as the Jam+Boost sources should not hurt us.
Voilà !! Any comments on all of the above ??
- David Turner
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk