[jamming] BJam's command/shell execution
Josh Pollak
jpollak at kivasystems.com
Fri Mar 23 11:34:28 PST 2007
On Fri, 2007-03-23 at 08:57 -0700, Diane Holt wrote:
> I haven't used bjam myself, but have you tried:
>
> REV = [ Shell "svnversion" ] ;
That doesn't seem to work:
# Begin Jamfile
REV = [ Shell "svnversion" ] ;
echo $REV ;
# End Jamfile
-------------------------------------
jpollak at moya:~/src/myproj$ jam
$REV
...found 8 targets...
...updating 1 target...
Shell svnversion
/bin/sh: Syntax error: redirection unexpected
awk '
NR == 1 { print "#!/bin/sh" }
NR == 1 && /^[#:]/ { next }
/^##/ { next }
{ print }
' < > svnversion
...failed Shell svnversion...
...failed updating 1 target...
Oh well, I'm sure I'm doing something wrong.
-Josh
> Diane
>
> On 3/23/07, Joshua ChaitinPollak <jpollak at kivasystems.com> wrote:
> I saw that, but I can't figure out how to make it work...
>
>
> I thought the syntax would be something like:
>
>
> Shell "svnversion" : $REV ;
>
>
> But that doesn't work.
>
>
> Also, and this may be because of the way I'm using bjam, but
> it seems to be conflicting with Jam's Shell command (Which
> seems to check the file is a shell script, and then chmod's
> it?).
>
>
> -Josh
>
> On Mar 23, 2007, at 11:46 AM, Diane Holt wrote:
>
> > Boost Jam has this (it's what I patterned the Command
> > built-in after):
> >
> >
> > The SHELL Rule
> > rule SHELL ( command )
> >
> > SHELL executes command, and then returns the standard output
> > of command. SHELL only works on platforms with a popen()
> > function in the C library. On platforms without a working
> > popen() function, SHELL is implemented as a no-op. SHELL
> > works on Unix, MacOS X, and most Windows compilers. SHELL is
> > a no-op on Metrowerks compilers under Windows.
> >
> >
> >
> > On 3/22/07, Joshua ChaitinPollak <jpollak at kivasystems.com>
> > wrote:
> > Hi,
> >
> > I'm using BJam, and I can't figure out how to get
> > the shell script
> > execution working. I know there was a recent thread
> > about a COMMAND
> > patch for Jam, and I'm looking forward to that, but
> > for now I'm using
> > BJam and I don't have the time to apply patches and
> > compile, etc.
> >
> > I've ported most of my project to Jam, but I have
> > one Makefile I
> > can't figure out how to ditch. I have this Makefile
> > code:
> >
> > REVISION := $(shell svnversion)
> > OLD_REVISION := $(shell cat revision.cpp
> > 2> /dev/null)
> >
> > revision.cpp:
> > ifeq (,$(findstring \"{REVISION}\",
> > ${OLD_REVISION}))
> > @echo "void config::getRevision(std::string& rev)
> > { rev = \"$
> > {REVISION}\"; } >> revision.cpp
> > endif
> >
> > This (should) effectively (re)builds revision.cpp if
> > the revision has
> > changed. My program depends in revision.cpp, so if
> > revision has
> > changed, the file gets rebuild and the program gets
> > rebuilt.
> >
> > How would I do this in a Jam way? I guess I could
> > call a shell script
> > to build the revision.cpp file all the time, but I'd
> > rather not
> > unless its out of date.
> >
> > -Josh
> >
> > --
> > Joshua ChaitinPollak
> > Software Engineer
> > Kiva Systems
> >
> > _______________________________________________
> > jamming mailing list - jamming at perforce.com
> > http://maillist.perforce.com/mailman/listinfo/jamming
> >
>
>
> --
> Joshua ChaitinPollak
> Software Engineer
> Kiva Systems
>
>
>
>
>
More information about the jamming
mailing list