I do like this suggestion, feels quite clean! -- Lawrence
> -----Original Message----- > From: Paul Smith [mailto:psm...@gnu.org] > Sent: Monday, January 16, 2012 5:15 AM > To: Lawrence Ibarria > Cc: bug-make@gnu.org; Tim Murphy (tnmur...@gmail.com) > Subject: Re: 'withfile' function implementation > > On Thu, 2011-12-15 at 15:13 -0800, Lawrence Ibarria wrote: > > This is a rather simple path that implements a very simplified version > > of what Tim suggested in his message of Sept 25th > > (https://lists.gnu.org/archive/html/bug-make/2011-09/msg00044.html ). > > > > Paul, what do you think? I’d rather not try to do everything, just > > focus on one thing. I am not sure how much safety checks play a role > > inside make. > > I was looking at this (and https://savannah.gnu.org/bugs/index.php?35147) > > I'm still not in love with it. I have the following concerns: > > 1. I still think the "a", "w" mode thing is clunky. > 2. Unclear what to do about newlines. The code doesn't add any but > getting a newline into a make variable is tricky. > 3. The suggested patch is really only about 20% of the work: we > also need documentation, regression tests, etc. Although I > guess doing this before the interface is locked down makes extra > work (but not for me! :-)). > > Here's an alternative suggestion, modeled more on the shell's file > redirection rather than the C runtime's stdio: > > One new function, named "file" (?). The function takes one or two > arguments. > > The first argument is a filename, preceded by a token that specifies how > the file is to be treated, with optional whitespace between them. The > tokens are: > > '>' : open the file with mode "w" (truncate) and write the second > argument to the file, plus a newline. If no second argument is given, > nothing is written (the file will be empty). The expansion of the > function is the empty string. > > '>>' : Open the file with mode "a" (append) and write the second > argument to the file, plus a newline. If no second argument is given, > nothing is written (if the file didn't exist it will be created but > empty; if the file did exist it will be unchanged). The expansion of > the function is the empty string. > > '<' : Open the file with mode "r" and expand to the full contents of the > file. No conversion is done (the resulting text may have embedded > newlines). Use $(strip ...) to remove them if desired. > > > So, some examples might be: > > $(file >t.out,this is the first line) > $(file >>t.out,this is the second line) > $(file >> t.out,this is the third line) > FILE := $(file < t.out) > > Do people think this would be useable? > > I thought about defining three functions ">", ">>", and "<", rather than > "file", but this would require a space between the "function name" and > the file name; if you forgot the space (as you can do in the shell) then > make would be looking to expand a variable/function named ">t.out" > rather than the function ">" with the first argument of "t.out". I just > wonder if it would create more issues than it's worth to be cute like > that. Still, it's an option. > > -- > ------------------------------------------------------------------------------- > Paul D. Smith <psm...@gnu.org> Find some GNU make tips at: > http://www.gnu.org http://make.mad-scientist.net > "Please remain calm...I may be mad, but I am a professional." --Mad Scientist _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make