Miklós Fazekas | 1 Mar 11:39 2002

Re: TOGETHER targets not removed on failure


>Namely, if the target only sees 'updated' sources on its action list,
>it presumably must maintain state of its own and therefore shouldn't be
>deleted on failure to update.
> I just wanted to check with you: would switching the test to the 'updated'
> instead of 'together' actions modifier address your problem?

Yes i think that output of actions marked with UPDATED must not be deleted.
(But this should be documented!)


Markus Scherschanski | 1 Mar 16:11 2002

How many jams are there?

Hey folks,

has anyone an overview how many Jam-Versions there are and which kinds of
features they provide? How about a global merge?

E.g. Matt's version has a MATCH-function - FTJAM has SUBST - FTJAM can do
Win9x - Matt's version not, so what now?


David Abrahams | 5 Mar 18:28 2002

short-circuit evaluation

We recently discovered a difference in behavior between Jam 2.3.2 and
2.4: Aside from the fact that Jam now accepts '&' and '|' in addition to
'&&' and '||' as conditional operators, the behavior of the old
operators has been changed to match that of the new ones: "short-circuit
evaluation" has been disabled. To see this, throw the following at
'jam -f-':

    if $(FALSE) && [ ECHO 'this is Jam 2.4' ] {}

It doesn't make much sense to me to have added '&' and '|' to the
language if they're not going to operate differently from '&&' and '||'.

The fix is pretty easy. This is the one we use for our merged version of
Jam. I think the only difference for stock Jam is that you need to
replace the use of "frame" in compile.c with "lol", but don't hold me to


RCS file: /cvsroot/boost/boost/tools/build/jam_src/compile.c,v
retrieving revision
diff -r1.8.4.3 compile.c
<  LIST *lr = parse_evaluate( parse->right, frame );
>  LIST *lr = parse->right ? parse_evaluate( parse->right, frame ) : 0;
<   if( ll && lr ) status = 1;
(Continue reading)

David Abrahams | 5 Mar 21:21 2002

Re: jamming digest, Vol 1 #327 - 1 msg

I wrote:

> >                     if ( parse->third ) lr =
> arse_evaluate( parse->third, frame );

> > # define pshortcircuiteval( c,l,r )
> arse_make( compile_eval,l,P0,r,S0,S0,c )

I /swear/ I didn't actually write "arse_make" or "arse_evaluate"!
There's a missing initial 'p' in these cases, in case it isn't obvious.


David Abrahams | 6 Mar 15:39 2002

Boost.Jam updated with Perforce 2.4 changes

These changes have been made in my area of the perforce public depot.


                  David Abrahams
      C++ Booster (http://www.boost.org)               O__  ==
      Pythonista (http://www.python.org)              c/ /'_ ==
  resume: http://users.rcn.com/abrahams/resume.html  (*) \(*) ==
          email: david.abrahams <at> rcn.com

Jan Langer | 6 Mar 18:20 2002


i'm new to jam and this list and read most of the docs i found but some
simple things i just can't find.

i have three directories 'bin', 'obj' and 'src'. the sources reside in
'src', the object files shall be compiled to 'obj' and the executable
shall go to 'bin'.

this is my Jamfile, but it says that 'c4p.o depends on itself' and the
executable goes to obj and not bin.

LOCATE_TARGET on c4p = bin ; # this seems to be ignored

Main c4p : c4p.cc ;

i left C++, C++FLAGS and HDRS out, because i think they're not important
for this example.

what is wrong with my Jamfile?


jan langer ... jan <at> langernetz.de
"pi ist genau drei"

Craig Allsop | 8 Mar 01:16 2002

compile errors?


If jamgram.c and jamgram.y are supplied with the jam source, shouldn't they
be up to date with jamgram.yy? The source at public.perforce.com/jam/src
compiles as so:

jamgram.y(311) : error C2065: 'EXEC_UPDATED' : undeclared identifier
jamgram.y(313) : error C2065: 'EXEC_TOGETHER' : undeclared identifier
jamgram.y(315) : error C2065: 'EXEC_IGNORE' : undeclared identifier
jamgram.y(317) : error C2065: 'EXEC_QUIETLY' : undeclared identifier
jamgram.y(319) : error C2065: 'EXEC_PIECEMEAL' : undeclared identifier
jamgram.y(321) : error C2065: 'EXEC_EXISTING' : undeclared identifier

I've run yyacc over jamgram.yy and used bison to generate jamgram.c, however
jamgram.y includes rules.h which has the following typedef:

typedef struct _rule RULE;

This doesn't compile as RULE is a token used by the grammar.

Am I missing something here... can anyone help?


Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.332 / Virus Database: 186 - Release Date: 3/6/2002

(Continue reading)

Jan Langer | 10 Mar 16:41 2002


i just wondered why the ruls SubDirHdrs in the builtin Jambase file is

rule SubDirHdrs
    SUBDIRHDRS += $(<) ;

and not

rule SubDirHdrs
    SUBDIRHDRS += [ FDirName $(<) ] ;

the documentation (Jambase Manpage) says:

"SubDirHdrs d1 ... dn ;

     Adds the path d1/.../dn/ to the header search paths for source
files in SubDir's directory. d1 through dn are elements of a directory

i think this means that d1 to dn are composed together to one path.
what is wrong?

ps: i there a collection of user defined jam rules on the net. i have
written some rules to handle PCCTS (a well-known parser generator)
(Continue reading)

David Lindes | 9 Mar 12:10 2002

SoftLink rule?

Hi there,

I recently discovered jam, and I've been playing with it a bit,
trying to learn my way around...  (I hope you don't mind a
non-list-member posting... that doesn't seem to be discouraged
on the web site)

In my experiments with it, I came upon a desire to have a
Jamfile of mine create a symbolic link to a file in a different
directory, which would then be compiled, and which I wanted 'jam
clean' to get rid of for me...

I didn't see an obvious way of doing that (easily) with the
existing Jambase, but I figured this might be a common enough
thing that perhaps an addition to Jambase would be warranted...
So, I tried making a new Jambase file with the following

--- /home/lindes/src/otherware/devel/jam/jam-2.3/Jambase	Thu Jan  4 07:53:08 2001
+++ /usr/tmp/Jambase.SoftLink	Sat Mar  9 11:03:15 2002
 <at>  <at>  -681,6 +681,14  <at>  <at> 
 	SEARCH on $(>) = $(SEARCH_SOURCE) ;

+rule SoftLink
+	DEPENDS files : $(<) ;
+	DEPENDS $(<) : $(>) ;
+	SEARCH on $(>) = $(SEARCH_SOURCE) ;
+	Clean clean : $(<) ;
(Continue reading)

rmg | 12 Mar 02:01 2002

Re: SubDirHdrs

> hello
> i just wondered why the rules SubDirHdrs in the builtin Jambase file is
> rule SubDirHdrs
> {
>     SUBDIRHDRS += $(<) ;
> }
> and not
> rule SubDirHdrs
> {
>     SUBDIRHDRS += [ FDirName $(<) ] ;
> }

What revision of the builtin Jambase are you using?
//public/jam/src/Jambase#10, which will be in the upcoming 2.4
release, seems to have the correct definitions (which is the one you
apparently expected):

rmg $ p4 print //public/jam/src/Jambase#10 | egrep SUBDIRHDRS Jambase | grep +=
        SUBDIRHDRS += [ FDirName $(<) ] ;

I suspect that the Jambase you are looking at is out of date
WRT the documentation.

> ps: i there a collection of user defined jam rules on the net. i have
> written some rules to handle PCCTS (a well-known parser generator)
> files. although i not sure if i did it correctly (i just works quite
> well in my case) i would like to share it with others who need it.
(Continue reading)