<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.6944.0">
<TITLE>RE: [Cook] Escaping characters for the shell command line</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>The single quote is handy to get a double quote character in the output.<BR>
As to the unsplit. Note that [unsplit ..] is one of the arguments to the catenate. The catenate does not operate on the content.<BR>
And yes the output must have the &quot; &quot; in there because the __FILE__ type items wind up quoted by the preprocessor (at least most pre-processors). That is why I suggested generating the content rather than using those. It would make it much simpler.<BR>
You can get __DATE__ and __TIME__ by [collect date ...]<BR>
And you have the file name within the recipe as %.cpp&nbsp; (or whatever your source recipe uses)<BR>
<BR>
-----Original Message-----<BR>
From: cook-users-bounces+jpendergraft=sjm.com@auug.org.au on behalf of Henderson, Michael D<BR>
Sent: Mon 13-Jun-05 11:44<BR>
To: Cook Users List (E-mail)<BR>
Subject: RE: [Cook] Escaping characters for the shell command line<BR>
<BR>
Jerry, thanks for the reply.<BR>
<BR>
It looks like you're using single quotes around the part after the equal<BR>
signs. That's smarter than what I did, since it'll remove all of those<BR>
\\\&quot; from it.<BR>
<BR>
I don't understand the use of unsplit, though. It seems to be producing<BR>
the equivalent to<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' &quot; __FILE__ &quot; &quot; __DATE__ &quot; &quot; __TIME__'<BR>
<BR>
after you apply the catenate. What's the reasoning there? Is unsplit a<BR>
good idiom in this case?<BR>
<BR>
Also, Jeff had suggested using the quote function. I went through the<BR>
manuals but there's not much on it. I'll keep looking at that.<BR>
<BR>
Thanks again,<BR>
Mike<BR>
<BR>
-----Original Message-----<BR>
Sent: Friday, June 10, 2005 11:28 PM<BR>
Subject: Re: [Cook] Escaping characters for the shell command line<BR>
<BR>
Many times it is easier to use some cook functions to create such<BR>
strings.<BR>
The following pretty much does what you want but for a couple things.<BR>
I did not include the newline characters because they result in a<BR>
compiler<BR>
warning about multiline string constants. Also using __FILE__ etc must<BR>
rely on pre-processor concatination. I believe it might be easier to<BR>
construct that data within the cook recipe and build the whole literal<BR>
string.<BR>
-----<BR>
/* THE VERSION STAMP FOR A PARTICULAR BUILD */<BR>
/* */<BR>
set nosilent;<BR>
<BR>
<BR>
Project = foo;<BR>
Ver = 0.0.0;<BR>
<BR>
<BR>
cpp_flags = [catenate -DPKG_IDENT\=<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '\'&quot;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;@(#)&quot; [Project] - [Ver]<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' &quot;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [unsplit &quot; &quot;&nbsp; __FILE__ '&quot; &quot;'&nbsp; __DATE__ '&quot; &quot;' __TIME__]<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '\''<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ];<BR>
<BR>
all : ident.o set default;<BR>
<BR>
%.o : %.cpp&nbsp; [__FILE__] set default<BR>
{<BR>
&nbsp;&nbsp;&nbsp; function print &quot;gen&quot; [target] &quot;due to&quot; [need];<BR>
<BR>
&nbsp;&nbsp;&nbsp; g++ [cpp_flags] -o [target] -c %.cpp;<BR>
}<BR>
<BR>
--<BR>
Jerry Pendergraft<BR>
jerry.pendergraft@endocardial.com<BR>
St. Jude Medical&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; voice: 651-523-6935<BR>
1350 Energy Lane, Suite 110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fax: 651-644-7897<BR>
St Paul, MN 55108-5254&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mobile: 651-491-0163<BR>
<BR>
On Thu, 9 Jun 2005, Henderson, Michael D wrote:<BR>
<BR>
&gt; Okay, this is driving me nuts. Is there an easy way to escape<BR>
arguments for the command line? I'm trying to drive the ident string for<BR>
my files, but trying to figure out how to escape this string is driving<BR>
me nuts.<BR>
&gt;<BR>
&gt;&nbsp;&nbsp; Project = foo;<BR>
&gt;&nbsp;&nbsp; Ver = 0.0.0;<BR>
&gt;&nbsp;&nbsp; cpp_flags = -DPKG_IDENT\=\&quot;\\\&quot;\\n@(#)[Project]-[Ver] \\\&quot; __FILE__<BR>
\\\&quot;&nbsp; \\\&quot; __DATE__ \\\&quot; \\\&quot; __TIME__\\\&quot;\\n\\\&quot;\&quot;;<BR>
&gt;<BR>
&gt; It took me about 15 minutes to plug through this, using trial and<BR>
error. Is there a simpler way to do this?<BR>
&gt;<BR>
&gt; If you want a sample ident.cpp, try a file with just the following in<BR>
it<BR>
&gt;<BR>
&gt;&nbsp;&nbsp; static const char *myIdent = PKG_IDENT;<BR>
&gt;<BR>
&gt; Thanks,<BR>
&gt; Mike<BR>
_______________________________________________<BR>
Cook-users mailing list<BR>
Cook-users@auug.org.au<BR>
<A HREF="http://www.auug.org.au/mailman/listinfo/cook-users">http://www.auug.org.au/mailman/listinfo/cook-users</A><BR>
<BR>
<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>