When select() returns with data on one or more file descriptors,
we use fread() to read data from the live descriptors. The problem
is that these are blocking file descriptors so most of the time
bjam is waiting, it's actually waiting in fread(), rather than
waiting in select().
There are two possible patches: one is to just call fread() a single
time (not inside a loop) or we can make the file descriptors non-
blocking. It's more efficient to make the descriptors non-blocking
as this allows us to read all data on a descriptor each time select()
returns. The first approach would not permit us to read all the data
on a descriptor (only as much as fits into our buffer).
I tested this patch on Suse, Redhat, and Darwin.
[SVN r66650]
Boost.Build system with clang. I also fixed a few things in the clang-linux
toolchain;
- Clang doesn't support -pg.
- Adding -O0 to turn optimization off is silly, because it is set to zero by
default if omitted on the command line. The compiler will whine about
unused options if you later add another -O flag. The Boost.Build UTF
interface adds a second -O0, so you end up with two redundant command line
options and a warning from bjam/clang for every invocation of the compiler
when using the test framework.
[SVN r66441]
Previously, with the 'exit-code' option SHELL would return raw
value from waitXXX, with exit status shifted 8 bits to the left.
Fixes#4470.
[SVN r65232]
signatures.
This allows to expose the same interface to Jamfiles as before, e.g.
rule toolset.flags ( rule variable condition * : values * )
and use natural interface in the Python side, where, 'rule', 'variable',
'condition' and 'values' are parameters, and the first two of them
will get string, not list of strings.
[SVN r64158]