Boost logo

Boost-Build :

From: dr_darren_butler (debutler_at_[hidden])
Date: 2005-08-17 09:08:09

Hi all,

Firstly, thanks for all the effort that has gone into a wonderful. I
have been using it for a few months now with much success and doubt I
could ever go back to raw makefiles or autoconf/automake. I apologise
for the long post but I wish to be thorough

I don't know whether this has been discussed before. However, I have
recently encountered a problem using MingW (from the NT command line
and not MSys) when creating a static library. Basically, the list of
objects to archive exceeds the maximum Win2K command line length.
Upon browsing the gcc.jam file, 'piecemeal' is indeed being used (i.e.
actions piecemeal archive) which in my understanding is meant to avoid
this problem.

If we look at "make1.c" in the jam_src, this works when the built
command (using: CMD * cmd = cmd_new(rule ...) returns NULL. That is,
when 'cmd_new' detects that the built command exceeds MAXLINE. If cmd
is NULL, the chunk size is reduced and the command is re-built until
it succeeds.

The problem is, when we look at cmd_new in "command.c", it appears it
will not return NULL if JAMSHELL = "%". That is, it looks like
cmd_new ignores MAXLINE and creates the complete command when JAMSHELL
= "%" which it is on NT according to gcc.jam.

If I comment out the "JAMSHELL = % ;" line in gcc.jam (which is likely
to cause other problems), piecemeal works as expected but there is a
new problem as the first line of "actions piecemeal archive" reads "
$(RM) "$(<)" " and so on the second iteration, the archive is deleted.
That is, (1) the existing archive is deleted, (2) an archive is
created from the compiled objects up to MAXLINE, (3) the archive is
deleted, (4) the next set of objects is archived and so on.

Removing the $(RM) line does indeed solve the problem. However, as
the comment in gcc.jam describes, doing so will cause other problems.

Any assistance would be appreciated.

- Darren


Boost-Build list run by bdawes at, david.abrahams at, gregod at, cpdaniel at, john at